⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ft_recv.cpp

📁 Jabber code library, developed with c
💻 CPP
字号:
#include "../client.h"#include "../connectionlistener.h"#include "../stanza.h"#include "../gloox.h"#include "../disco.h"#include "../loghandler.h"#include "../logsink.h"#include "../siprofileft.h"#include "../siprofilefthandler.h"#include "../socks5bytestreamdatahandler.h"using namespace gloox;#include <unistd.h>#include <stdio.h>#include <string>#if defined( WIN32 ) || defined( _WIN32 )# include <windows.h>#endif/** * Receives one file and displayes it. Does not save anything. */class FTTest : public LogHandler, ConnectionListener, SIProfileFTHandler, SOCKS5BytestreamDataHandler{  public:    FTTest() : m_quit( false ) {}    virtual ~FTTest() {}    void start()    {      JID jid( "hurkhurk@example.net/gloox" );      j = new Client( jid, "hurkhurks" );      j->registerConnectionListener( this );      j->disco()->setVersion( "ftTest", GLOOX_VERSION, "Linux" );      j->disco()->setIdentity( "client", "bot" );      StringList ca;      ca.push_back( "/path/to/cacert.crt" );      j->setCACerts( ca );      j->logInstance().registerLogHandler( LogLevelDebug, LogAreaAll, this );      f = new SIProfileFT( j, this );      // you should obtain this using disco, really      f->addStreamHost( JID( "proxy.jabber.org" ), "208.245.212.98", 7777 );      if( j->connect( false ) )      {        ConnectionError ce = ConnNoError;        while( ce == ConnNoError )        {          if( m_quit )            j->disconnect();          ce = j->recv( 100 );          std::list<SOCKS5Bytestream*>::iterator it = m_s5bs.begin();          for( ; it != m_s5bs.end(); ++it )            (*it)->recv( 100 );        }        printf( "ce: %d\n", ce );      }      f->dispose( m_s5bs.front() );      delete f;      delete j;    }    virtual void onConnect()    {      printf( "connected!!!\n" );    }    virtual void onDisconnect( ConnectionError e )    {      printf( "message_test: disconnected: %d\n", e );      if( e == ConnAuthenticationFailed )        printf( "auth failed. reason: %d\n", j->authError() );    }    virtual bool onTLSConnect( const CertInfo& info )    {      printf( "status: %d\nissuer: %s\npeer: %s\nprotocol: %s\nmac: %s\ncipher: %s\ncompression: %s\n"              "from: %s\nto: %s\n",              info.status, info.issuer.c_str(), info.server.c_str(),              info.protocol.c_str(), info.mac.c_str(), info.cipher.c_str(),              info.compression.c_str(), ctime( (const time_t*)&info.date_from ),              ctime( (const time_t*)&info.date_to ) );      return true;    }    virtual void handleLog( LogLevel level, LogArea area, const std::string& message )    {      printf("log: level: %d, area: %d, %s\n", level, area, message.c_str() );    }    virtual void handleFTRequest( const JID& from, const std::string& id, const std::string& sid,                                  const std::string& name, long size, const std::string& hash,                                  const std::string& date, const std::string& mimetype,                                  const std::string& desc, int /*stypes*/, long /*offset*/, long /*length*/ )    {      printf( "received ft request from %s: %s (%ld bytes, sid: %s). hash: %s, date: %s, mime-type: %s\n"              "desc: %s\n",              from.full().c_str(), name.c_str(), size, sid.c_str(), hash.c_str(), date.c_str(),              mimetype.c_str(), desc.c_str() );      f->acceptFT( from, id, SIProfileFT::FTTypeS5B );    }//     virtual void handleFTRequestResult( const JID& /*from*/, const std::string& /*sid*/ )//     {//     }    virtual void handleFTRequestError( Stanza* /*stanza*/, const std::string& /*sid*/ )    {      printf( "ft request error\n" );    }    virtual void handleFTSOCKS5Bytestream( SOCKS5Bytestream* s5b )    {      printf( "received socks5 bytestream\n" );      m_s5bs.push_back( s5b );      s5b->registerSOCKS5BytestreamDataHandler( this );      if( s5b->connect() )      {        printf( "ok! s5b connected to streamhost\n" );      }    }    virtual void handleSOCKS5Data( SOCKS5Bytestream* /*s5b*/, const std::string& data )    {      printf( "received %d bytes of data:\n%s\n", data.length(), data.c_str() );    }    virtual void handleSOCKS5Error( SOCKS5Bytestream* /*s5b*/, Stanza* /*stanza*/ )    {      printf( "socks5 stream error\n" );    }    virtual void handleSOCKS5Open( SOCKS5Bytestream* /*s5b*/ )    {      printf( "stream opened\n" );    }    virtual void handleSOCKS5Close( SOCKS5Bytestream* /*s5b*/ )    {      printf( "stream closed\n" );      m_quit = true;    }  private:    Client *j;    SIProfileFT* f;    SOCKS5BytestreamManager* s5b;    std::list<SOCKS5Bytestream*> m_s5bs;    bool m_quit;};int main( int /*argc*/, char** /*argv*/ ){  FTTest *r = new FTTest();  r->start();  delete( r );  return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -