| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 // Strings for the error codes above. | 90 // Strings for the error codes above. |
| 91 extern const char STUN_ERROR_REASON_TRY_ALTERNATE_SERVER[]; | 91 extern const char STUN_ERROR_REASON_TRY_ALTERNATE_SERVER[]; |
| 92 extern const char STUN_ERROR_REASON_BAD_REQUEST[]; | 92 extern const char STUN_ERROR_REASON_BAD_REQUEST[]; |
| 93 extern const char STUN_ERROR_REASON_UNAUTHORIZED[]; | 93 extern const char STUN_ERROR_REASON_UNAUTHORIZED[]; |
| 94 extern const char STUN_ERROR_REASON_UNKNOWN_ATTRIBUTE[]; | 94 extern const char STUN_ERROR_REASON_UNKNOWN_ATTRIBUTE[]; |
| 95 extern const char STUN_ERROR_REASON_STALE_CREDENTIALS[]; | 95 extern const char STUN_ERROR_REASON_STALE_CREDENTIALS[]; |
| 96 extern const char STUN_ERROR_REASON_STALE_NONCE[]; | 96 extern const char STUN_ERROR_REASON_STALE_NONCE[]; |
| 97 extern const char STUN_ERROR_REASON_SERVER_ERROR[]; | 97 extern const char STUN_ERROR_REASON_SERVER_ERROR[]; |
| 98 | 98 |
| 99 // The mask used to determine whether a STUN message is a request/response etc. | 99 // The mask used to determine whether a STUN message is a request/response etc. |
| 100 const uint32 kStunTypeMask = 0x0110; | 100 const uint32_t kStunTypeMask = 0x0110; |
| 101 | 101 |
| 102 // STUN Attribute header length. | 102 // STUN Attribute header length. |
| 103 const size_t kStunAttributeHeaderSize = 4; | 103 const size_t kStunAttributeHeaderSize = 4; |
| 104 | 104 |
| 105 // Following values correspond to RFC5389. | 105 // Following values correspond to RFC5389. |
| 106 const size_t kStunHeaderSize = 20; | 106 const size_t kStunHeaderSize = 20; |
| 107 const size_t kStunTransactionIdOffset = 8; | 107 const size_t kStunTransactionIdOffset = 8; |
| 108 const size_t kStunTransactionIdLength = 12; | 108 const size_t kStunTransactionIdLength = 12; |
| 109 const uint32 kStunMagicCookie = 0x2112A442; | 109 const uint32_t kStunMagicCookie = 0x2112A442; |
| 110 const size_t kStunMagicCookieLength = sizeof(kStunMagicCookie); | 110 const size_t kStunMagicCookieLength = sizeof(kStunMagicCookie); |
| 111 | 111 |
| 112 // Following value corresponds to an earlier version of STUN from | 112 // Following value corresponds to an earlier version of STUN from |
| 113 // RFC3489. | 113 // RFC3489. |
| 114 const size_t kStunLegacyTransactionIdLength = 16; | 114 const size_t kStunLegacyTransactionIdLength = 16; |
| 115 | 115 |
| 116 // STUN Message Integrity HMAC length. | 116 // STUN Message Integrity HMAC length. |
| 117 const size_t kStunMessageIntegritySize = 20; | 117 const size_t kStunMessageIntegritySize = 20; |
| 118 | 118 |
| 119 class StunAttribute; | 119 class StunAttribute; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 138 size_t length() const { return length_; } | 138 size_t length() const { return length_; } |
| 139 const std::string& transaction_id() const { return transaction_id_; } | 139 const std::string& transaction_id() const { return transaction_id_; } |
| 140 | 140 |
| 141 // Returns true if the message confirms to RFC3489 rather than | 141 // Returns true if the message confirms to RFC3489 rather than |
| 142 // RFC5389. The main difference between two version of the STUN | 142 // RFC5389. The main difference between two version of the STUN |
| 143 // protocol is the presence of the magic cookie and different length | 143 // protocol is the presence of the magic cookie and different length |
| 144 // of transaction ID. For outgoing packets version of the protocol | 144 // of transaction ID. For outgoing packets version of the protocol |
| 145 // is determined by the lengths of the transaction ID. | 145 // is determined by the lengths of the transaction ID. |
| 146 bool IsLegacy() const; | 146 bool IsLegacy() const; |
| 147 | 147 |
| 148 void SetType(int type) { type_ = static_cast<uint16>(type); } | 148 void SetType(int type) { type_ = static_cast<uint16_t>(type); } |
| 149 bool SetTransactionID(const std::string& str); | 149 bool SetTransactionID(const std::string& str); |
| 150 | 150 |
| 151 // Gets the desired attribute value, or NULL if no such attribute type exists. | 151 // Gets the desired attribute value, or NULL if no such attribute type exists. |
| 152 const StunAddressAttribute* GetAddress(int type) const; | 152 const StunAddressAttribute* GetAddress(int type) const; |
| 153 const StunUInt32Attribute* GetUInt32(int type) const; | 153 const StunUInt32Attribute* GetUInt32(int type) const; |
| 154 const StunUInt64Attribute* GetUInt64(int type) const; | 154 const StunUInt64Attribute* GetUInt64(int type) const; |
| 155 const StunByteStringAttribute* GetByteString(int type) const; | 155 const StunByteStringAttribute* GetByteString(int type) const; |
| 156 | 156 |
| 157 // Gets these specific attribute values. | 157 // Gets these specific attribute values. |
| 158 const StunErrorCodeAttribute* GetErrorCode() const; | 158 const StunErrorCodeAttribute* GetErrorCode() const; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 | 191 |
| 192 protected: | 192 protected: |
| 193 // Verifies that the given attribute is allowed for this message. | 193 // Verifies that the given attribute is allowed for this message. |
| 194 virtual StunAttributeValueType GetAttributeValueType(int type) const; | 194 virtual StunAttributeValueType GetAttributeValueType(int type) const; |
| 195 | 195 |
| 196 private: | 196 private: |
| 197 StunAttribute* CreateAttribute(int type, size_t length) /* const*/; | 197 StunAttribute* CreateAttribute(int type, size_t length) /* const*/; |
| 198 const StunAttribute* GetAttribute(int type) const; | 198 const StunAttribute* GetAttribute(int type) const; |
| 199 static bool IsValidTransactionId(const std::string& transaction_id); | 199 static bool IsValidTransactionId(const std::string& transaction_id); |
| 200 | 200 |
| 201 uint16 type_; | 201 uint16_t type_; |
| 202 uint16 length_; | 202 uint16_t length_; |
| 203 std::string transaction_id_; | 203 std::string transaction_id_; |
| 204 std::vector<StunAttribute*>* attrs_; | 204 std::vector<StunAttribute*>* attrs_; |
| 205 }; | 205 }; |
| 206 | 206 |
| 207 // Base class for all STUN/TURN attributes. | 207 // Base class for all STUN/TURN attributes. |
| 208 class StunAttribute { | 208 class StunAttribute { |
| 209 public: | 209 public: |
| 210 virtual ~StunAttribute() { | 210 virtual ~StunAttribute() { |
| 211 } | 211 } |
| 212 | 212 |
| 213 int type() const { return type_; } | 213 int type() const { return type_; } |
| 214 size_t length() const { return length_; } | 214 size_t length() const { return length_; } |
| 215 | 215 |
| 216 // Return the type of this attribute. | 216 // Return the type of this attribute. |
| 217 virtual StunAttributeValueType value_type() const = 0; | 217 virtual StunAttributeValueType value_type() const = 0; |
| 218 | 218 |
| 219 // Only XorAddressAttribute needs this so far. | 219 // Only XorAddressAttribute needs this so far. |
| 220 virtual void SetOwner(StunMessage* owner) {} | 220 virtual void SetOwner(StunMessage* owner) {} |
| 221 | 221 |
| 222 // Reads the body (not the type or length) for this type of attribute from | 222 // Reads the body (not the type or length) for this type of attribute from |
| 223 // the given buffer. Return value is true if successful. | 223 // the given buffer. Return value is true if successful. |
| 224 virtual bool Read(rtc::ByteBuffer* buf) = 0; | 224 virtual bool Read(rtc::ByteBuffer* buf) = 0; |
| 225 | 225 |
| 226 // Writes the body (not the type or length) to the given buffer. Return | 226 // Writes the body (not the type or length) to the given buffer. Return |
| 227 // value is true if successful. | 227 // value is true if successful. |
| 228 virtual bool Write(rtc::ByteBuffer* buf) const = 0; | 228 virtual bool Write(rtc::ByteBuffer* buf) const = 0; |
| 229 | 229 |
| 230 // Creates an attribute object with the given type and smallest length. | 230 // Creates an attribute object with the given type and smallest length. |
| 231 static StunAttribute* Create(StunAttributeValueType value_type, uint16 type, | 231 static StunAttribute* Create(StunAttributeValueType value_type, |
| 232 uint16 length, StunMessage* owner); | 232 uint16_t type, |
| 233 uint16_t length, |
| 234 StunMessage* owner); |
| 233 // TODO: Allow these create functions to take parameters, to reduce | 235 // TODO: Allow these create functions to take parameters, to reduce |
| 234 // the amount of work callers need to do to initialize attributes. | 236 // the amount of work callers need to do to initialize attributes. |
| 235 static StunAddressAttribute* CreateAddress(uint16 type); | 237 static StunAddressAttribute* CreateAddress(uint16_t type); |
| 236 static StunXorAddressAttribute* CreateXorAddress(uint16 type); | 238 static StunXorAddressAttribute* CreateXorAddress(uint16_t type); |
| 237 static StunUInt32Attribute* CreateUInt32(uint16 type); | 239 static StunUInt32Attribute* CreateUInt32(uint16_t type); |
| 238 static StunUInt64Attribute* CreateUInt64(uint16 type); | 240 static StunUInt64Attribute* CreateUInt64(uint16_t type); |
| 239 static StunByteStringAttribute* CreateByteString(uint16 type); | 241 static StunByteStringAttribute* CreateByteString(uint16_t type); |
| 240 static StunErrorCodeAttribute* CreateErrorCode(); | 242 static StunErrorCodeAttribute* CreateErrorCode(); |
| 241 static StunUInt16ListAttribute* CreateUnknownAttributes(); | 243 static StunUInt16ListAttribute* CreateUnknownAttributes(); |
| 242 | 244 |
| 243 protected: | 245 protected: |
| 244 StunAttribute(uint16 type, uint16 length); | 246 StunAttribute(uint16_t type, uint16_t length); |
| 245 void SetLength(uint16 length) { length_ = length; } | 247 void SetLength(uint16_t length) { length_ = length; } |
| 246 void WritePadding(rtc::ByteBuffer* buf) const; | 248 void WritePadding(rtc::ByteBuffer* buf) const; |
| 247 void ConsumePadding(rtc::ByteBuffer* buf) const; | 249 void ConsumePadding(rtc::ByteBuffer* buf) const; |
| 248 | 250 |
| 249 private: | 251 private: |
| 250 uint16 type_; | 252 uint16_t type_; |
| 251 uint16 length_; | 253 uint16_t length_; |
| 252 }; | 254 }; |
| 253 | 255 |
| 254 // Implements STUN attributes that record an Internet address. | 256 // Implements STUN attributes that record an Internet address. |
| 255 class StunAddressAttribute : public StunAttribute { | 257 class StunAddressAttribute : public StunAttribute { |
| 256 public: | 258 public: |
| 257 static const uint16 SIZE_UNDEF = 0; | 259 static const uint16_t SIZE_UNDEF = 0; |
| 258 static const uint16 SIZE_IP4 = 8; | 260 static const uint16_t SIZE_IP4 = 8; |
| 259 static const uint16 SIZE_IP6 = 20; | 261 static const uint16_t SIZE_IP6 = 20; |
| 260 StunAddressAttribute(uint16 type, const rtc::SocketAddress& addr); | 262 StunAddressAttribute(uint16_t type, const rtc::SocketAddress& addr); |
| 261 StunAddressAttribute(uint16 type, uint16 length); | 263 StunAddressAttribute(uint16_t type, uint16_t length); |
| 262 | 264 |
| 263 virtual StunAttributeValueType value_type() const { | 265 virtual StunAttributeValueType value_type() const { |
| 264 return STUN_VALUE_ADDRESS; | 266 return STUN_VALUE_ADDRESS; |
| 265 } | 267 } |
| 266 | 268 |
| 267 StunAddressFamily family() const { | 269 StunAddressFamily family() const { |
| 268 switch (address_.ipaddr().family()) { | 270 switch (address_.ipaddr().family()) { |
| 269 case AF_INET: | 271 case AF_INET: |
| 270 return STUN_ADDRESS_IPV4; | 272 return STUN_ADDRESS_IPV4; |
| 271 case AF_INET6: | 273 case AF_INET6: |
| 272 return STUN_ADDRESS_IPV6; | 274 return STUN_ADDRESS_IPV6; |
| 273 } | 275 } |
| 274 return STUN_ADDRESS_UNDEF; | 276 return STUN_ADDRESS_UNDEF; |
| 275 } | 277 } |
| 276 | 278 |
| 277 const rtc::SocketAddress& GetAddress() const { return address_; } | 279 const rtc::SocketAddress& GetAddress() const { return address_; } |
| 278 const rtc::IPAddress& ipaddr() const { return address_.ipaddr(); } | 280 const rtc::IPAddress& ipaddr() const { return address_.ipaddr(); } |
| 279 uint16 port() const { return address_.port(); } | 281 uint16_t port() const { return address_.port(); } |
| 280 | 282 |
| 281 void SetAddress(const rtc::SocketAddress& addr) { | 283 void SetAddress(const rtc::SocketAddress& addr) { |
| 282 address_ = addr; | 284 address_ = addr; |
| 283 EnsureAddressLength(); | 285 EnsureAddressLength(); |
| 284 } | 286 } |
| 285 void SetIP(const rtc::IPAddress& ip) { | 287 void SetIP(const rtc::IPAddress& ip) { |
| 286 address_.SetIP(ip); | 288 address_.SetIP(ip); |
| 287 EnsureAddressLength(); | 289 EnsureAddressLength(); |
| 288 } | 290 } |
| 289 void SetPort(uint16 port) { address_.SetPort(port); } | 291 void SetPort(uint16_t port) { address_.SetPort(port); } |
| 290 | 292 |
| 291 virtual bool Read(rtc::ByteBuffer* buf); | 293 virtual bool Read(rtc::ByteBuffer* buf); |
| 292 virtual bool Write(rtc::ByteBuffer* buf) const; | 294 virtual bool Write(rtc::ByteBuffer* buf) const; |
| 293 | 295 |
| 294 private: | 296 private: |
| 295 void EnsureAddressLength() { | 297 void EnsureAddressLength() { |
| 296 switch (family()) { | 298 switch (family()) { |
| 297 case STUN_ADDRESS_IPV4: { | 299 case STUN_ADDRESS_IPV4: { |
| 298 SetLength(SIZE_IP4); | 300 SetLength(SIZE_IP4); |
| 299 break; | 301 break; |
| 300 } | 302 } |
| 301 case STUN_ADDRESS_IPV6: { | 303 case STUN_ADDRESS_IPV6: { |
| 302 SetLength(SIZE_IP6); | 304 SetLength(SIZE_IP6); |
| 303 break; | 305 break; |
| 304 } | 306 } |
| 305 default: { | 307 default: { |
| 306 SetLength(SIZE_UNDEF); | 308 SetLength(SIZE_UNDEF); |
| 307 break; | 309 break; |
| 308 } | 310 } |
| 309 } | 311 } |
| 310 } | 312 } |
| 311 rtc::SocketAddress address_; | 313 rtc::SocketAddress address_; |
| 312 }; | 314 }; |
| 313 | 315 |
| 314 // Implements STUN attributes that record an Internet address. When encoded | 316 // Implements STUN attributes that record an Internet address. When encoded |
| 315 // in a STUN message, the address contained in this attribute is XORed with the | 317 // in a STUN message, the address contained in this attribute is XORed with the |
| 316 // transaction ID of the message. | 318 // transaction ID of the message. |
| 317 class StunXorAddressAttribute : public StunAddressAttribute { | 319 class StunXorAddressAttribute : public StunAddressAttribute { |
| 318 public: | 320 public: |
| 319 StunXorAddressAttribute(uint16 type, const rtc::SocketAddress& addr); | 321 StunXorAddressAttribute(uint16_t type, const rtc::SocketAddress& addr); |
| 320 StunXorAddressAttribute(uint16 type, uint16 length, | 322 StunXorAddressAttribute(uint16_t type, uint16_t length, StunMessage* owner); |
| 321 StunMessage* owner); | |
| 322 | 323 |
| 323 virtual StunAttributeValueType value_type() const { | 324 virtual StunAttributeValueType value_type() const { |
| 324 return STUN_VALUE_XOR_ADDRESS; | 325 return STUN_VALUE_XOR_ADDRESS; |
| 325 } | 326 } |
| 326 virtual void SetOwner(StunMessage* owner) { | 327 virtual void SetOwner(StunMessage* owner) { |
| 327 owner_ = owner; | 328 owner_ = owner; |
| 328 } | 329 } |
| 329 virtual bool Read(rtc::ByteBuffer* buf); | 330 virtual bool Read(rtc::ByteBuffer* buf); |
| 330 virtual bool Write(rtc::ByteBuffer* buf) const; | 331 virtual bool Write(rtc::ByteBuffer* buf) const; |
| 331 | 332 |
| 332 private: | 333 private: |
| 333 rtc::IPAddress GetXoredIP() const; | 334 rtc::IPAddress GetXoredIP() const; |
| 334 StunMessage* owner_; | 335 StunMessage* owner_; |
| 335 }; | 336 }; |
| 336 | 337 |
| 337 // Implements STUN attributes that record a 32-bit integer. | 338 // Implements STUN attributes that record a 32-bit integer. |
| 338 class StunUInt32Attribute : public StunAttribute { | 339 class StunUInt32Attribute : public StunAttribute { |
| 339 public: | 340 public: |
| 340 static const uint16 SIZE = 4; | 341 static const uint16_t SIZE = 4; |
| 341 StunUInt32Attribute(uint16 type, uint32 value); | 342 StunUInt32Attribute(uint16_t type, uint32_t value); |
| 342 explicit StunUInt32Attribute(uint16 type); | 343 explicit StunUInt32Attribute(uint16_t type); |
| 343 | 344 |
| 344 virtual StunAttributeValueType value_type() const { | 345 virtual StunAttributeValueType value_type() const { |
| 345 return STUN_VALUE_UINT32; | 346 return STUN_VALUE_UINT32; |
| 346 } | 347 } |
| 347 | 348 |
| 348 uint32 value() const { return bits_; } | 349 uint32_t value() const { return bits_; } |
| 349 void SetValue(uint32 bits) { bits_ = bits; } | 350 void SetValue(uint32_t bits) { bits_ = bits; } |
| 350 | 351 |
| 351 bool GetBit(size_t index) const; | 352 bool GetBit(size_t index) const; |
| 352 void SetBit(size_t index, bool value); | 353 void SetBit(size_t index, bool value); |
| 353 | 354 |
| 354 virtual bool Read(rtc::ByteBuffer* buf); | 355 virtual bool Read(rtc::ByteBuffer* buf); |
| 355 virtual bool Write(rtc::ByteBuffer* buf) const; | 356 virtual bool Write(rtc::ByteBuffer* buf) const; |
| 356 | 357 |
| 357 private: | 358 private: |
| 358 uint32 bits_; | 359 uint32_t bits_; |
| 359 }; | 360 }; |
| 360 | 361 |
| 361 class StunUInt64Attribute : public StunAttribute { | 362 class StunUInt64Attribute : public StunAttribute { |
| 362 public: | 363 public: |
| 363 static const uint16 SIZE = 8; | 364 static const uint16_t SIZE = 8; |
| 364 StunUInt64Attribute(uint16 type, uint64 value); | 365 StunUInt64Attribute(uint16_t type, uint64_t value); |
| 365 explicit StunUInt64Attribute(uint16 type); | 366 explicit StunUInt64Attribute(uint16_t type); |
| 366 | 367 |
| 367 virtual StunAttributeValueType value_type() const { | 368 virtual StunAttributeValueType value_type() const { |
| 368 return STUN_VALUE_UINT64; | 369 return STUN_VALUE_UINT64; |
| 369 } | 370 } |
| 370 | 371 |
| 371 uint64 value() const { return bits_; } | 372 uint64_t value() const { return bits_; } |
| 372 void SetValue(uint64 bits) { bits_ = bits; } | 373 void SetValue(uint64_t bits) { bits_ = bits; } |
| 373 | 374 |
| 374 virtual bool Read(rtc::ByteBuffer* buf); | 375 virtual bool Read(rtc::ByteBuffer* buf); |
| 375 virtual bool Write(rtc::ByteBuffer* buf) const; | 376 virtual bool Write(rtc::ByteBuffer* buf) const; |
| 376 | 377 |
| 377 private: | 378 private: |
| 378 uint64 bits_; | 379 uint64_t bits_; |
| 379 }; | 380 }; |
| 380 | 381 |
| 381 // Implements STUN attributes that record an arbitrary byte string. | 382 // Implements STUN attributes that record an arbitrary byte string. |
| 382 class StunByteStringAttribute : public StunAttribute { | 383 class StunByteStringAttribute : public StunAttribute { |
| 383 public: | 384 public: |
| 384 explicit StunByteStringAttribute(uint16 type); | 385 explicit StunByteStringAttribute(uint16_t type); |
| 385 StunByteStringAttribute(uint16 type, const std::string& str); | 386 StunByteStringAttribute(uint16_t type, const std::string& str); |
| 386 StunByteStringAttribute(uint16 type, const void* bytes, size_t length); | 387 StunByteStringAttribute(uint16_t type, const void* bytes, size_t length); |
| 387 StunByteStringAttribute(uint16 type, uint16 length); | 388 StunByteStringAttribute(uint16_t type, uint16_t length); |
| 388 ~StunByteStringAttribute(); | 389 ~StunByteStringAttribute(); |
| 389 | 390 |
| 390 virtual StunAttributeValueType value_type() const { | 391 virtual StunAttributeValueType value_type() const { |
| 391 return STUN_VALUE_BYTE_STRING; | 392 return STUN_VALUE_BYTE_STRING; |
| 392 } | 393 } |
| 393 | 394 |
| 394 const char* bytes() const { return bytes_; } | 395 const char* bytes() const { return bytes_; } |
| 395 std::string GetString() const { return std::string(bytes_, length()); } | 396 std::string GetString() const { return std::string(bytes_, length()); } |
| 396 | 397 |
| 397 void CopyBytes(const char* bytes); // uses strlen | 398 void CopyBytes(const char* bytes); // uses strlen |
| 398 void CopyBytes(const void* bytes, size_t length); | 399 void CopyBytes(const void* bytes, size_t length); |
| 399 | 400 |
| 400 uint8 GetByte(size_t index) const; | 401 uint8_t GetByte(size_t index) const; |
| 401 void SetByte(size_t index, uint8 value); | 402 void SetByte(size_t index, uint8_t value); |
| 402 | 403 |
| 403 virtual bool Read(rtc::ByteBuffer* buf); | 404 virtual bool Read(rtc::ByteBuffer* buf); |
| 404 virtual bool Write(rtc::ByteBuffer* buf) const; | 405 virtual bool Write(rtc::ByteBuffer* buf) const; |
| 405 | 406 |
| 406 private: | 407 private: |
| 407 void SetBytes(char* bytes, size_t length); | 408 void SetBytes(char* bytes, size_t length); |
| 408 | 409 |
| 409 char* bytes_; | 410 char* bytes_; |
| 410 }; | 411 }; |
| 411 | 412 |
| 412 // Implements STUN attributes that record an error code. | 413 // Implements STUN attributes that record an error code. |
| 413 class StunErrorCodeAttribute : public StunAttribute { | 414 class StunErrorCodeAttribute : public StunAttribute { |
| 414 public: | 415 public: |
| 415 static const uint16 MIN_SIZE = 4; | 416 static const uint16_t MIN_SIZE = 4; |
| 416 StunErrorCodeAttribute(uint16 type, int code, const std::string& reason); | 417 StunErrorCodeAttribute(uint16_t type, int code, const std::string& reason); |
| 417 StunErrorCodeAttribute(uint16 type, uint16 length); | 418 StunErrorCodeAttribute(uint16_t type, uint16_t length); |
| 418 ~StunErrorCodeAttribute(); | 419 ~StunErrorCodeAttribute(); |
| 419 | 420 |
| 420 virtual StunAttributeValueType value_type() const { | 421 virtual StunAttributeValueType value_type() const { |
| 421 return STUN_VALUE_ERROR_CODE; | 422 return STUN_VALUE_ERROR_CODE; |
| 422 } | 423 } |
| 423 | 424 |
| 424 // The combined error and class, e.g. 0x400. | 425 // The combined error and class, e.g. 0x400. |
| 425 int code() const; | 426 int code() const; |
| 426 void SetCode(int code); | 427 void SetCode(int code); |
| 427 | 428 |
| 428 // The individual error components. | 429 // The individual error components. |
| 429 int eclass() const { return class_; } | 430 int eclass() const { return class_; } |
| 430 int number() const { return number_; } | 431 int number() const { return number_; } |
| 431 const std::string& reason() const { return reason_; } | 432 const std::string& reason() const { return reason_; } |
| 432 void SetClass(uint8 eclass) { class_ = eclass; } | 433 void SetClass(uint8_t eclass) { class_ = eclass; } |
| 433 void SetNumber(uint8 number) { number_ = number; } | 434 void SetNumber(uint8_t number) { number_ = number; } |
| 434 void SetReason(const std::string& reason); | 435 void SetReason(const std::string& reason); |
| 435 | 436 |
| 436 bool Read(rtc::ByteBuffer* buf); | 437 bool Read(rtc::ByteBuffer* buf); |
| 437 bool Write(rtc::ByteBuffer* buf) const; | 438 bool Write(rtc::ByteBuffer* buf) const; |
| 438 | 439 |
| 439 private: | 440 private: |
| 440 uint8 class_; | 441 uint8_t class_; |
| 441 uint8 number_; | 442 uint8_t number_; |
| 442 std::string reason_; | 443 std::string reason_; |
| 443 }; | 444 }; |
| 444 | 445 |
| 445 // Implements STUN attributes that record a list of attribute names. | 446 // Implements STUN attributes that record a list of attribute names. |
| 446 class StunUInt16ListAttribute : public StunAttribute { | 447 class StunUInt16ListAttribute : public StunAttribute { |
| 447 public: | 448 public: |
| 448 StunUInt16ListAttribute(uint16 type, uint16 length); | 449 StunUInt16ListAttribute(uint16_t type, uint16_t length); |
| 449 ~StunUInt16ListAttribute(); | 450 ~StunUInt16ListAttribute(); |
| 450 | 451 |
| 451 virtual StunAttributeValueType value_type() const { | 452 virtual StunAttributeValueType value_type() const { |
| 452 return STUN_VALUE_UINT16_LIST; | 453 return STUN_VALUE_UINT16_LIST; |
| 453 } | 454 } |
| 454 | 455 |
| 455 size_t Size() const; | 456 size_t Size() const; |
| 456 uint16 GetType(int index) const; | 457 uint16_t GetType(int index) const; |
| 457 void SetType(int index, uint16 value); | 458 void SetType(int index, uint16_t value); |
| 458 void AddType(uint16 value); | 459 void AddType(uint16_t value); |
| 459 | 460 |
| 460 bool Read(rtc::ByteBuffer* buf); | 461 bool Read(rtc::ByteBuffer* buf); |
| 461 bool Write(rtc::ByteBuffer* buf) const; | 462 bool Write(rtc::ByteBuffer* buf) const; |
| 462 | 463 |
| 463 private: | 464 private: |
| 464 std::vector<uint16>* attr_types_; | 465 std::vector<uint16_t>* attr_types_; |
| 465 }; | 466 }; |
| 466 | 467 |
| 467 // Returns the (successful) response type for the given request type. | 468 // Returns the (successful) response type for the given request type. |
| 468 // Returns -1 if |request_type| is not a valid request type. | 469 // Returns -1 if |request_type| is not a valid request type. |
| 469 int GetStunSuccessResponseType(int request_type); | 470 int GetStunSuccessResponseType(int request_type); |
| 470 | 471 |
| 471 // Returns the error response type for the given request type. | 472 // Returns the error response type for the given request type. |
| 472 // Returns -1 if |request_type| is not a valid request type. | 473 // Returns -1 if |request_type| is not a valid request type. |
| 473 int GetStunErrorResponseType(int request_type); | 474 int GetStunErrorResponseType(int request_type); |
| 474 | 475 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 624 case STUN_ATTR_ICE_CONTROLLING: return STUN_VALUE_UINT64; | 625 case STUN_ATTR_ICE_CONTROLLING: return STUN_VALUE_UINT64; |
| 625 default: return StunMessage::GetAttributeValueType(type); | 626 default: return StunMessage::GetAttributeValueType(type); |
| 626 } | 627 } |
| 627 } | 628 } |
| 628 virtual StunMessage* CreateNew() const { return new IceMessage(); } | 629 virtual StunMessage* CreateNew() const { return new IceMessage(); } |
| 629 }; | 630 }; |
| 630 | 631 |
| 631 } // namespace cricket | 632 } // namespace cricket |
| 632 | 633 |
| 633 #endif // WEBRTC_P2P_BASE_STUN_H_ | 634 #endif // WEBRTC_P2P_BASE_STUN_H_ |
| OLD | NEW |