| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564 | 
							- //---------------------------------------------------------------------------
 
- #include "stdafx.h"
 
- #include "FileZillaApi.h"
 
- #include "mainthread.h"
 
- //////////////////////////////////////////////////////////////////////
 
- // Konstruktion/Destruktion
 
- //////////////////////////////////////////////////////////////////////
 
- CFileZillaApi::CFileZillaApi()
 
- {
 
-   m_nInternalMessageID=0;
 
-   m_pMainThread=0;
 
-   m_bInitialized=FALSE;
 
- }
 
- CFileZillaApi::~CFileZillaApi()
 
- {
 
-   Destroy();
 
- }
 
- int CFileZillaApi::Init(TFileZillaIntern * Intern, CFileZillaTools * pTools)
 
- {
 
-   //Check if call allowed
 
-   if (m_bInitialized)
 
-     return FZ_REPLY_ALREADYINIZIALIZED;
 
-   //Initialize variables
 
-   m_nInternalMessageID=RegisterWindowMessage( L"FileZillaInternalApiMessage{F958620E-040C-4b33-A091-7E04E10AA660}" );
 
-   if (!m_nInternalMessageID)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   //Create thread object
 
-   m_pMainThread = CMainThread::Create(THREAD_PRIORITY_BELOW_NORMAL, CREATE_SUSPENDED);
 
-   //Initialize Thread variables
 
-   m_pMainThread->m_nInternalMessageID=m_nInternalMessageID;
 
-   m_pMainThread->m_pTools=pTools;
 
-   m_pMainThread->InitIntern(Intern);
 
-   //Resume Thread
 
-   m_pMainThread->ResumeThread();
 
-   //Initialization OK
 
-   m_bInitialized=TRUE;
 
-   return FZ_REPLY_OK;
 
- }
 
- int CFileZillaApi::IsConnected()
 
- {
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   return m_pMainThread->IsConnected()?FZ_REPLY_OK:FZ_REPLY_NOTCONNECTED;
 
- }
 
- int CFileZillaApi::IsBusy()
 
- {
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   return m_pMainThread->IsBusy()?FZ_REPLY_BUSY:FZ_REPLY_IDLE;
 
- }
 
- int CFileZillaApi::Connect(const t_server &server)
 
- {
 
-   //Check parameters
 
-   if (server.host==L"" || server.port<1 || server.port>65535)
 
-     return FZ_REPLY_INVALIDPARAM;
 
- #ifndef MPEXT_NO_GSS
 
-   BOOL bUseGSS = FALSE;
 
-   if (GetOptionVal(OPTION_USEGSS))
 
-   {
 
-     USES_CONVERSION;
 
-     CString GssServers = GetOption(OPTION_GSSSERVERS);
 
-     hostent *fullname = gethostbyname(T2CA(server.host));
 
-     CString host;
 
-     if (fullname)
 
-       host = fullname->h_name;
 
-     else
 
-       host = server.host;
 
-     host.MakeLower();
 
-     int i;
 
-     while ((i=GssServers.Find( L";" ))!=-1)
 
-     {
 
-       if ((L"."+GssServers.Left(i))==host.Right(GssServers.Left(i).GetLength()+1) || GssServers.Left(i)==host)
 
-       {
 
-         bUseGSS = TRUE;
 
-         break;
 
-       }
 
-       GssServers = GssServers.Mid(i+1);
 
-     }
 
-   }
 
-   if (!bUseGSS && server.user == L"")
 
-     return FZ_REPLY_INVALIDPARAM;
 
- #endif
 
-   if (!(server.nServerType&FZ_SERVERTYPE_HIGHMASK))
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (m_pMainThread->IsBusy())
 
-     return FZ_REPLY_BUSY;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_CONNECT;
 
-   command.server=server;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::Cancel()
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsBusy()!=FZ_REPLY_BUSY)
 
-     return FZ_REPLY_NOTBUSY;
 
-   m_pMainThread->PostThreadMessage(m_nInternalMessageID, FZAPI_THREADMSG_CANCEL, 0);
 
-   return FZ_REPLY_WOULDBLOCK;
 
- }
 
- void CFileZillaApi::Destroy()
 
- {
 
-   if (!m_bInitialized)
 
-     return;
 
-   DebugAssert(m_pMainThread);
 
-   HANDLE tmp=m_pMainThread->m_hThread;
 
-   m_pMainThread->Quit();
 
-   //Wait for the main thread to quit
 
-   WaitForSingleObject(tmp, 10000);
 
-   m_pMainThread=0;
 
-   m_bInitialized=FALSE;
 
- }
 
- int CFileZillaApi::Disconnect()
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   m_pMainThread->PostThreadMessage(m_nInternalMessageID,FZAPI_THREADMSG_DISCONNECT,0);
 
-   return FZ_REPLY_WOULDBLOCK;
 
