[jdev] File transfer not working using GLOOX
Vimal Kumar Mishra
vimalkumar.mishra at relevancelab.com
Tue Dec 30 05:37:18 UTC 2014
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 <
kalpanaanbalagann at gmail.com> 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 at 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( "kalpana at 127.0.0.1/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( "best at 127.0.0.1/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: JDev-unsubscribe at jabber.org
> _______________________________________________
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.jabber.org/jdev/attachments/20141230/55aa4749/attachment.html>
More information about the JDev
mailing list