Re: File transfer not working using GLOOX

Vimal Kumar Mishra <[email protected]>
Newsgroups gmane.network.jabber.devel
Message-ID <CAPZdQyRsiWjUFW8k4ORJ=CJHKz0z148m=gdOSJNX=Tp4Qkn+1w@mail.gmail.com>
hi kalpana

I am sorry that was not my requirement so i dont know anything about this.

thanks
vimal mishra

Thanks and Regards,
Vimal Mishra

On Wed, Dec 24, 2014 at 2:49 PM, Kalpana Anbalagan <
[email protected]> wrote:

> Hi,
>   I m using GLOOX example code to do file transfer..(ft_send.cpp file)
> I have a eJabberd server in my machine (binding to localhost : 5222) and a
> Jabber Messenger.
> I m running my code in windows platform using the example code given in
> ft_send.cpp..
> I m not able to transfer the file.
> Please let me know what I m doing wrong here..And also wanted to know when
> handleFTBytestream() API will get called..
>
> Thanks in advance for your help.
>
> see below my code//
>
> #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 "bytestreamdatahandler.h"
> #include "socks5bytestreamserver.h"
> using namespace gloox;
>
> #include <sys/types.h>
> #include <sys/stat.h>
> //#include <unistd.h>
> #include <stdio.h>
> #include <string>
> #include <fstream>
> #include <ios>
> #include <time.h>
> #include <cstdio> // [s]print[f]
>
> #if defined( WIN32 ) || defined( _WIN32 )
> # include <windows.h>
> #endif
>
> /**
>  * Usage:
>  *   ft_send jid@server/full /path/to/file
>  *
>  * Sends the given file to the given full JID.
>  */
> class FTTest : public LogHandler, ConnectionListener, SIProfileFTHandler,
> BytestreamDataHandler
> {
>   public:
>     FTTest( const JID& to, const std::string& file ) : m_bs( 0 ), m_to( to
> ), m_file( file ), m_quit( false ) {}
>
>     virtual ~FTTest() {}
>
>     void start()
>     {
>
>       struct stat f_stat;
>       if( stat( m_file.c_str(), &f_stat ) )
>         return;
>
>       m_size = f_stat.st_size;
>       std::ifstream ifile( m_file.c_str(), std::ios_base::in |
> std::ios_base::binary );
>       if( !ifile )
>         return;
>
>       JID jid( "[email protected]/Jabber Messenger" );
>       j = new Client( jid, "kalpana" );
>       j->registerConnectionListener( this );
>       j->disco()->setVersion( "ftsend", 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
> );
>
>
>       m_server = new SOCKS5BytestreamServer( j->logInstance(), 7777 );
>       printf( "about to listen\n" );
>       ConnectionError le = ConnNoError;
>       if( ( le = m_server->listen() ) != ConnNoError )
>         printf( "listen returned: %d\n", le );
>       printf( "listening\n" );
>
>       f = new SIProfileFT( j, this );
>       f->registerSOCKS5BytestreamServer( m_server );
>   f->addStreamHost( j->jid(),"localhost", 7777);
>       // you should obtain this using disco, really:
>      f->addStreamHost( JID( "reflector.amessage.eu" ), "
> reflector.amessage.eu", 6565 );
> //       f->addStreamHost( JID( "proxy.jabber.org" ), "208.245.212.98",
> 7777 );
>
>       if( j->connect( false ) )
>       {
>         char input[200024];
>         ConnectionError ce = ConnNoError;
>         ConnectionError se = ConnNoError;
>         while( ce == ConnNoError )
>         {
>           if( m_quit )
>             j->disconnect();
>
>           ce = j->recv( 1 );
>           if( m_server )
>           {
>             se = m_server->recv( 1 );
>             if( se != ConnNoError )
>             {
>               printf( "SOCKS5BytestreamServer returned: %d\n", se );
>               delete m_server;
>               m_server = 0;
>               m_quit = true;
>             }
>           }
>           if(!ifile.eof() )
>   {
>   if( m_bs )
>           {
>             if( m_bs->isOpen() )
>             {
>               ifile.read( input, 200024 );
>               std::string t( input, ifile.gcount() );
>               if( !m_bs->send( t ) )
>                 m_quit = true;
>             }
>             m_bs->recv( 1 );
>           }
>   }
>           else if( m_bs )
>             m_bs->close();
>         }
>         printf( "ce: %d\n", ce );
>       }
>
>       f->dispose( m_bs );
>       delete f;
>       delete m_server;
>       delete j;
>     }
>
>     virtual void onConnect()
>     {
>       printf( "connected!!!\n" );
>
>  f->requestFT( m_to, m_file, m_size);
>     //  f->requestFT( m_to, m_file, m_size );
>     }
>
>     virtual void onDisconnect( ConnectionError e )
>     {
>       printf( "ft_send: disconnected: %d\n", e );
>       if( e == ConnAuthenticationFailed )
>         printf( "auth failed. reason: %d\n", j->authError() );
>     }
>
>     virtual bool onTLSConnect( const CertInfo& info )
>     {
>       time_t from( info.date_from );
>       time_t to( info.date_to );
>
>       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( &from ), ctime( &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 JID& /*to*/,
> 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*/ )
>     {
>       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, sid, SIProfileFT::FTTypeS5B );
>     }
>
> //     virtual void handleFTRequestResult( const JID& /*from*/, const
> std::string& /*sid*/ )
> //     {
> //     }
>
>     virtual void handleFTRequestError( const IQ& /*iq*/, const
> std::string& /*sid*/ )
>     {
>       printf( "ft request error\n" );
>       m_quit = true;
>     }
>
>     virtual void handleFTBytestream( Bytestream* bs )
>     {
>       printf( "received bytestream of type: %s", bs->type() ==
> Bytestream::S5B ? "s5b" : "ibb" );
>       m_bs = bs;
>       m_bs->registerBytestreamDataHandler( this );
>       if( m_bs->connect() )
>       {
>         if( bs->type() == Bytestream::S5B )
>           printf( "ok! s5b connected to streamhost\n" );
>         else
>           printf( "ok! ibb sent request to remote entity\n" );
>       }
>     }
>
>     virtual const std::string handleOOBRequestResult( const JID& /*from*/,
> const JID& /*to*/, const std::string& /*sid*/ )
>     {
>       return std::string();
>     };
>
>     virtual void handleBytestreamData( Bytestream* /*bs*/, const
> std::string& data )
>     {
>       printf( "received %d bytes of data:\n%s\n", data.length(),
> data.c_str() );
>     }
>
>     virtual void handleBytestreamError( Bytestream* /*bs*/, const IQ&
> /*iq*/ )
>     {
>       printf( "bytestream error\n" );
>     }
>
>     virtual void handleBytestreamOpen( Bytestream* /*bs*/ )
>     {
>       printf( "bytestream opened\n" );
>     }
>
>     virtual void handleBytestreamClose( Bytestream* /*bs*/ )
>     {
>       printf( "bytestream closed\n" );
>       m_quit = true;
>     }
>
>   private:
>     Client *j;
>     SIProfileFT* f;
>     Bytestream* m_bs;
>     SOCKS5BytestreamServer* m_server;
>     JID m_to;
>     std::string m_file;
>     bool m_quit;
>     int m_size;
> };
>
> int main( int argc, char** argv )
> {
>  // if( argc == 3 )
>   {
>     JID j( "[email protected]/Jabber Messenger" );
>     if( j.resource().empty() )
>     {
>       printf( "error: need full jid\n" );
>       return 1;
>     }
> FTTest *r = new FTTest( j, "c:\\read.xml" );
>     r->start();
>     delete( r );
>   }
> //  else
>   {
>     printf( "error: need jid + file\n" );
>   }
>   return 0;
> }
>
>
> Thanks,
> kalpana
>
> _______________________________________________
> JDev mailing list
> Info: http://mail.jabber.org/mailman/listinfo/jdev
> Unsubscribe: [email protected]
> _______________________________________________
>
>

_______________________________________________
JDev mailing list
Info: http://mail.jabber.org/mailman/listinfo/jdev
Unsubscribe: [email protected]
_______________________________________________
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.