- }
 
- int CFileZillaApi::List(const CServerPath& path)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (path.IsEmpty())
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   if (m_pMainThread->IsBusy())
 
-     return FZ_REPLY_BUSY;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_LIST;
 
-   command.path=path;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::ListFile(CString FileName, const CServerPath & path)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (path.IsEmpty())
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   if (FileName=="")
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   if (m_pMainThread->IsBusy())
 
-     return FZ_REPLY_BUSY;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_LISTFILE;
 
-   command.param1=FileName;
 
-   command.path=path;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::FileTransfer(const t_transferfile &TransferFile)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (TransferFile.remotefile==L"" || TransferFile.localfile==L"" || TransferFile.remotepath.IsEmpty())
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_FILETRANSFER;
 
-   command.transferfile=TransferFile;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::GetCurrentServer(t_server &server)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (m_pMainThread->GetCurrentServer(server))
 
-     return FZ_REPLY_OK;
 
-   else
 
-     return FZ_REPLY_NOTCONNECTED;
 
- }
 
- int CFileZillaApi::SetCurrentPath(CServerPath path)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   m_pMainThread->SetCurrentPath(path);
 
-   return FZ_REPLY_OK;
 
- }
 
- int CFileZillaApi::GetCurrentPath(CServerPath & path)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   return (m_pMainThread->GetCurrentPath(path) ? FZ_REPLY_OK : FZ_REPLY_NOTCONNECTED);
 
- }
 
- bool CFileZillaApi::UsingMlsd()
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return false;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return false;
 
-   return m_pMainThread->UsingMlsd();
 
- }
 
- bool CFileZillaApi::UsingUtf8()
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return false;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return false;
 
-   return m_pMainThread->UsingUtf8();
 
- }
 
- std::string CFileZillaApi::GetTlsVersionStr()
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return std::string();
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return std::string();
 
-   return m_pMainThread->GetTlsVersionStr();
 
- }
 
- std::string CFileZillaApi::GetCipherName()
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return std::string();
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return std::string();
 
-   return m_pMainThread->GetCipherName();
 
- }
 
- int CFileZillaApi::CustomCommand(CString CustomCommand)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   t_server server;
 
-   int res=GetCurrentServer(server);
 
-   if (res!=FZ_REPLY_OK)
 
-     return res;
 
-   if (CustomCommand==L"")
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_CUSTOMCOMMAND;
 
-   command.param1=CustomCommand;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::Delete(CString FileName, const CServerPath &path, bool filenameOnly)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   if (FileName=="")
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   CServerPath path2=path;
 
-   if (path2.IsEmpty())
 
-   {
 
-     m_pMainThread->GetCurrentPath(path2);
 
-     if (path2.IsEmpty())
 
-       return FZ_REPLY_INVALIDPARAM;
 
-   }
 
-   t_command command;
 
-   command.id=FZ_COMMAND_DELETE;
 
-   command.param1=FileName;
 
-   command.path=path2;
 
-   command.param4 = (filenameOnly ? 1 : 0);
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::RemoveDir(CString DirName, const CServerPath &path /*=CServerPath()*/)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   if (DirName==L"")
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   CServerPath path2=path;
 
-   if (path2.IsEmpty())
 
-   {
 
-     m_pMainThread->GetCurrentPath(path2);
 
-     if (path2.IsEmpty())
 
-       return FZ_REPLY_INVALIDPARAM;
 
-   }
 
-   t_command command;
 
-   command.id=FZ_COMMAND_REMOVEDIR;
 
-   command.param1=DirName;
 
-   command.path=path2;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::MakeDir(const CServerPath &path)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   if (path.IsEmpty() || !path.HasParent())
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_MAKEDIR;
 
-   command.path=path;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::Rename(CString oldName, CString newName, const CServerPath &path /*=CServerPath()*/, const CServerPath &newPath /*=CServerPath()*/)
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   if (oldName==L"" || newName==L"")
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   CServerPath path2 = path;
 
-   if (path2.IsEmpty())
 
-   {
 
-     m_pMainThread->GetCurrentPath(path2);
 
-     if (path2.IsEmpty())
 
-       return FZ_REPLY_INVALIDPARAM;
 
-   }
 
-   t_command command;
 
-   command.id = FZ_COMMAND_RENAME;
 
-   command.param1 = oldName;
 
-   command.param2 = newName;
 
-   command.path = path2;
 
-   command.newPath = newPath;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- int CFileZillaApi::SetAsyncRequestResult(int nAction, CAsyncRequestData *pData)
 
