-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
-}
-
-