14 #ifndef _StunMessage_h_ 15 #define _StunMessage_h_ 23 #define STUN_MAX_STRING_LENGTH 128 24 #define STUN_MAX_UNKNOWN_ATTRIBUTES 16 25 #define STUN_MAX_MESSAGE_INTEGRITY_LENGTH 20 26 #define STUN_MIN_CHAR_PAD 4 27 #define STUN_MAGIC_COOKIE 0x2112A442 32 #define MSG_STUN_BIND_REQUEST 0x0001 33 #define MSG_STUN_BIND_RESPONSE 0x0101 34 #define MSG_STUN_BIND_ERROR_RESPONSE 0x0111 35 #define MSG_STUN_SHARED_SECRET_REQUEST 0x0002 36 #define MSG_STUN_SHARED_SECRET_RESPONSE 0x0102 37 #define MSG_STUN_SHARED_SECRET_ERROR_RESPONSE 0x0112 42 #define ATTR_STUN_MAPPED_ADDRESS 0x0001 43 #define ATTR_STUN_RESPONSE_ADDRESS 0x0002 // deprecated 44 #define ATTR_STUN_CHANGE_REQUEST 0x0003 // deprecated 45 #define ATTR_STUN_SOURCE_ADDRESS 0x0004 // deprecated 46 #define ATTR_STUN_CHANGED_ADDRESS 0x0005 // deprecated 47 #define ATTR_STUN_USERNAME 0x0006 48 #define ATTR_STUN_PASSWORD 0x0007 // deprecated 49 #define ATTR_STUN_MESSAGE_INTEGRITY 0x0008 50 #define ATTR_STUN_ERROR_CODE 0x0009 51 #define ATTR_STUN_UNKNOWN_ATTRIBUTE 0x000A 52 #define ATTR_STUN_REFLECTED_FROM 0x000B // deprecated 53 #define ATTR_STUN_ALTERNATE_SERVER2 0x000E // deprecated 54 #define ATTR_STUN_REALM 0x0014 55 #define ATTR_STUN_NONCE 0x0015 56 #define ATTR_STUN_XOR_MAPPED_ADDRESS 0x0020 57 #define ATTR_STUN_XOR_ONLY 0x0021 // deprecated 58 #define ATTR_STUN_FINGERPRINT 0x0023 59 #define ATTR_STUN_XOR_MAPPED_ADDRESS2 0x8020 // deprecated 60 #define ATTR_STUN_SERVER 0x8022 61 #define ATTR_STUN_SERVER2 0x0022 // deprecated 62 #define ATTR_STUN_ALTERNATE_SERVER 0x8023 63 #define ATTR_STUN_BINDING_LIFETIME 0x8024 65 #define ATTR_CHANGE_FLAG_PORT 0x0002 // deprecated 66 #define ATTR_CHANGE_FLAG_IP 0x0004 // deprecated 68 #define ATTR_ADDRESS_FAMILY_IPV4 0x01 69 #define ATTR_ADDRESS_FAMILY_IPV6 0x02 73 #define STUN_ERROR_TRY_ALTERNATE_CODE 300 74 #define STUN_ERROR_TRY_ALTERNATE_TEXT "Try Alternative" 76 #define STUN_ERROR_BAD_REQUEST_CODE 400 77 #define STUN_ERROR_BAD_REQUEST_TEXT "Bad request" 79 #define STUN_ERROR_UNAUTHORIZED_CODE 401 80 #define STUN_ERROR_UNAUTHORIZED_TEXT "Unauthorized" 82 #define STUN_ERROR_UNKNOWN_ATTRIBUTE_CODE 420 83 #define STUN_ERROR_UNKNOWN_ATTRIBUTE_TEXT "Unknown attribute" 85 #define STUN_ERROR_STALE_CREDENTIAL_CODE 430 86 #define STUN_ERROR_STALE_CREDENTIAL_TEXT "Stale credential" 88 #define STUN_ERROR_BAD_INTEGRITY_CODE 431 89 #define STUN_ERROR_BAD_INTEGRITY_TEXT "Bad integrity" 91 #define STUN_ERROR_MISSING_USERNAME_CODE 432 92 #define STUN_ERROR_MISSING_USERNAME_TEXT "Missing username" 94 #define STUN_ERROR_USE_TLS_CODE 433 95 #define STUN_ERROR_USE_TLS_TEXT "Use TLS" 97 #define STUN_ERROR_MISSING_REALM_CODE 434 98 #define STUN_ERROR_MISSING_REALM_TEXT "Missing Realm" 100 #define STUN_ERROR_MISSING_NONCE_CODE 435 101 #define STUN_ERROR_MISSING_NONCE_TEXT "Missing Nonce" 103 #define STUN_ERROR_UNKNOWN_USERNAME_CODE 436 104 #define STUN_ERROR_UNKNOWN_USERNAME_TEXT "Unknown username" 106 #define STUN_ERROR_STALE_NONCE_CODE 438 107 #define STUN_ERROR_STALE_NONCE_TEXT "Stale Nonce" 109 #define STUN_ERROR_SERVER_CODE 500 110 #define STUN_ERROR_SERVER_TEXT "Server error" 112 #define STUN_ERROR_GLOBAL_CODE 600 113 #define STUN_ERROR_GLOBAL_TEXT "Global error" 223 bool bLegacyMode =
true) ;
232 virtual void reset() ;
234 virtual bool parse(
const char* pBuf,
size_t nBufLength) ;
236 virtual bool encode(
char* pBuf,
size_t nBufLength,
size_t& nActualLength) ;
238 virtual bool encodeBody(
char* pBuf,
size_t nBufLength,
size_t& nBytesUsed) ;
264 void setRealm(
const char* szRealm) ;
266 void setNonce(
const char* szNonce) ;
349 bool encodeByte(
char c,
char*& pBuf,
size_t& nBytesLeft) ;
355 bool encodeRaw(
const char* cRaw,
size_t length,
char*& pBuf,
size_t& nBytesLeft) ;
401 bool mbMsgHeaderValid ;
403 bool mbMappedAddressValid ;
405 bool mbResponseAddressValid ;
407 bool mbChangedAddressValid ;
409 bool mbChangeRequestValid ;
411 bool mbSourceAddressValid ;
413 bool mbUsernameValid ;
415 bool mbPasswordValid ;
421 bool mbMessageIntegrityValid ;
425 bool mbUnknownAttributesValid ;
427 bool mbReflectedFromValid ;
431 bool mbRequestXorOnly ;
433 bool mbIncludeMessageIntegrity ;
435 bool mbAltServerValid ;
436 bool mbIncludeFingerPrint ;
437 char mbFingerPrintValid ;
454 #endif // _StunMessage_h_ #define STUN_MAX_UNKNOWN_ATTRIBUTES
Definition: StunMessage.h:24
StunMessage(StunMessage *pRequest=NULL, bool bLegacyMode=true)
Definition: StunMessage.cpp:48
void setIncludeFingerPrint(bool bInclude)
Definition: StunMessage.cpp:614
Definition: UtlRandom.h:35
bool parseUnknownAttribute(char *pBuf, size_t nLength, STUN_ATTRIBUTE_UNKNOWN *pAttributes)
Definition: StunMessage.cpp:1491
bool getUsername(char *szUsername)
Definition: StunMessage.cpp:726
bool getChangePort()
Definition: StunMessage.cpp:671
bool encodeByte(char c, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1020
void setSourceAddress(const char *szIp, const uint16_t port)
Definition: StunMessage.cpp:512
bool getRealm(char *szRealm)
Definition: StunMessage.cpp:746
uint8_t family
Definition: StunMessage.h:147
virtual bool parseAttribute(STUN_ATTRIBUTE_HEADER *pHeader, char *pBuf)
Definition: StunMessage.cpp:1269
bool getReflectedFrom(char *szIp, uint16_t &rPort)
Definition: StunMessage.cpp:802
uint16_t length
Definition: StunMessage.h:141
void setUsername(const char *szUsername)
Definition: StunMessage.cpp:528
Definition: StunMessage.h:130
bool parseLongAttribute(char *pBuf, size_t nLength, uint32_t *pLong)
Definition: StunMessage.cpp:1418
Include this file if you want use C99 integer types with specified width and corresponding set of mac...
Definition: StunMessage.h:121
bool getError(uint16_t &rCode, char *szReason)
Definition: StunMessage.cpp:775
bool encodeAttributeHeader(int16_t type, int16_t length, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1112
void setChangeIp(const bool bChange)
Definition: StunMessage.cpp:498
virtual bool validateMessageType(uint16_t type)
Definition: StunMessage.cpp:861
bool getMappedAddress(char *szIp, uint16_t &rPort)
Definition: StunMessage.cpp:645
uint8_t errorNumber
Definition: StunMessage.h:157
void setMagicId(STUN_MAGIC_ID &rMagicId)
Definition: StunMessage.cpp:434
Definition: StunMessage.h:138
void setTransactionId(STUN_TRANSACTION_ID &rTransactionId)
Definition: StunMessage.cpp:439
bool parseShortAttribute(char *pBuf, size_t nLength, uint16_t *pShort)
Definition: StunMessage.cpp:1404
unsigned short uint16_t
Definition: stdint.h:79
void setResponseAddress(const char *szIp, const uint16_t port)
Definition: StunMessage.cpp:474
virtual ~StunMessage()
Definition: StunMessage.cpp:78
void setServer(const char *szServer)
Definition: StunMessage.cpp:590
bool encodeHeader(STUN_MESSAGE_HEADER *pHeader, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1095
bool getSourceAddress(char *szIp, uint16_t &rPort)
Definition: StunMessage.cpp:702
unsigned char uint8_t
Definition: stdint.h:78
virtual bool isFingerPrintValid()
Definition: StunMessage.cpp:1012
bool getServer(char *szServer)
Definition: StunMessage.cpp:814
void setPassword(const char *szPassword)
Definition: StunMessage.cpp:537
bool getMessageIntegrity(char *cMessageIntegrity)
Definition: StunMessage.cpp:766
#define NULL
Definition: UtlDefs.h:29
virtual bool isMessageIntegrityValid(const char *cPassword, size_t nPassword)
Definition: StunMessage.cpp:1006
bool getUnknownParsedAttributes(uint16_t *pList, size_t nMaxItems, size_t &nActualItems)
Definition: StunMessage.cpp:831
bool encodeRaw(const char *cRaw, size_t length, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1075
void setReflectedFrom(const char *szIp, const uint16_t port)
Definition: StunMessage.cpp:582
void setChangePort(const bool bChange)
Definition: StunMessage.cpp:483
void setAltServer(const char *szIp, uint16_t port)
Definition: StunMessage.cpp:619
bool parseXorAddressAttribute(char *pBuf, size_t nLength, STUN_ATTRIBUTE_ADDRESS *pAddress)
Definition: StunMessage.cpp:1384
virtual void reset()
Definition: StunMessage.cpp:86
bool getChangeIp()
Definition: StunMessage.cpp:687
void setRequestXorOnly()
Definition: StunMessage.cpp:599
void setRealm(const char *szRealm)
Definition: StunMessage.cpp:546
virtual bool isRequestOrNonErrorResponse()
Definition: StunMessage.cpp:983
bool parseStringAttribute(char *pBuf, size_t nLength, char *pString)
Definition: StunMessage.cpp:1433
virtual bool parse(const char *pBuf, size_t nBufLength)
Definition: StunMessage.cpp:134
virtual bool encode(char *pBuf, size_t nBufLength, size_t &nActualLength)
Definition: StunMessage.cpp:204
unsigned int uint32_t
Definition: stdint.h:80
bool getFingerPrint(bool &bValid)
signed short int16_t
Definition: stdint.h:76
uint32_t address
Definition: StunMessage.h:149
bool encodeLong(uint32_t value, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1056
void setNonce(const char *szNonce)
Definition: StunMessage.cpp:555
uint16_t unused
Definition: StunMessage.h:154
Definition: StunMessage.h:126
virtual bool encodeBody(char *pBuf, size_t nBufLength, size_t &nBytesUsed)
Definition: StunMessage.cpp:317
bool parseRawAttribute(char *pBuf, size_t nLength, char *pDest, size_t nDest)
Definition: StunMessage.cpp:1457
void getTransactionId(STUN_TRANSACTION_ID *pTransactionId)
Definition: StunMessage.cpp:635
uint16_t port
Definition: StunMessage.h:148
bool getChangedAddress(char *szIp, uint16_t &rPort)
Definition: StunMessage.cpp:714
static bool isStunMessage(const char *pBuf, uint16_t nBufLength)
Definition: StunMessage.cpp:882
bool getAltServer(char *szIp, uint16_t &rPort)
Definition: StunMessage.cpp:846
STUN_MAGIC_ID magicId
Definition: StunMessage.h:134
uint16_t length
Definition: StunMessage.h:133
bool getUnknownAttributes(uint16_t *pList, size_t nMaxItems, size_t &nActualItems)
Definition: StunMessage.cpp:786
static void calculateHmacSha1(const char *pDataIn, size_t nDataIn, const char *pKey, size_t nKey, char results[20])
Definition: StunMessage.cpp:1513
#define STUN_MAX_MESSAGE_INTEGRITY_LENGTH
Definition: StunMessage.h:25
Definition: StunMessage.h:144
uint8_t unused
Definition: StunMessage.h:146
uint16_t type
Definition: StunMessage.h:132
uint16_t type
Definition: StunMessage.h:140
bool parseAddressAttribute(char *pBuf, size_t nLength, STUN_ATTRIBUTE_ADDRESS *pAddress)
Definition: StunMessage.cpp:1369
bool encodeAttributeAddress(uint16_t type, STUN_ATTRIBUTE_ADDRESS *pAddress, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1126
void setError(const uint16_t code, const char *szReason)
Definition: StunMessage.cpp:564
Definition: StunMessage.h:152
void allocTransactionId()
Definition: StunMessage.cpp:445
bool getNonce(char *szNonce)
Definition: StunMessage.cpp:756
void setType(uint16_t type)
Definition: StunMessage.cpp:459
STUN_TRANSACTION_ID transactionId
Definition: StunMessage.h:135
bool getRequestXorOnly()
Definition: StunMessage.cpp:825
bool encodeAttributesUnknown(STUN_ATTRIBUTE_UNKNOWN *pAttributes, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1240
bool getResponseAddress(char *szIp, uint16_t &rPort)
Definition: StunMessage.cpp:658
bool encodeString(uint16_t type, const char *szString, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1167
bool encodeShort(uint16_t value, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1037
bool encodeAttributeError(STUN_ATTRIBUTE_ERROR *pError, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1212
uint32_t id
Definition: StunMessage.h:123
Definition: StunMessage.h:211
void setSendXorOnly()
Definition: StunMessage.cpp:604
uint32_t nTypes
Definition: StunMessage.h:164
Definition: StunMessage.h:161
void addUnknownAttribute(uint16_t attributeId)
Definition: StunMessage.cpp:573
uint16_t getType()
Definition: StunMessage.cpp:640
bool encodeXorAttributeAddress(uint16_t type, STUN_ATTRIBUTE_ADDRESS *pAddress, char *&pBuf, size_t &nBytesLeft)
Definition: StunMessage.cpp:1143
bool parseErrorAttribute(char *pBuf, size_t nLength, STUN_ATTRIBUTE_ERROR *pError)
Definition: StunMessage.cpp:1471
void getMagicId(STUN_MAGIC_ID *pMagicId)
Definition: StunMessage.cpp:629
bool getPassword(char *szPassword)
Definition: StunMessage.cpp:736
void setMappedAddress(const char *szIp, const uint16_t port)
Definition: StunMessage.cpp:465
#define STUN_MAX_STRING_LENGTH
Definition: StunMessage.h:23
void setChangedAddress(const char *szIp, const uint16_t port)
Definition: StunMessage.cpp:520
void setIncludeMessageIntegrity(bool bInclude)
Definition: StunMessage.cpp:609