gloox 是一个使用 C++ 实现的 Jabber/XMPP 的底层库(非界面),它使开发XMPP/JABBER客户端更为简单,并且可以让各种程序方便的嵌入XMPP的支持。它使用 GNU GPL 授权,也支持商业授权
0.9版主要支持以下功能
- full MUC support
- file transfer (XEPs 0065, 0095, 0096)
- XPath support
- HTTP and SOCKS5 proxy support
完整changelog:
* rewrote XML parser (no dependency on iksemel anymore)
* XEP-0045 (Multi-User Chat)
* XEP-0065 (SOCKS5 Bytestreams)
* XEP-0095 (Stream Initiation)
* XEP-0096 (File Transfer)
* added StanzaExtensions: XEP-0027 (Current Jabber OpenPGP Usage) abstraction, XEP-0066 (Out of Band Data) abstraction, XEP-0091 (Delayed Delivery) abstraction, XEP-0153 (vCard-Based Avatars) abstraction, XEP-0203 (Delayed Delivery) abstraction
* SOCKS5 proxy support (RFC 1928), incl. username/password auth (RFC 1929)
* HTTP proxy support, incl. Basic auth support
* Tag: basic XPath support
* added msec timeout to recv()
* Client: fetch roster immediately after requesting roster:delimiter
* Registration: allow registration with services
* implement dataforms as list of pointers to DataformFields
* ClientBase: cleaner Stanza deleting
* Adhoc: full Adhoc support
* Disco::getDiscoItems() and ::getDiscoInfo() take JIDs instead of std::strings
* Tag: added virtual void addChild( const Tag *child )
* DataForm: added ::type()
* RosterManager: take JIDs in un/subscribe()/add()
* RosterListener: announce JIDs, not std::strings
* DataFormBase: added addField() to add a single field
* DNS: SRV record resolving on win32 (thanks to Marc Rousseau)
* Client: removed setInitialPriority() and setAutoPresence() in favour of setPresence()
* support for SASL authorization id != authentication id
* Disco: added removeFeature()
* Tag: added setAttributes()
* merged patch by Marc Rousseau to distiguish between incoming and outgoing Tags/Stanzas
* moved several structs and enums into gloox namespace (mostly from *Handlers)
* move Resource into gloox namespace (from RosterItem)
* MessageEventFilter: fixed a bug where error messages triggered events
* MessageEventFilter: honor feature-not-implemented error
* Connection: included server name in dns error message (--> 'server.tld: connection refused')
* ClientBase: onDisconnect() gets called if the connection got refused or DNS error occurred
* statistics interface (connection/compression/encryption statistics and status, etc)
* Tag: added 'TagList findChildren( std::string& )'
* Disco: lifted limit of one DiscoNodeHandler per Node
* Parser: install parser.h
* Tag: added operator== & operator!=
* ClientBase: added setCompression( bool ) to switch stream compression on/off
* renamed Stanza::show() --> Stanza::presence()
* RosterListener: moved Roster to gloox namespace
* RosterListener: new handleRosterPresence() replaces itemUn/Available() and presenceUpdated()
* RosterListener: added handleSelfPresence()
* RosterListener: added 'handle' prefix to function names
* MessageHandler: handleMessage() takes optional MessageSession arg
* DiscoNodeHandler: added DiscoNodeItem to properly represent a disco#item
* ClientBase: removed setAutoMessageSession() in favor of registerMessageSessionHandler()
* PrivacyItem: renamed enum members from ALL_UPPER_CASE to MixedCase
* PrivateXMLHandler: renamed enum members from ALL_UPPER_CASE to MixedCase
* MessageSession: added filtering by message type
* AdhocHandler: added 'handleAdhoc' prefix
* Adhoc: handle Disco errors
* removed unmaintained Dev-C++ project (in favor of Code::Blocks project)
* ClientBase: added whitespacePing()
* DNS: cleanup
* TagHandler: now receives Tag, not Stanza
* Parser: cleanup, now uses TagHandler
* ClientBase: added removeIDHandler() to cancel trackID() operations
* added DataFormField( const std::string&, const std::string&, const std::string&, DataFormFieldType );
* ClientBase: added setSASLMechanisms()
* revamped and modularized the entire connection backend
* Adhoc: added JID to Adhoc item (thanks to Roelof Naude)
* MUCRoom: fixed memleak (thanks to Roelof Naude)
* ClientBase: added registerPresenceHandler( const JID& jid, PresenceHandler *ph )
* MUCRoomParticipant: added 'status' member to hold the presence's status message
* ClientBase/MessageSession: conform to XEP-0201
* ClientBase: don't delete a MessageSession manually, use ClientBase::disposeMessageSession()
* MessageSession: don't delete a MessageFilter manually, use MessageSession::disposeMessageFilter()
* JID: added fullJID() & bareJID(), returning JID objects
* Stanza: added setThread()
* MUCRoomParticipant: added status member
* VCardManager: allow cancellation of VCard operations
* ConnectionListener/Client/Component: added stream events/onStreamEvent()
* ClientBase: removed fileDescriptor(). Use ConnectionTCP instead.
* Search::search(): Dataform *form --> const DataForm& form
* Registration: fixed createAccount( const DataForm& form ) to do something useful
* ported to Win CE/Mobile (experimental). see README.wince
* ClientBase::setServer: update's Connection(Base)'s server as well
* VCard: const *List& *() --> *List& *() to allow modification
* Disco: minor spec compliance fixes
* Adhoc: minor spec compliance fixes
* Tag: added ctors to easily create a single attribute
* ConnectionTCP: protected send() and recv() with simple Mutexes
* GCC 4.3 compile fixes
* OpenSSL: check cert dates
* Parser: don't throw parse error on incoming </stream>
* SIProfileFT: fixed ranged file transfers
* Disco: more spec compliance fixes
* DataFormField: added addValue()
* Stanza: removed clone(), use: new Stanza( Tag* ); Tag::clone() is not affected
* RosterManager: added cancel()
* RosterManager: split unsubscribe() into unsubscribe() + remove()
* Client: added presence(), status()
* RosterListener: added handleRosterError()
* PrivacyListHandler: handle unknown errors
* TLSOpenSSL: don't throw handshake errors if the connection was closed by the server
* allow manual deletion of MessageSessions again (thanks to Martin Milata)
0.9版主要支持以下功能
- full MUC support
- file transfer (XEPs 0065, 0095, 0096)
- XPath support
- HTTP and SOCKS5 proxy support
完整changelog:
* rewrote XML parser (no dependency on iksemel anymore)
* XEP-0045 (Multi-User Chat)
* XEP-0065 (SOCKS5 Bytestreams)
* XEP-0095 (Stream Initiation)
* XEP-0096 (File Transfer)
* added StanzaExtensions: XEP-0027 (Current Jabber OpenPGP Usage) abstraction, XEP-0066 (Out of Band Data) abstraction, XEP-0091 (Delayed Delivery) abstraction, XEP-0153 (vCard-Based Avatars) abstraction, XEP-0203 (Delayed Delivery) abstraction
* SOCKS5 proxy support (RFC 1928), incl. username/password auth (RFC 1929)
* HTTP proxy support, incl. Basic auth support
* Tag: basic XPath support
* added msec timeout to recv()
* Client: fetch roster immediately after requesting roster:delimiter
* Registration: allow registration with services
* implement dataforms as list of pointers to DataformFields
* ClientBase: cleaner Stanza deleting
* Adhoc: full Adhoc support
* Disco::getDiscoItems() and ::getDiscoInfo() take JIDs instead of std::strings
* Tag: added virtual void addChild( const Tag *child )
* DataForm: added ::type()
* RosterManager: take JIDs in un/subscribe()/add()
* RosterListener: announce JIDs, not std::strings
* DataFormBase: added addField() to add a single field
* DNS: SRV record resolving on win32 (thanks to Marc Rousseau)
* Client: removed setInitialPriority() and setAutoPresence() in favour of setPresence()
* support for SASL authorization id != authentication id
* Disco: added removeFeature()
* Tag: added setAttributes()
* merged patch by Marc Rousseau to distiguish between incoming and outgoing Tags/Stanzas
* moved several structs and enums into gloox namespace (mostly from *Handlers)
* move Resource into gloox namespace (from RosterItem)
* MessageEventFilter: fixed a bug where error messages triggered events
* MessageEventFilter: honor feature-not-implemented error
* Connection: included server name in dns error message (--> 'server.tld: connection refused')
* ClientBase: onDisconnect() gets called if the connection got refused or DNS error occurred
* statistics interface (connection/compression/encryption statistics and status, etc)
* Tag: added 'TagList findChildren( std::string& )'
* Disco: lifted limit of one DiscoNodeHandler per Node
* Parser: install parser.h
* Tag: added operator== & operator!=
* ClientBase: added setCompression( bool ) to switch stream compression on/off
* renamed Stanza::show() --> Stanza::presence()
* RosterListener: moved Roster to gloox namespace
* RosterListener: new handleRosterPresence() replaces itemUn/Available() and presenceUpdated()
* RosterListener: added handleSelfPresence()
* RosterListener: added 'handle' prefix to function names
* MessageHandler: handleMessage() takes optional MessageSession arg
* DiscoNodeHandler: added DiscoNodeItem to properly represent a disco#item
* ClientBase: removed setAutoMessageSession() in favor of registerMessageSessionHandler()
* PrivacyItem: renamed enum members from ALL_UPPER_CASE to MixedCase
* PrivateXMLHandler: renamed enum members from ALL_UPPER_CASE to MixedCase
* MessageSession: added filtering by message type
* AdhocHandler: added 'handleAdhoc' prefix
* Adhoc: handle Disco errors
* removed unmaintained Dev-C++ project (in favor of Code::Blocks project)
* ClientBase: added whitespacePing()
* DNS: cleanup
* TagHandler: now receives Tag, not Stanza
* Parser: cleanup, now uses TagHandler
* ClientBase: added removeIDHandler() to cancel trackID() operations
* added DataFormField( const std::string&, const std::string&, const std::string&, DataFormFieldType );
* ClientBase: added setSASLMechanisms()
* revamped and modularized the entire connection backend
* Adhoc: added JID to Adhoc item (thanks to Roelof Naude)
* MUCRoom: fixed memleak (thanks to Roelof Naude)
* ClientBase: added registerPresenceHandler( const JID& jid, PresenceHandler *ph )
* MUCRoomParticipant: added 'status' member to hold the presence's status message
* ClientBase/MessageSession: conform to XEP-0201
* ClientBase: don't delete a MessageSession manually, use ClientBase::disposeMessageSession()
* MessageSession: don't delete a MessageFilter manually, use MessageSession::disposeMessageFilter()
* JID: added fullJID() & bareJID(), returning JID objects
* Stanza: added setThread()
* MUCRoomParticipant: added status member
* VCardManager: allow cancellation of VCard operations
* ConnectionListener/Client/Component: added stream events/onStreamEvent()
* ClientBase: removed fileDescriptor(). Use ConnectionTCP instead.
* Search::search(): Dataform *form --> const DataForm& form
* Registration: fixed createAccount( const DataForm& form ) to do something useful
* ported to Win CE/Mobile (experimental). see README.wince
* ClientBase::setServer: update's Connection(Base)'s server as well
* VCard: const *List& *() --> *List& *() to allow modification
* Disco: minor spec compliance fixes
* Adhoc: minor spec compliance fixes
* Tag: added ctors to easily create a single attribute
* ConnectionTCP: protected send() and recv() with simple Mutexes
* GCC 4.3 compile fixes
* OpenSSL: check cert dates
* Parser: don't throw parse error on incoming </stream>
* SIProfileFT: fixed ranged file transfers
* Disco: more spec compliance fixes
* DataFormField: added addValue()
* Stanza: removed clone(), use: new Stanza( Tag* ); Tag::clone() is not affected
* RosterManager: added cancel()
* RosterManager: split unsubscribe() into unsubscribe() + remove()
* Client: added presence(), status()
* RosterListener: added handleRosterError()
* PrivacyListHandler: handle unknown errors
* TLSOpenSSL: don't throw handshake errors if the connection was closed by the server
* allow manual deletion of MessageSessions again (thanks to Martin Milata)