25 FlexibleOffline::Offline::Offline(
const Tag* )
31 FlexibleOffline::Offline::Offline(
int context,
const StringList& msgs )
32 : StanzaExtension(
ExtFlexOffline ), m_context( context ), m_msgs( msgs )
36 FlexibleOffline::Offline::~Offline()
40 const std::string& FlexibleOffline::Offline::filterString()
const
42 static const std::string filter =
"/iq/offline[@xmlns='" +
XMLNS_OFFLINE +
"']";
46 Tag* FlexibleOffline::Offline::tag()
const
48 Tag* t =
new Tag(
"offline" );
49 t->setXmlns( XMLNS_OFFLINE );
52 new Tag( t, m_context == FORequestMsgs ?
"fetch" :
"purge" );
55 const std::string action = m_context == FORequestMsgs ?
"view" :
"remove";
56 StringList::const_iterator it = m_msgs.begin();
57 for( ; it != m_msgs.end(); ++it )
59 Tag* i =
new Tag( t,
"item",
"action", action );
60 i->addAttribute(
"node", (*it) );
69 : m_parent( parent ), m_flexibleOfflineHandler( 0 )
72 m_parent->registerStanzaExtension(
new Offline() );
78 m_parent->removeIDHandler(
this );
83 m_parent->disco()->getDiscoInfo( m_parent->jid().server(),
EmptyString,
this, FOCheckSupport );
88 m_parent->disco()->getDiscoInfo( m_parent->jid().server(),
XMLNS_OFFLINE,
this, FORequestNum );
93 m_parent->disco()->getDiscoItems( m_parent->jid().server(),
XMLNS_OFFLINE,
this, FORequestHeaders );
96 void FlexibleOffline::messageOperation(
int context,
const StringList& msgs )
98 const std::string&
id = m_parent->
getID();
100 IQ iq( iqType,
JID(),
id );
101 iq.addExtension(
new Offline( context, msgs ) );
102 m_parent->
send( iq,
this, context );
107 m_flexibleOfflineHandler = foh;
112 m_flexibleOfflineHandler = 0;
117 if( !m_flexibleOfflineHandler )
129 num = atoi( info.
form()->
field(
"number_of_messages" )->
value().c_str() );
131 m_flexibleOfflineHandler->handleFlexibleOfflineMsgNum( num );
138 if( context == FORequestHeaders && m_flexibleOfflineHandler )
141 m_flexibleOfflineHandler->handleFlexibleOfflineMessageHeaders( items.
items() );
151 if( !m_flexibleOfflineHandler )
166 m_flexibleOfflineHandler->handleFlexibleOfflineResult(
FomrForbidden );
190 m_flexibleOfflineHandler->handleFlexibleOfflineResult(
FomrForbidden );
This is the common base class for a Jabber/XMPP Client and a Jabber Component.
const std::string getID()
An abstraction of a Disco Info element (from Service Discovery, XEP-0030) as a StanzaExtension.
const DataForm * form() const
bool hasFeature(const std::string &feature) const
An abstraction of a Disco query element (from Service Discovery, XEP-0030) in the disco::items namesp...
const std::string & node() const
const ItemList & items() const
A stanza error abstraction implemented as a StanzaExtension.
StanzaError error() const
Implementation of this virtual interface allows for retrieval of offline messages following XEP-0030.
void removeFlexibleOfflineHandler()
virtual void handleIqID(const IQ &iq, int context)
virtual void handleDiscoInfo(const JID &from, const Disco::Info &info, int context)
FlexibleOffline(ClientBase *parent)
void registerFlexibleOfflineHandler(FlexibleOfflineHandler *foh)
virtual void handleDiscoError(const JID &from, const Error *error, int context)
virtual void handleDiscoItems(const JID &from, const Disco::Items &items, int context)
virtual ~FlexibleOffline()
An abstraction of an IQ stanza.
This class abstracts a stanza extension, which is usually an XML child element in a specific namespac...
const Error * error() const
This is an abstraction of an XML element.
The namespace for the gloox library.
std::list< std::string > StringList
const std::string EmptyString
@ StanzaErrorItemNotFound
const std::string XMLNS_OFFLINE