- {
 
-   if (!this || !pData)
 
-     return FZ_REPLY_CRITICALERROR | FZ_REPLY_INVALIDPARAM;
 
-   if (IsBadWritePtr(pData, sizeof(CAsyncRequestData)))
 
-     return FZ_REPLY_CRITICALERROR;
 
-   if (!m_bInitialized)
 
-   {
 
-     delete pData;
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   }
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-   {
 
-     delete pData;
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   }
 
-   switch(pData->nRequestType)
 
-   {
 
-   case FZ_ASYNCREQUEST_OVERWRITE:
 
-     break;
 
-   case FZ_ASYNCREQUEST_VERIFYCERT:
 
-     if (!((CVerifyCertRequestData *)pData)->pCertData)
 
-     {
 
-       delete pData;
 
-       return FZ_REPLY_INVALIDPARAM;
 
-     }
 
-     break;
 
-   case FZ_ASYNCREQUEST_NEEDPASS:
 
-     break;
 
- #ifndef MPEXT_NO_GSS
 
-   case FZ_ASYNCREQUEST_GSS_AUTHFAILED:
 
-   case FZ_ASYNCREQUEST_GSS_NEEDUSER:
 
-   case FZ_ASYNCREQUEST_GSS_NEEDPASS:
 
-     break;
 
- #endif
 
-   default:
 
-     delete pData;
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   }
 
-   pData->nRequestResult = nAction;
 
-   if (!m_pMainThread)
 
-   {
 
-     delete pData;
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   }
 
-   m_pMainThread->PostThreadMessage(m_nInternalMessageID, FZAPI_THREADMSG_ASYNCREQUESTREPLY,  (LPARAM)pData);
 
-   return FZ_REPLY_OK;
 
- }
 
- int CFileZillaApi::Chmod(int nValue, CString FileName, const CServerPath &path /*=CServerPath()*/ )
 
- {
 
-   //Check if call allowed
 
-   if (!m_bInitialized)
 
-     return FZ_REPLY_NOTINITIALIZED;
 
-   if (IsConnected()==FZ_REPLY_NOTCONNECTED)
 
-     return FZ_REPLY_NOTCONNECTED;
 
-   if (IsBusy()==FZ_REPLY_BUSY)
 
-     return FZ_REPLY_BUSY;
 
-   if (FileName==L"")
 
-     return FZ_REPLY_INVALIDPARAM;
 
-   t_command command;
 
-   command.id=FZ_COMMAND_CHMOD;
 
-   command.param1=FileName;
 
-   command.param4=nValue;
 
-   command.path=path;
 
-   m_pMainThread->Command(command);
 
-   return m_pMainThread->LastOperationSuccessful()?FZ_REPLY_OK:FZ_REPLY_ERROR;
 
- }
 
- void CFileZillaApi::SetDebugLevel(int nDebugLevel)
 
- {
 
-   m_pMainThread->GetIntern()->SetDebugLevel(nDebugLevel);
 
- }
 
- //CAsyncRequestData derived classes
 
- CAsyncRequestData::CAsyncRequestData()
 
- {
 
-   nRequestType = 0;
 
-   nRequestID = 0;
 
-   nRequestResult = 0;
 
- }
 
- CAsyncRequestData::~CAsyncRequestData()
 
- {
 
- }
 
- COverwriteRequestData::COverwriteRequestData()
 
- {
 
-   size1 = 0;
 
-   size2 = 0;
 
-   nRequestType=FZ_ASYNCREQUEST_OVERWRITE;
 
-   localtime=0;
 
-   remotetime.hasdate = false;
 
-   pTransferFile=0;
 
- }
 
- COverwriteRequestData::~COverwriteRequestData()
 
- {
 
-   delete pTransferFile;
 
-   delete localtime;
 
- }
 
- CVerifyCertRequestData::CVerifyCertRequestData()
 
- {
 
-   nRequestType=FZ_ASYNCREQUEST_VERIFYCERT;
 
-   pCertData=0;
 
- }
 
- CVerifyCertRequestData::~CVerifyCertRequestData()
 
- {
 
-   delete pCertData;
 
- }
 
- CNeedPassRequestData::CNeedPassRequestData()
 
- {
 
-   nRequestType=FZ_ASYNCREQUEST_NEEDPASS;
 
-   nOldOpState=0;
 
- }
 
- CNeedPassRequestData::~CNeedPassRequestData()
 
- {
 
- }
 
- #ifndef MPEXT_NO_GSS
 
- CGssNeedPassRequestData::CGssNeedPassRequestData()
 
- {
 
-   nRequestType=FZ_ASYNCREQUEST_GSS_NEEDPASS;
 
- }
 
- CGssNeedPassRequestData::~CGssNeedPassRequestData()
 
- {
 
- }
 
- CGssNeedUserRequestData::CGssNeedUserRequestData()
 
- {
 
-   nRequestType = FZ_ASYNCREQUEST_GSS_NEEDUSER;
 
- }
 
- CGssNeedUserRequestData::~CGssNeedUserRequestData()
 
- {
 
- }
 
- #endif
 
 
  |