inbandbytestream.h

00001 /*
00002   Copyright (c) 2006-2009 by Jakob Schroeter <js@camaya.net>
00003   This file is part of the gloox library. http://camaya.net/gloox
00004 
00005   This software is distributed under a license. The full license
00006   agreement can be found in the file LICENSE in this distribution.
00007   This software may not be copied, modified, sold or distributed
00008   other than expressed in the named license agreement.
00009 
00010   This software is distributed without any warranty.
00011 */
00012 
00013 
00014 #ifndef INBANDBYTESTREAM_H__
00015 #define INBANDBYTESTREAM_H__
00016 
00017 #include "bytestream.h"
00018 #include "iqhandler.h"
00019 #include "messagehandler.h"
00020 #include "gloox.h"
00021 
00022 namespace gloox
00023 {
00024 
00025   class BytestreamDataHandler;
00026   class ClientBase;
00027   class Message;
00028 
00043   class GLOOX_API InBandBytestream : public Bytestream, public IqHandler, public MessageHandler
00044   {
00045 
00046     friend class SIProfileFT;
00047 
00048     public:
00052       virtual ~InBandBytestream();
00053 
00058       int blockSize() const { return m_blockSize; }
00059 
00065       void setBlockSize( int blockSize ) { m_blockSize = blockSize; }
00066 
00067       // reimplemented from Bytestream
00068       virtual ConnectionError recv( int timeout = -1 ) { (void)timeout; return ConnNoError; }
00069 
00070       // reimplemented from Bytestream
00071       bool send( const std::string& data );
00072 
00073       // reimplemented from Bytestream
00074       virtual bool connect();
00075 
00076       // reimplemented from Bytestream
00077       virtual void close();
00078 
00079       // reimplemented from IqHandler
00080       virtual bool handleIq( const IQ& iq );
00081 
00082       // reimplemented from IqHandler
00083       virtual void handleIqID( const IQ& iq, int context );
00084 
00085       // reimplemented from MessageHandler
00086       virtual void handleMessage( const Message& msg, MessageSession* session = 0 );
00087 
00088     private:
00089 #ifdef INBANDBYTESTREAM_TEST
00090     public:
00091 #endif
00092       enum IBBType
00093       {
00094         IBBOpen,
00095         IBBData,
00096         IBBClose,
00097         IBBInvalid
00098       };
00099 
00106       class IBB : public StanzaExtension
00107       {
00108         public:
00114           IBB( const std::string& sid, int blocksize );
00115 
00123           IBB( const std::string& sid, int seq, const std::string& data );
00124 
00129           IBB( const std::string& sid );
00130 
00135           IBB( const Tag* tag = 0 );
00136 
00140           virtual ~IBB();
00141 
00146           IBBType type() const { return m_type; }
00147 
00152           int blocksize() const { return m_blockSize; }
00153 
00158           int seq() const { return m_seq; }
00159 
00164           const std::string sid() const { return m_sid; }
00165 
00170           const std::string& data() const { return m_data; }
00171 
00172           // reimplemented from StanzaExtension
00173           virtual const std::string& filterString() const;
00174 
00175           // reimplemented from StanzaExtension
00176           virtual StanzaExtension* newInstance( const Tag* tag ) const
00177           {
00178             return new IBB( tag );
00179           }
00180 
00181           // reimplemented from StanzaExtension
00182           virtual Tag* tag() const;
00183 
00184           // reimplemented from StanzaExtension
00185           virtual StanzaExtension* clone() const
00186           {
00187             return new IBB( *this );
00188           }
00189 
00190         private:
00191           std::string m_sid;
00192           int m_seq;
00193           int m_blockSize;
00194           std::string m_data;
00195           IBBType m_type;
00196       };
00197 
00198       InBandBytestream( ClientBase* clientbase, LogSink& logInstance, const JID& initiator,
00199                         const JID& target, const std::string& sid );
00200       InBandBytestream& operator=( const InBandBytestream& );
00201       void closed(); // by remote entity
00202       void returnResult( const JID& to, const std::string& id );
00203       void returnError( const JID& to, const std::string& id, StanzaErrorType type, StanzaError error );
00204 
00205       ClientBase* m_clientbase;
00206       int m_blockSize;
00207       int m_sequence;
00208       int m_lastChunkReceived;
00209 
00210   };
00211 
00212 }
00213 
00214 #endif // INBANDBYTESTREAM_H__

Generated by  doxygen 1.6.2