14#include "capabilities.h"
27 m_hash(
"sha-1" ), m_valid( false )
37 || !
tag->hasAttribute(
"node" ) || !
tag->hasAttribute(
"ver" ) )
40 m_node =
tag->findAttribute(
"node" );
41 m_ver =
tag->findAttribute(
"ver" );
42 m_hash =
tag->findAttribute(
"hash" );
49 m_disco->removeNodeHandlers(
const_cast<Capabilities*
>(
this ) );
58 sha.
feed( generate( m_disco->identities(), m_disco->features(
true ), m_disco->form() ) );
60 m_disco->removeNodeHandlers(
const_cast<Capabilities*
>(
this ) );
61 m_disco->registerNodeHandler(
const_cast<Capabilities*
>(
this ), m_node +
'#' + hash );
68 Disco::IdentityList::const_iterator it = il.begin();
69 for( ; it != il.end(); ++it )
71 std::string
id = (*it)->category();
83 StringList::const_iterator it2 = sl.begin();
84 for( ; it2 != sl.end(); ++it2 )
93 for( ; it2 != f.end(); ++it2 )
101 DataForm::FieldList::const_iterator it3 = form->
fields().begin();
102 typedef std::map<std::string, StringList> MapSSL;
105 for( ; it3 != form->
fields().end(); ++it3 )
107 if( (*it3)->name() ==
"FORM_TYPE" )
109 s += (*it3)->value();
113 m.insert( std::make_pair( (*it3)->name(), (*it3)->values() ) );
116 MapSSL::iterator it4 = m.begin();
117 for( ; it4 != m.end(); ++it4 )
121 it2 = it4->second.begin();
122 for( ; it2 != it4->second.end(); ++it2 )
132 std::string Capabilities::generate(
const Disco::Info* info )
134 return info ? generate( info->identities(), info->features(), info->form() ) :
EmptyString;
137 std::string Capabilities::generate(
const Disco* disco )
139 return disco ? generate( disco->identities(), disco->features(), disco->form() ) :
EmptyString;
144 static const std::string filter =
"/presence/c[@xmlns='" +
XMLNS_CAPS +
"']";
150 if( !m_valid || m_node.empty() )
163 return m_disco->features();
170 Disco::IdentityList::const_iterator it = il.begin();
171 for( ; it != il.end(); ++it )
Capabilities(Disco *disco)
const std::string ver() const
virtual const std::string & filterString() const
virtual Disco::ItemList handleDiscoNodeItems(const JID &from, const JID &to, const std::string &node=EmptyString)
virtual Disco::IdentityList handleDiscoNodeIdentities(const JID &from, const std::string &node)
virtual StringList handleDiscoNodeFeatures(const JID &from, const std::string &node)
virtual Tag * tag() const
An abstraction of a Disco identity (Service Discovery, XEP-0030).
An abstraction of a Disco Info element (from Service Discovery, XEP-0030) as a StanzaExtension.
This class implements XEP-0030 (Service Discovery) and XEP-0092 (Software Version).
std::list< Identity * > IdentityList
std::list< Item * > ItemList
An implementation of SHA1.
void feed(const unsigned char *data, unsigned length)
const std::string binary()
StanzaExtension(int type)
This is an abstraction of an XML element.
bool addAttribute(Attribute *attr)
bool setXmlns(const std::string &xmlns, const std::string &prefix=EmptyString)
const std::string encode64(const std::string &input)
The namespace for the gloox library.
std::list< std::string > StringList
const std::string GLOOX_CAPS_NODE
const std::string EmptyString
const std::string XMLNS_CAPS