From: Francesco Montorsi Date: Fri, 16 Jan 2009 13:33:14 +0000 (+0000) Subject: no real change; just reorder functions X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/21f0f3a2fa7d075a8980410d4231bae295e449f5?ds=inline no real change; just reorder functions git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58129 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/common/ftp.cpp b/src/common/ftp.cpp index 909fe66861..77c72ece33 100644 --- a/src/common/ftp.cpp +++ b/src/common/ftp.cpp @@ -185,6 +185,47 @@ bool wxFTP::Close() // low level methods // ============================================================================ +wxSocketBase *wxFTP::AcceptIfActive(wxSocketBase *sock) +{ + if ( m_bPassive ) + return sock; + + // now wait for a connection from server + wxSocketServer *sockSrv = (wxSocketServer *)sock; + if ( !sockSrv->WaitForAccept() ) + { + m_lastError = wxPROTO_CONNERR; + wxLogError(_("Timeout while waiting for FTP server to connect, try passive mode.")); + delete sock; + sock = NULL; + } + else + { + sock = sockSrv->Accept(true); + delete sockSrv; + } + + return sock; +} + +bool wxFTP::Abort() +{ + if ( !m_streaming ) + return true; + + m_streaming = false; + if ( !CheckCommand(wxT("ABOR"), '4') ) + return false; + + return CheckResult('2'); +} + +void wxFTP::SetDefaultTimeout(wxUint32 Value) +{ + m_uiDefaultTimeout = Value; + SetTimeout(Value); // sets it for this socket +} + // ---------------------------------------------------------------------------- // Send command to FTP server // ---------------------------------------------------------------------------- @@ -224,7 +265,7 @@ char wxFTP::SendCommand(const wxString& command) } // ---------------------------------------------------------------------------- -// Recieve servers reply +// Receive servers reply // ---------------------------------------------------------------------------- char wxFTP::GetResult() @@ -494,100 +535,9 @@ bool wxFTP::RmFile(const wxString& path) } // ---------------------------------------------------------------------------- -// wxFTP download and upload +// wxFTP port methods // ---------------------------------------------------------------------------- -class wxInputFTPStream : public wxSocketInputStream -{ -public: - wxInputFTPStream(wxFTP *ftp, wxSocketBase *sock) - : wxSocketInputStream(*sock) - { - m_ftp = ftp; - // socket timeout automatically set in GetPort function - } - - virtual ~wxInputFTPStream() - { - delete m_i_socket; // keep at top - - // when checking the result, the stream will - // almost always show an error, even if the file was - // properly transfered, thus, lets just grab the result - - // we are looking for "226 transfer completed" - char code = m_ftp->GetResult(); - if ('2' == code) - { - // it was a good transfer. - // we're done! - m_ftp->m_streaming = false; - return; - } - // did we timeout? - if (0 == code) - { - // the connection is probably toast. issue an abort, and - // then a close. there won't be any more waiting - // for this connection - m_ftp->Abort(); - m_ftp->Close(); - return; - } - // There was a problem with the transfer and the server - // has acknowledged it. If we issue an "ABORT" now, the user - // would get the "226" for the abort and think the xfer was - // complete, thus, don't do anything here, just return - } - - wxFTP *m_ftp; - - DECLARE_NO_COPY_CLASS(wxInputFTPStream) -}; - -class wxOutputFTPStream : public wxSocketOutputStream -{ -public: - wxOutputFTPStream(wxFTP *ftp_clt, wxSocketBase *sock) - : wxSocketOutputStream(*sock), m_ftp(ftp_clt) - { - } - - virtual ~wxOutputFTPStream(void) - { - if ( IsOk() ) - { - // close data connection first, this will generate "transfer - // completed" reply - delete m_o_socket; - - // read this reply - m_ftp->GetResult(); // save result so user can get to it - - m_ftp->m_streaming = false; - } - else - { - // abort data connection first - m_ftp->Abort(); - - // and close it after - delete m_o_socket; - } - } - - wxFTP *m_ftp; - - DECLARE_NO_COPY_CLASS(wxOutputFTPStream) -}; - -void wxFTP::SetDefaultTimeout(wxUint32 Value) -{ - m_uiDefaultTimeout = Value; - SetTimeout(Value); // sets it for this socket -} - - wxSocketBase *wxFTP::GetPort() { /* @@ -616,29 +566,6 @@ wxSocketBase *wxFTP::GetPort() return socket; } -wxSocketBase *wxFTP::AcceptIfActive(wxSocketBase *sock) -{ - if ( m_bPassive ) - return sock; - - // now wait for a connection from server - wxSocketServer *sockSrv = (wxSocketServer *)sock; - if ( !sockSrv->WaitForAccept() ) - { - m_lastError = wxPROTO_CONNERR; - wxLogError(_("Timeout while waiting for FTP server to connect, try passive mode.")); - delete sock; - sock = NULL; - } - else - { - sock = sockSrv->Accept(true); - delete sockSrv; - } - - return sock; -} - wxString wxFTP::GetPortCmdArgument(const wxIPV4address& addrLocal, const wxIPV4address& addrNew) { @@ -742,17 +669,94 @@ wxSocketBase *wxFTP::GetPassivePort() return client; } -bool wxFTP::Abort() + +// ---------------------------------------------------------------------------- +// wxFTP download and upload +// ---------------------------------------------------------------------------- + +class wxInputFTPStream : public wxSocketInputStream { - if ( !m_streaming ) - return true; +public: + wxInputFTPStream(wxFTP *ftp, wxSocketBase *sock) + : wxSocketInputStream(*sock) + { + m_ftp = ftp; + // socket timeout automatically set in GetPort function + } - m_streaming = false; - if ( !CheckCommand(wxT("ABOR"), '4') ) - return false; + virtual ~wxInputFTPStream() + { + delete m_i_socket; // keep at top - return CheckResult('2'); -} + // when checking the result, the stream will + // almost always show an error, even if the file was + // properly transfered, thus, lets just grab the result + + // we are looking for "226 transfer completed" + char code = m_ftp->GetResult(); + if ('2' == code) + { + // it was a good transfer. + // we're done! + m_ftp->m_streaming = false; + return; + } + // did we timeout? + if (0 == code) + { + // the connection is probably toast. issue an abort, and + // then a close. there won't be any more waiting + // for this connection + m_ftp->Abort(); + m_ftp->Close(); + return; + } + // There was a problem with the transfer and the server + // has acknowledged it. If we issue an "ABORT" now, the user + // would get the "226" for the abort and think the xfer was + // complete, thus, don't do anything here, just return + } + + wxFTP *m_ftp; + + DECLARE_NO_COPY_CLASS(wxInputFTPStream) +}; + +class wxOutputFTPStream : public wxSocketOutputStream +{ +public: + wxOutputFTPStream(wxFTP *ftp_clt, wxSocketBase *sock) + : wxSocketOutputStream(*sock), m_ftp(ftp_clt) + { + } + + virtual ~wxOutputFTPStream(void) + { + if ( IsOk() ) + { + // close data connection first, this will generate "transfer + // completed" reply + delete m_o_socket; + + // read this reply + m_ftp->GetResult(); // save result so user can get to it + + m_ftp->m_streaming = false; + } + else + { + // abort data connection first + m_ftp->Abort(); + + // and close it after + delete m_o_socket; + } + } + + wxFTP *m_ftp; + + DECLARE_NO_COPY_CLASS(wxOutputFTPStream) +}; wxInputStream *wxFTP::GetInputStream(const wxString& path) {