?? stun_msg.h
字號:
* The transaction ID is a 96 bit identifier. STUN transactions are
* identified by their unique 96-bit transaction ID. For request/
* response transactions, the transaction ID is chosen by the STUN
* client and MUST be unique for each new STUN transaction generated by
* that STUN client. The transaction ID MUST be uniformly and randomly
* distributed between 0 and 2**96 - 1.
*/
pj_uint8_t tsx_id[12];
} pj_stun_msg_hdr;
/**
* This structre describes STUN attribute header. Each attribute is
* TLV encoded, with a 16 bit type, 16 bit length, and variable value.
* Each STUN attribute ends on a 32 bit boundary:
*
* \verbatim
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\endverbatim
*/
typedef struct pj_stun_attr_hdr
{
/**
* STUN attribute type.
*/
pj_uint16_t type;
/**
* The Length refers to the length of the actual useful content of the
* Value portion of the attribute, measured in bytes. The value
* in the Length field refers to the length of the Value part of the
* attribute prior to padding - i.e., the useful content.
*/
pj_uint16_t length;
} pj_stun_attr_hdr;
/**
* This structure describes STUN generic IP address attribute, used for
* example to represent STUN MAPPED-ADDRESS attribute.
*
* The generic IP address attribute indicates the transport address.
* It consists of an eight bit address family, and a sixteen bit port,
* followed by a fixed length value representing the IP address. If the
* address family is IPv4, the address is 32 bits, in network byte
* order. If the address family is IPv6, the address is 128 bits in
* network byte order.
*
* The format of the generic IP address attribute is:
*
* \verbatim
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|x x x x x x x x| Family | Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Address (variable)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\endverbatim
*/
typedef struct pj_stun_sockaddr_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* Flag to indicate whether this attribute should be sent in XOR-ed
* format, or has been received in XOR-ed format.
*/
pj_bool_t xor_ed;
/**
* The socket address
*/
pj_sockaddr sockaddr;
} pj_stun_sockaddr_attr;
/**
* This structure represents a generic STUN attributes with no payload,
* and it is used for example by ICE USE-CANDIDATE attribute.
*/
typedef struct pj_stun_empty_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
} pj_stun_empty_attr;
/**
* This structure represents generic STUN string attributes, such as STUN
* USERNAME, PASSWORD, SERVER, REALM, and NONCE attributes. Note that for REALM and
* NONCE attributes, the text MUST be quoted with.
*/
typedef struct pj_stun_string_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* The string value.
*/
pj_str_t value;
} pj_stun_string_attr;
/**
* This structure represents a generic STUN attributes with 32bit (unsigned)
* integer value, such as STUN FINGERPRINT and REFRESH-INTERVAL attributes.
*/
typedef struct pj_stun_uint_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* The 32bit value, in host byte order.
*/
pj_uint32_t value;
} pj_stun_uint_attr;
/**
* This structure represents a generic STUN attributes with 64bit (unsigned)
* integer value, such as ICE-CONTROLLED and ICE-CONTROLLING attributes.
*/
typedef struct pj_stun_uint64_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* The 64bit value, in host byte order, represented with pj_timestamp.
*/
pj_timestamp value;
} pj_stun_uint64_attr;
/**
* This structure represents generic STUN attributes to hold a raw binary
* data.
*/
typedef struct pj_stun_binary_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* Length of the data.
*/
unsigned length;
/**
* The raw data.
*/
pj_uint8_t *data;
} pj_stun_binary_attr;
/**
* This structure describes STUN MESSAGE-INTEGRITY attribute.
* The MESSAGE-INTEGRITY attribute contains an HMAC-SHA1 [10] of the
* STUN message. The MESSAGE-INTEGRITY attribute can be present in any
* STUN message type. Since it uses the SHA1 hash, the HMAC will be 20
* bytes.
*/
typedef struct pj_stun_msgint_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* The 20 bytes hmac value.
*/
pj_uint8_t hmac[20];
} pj_stun_msgint_attr;
/**
* This structure describes STUN FINGERPRINT attribute. The FINGERPRINT
* attribute can be present in all STUN messages. It is computed as
* the CRC-32 of the STUN message up to (but excluding) the FINGERPRINT
* attribute itself, xor-d with the 32 bit value 0x5354554e
*/
typedef struct pj_stun_uint_attr pj_stun_fingerprint_attr;
/**
* This structure represents STUN ERROR-CODE attribute. The ERROR-CODE
* attribute is present in the Binding Error Response and Shared Secret
* Error Response. It is a numeric value in the range of 100 to 699
* plus a textual reason phrase encoded in UTF-8
*
* \verbatim
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 |Class| Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reason Phrase (variable) ..
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
\endverbatim
*/
typedef struct pj_stun_errcode_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* STUN error code.
*/
int err_code;
/**
* The reason phrase.
*/
pj_str_t reason;
} pj_stun_errcode_attr;
/**
* This describes STUN REALM attribute.
* The REALM attribute is present in requests and responses. It
* contains text which meets the grammar for "realm" as described in RFC
* 3261 [11], and will thus contain a quoted string (including the
* quotes).
*/
typedef struct pj_stun_string_attr pj_stun_realm_attr;
/**
* This describes STUN NONCE attribute.
* The NONCE attribute is present in requests and in error responses.
* It contains a sequence of qdtext or quoted-pair, which are defined in
* RFC 3261 [11]. See RFC 2617 [7] for guidance on selection of nonce
* values in a server.
*/
typedef struct pj_stun_string_attr pj_stun_nonce_attr;
/**
* This describes STUN UNKNOWN-ATTRIBUTES attribute.
* The UNKNOWN-ATTRIBUTES attribute is present only in an error response
* when the response code in the ERROR-CODE attribute is 420.
* The attribute contains a list of 16 bit values, each of which
* represents an attribute type that was not understood by the server.
* If the number of unknown attributes is an odd number, one of the
* attributes MUST be repeated in the list, so that the total length of
* the list is a multiple of 4 bytes.
*/
typedef struct pj_stun_unknown_attr
{
/**
* Standard STUN attribute header.
*/
pj_stun_attr_hdr hdr;
/**
* Number of unknown attributes in the array.
*/
unsigned attr_count;
/**
* Array of unknown attribute IDs.
*/
pj_uint16_t attrs[PJ_STUN_MAX_ATTR];
} pj_stun_unknown_attr;
/**
* This structure describes STUN MAPPED-ADDRESS attribute.
* The MAPPED-ADDRESS attribute indicates the mapped transport address.
*/
typedef struct pj_stun_sockaddr_attr pj_stun_mapped_addr_attr;
/**
* This describes STUN XOR-MAPPED-ADDRESS attribute (which has the same
* format as STUN MAPPED-ADDRESS attribute).
* The XOR-MAPPED-ADDRESS attribute is present in responses. It
* provides the same information that would present in the MAPPED-
* ADDRESS attribute but because the NAT's public IP address is
* obfuscated through the XOR function, STUN messages are able to pass
* through NATs which would otherwise interfere with STUN.
*/
typedef struct pj_stun_sockaddr_attr pj_stun_xor_mapped_addr_attr;
/**
* This describes STUN SERVER attribute.
* The server attribute contains a textual description of the software
* being used by the server, including manufacturer and version number.
* The attribute has no impact on operation of the protocol, and serves
* only as a tool for diagnostic and debugging purposes. The value of
* SERVER is variable length.
*/
typedef struct pj_stun_string_attr pj_stun_server_attr;
/**
* This describes STUN ALTERNATE-SERVER attribute.
* The alternate server represents an alternate transport address for a
* different STUN server to try. It is encoded in the same way as
* MAPPED-ADDRESS.
*/
typedef struct pj_stun_sockaddr_attr pj_stun_alt_server_attr;
/**
* This describes STUN REFRESH-INTERVAL attribute.
* The REFRESH-INTERVAL indicates the number of milliseconds that the
* server suggests the client should use between refreshes of the NAT
* bindings between the client and server.
*/
typedef struct pj_stun_uint_attr pj_stun_refresh_interval_attr;
/**
* This structure describes STUN RESPONSE-ADDRESS attribute.
* The RESPONSE-ADDRESS attribute indicates where the response to a
* Binding Request should be sent. Its syntax is identical to MAPPED-
* ADDRESS.
*
* Note that the usage of this attribute has been deprecated by the
* RFC 3489-bis standard.
*/
typedef struct pj_stun_sockaddr_attr pj_stun_response_addr_attr;
/**
* This structure describes STUN CHANGED-ADDRESS attribute.
* The CHANGED-ADDRESS attribute indicates the IP address and port where
* responses would have been sent from if the "change IP" and "change
* port" flags had been set in the CHANGE-REQUEST attribute of the
* Binding Request. The attribute is always present in a Binding
* Response, independent of the value of the flags. Its syntax is
* identical to MAPPED-ADDRESS.
*
* Note that the usage of this attribute has been deprecated by the
* RFC 3489-bis standard.
*/
typedef struct pj_stun_sockaddr_attr pj_stun_changed_addr_attr;
/**
* This structure describes STUN CHANGE-REQUEST attribute.
* The CHANGE-REQUEST attribute is used by the client to request that
* the server use a different address and/or port when sending the
* response.
*
* Bit 29 of the value is the "change IP" flag. If true, it requests
* the server to send the Binding Response with a different IP address
* than the one the Binding Request was received on.
*
* Bit 30 of the value is the "change port" flag. If true, it requests
* the server to send the Binding Response with a different port than
* the one the Binding Request was received on.
*
* Note that the usage of this attribute has been deprecated by the
* RFC 3489-bis standard.
*/
typedef struct pj_stun_uint_attr pj_stun_change_request_attr;
/**
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -