gloox 1.0

gloox.h

00001 /*
00002   Copyright (c) 2005-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 
00345 #ifndef GLOOX_H__
00346 #define GLOOX_H__
00347 
00348 #include "macros.h"
00349 
00350 #include <string>
00351 #include <list>
00352 #include <map>
00353 
00360 namespace gloox
00361 {
00363   GLOOX_API extern const std::string XMLNS_CLIENT;
00364 
00366   GLOOX_API extern const std::string XMLNS_COMPONENT_ACCEPT;
00367 
00369   GLOOX_API extern const std::string XMLNS_COMPONENT_CONNECT;
00370 
00372   GLOOX_API extern const std::string XMLNS_DISCO_INFO;
00373 
00375   GLOOX_API extern const std::string XMLNS_DISCO_ITEMS;
00376 
00378   GLOOX_API extern const std::string XMLNS_DISCO_PUBLISH;
00379 
00381   GLOOX_API extern const std::string XMLNS_ADHOC_COMMANDS;
00382 
00384   GLOOX_API extern const std::string XMLNS_COMPRESSION;
00385 
00387   GLOOX_API extern const std::string XMLNS_OFFLINE;
00388 
00390   GLOOX_API extern const std::string XMLNS_CHAT_STATES;
00391 
00393   GLOOX_API extern const std::string XMLNS_AMP;
00394 
00396   GLOOX_API extern const std::string XMLNS_IBB;
00397 
00399   GLOOX_API extern const std::string XMLNS_FEATURE_NEG;
00400 
00402   GLOOX_API extern const std::string XMLNS_CHATNEG;
00403 
00405   GLOOX_API extern const std::string XMLNS_XHTML_IM;
00406 
00408   GLOOX_API extern const std::string XMLNS_DELAY;
00409 
00411   GLOOX_API extern const std::string XMLNS_ROSTER;
00412 
00414   GLOOX_API extern const std::string XMLNS_VERSION;
00415 
00417   GLOOX_API extern const std::string XMLNS_REGISTER;
00418 
00420   GLOOX_API extern const std::string XMLNS_PRIVACY;
00421 
00423   GLOOX_API extern const std::string XMLNS_AUTH;
00424 
00426   GLOOX_API extern const std::string XMLNS_PRIVATE_XML;
00427 
00429   GLOOX_API extern const std::string XMLNS_LAST;
00430 
00432   GLOOX_API extern const std::string XMLNS_SEARCH;
00433 
00435   GLOOX_API extern const std::string XMLNS_IQ_OOB;
00436 
00438   GLOOX_API extern const std::string XMLNS_X_DATA;
00439 
00441   GLOOX_API extern const std::string XMLNS_X_EVENT;
00442 
00444   GLOOX_API extern const std::string XMLNS_X_OOB;
00445 
00447   GLOOX_API extern const std::string XMLNS_X_DELAY;
00448 
00450   GLOOX_API extern const std::string XMLNS_X_GPGSIGNED;
00451 
00453   GLOOX_API extern const std::string XMLNS_X_GPGENCRYPTED;
00454 
00456   GLOOX_API extern const std::string XMLNS_VCARD_TEMP;
00457 
00459   GLOOX_API extern const std::string XMLNS_X_VCARD_UPDATE;
00460 
00462   GLOOX_API extern const std::string XMLNS_BOOKMARKS;
00463 
00465   GLOOX_API extern const std::string XMLNS_ANNOTATIONS;
00466 
00468   GLOOX_API extern const std::string XMLNS_ROSTER_DELIMITER;
00469 
00471   GLOOX_API extern const std::string XMLNS_XMPP_PING;
00472 
00474   GLOOX_API extern const std::string XMLNS_SI;
00475 
00477   GLOOX_API extern const std::string XMLNS_SI_FT;
00478 
00480   GLOOX_API extern const std::string XMLNS_BYTESTREAMS;
00481 
00483   GLOOX_API extern const std::string XMLNS_MUC;
00484 
00486   GLOOX_API extern const std::string XMLNS_MUC_USER;
00487 
00489   GLOOX_API extern const std::string XMLNS_MUC_ADMIN;
00490 
00492   GLOOX_API extern const std::string XMLNS_MUC_UNIQUE;
00493 
00495   GLOOX_API extern const std::string XMLNS_MUC_OWNER;
00496 
00498   GLOOX_API extern const std::string XMLNS_MUC_ROOMINFO;
00499 
00501   GLOOX_API extern const std::string XMLNS_MUC_ROOMS;
00502 
00504   GLOOX_API extern const std::string XMLNS_MUC_REQUEST;
00505 
00507   GLOOX_API extern const std::string XMLNS_PUBSUB;
00508 
00510   GLOOX_API extern const std::string XMLNS_PUBSUB_ERRORS;
00511 
00513   GLOOX_API extern const std::string XMLNS_PUBSUB_EVENT;
00514 
00516   GLOOX_API extern const std::string XMLNS_PUBSUB_OWNER;
00517 
00519   GLOOX_API extern const std::string XMLNS_CAPS;
00520 
00522   GLOOX_API extern const std::string XMLNS_FT_FASTMODE;
00523 
00525   GLOOX_API extern const std::string XMLNS_STREAM;
00526 
00528   GLOOX_API extern const std::string XMLNS_XMPP_STREAM;
00529 
00531   GLOOX_API extern const std::string XMLNS_XMPP_STANZAS;
00532 
00534   GLOOX_API extern const std::string XMLNS_STREAM_TLS;
00535 
00537   GLOOX_API extern const std::string XMLNS_STREAM_SASL;
00538 
00540   GLOOX_API extern const std::string XMLNS_STREAM_BIND;
00541 
00543   GLOOX_API extern const std::string XMLNS_STREAM_SESSION;
00544 
00546   GLOOX_API extern const std::string XMLNS_STREAM_IQAUTH;
00547 
00549   GLOOX_API extern const std::string XMLNS_STREAM_IQREGISTER;
00550 
00552   GLOOX_API extern const std::string XMLNS_STREAM_COMPRESS;
00553 
00555   GLOOX_API extern const std::string XMLNS_HTTPBIND;
00556 
00558   GLOOX_API extern const std::string XMLNS_XMPP_BOSH;
00559 
00561   GLOOX_API extern const std::string XMLNS_RECEIPTS;
00562 
00564   GLOOX_API extern const std::string XMLNS_NICKNAME;
00565 
00567   GLOOX_API extern const std::string XMLNS_JINGLE;
00568 
00570   GLOOX_API extern const std::string XMLNS_JINGLE_AUDIO_RTP;
00571 
00573   GLOOX_API extern const std::string XMLNS_JINGLE_ICE_UDP;
00574 
00576   GLOOX_API extern const std::string XMLNS_JINGLE_RAW_UDP;
00577 
00579   GLOOX_API extern const std::string XMLNS_JINGLE_VIDEO_RTP;
00580 
00582   GLOOX_API extern const std::string XMLNS_SHIM;
00583 
00585   GLOOX_API extern const std::string XMLNS_ATTENTION;
00586 
00587 
00589   GLOOX_API extern const std::string XMPP_STREAM_VERSION_MAJOR;
00590 
00592   GLOOX_API extern const std::string XMPP_STREAM_VERSION_MINOR;
00593 
00595   GLOOX_API extern const std::string GLOOX_VERSION;
00596 
00598   GLOOX_API extern const std::string GLOOX_CAPS_NODE;
00599 
00601   GLOOX_API extern const std::string XMLNS;
00602 
00604   GLOOX_API extern const std::string TYPE;
00605 
00607   GLOOX_API extern const std::string EmptyString;
00608 
00612   enum ConnectionState
00613   {
00614     StateDisconnected,              
00615     StateConnecting,                
00616     StateConnected                  
00618   };
00619 
00624   enum StreamEvent
00625   {
00626     StreamEventConnecting,          
00627     StreamEventEncryption,          
00628     StreamEventCompression,         
00629     StreamEventAuthentication,      
00630     StreamEventSessionInit,         
00631     StreamEventResourceBinding,     
00632     StreamEventSessionCreation,     
00634     StreamEventRoster,              
00635     StreamEventFinished             
00636   };
00637 
00641   enum ConnectionError
00642   {
00643     ConnNoError,                    
00644     ConnStreamError,                
00646     ConnStreamVersionError,         
00647     ConnStreamClosed,               
00648     ConnProxyAuthRequired,          
00650     ConnProxyAuthFailed,            
00652     ConnProxyNoSupportedAuth,       
00654     ConnIoError,                    
00655     ConnParseError,                 
00656     ConnConnectionRefused,          
00658     ConnDnsError,                   
00660     ConnOutOfMemory,                
00661     ConnNoSupportedAuth,            
00663     ConnTlsFailed,                  
00665     ConnTlsNotAvailable,            
00668     ConnCompressionFailed,          
00670     ConnAuthenticationFailed,       
00672     ConnUserDisconnected,           
00673     ConnNotConnected                
00674   };
00675 
00679   enum TLSPolicy
00680   {
00681     TLSDisabled,                    
00682     TLSOptional,                    
00683     TLSRequired                     
00686   };
00687 
00691   enum StreamFeature
00692   {
00693     StreamFeatureBind             =    1, 
00694     StreamFeatureUnbind           =    2, 
00695     StreamFeatureSession          =    4, 
00696     StreamFeatureStartTls         =    8, 
00697     StreamFeatureIqRegister       =   16, 
00699     StreamFeatureIqAuth           =   32, 
00701     StreamFeatureCompressZlib     =   64, 
00703     StreamFeatureCompressDclz     =  128  
00705     // SASLMechanism below must be adjusted accordingly.
00706   };
00707 
00711   // must be adjusted with changes to StreamFeature enum above
00712   enum SaslMechanism
00713   {
00714     SaslMechNone           =     0, 
00715     SaslMechDigestMd5      =   256, 
00716     SaslMechPlain          =   512, 
00717     SaslMechAnonymous      =  1024, 
00719     SaslMechExternal       =  2048, 
00720     SaslMechGssapi         =  4096, 
00721     SaslMechNTLM           =  8192, 
00722     SaslMechAll            = 65535  
00723   };
00724 
00728   enum StreamError
00729   {
00730     StreamErrorBadFormat,           
00736     StreamErrorBadNamespacePrefix,  
00739     StreamErrorConflict,            
00742     StreamErrorConnectionTimeout,   
00744     StreamErrorHostGone,            
00747     StreamErrorHostUnknown,         
00750     StreamErrorImproperAddressing,  
00752     StreamErrorInternalServerError, 
00755     StreamErrorInvalidFrom,         
00759     StreamErrorInvalidId,           
00761     StreamErrorInvalidNamespace,    
00765     StreamErrorInvalidXml,          
00767     StreamErrorNotAuthorized,       
00771     StreamErrorPolicyViolation,     
00774     StreamErrorRemoteConnectionFailed,
00776     StreamErrorResourceConstraint,  
00778     StreamErrorRestrictedXml,       
00781     StreamErrorSeeOtherHost,        
00786     StreamErrorSystemShutdown,      
00788     StreamErrorUndefinedCondition,  
00791     StreamErrorUnsupportedEncoding, 
00794     StreamErrorUnsupportedStanzaType,
00796     StreamErrorUnsupportedVersion,  
00800     StreamErrorXmlNotWellFormed,    
00802     StreamErrorUndefined            
00805   };
00806 
00810   enum StanzaErrorType
00811   {
00812     StanzaErrorTypeAuth,            
00813     StanzaErrorTypeCancel,          
00814     StanzaErrorTypeContinue,        
00815     StanzaErrorTypeModify,          
00817     StanzaErrorTypeWait,            
00818     StanzaErrorTypeUndefined        
00819   };
00820 
00825   enum StanzaError
00826   {
00827 
00828     StanzaErrorBadRequest,          
00832     StanzaErrorConflict,            
00835     StanzaErrorFeatureNotImplemented,
00838     StanzaErrorForbidden,           
00840     StanzaErrorGone,                
00844     StanzaErrorInternalServerError, 
00847     StanzaErrorItemNotFound,        
00849     StanzaErrorJidMalformed,        
00854     StanzaErrorNotAcceptable,       
00858     StanzaErrorNotAllowed,          
00860     StanzaErrorNotAuthorized,       
00863     StanzaErrorNotModified,         
00865     StanzaErrorPaymentRequired,     
00868     StanzaErrorRecipientUnavailable,
00873     StanzaErrorRedirect,            
00878     StanzaErrorRegistrationRequired,
00881     StanzaErrorRemoteServerNotFound,
00884     StanzaErrorRemoteServerTimeout, 
00888     StanzaErrorResourceConstraint,  
00890     StanzaErrorServiceUnavailable,  
00892     StanzaErrorSubscribtionRequired,
00895     StanzaErrorUndefinedCondition,  
00899     StanzaErrorUnexpectedRequest,   
00902     StanzaErrorUnknownSender,       
00906     StanzaErrorUndefined            
00907   };
00908 
00912 //   enum Presence
00913 //   {
00914 //     PresenceUnknown,                /**< Unknown status. */
00915 //     PresenceAvailable,              /**< The entity or resource is online and available. */
00916 //     PresenceChat,                   /**< The entity or resource is actively interested in chatting. */
00917 //     PresenceAway,                   /**< The entity or resource is temporarily away. */
00918 //     PresenceDnd,                    /**< The entity or resource is busy (dnd = "Do Not Disturb"). */
00919 //     PresenceXa,                     /**< The entity or resource is away for an extended period (xa =
00920 //                                      * "eXtended Away"). */
00921 //     PresenceUnavailable             /**< The entity or resource is offline. */
00922 //   };
00923 
00927   enum CertStatus
00928   {
00929     CertOk               =  0,      
00930     CertInvalid          =  1,      
00931     CertSignerUnknown    =  2,      
00932     CertRevoked          =  4,      
00933     CertExpired          =  8,      
00934     CertNotActive        = 16,      
00935     CertWrongPeer        = 32,      
00937     CertSignerNotCa      = 64       
00938   };
00939 
00943   struct CertInfo
00944   {
00945     int status;                     
00946     bool chain;                     
00947     std::string issuer;             
00948     std::string server;             
00949     int date_from;                  
00951     int date_to;                    
00953     std::string protocol;           
00954     std::string cipher;             
00955     std::string mac;                
00956     std::string compression;        
00957   };
00958 
00962   enum AuthenticationError
00963   {
00964     AuthErrorUndefined,             
00965     SaslAborted,                    
00968     SaslIncorrectEncoding,          
00973     SaslInvalidAuthzid,             
00978     SaslInvalidMechanism,           
00981     SaslMalformedRequest,           
00985     SaslMechanismTooWeak,           
00989     SaslNotAuthorized,              
00993     SaslTemporaryAuthFailure,       
00996     NonSaslConflict,                
00997     NonSaslNotAcceptable,           
00998     NonSaslNotAuthorized            
00999   };
01000 
01004   enum LogArea
01005   {
01006     LogAreaClassParser                = 0x000001, 
01007     LogAreaClassConnectionTCPBase     = 0x000002, 
01008     LogAreaClassClient                = 0x000004, 
01009     LogAreaClassClientbase            = 0x000008, 
01010     LogAreaClassComponent             = 0x000010, 
01011     LogAreaClassDns                   = 0x000020, 
01012     LogAreaClassConnectionHTTPProxy   = 0x000040, 
01013     LogAreaClassConnectionSOCKS5Proxy = 0x000080, 
01014     LogAreaClassConnectionTCPClient   = 0x000100, 
01015     LogAreaClassConnectionTCPServer   = 0x000200, 
01016     LogAreaClassS5BManager            = 0x000400, 
01017     LogAreaClassSOCKS5Bytestream      = 0x000800, 
01018     LogAreaClassConnectionBOSH        = 0x001000, 
01019     LogAreaClassConnectionTLS         = 0x002000, 
01020     LogAreaAllClasses                 = 0x01FFFF, 
01021     LogAreaXmlIncoming                = 0x020000, 
01022     LogAreaXmlOutgoing                = 0x040000, 
01023     LogAreaUser                       = 0x800000, 
01024     LogAreaAll                        = 0xFFFFFF  
01025   };
01026 
01030   enum LogLevel
01031   {
01032     LogLevelDebug,                  
01033     LogLevelWarning,                
01034     LogLevelError                   
01035   };
01036 
01040   enum MessageEventType
01041   {
01042     MessageEventOffline   =  1,     
01044     MessageEventDelivered =  2,     
01046     MessageEventDisplayed =  4,     
01047     MessageEventComposing =  8,     
01048     MessageEventInvalid   = 16,     
01049     MessageEventCancel    = 32      
01050   };
01051 
01055   enum ChatStateType
01056   {
01057     ChatStateActive       =  1,     
01058     ChatStateComposing    =  2,     
01059     ChatStatePaused       =  4,     
01060     ChatStateInactive     =  8,     
01061     ChatStateGone         = 16,     
01063     ChatStateInvalid      = 32      
01064   };
01065 
01069   enum ResourceBindError
01070   {
01071     RbErrorUnknownError,            
01072     RbErrorBadRequest,              
01073     RbErrorNotAllowed,              
01074     RbErrorConflict                 
01075   };
01076 
01080   enum SessionCreateError
01081   {
01082     ScErrorUnknownError,            
01083     ScErrorInternalServerError,     
01084     ScErrorForbidden,               
01085     ScErrorConflict                 
01087   };
01088 
01092   enum MessageSessionFilter
01093   {
01094     FilterMessageEvents    = 1,     
01095     FilterChatStates       = 2      
01096   };
01097 
01101   enum MUCRoomAffiliation
01102   {
01103     AffiliationNone,                
01104     AffiliationOutcast,             
01105     AffiliationMember,              
01106     AffiliationOwner,               
01107     AffiliationAdmin,               
01108     AffiliationInvalid              
01109   };
01110 
01114   enum MUCRoomRole
01115   {
01116     RoleNone,                       
01117     RoleVisitor,                    
01118     RoleParticipant,                
01119     RoleModerator,                  
01120     RoleInvalid                     
01121   };
01122 
01126   enum MUCRoomFlag
01127   {
01128     FlagPasswordProtected  = 1<< 1, 
01129     FlagPublicLogging      = 1<< 2, 
01130     FlagPublicLoggingOff   = 1<< 3, 
01131     FlagHidden             = 1<< 4, 
01132     FlagMembersOnly        = 1<< 5, 
01133     FlagModerated          = 1<< 6, 
01134     FlagNonAnonymous       = 1<< 7, 
01135     FlagOpen               = 1<< 8, 
01136     FlagPersistent         = 1<< 9, 
01137     FlagPublic             = 1<<10, 
01138     FlagSemiAnonymous      = 1<<11, 
01139     FlagTemporary          = 1<<12, 
01140     FlagUnmoderated        = 1<<13, 
01141     FlagUnsecured          = 1<<14, 
01142     FlagFullyAnonymous     = 1<<15  
01143     // keep in sync with MUCUserFlag below
01144   };
01145 
01149   // keep in sync with MUCRoomFlag above
01150   enum MUCUserFlag
01151   {
01152     UserSelf               = 1<<16, 
01153     UserNickChanged        = 1<<17, 
01154     UserKicked             = 1<<18, 
01155     UserBanned             = 1<<19, 
01156     UserAffiliationChanged = 1<<20, 
01158     UserRoomDestroyed      = 1<<21, 
01159     UserNickAssigned       = 1<<22, 
01161     UserNewRoom            = 1<<23, 
01162     UserMembershipRequired = 1<<24, 
01165     UserRoomShutdown       = 1<<25, 
01167     UserAffiliationChangedWNR = 1<<26 
01169   };
01170 
01174   enum SubscriptionType
01175   {
01176     S10nNone,                       
01178     S10nNoneOut,                    
01181     S10nNoneIn,                     
01186     S10nNoneOutIn,                  
01190     S10nTo,                         
01191     S10nToIn,                       
01193     S10nFrom,                       
01194     S10nFromOut,                    
01196     S10nBoth                        
01197   };
01198 
01202   typedef std::list<std::string> StringList;
01203 
01207   typedef std::list<std::string*> StringPList;
01208 
01212   typedef std::map<std::string, std::string> StringMap;
01213 
01217   typedef std::multimap<std::string, std::string> StringMultiMap;
01218 
01219   class StanzaExtension;
01223   typedef std::list<const StanzaExtension*> StanzaExtensionList;
01224 }
01225 
01226 extern "C"
01227 {
01228   GLOOX_API const char* gloox_version();
01229 }
01230 
01231 #endif // GLOOX_H__