| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- // Copyright 2013, Cong Ding. All rights reserved.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //
- // Author: Cong Ding <[email protected]>
- package stun
- // Default server address and client name.
- const (
- DefaultServerAddr = "stun.ekiga.net:3478"
- DefaultSoftwareName = "StunClient"
- )
- const (
- magicCookie = 0x2112A442
- fingerprint = 0x5354554e
- )
- // NATType is the type of NAT described by int.
- type NATType int
- // NAT types.
- const (
- NATError NATType = iota
- NATUnknown
- NATNone
- NATBlocked
- NATFull
- NATSymetric
- NATRestricted
- NATPortRestricted
- NATSymetricUDPFirewall
- )
- var natStr map[NATType]string
- func init() {
- natStr = map[NATType]string{
- NATError: "Test failed",
- NATUnknown: "Unexpected response from the STUN server",
- NATBlocked: "UDP is blocked",
- NATFull: "Full cone NAT",
- NATSymetric: "Symetric NAT",
- NATRestricted: "Restricted NAT",
- NATPortRestricted: "Port restricted NAT",
- NATNone: "Not behind a NAT",
- NATSymetricUDPFirewall: "Symetric UDP firewall",
- }
- }
- func (nat NATType) String() string {
- if s, ok := natStr[nat]; ok {
- return s
- }
- return "Unknown"
- }
- const (
- errorTryAlternate = 300
- errorBadRequest = 400
- errorUnauthorized = 401
- errorUnassigned402 = 402
- errorForbidden = 403
- errorUnknownAttribute = 420
- errorAllocationMismatch = 437
- errorStaleNonce = 438
- errorUnassigned439 = 439
- errorAddressFamilyNotSupported = 440
- errorWrongCredentials = 441
- errorUnsupportedTransportProtocol = 442
- errorPeerAddressFamilyMismatch = 443
- errorConnectionAlreadyExists = 446
- errorConnectionTimeoutOrFailure = 447
- errorAllocationQuotaReached = 486
- errorRoleConflict = 487
- errorServerError = 500
- errorInsufficientCapacity = 508
- )
- const (
- attributeFamilyIPv4 = 0x01
- attributeFamilyIPV6 = 0x02
- )
- const (
- attributeMappedAddress = 0x0001
- attributeResponseAddress = 0x0002
- attributeChangeRequest = 0x0003
- attributeSourceAddress = 0x0004
- attributeChangedAddress = 0x0005
- attributeUsername = 0x0006
- attributePassword = 0x0007
- attributeMessageIntegrity = 0x0008
- attributeErrorCode = 0x0009
- attributeUnknownAttributes = 0x000a
- attributeReflectedFrom = 0x000b
- attributeChannelNumber = 0x000c
- attributeLifetime = 0x000d
- attributeBandwidth = 0x0010
- attributeXorPeerAddress = 0x0012
- attributeData = 0x0013
- attributeRealm = 0x0014
- attributeNonce = 0x0015
- attributeXorRelayedAddress = 0x0016
- attributeRequestedAddressFamily = 0x0017
- attributeEvenPort = 0x0018
- attributeRequestedTransport = 0x0019
- attributeDontFragment = 0x001a
- attributeXorMappedAddress = 0x0020
- attributeTimerVal = 0x0021
- attributeReservationToken = 0x0022
- attributePriority = 0x0024
- attributeUseCandidate = 0x0025
- attributePadding = 0x0026
- attributeResponsePort = 0x0027
- attributeConnectionID = 0x002a
- attributeXorMappedAddressExp = 0x8020
- attributeSoftware = 0x8022
- attributeAlternateServer = 0x8023
- attributeCacheTimeout = 0x8027
- attributeFingerprint = 0x8028
- attributeIceControlled = 0x8029
- attributeIceControlling = 0x802a
- attributeResponseOrigin = 0x802b
- attributeOtherAddress = 0x802c
- attributeEcnCheckStun = 0x802d
- attributeCiscoFlowdata = 0xc000
- )
- const (
- typeBindingRequest = 0x0001
- typeBindingResponse = 0x0101
- typeBindingErrorResponse = 0x0111
- typeSharedSecretRequest = 0x0002
- typeSharedSecretResponse = 0x0102
- typeSharedErrorResponse = 0x0112
- typeAllocate = 0x0003
- typeAllocateResponse = 0x0103
- typeAllocateErrorResponse = 0x0113
- typeRefresh = 0x0004
- typeRefreshResponse = 0x0104
- typeRefreshErrorResponse = 0x0114
- typeSend = 0x0006
- typeSendResponse = 0x0106
- typeSendErrorResponse = 0x0116
- typeData = 0x0007
- typeDataResponse = 0x0107
- typeDataErrorResponse = 0x0117
- typeCreatePermisiion = 0x0008
- typeCreatePermisiionResponse = 0x0108
- typeCreatePermisiionErrorResponse = 0x0118
- typeChannelBinding = 0x0009
- typeChannelBindingResponse = 0x0109
- typeChannelBindingErrorResponse = 0x0119
- typeConnect = 0x000a
- typeConnectResponse = 0x010a
- typeConnectErrorResponse = 0x011a
- typeConnectionBind = 0x000b
- typeConnectionBindResponse = 0x010b
- typeConnectionBindErrorResponse = 0x011b
- typeConnectionAttempt = 0x000c
- typeConnectionAttemptResponse = 0x010c
- typeConnectionAttemptErrorResponse = 0x011c
- )
|