GNUnet 0.21.1
nat_stun.h File Reference

Message types for STUN server resolution. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  stun_trans_id
 
struct  stun_header
 
struct  stun_attr
 
struct  stun_addr
 The format normally used for addresses carried by STUN messages. More...
 

Macros

#define STUN_IGNORE   (0)
 
#define STUN_ACCEPT   (1)
 
#define STUN_MAGIC_COOKIE   0x2112A442
 

Enumerations

enum  StunClasses {
  INVALID_CLASS = 0 , STUN_REQUEST = 0x0000 , STUN_INDICATION = 0x0001 , STUN_RESPONSE = 0x0002 ,
  STUN_ERROR_RESPONSE = 0x0003
}
 STUN message classes. More...
 
enum  StunMethods {
  INVALID_METHOD = 0 , STUN_BINDING = 0x0001 , STUN_SHARED_SECRET = 0x0002 , STUN_ALLOCATE = 0x0003 ,
  STUN_REFRESH = 0x0004 , STUN_SEND = 0x0006 , STUN_DATA = 0x0007 , STUN_CREATE_PERMISSION = 0x0008 ,
  STUN_CHANNEL_BIND = 0x0009
}
 
enum  StunAttributes {
  STUN_MAPPED_ADDRESS = 0x0001 , STUN_RESPONSE_ADDRESS = 0x0002 , STUN_CHANGE_ADDRESS = 0x0003 , STUN_SOURCE_ADDRESS = 0x0004 ,
  STUN_CHANGED_ADDRESS = 0x0005 , STUN_USERNAME = 0x0006 , STUN_PASSWORD = 0x0007 , STUN_MESSAGE_INTEGRITY = 0x0008 ,
  STUN_ERROR_CODE = 0x0009 , STUN_UNKNOWN_ATTRIBUTES = 0x000a , STUN_REFLECTED_FROM = 0x000b , STUN_REALM = 0x0014 ,
  STUN_NONCE = 0x0015 , STUN_XOR_MAPPED_ADDRESS = 0x0020 , STUN_MS_VERSION = 0x8008 , STUN_MS_XOR_MAPPED_ADDRESS = 0x8020 ,
  STUN_SOFTWARE = 0x8022 , STUN_ALTERNATE_SERVER = 0x8023 , STUN_FINGERPRINT = 0x8028
}
 Basic attribute types in stun messages. More...
 

Functions

static enum StunClasses decode_class (int msg)
 Convert a message to a StunClass. More...
 
static enum StunMethods decode_method (int msg)
 Convert a message to a StunMethod. More...
 
static const char * stun_msg2str (int msg)
 Print a class and method from a STUN message. More...
 
static const char * stun_attr2str (enum StunAttributes msg)
 Print attribute name. More...
 

Detailed Description

Message types for STUN server resolution.

Testcase for STUN library

Author
Bruno Souza Cabral
Mark Spencer (Original code borrowed from Asterisk)
Christian Grothoff

Definition in file nat_stun.h.

Macro Definition Documentation

◆ STUN_IGNORE

#define STUN_IGNORE   (0)

Definition at line 31 of file nat_stun.h.

◆ STUN_ACCEPT

#define STUN_ACCEPT   (1)

Definition at line 32 of file nat_stun.h.

◆ STUN_MAGIC_COOKIE

#define STUN_MAGIC_COOKIE   0x2112A442

Definition at line 34 of file nat_stun.h.

Enumeration Type Documentation

◆ StunClasses

STUN message classes.

Enumerator
INVALID_CLASS 
STUN_REQUEST 
STUN_INDICATION 
STUN_RESPONSE 
STUN_ERROR_RESPONSE 

Definition at line 85 of file nat_stun.h.

86{
87 INVALID_CLASS = 0,
88 STUN_REQUEST = 0x0000,
89 STUN_INDICATION = 0x0001,
90 STUN_RESPONSE = 0x0002,
91 STUN_ERROR_RESPONSE = 0x0003
92};
@ INVALID_CLASS
Definition: nat_stun.h:87
@ STUN_REQUEST
Definition: nat_stun.h:88
@ STUN_INDICATION
Definition: nat_stun.h:89
@ STUN_ERROR_RESPONSE
Definition: nat_stun.h:91
@ STUN_RESPONSE
Definition: nat_stun.h:90

◆ StunMethods

Enumerator
INVALID_METHOD 
STUN_BINDING 
STUN_SHARED_SECRET 
STUN_ALLOCATE 
STUN_REFRESH 
STUN_SEND 
STUN_DATA 
STUN_CREATE_PERMISSION 
STUN_CHANNEL_BIND 

Definition at line 94 of file nat_stun.h.

95{
97 STUN_BINDING = 0x0001,
98 STUN_SHARED_SECRET = 0x0002,
99 STUN_ALLOCATE = 0x0003,
100 STUN_REFRESH = 0x0004,
101 STUN_SEND = 0x0006,
102 STUN_DATA = 0x0007,
103 STUN_CREATE_PERMISSION = 0x0008,
104 STUN_CHANNEL_BIND = 0x0009
105};
@ STUN_REFRESH
Definition: nat_stun.h:100
@ STUN_CHANNEL_BIND
Definition: nat_stun.h:104
@ STUN_ALLOCATE
Definition: nat_stun.h:99
@ STUN_BINDING
Definition: nat_stun.h:97
@ STUN_SEND
Definition: nat_stun.h:101
@ STUN_DATA
Definition: nat_stun.h:102
@ STUN_SHARED_SECRET
Definition: nat_stun.h:98
@ INVALID_METHOD
Definition: nat_stun.h:96
@ STUN_CREATE_PERMISSION
Definition: nat_stun.h:103

◆ StunAttributes

Basic attribute types in stun messages.

Messages can also contain custom attributes (codes above 0x7fff)

Enumerator
STUN_MAPPED_ADDRESS 
STUN_RESPONSE_ADDRESS 
STUN_CHANGE_ADDRESS 
STUN_SOURCE_ADDRESS 
STUN_CHANGED_ADDRESS 
STUN_USERNAME 
STUN_PASSWORD 
STUN_MESSAGE_INTEGRITY 
STUN_ERROR_CODE 
STUN_UNKNOWN_ATTRIBUTES 
STUN_REFLECTED_FROM 
STUN_REALM 
STUN_NONCE 
STUN_XOR_MAPPED_ADDRESS 
STUN_MS_VERSION 
STUN_MS_XOR_MAPPED_ADDRESS 
STUN_SOFTWARE 
STUN_ALTERNATE_SERVER 
STUN_FINGERPRINT 

Definition at line 112 of file nat_stun.h.

113{
114 STUN_MAPPED_ADDRESS = 0x0001,
115 STUN_RESPONSE_ADDRESS = 0x0002,
116 STUN_CHANGE_ADDRESS = 0x0003,
117 STUN_SOURCE_ADDRESS = 0x0004,
118 STUN_CHANGED_ADDRESS = 0x0005,
119 STUN_USERNAME = 0x0006,
120 STUN_PASSWORD = 0x0007,
121 STUN_MESSAGE_INTEGRITY = 0x0008,
122 STUN_ERROR_CODE = 0x0009,
124 STUN_REFLECTED_FROM = 0x000b,
125 STUN_REALM = 0x0014,
126 STUN_NONCE = 0x0015,
128 STUN_MS_VERSION = 0x8008,
130 STUN_SOFTWARE = 0x8022,
131 STUN_ALTERNATE_SERVER = 0x8023,
132 STUN_FINGERPRINT = 0x8028
133};
@ STUN_RESPONSE_ADDRESS
Definition: nat_stun.h:115
@ STUN_ERROR_CODE
Definition: nat_stun.h:122
@ STUN_UNKNOWN_ATTRIBUTES
Definition: nat_stun.h:123
@ STUN_MS_VERSION
Definition: nat_stun.h:128
@ STUN_MS_XOR_MAPPED_ADDRESS
Definition: nat_stun.h:129
@ STUN_PASSWORD
Definition: nat_stun.h:120
@ STUN_SOFTWARE
Definition: nat_stun.h:130
@ STUN_FINGERPRINT
Definition: nat_stun.h:132
@ STUN_CHANGED_ADDRESS
Definition: nat_stun.h:118
@ STUN_SOURCE_ADDRESS
Definition: nat_stun.h:117
@ STUN_CHANGE_ADDRESS
Definition: nat_stun.h:116
@ STUN_REFLECTED_FROM
Definition: nat_stun.h:124
@ STUN_USERNAME
Definition: nat_stun.h:119
@ STUN_NONCE
Definition: nat_stun.h:126
@ STUN_MESSAGE_INTEGRITY
Definition: nat_stun.h:121
@ STUN_ALTERNATE_SERVER
Definition: nat_stun.h:131
@ STUN_REALM
Definition: nat_stun.h:125
@ STUN_MAPPED_ADDRESS
Definition: nat_stun.h:114
@ STUN_XOR_MAPPED_ADDRESS
Definition: nat_stun.h:127

Function Documentation

◆ decode_class()

static enum StunClasses decode_class ( int  msg)
static

Convert a message to a StunClass.

Parameters
msgthe received message
Returns
the converted StunClass

Definition at line 143 of file nat_stun.h.

144{
145 /* Sorry for the magic, but this maps the class according to rfc5245 */
146 return (enum StunClasses) ((msg & 0x0010) >> 4) | ((msg & 0x0100) >> 7);
147}
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
StunClasses
STUN message classes.
Definition: nat_stun.h:86

References msg.

Referenced by stun_msg2str().

Here is the caller graph for this function:

◆ decode_method()

static enum StunMethods decode_method ( int  msg)
static

Convert a message to a StunMethod.

Parameters
msgthe received message
Returns
the converted StunMethod

Definition at line 157 of file nat_stun.h.

158{
159 return (enum StunMethods) (msg & 0x000f) | ((msg & 0x00e0) >> 1) | ((msg
160 & 0x3e00)
161 >> 2);
162}
StunMethods
Definition: nat_stun.h:95

References msg.

Referenced by stun_msg2str().

Here is the caller graph for this function:

◆ stun_msg2str()

static const char * stun_msg2str ( int  msg)
static

Print a class and method from a STUN message.

Parameters
msg
Returns
string with the message class and method

Definition at line 173 of file nat_stun.h.

174{
175 static const struct
176 {
177 enum StunClasses value;
178 const char *name;
179 } classes[] = {
180 { STUN_REQUEST, "Request" },
181 { STUN_INDICATION, "Indication" },
182 { STUN_RESPONSE, "Response" },
183 { STUN_ERROR_RESPONSE, "Error Response" },
184 { INVALID_CLASS, NULL }
185 };
186 static const struct
187 {
188 enum StunMethods value;
189 const char *name;
190 } methods[] = {
191 { STUN_BINDING, "Binding" },
192 { INVALID_METHOD, NULL }
193 };
194 static char result[64];
195 const char *msg_class = NULL;
196 const char *method = NULL;
197 enum StunClasses cvalue;
198 enum StunMethods mvalue;
199
200 cvalue = decode_class (msg);
201 for (unsigned int i = 0; classes[i].name; i++)
202 if (classes[i].value == cvalue)
203 {
204 msg_class = classes[i].name;
205 break;
206 }
207 mvalue = decode_method (msg);
208 for (unsigned int i = 0; methods[i].name; i++)
209 if (methods[i].value == mvalue)
210 {
211 method = methods[i].name;
212 break;
213 }
215 sizeof(result),
216 "%s %s",
217 method ? : "Unknown Method",
218 msg_class ? : "Unknown Class Message");
219 return result;
220}
static char * name
Name (label) of the records to list.
static char * value
Value of the record to add/remove.
static int result
Global testing status.
int GNUNET_snprintf(char *buf, size_t size, const char *format,...) __attribute__((format(printf
Like snprintf, just aborts if the buffer is of insufficient size.
static enum StunClasses decode_class(int msg)
Convert a message to a StunClass.
Definition: nat_stun.h:143
static enum StunMethods decode_method(int msg)
Convert a message to a StunMethod.
Definition: nat_stun.h:157

References decode_class(), decode_method(), GNUNET_snprintf(), INVALID_CLASS, INVALID_METHOD, msg, name, result, STUN_BINDING, STUN_ERROR_RESPONSE, STUN_INDICATION, STUN_REQUEST, STUN_RESPONSE, and value.

Referenced by GNUNET_NAT_stun_handle_packet_().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ stun_attr2str()

static const char * stun_attr2str ( enum StunAttributes  msg)
static

Print attribute name.

Parameters
msgwith a attribute type
Returns
string with the attribute name

Definition at line 231 of file nat_stun.h.

232{
233 static const struct
234 {
236 const char *name;
237 } attrs[] = {
238 { STUN_MAPPED_ADDRESS, "Mapped Address" },
239 { STUN_RESPONSE_ADDRESS, "Response Address" },
240 { STUN_CHANGE_ADDRESS, "Change Address" },
241 { STUN_SOURCE_ADDRESS, "Source Address" },
242 { STUN_CHANGED_ADDRESS, "Changed Address" },
243 { STUN_USERNAME, "Username" },
244 { STUN_PASSWORD, "Password" },
245 { STUN_MESSAGE_INTEGRITY, "Message Integrity" },
246 { STUN_ERROR_CODE, "Error Code" },
247 { STUN_UNKNOWN_ATTRIBUTES, "Unknown Attributes" },
248 { STUN_REFLECTED_FROM, "Reflected From" },
249 { STUN_REALM, "Realm" },
250 { STUN_NONCE, "Nonce" },
251 { STUN_XOR_MAPPED_ADDRESS, "XOR Mapped Address" },
252 { STUN_MS_VERSION, "MS Version" },
253 { STUN_MS_XOR_MAPPED_ADDRESS, "MS XOR Mapped Address" },
254 { STUN_SOFTWARE, "Software" },
255 { STUN_ALTERNATE_SERVER, "Alternate Server" },
256 { STUN_FINGERPRINT, "Fingerprint" },
257 { 0, NULL }
258 };
259
260 for (unsigned int i = 0; attrs[i].name; i++)
261 if (attrs[i].value == msg)
262 return attrs[i].name;
263 return "Unknown Attribute";
264}
StunAttributes
Basic attribute types in stun messages.
Definition: nat_stun.h:113

References msg, name, STUN_ALTERNATE_SERVER, STUN_CHANGE_ADDRESS, STUN_CHANGED_ADDRESS, STUN_ERROR_CODE, STUN_FINGERPRINT, STUN_MAPPED_ADDRESS, STUN_MESSAGE_INTEGRITY, STUN_MS_VERSION, STUN_MS_XOR_MAPPED_ADDRESS, STUN_NONCE, STUN_PASSWORD, STUN_REALM, STUN_REFLECTED_FROM, STUN_RESPONSE_ADDRESS, STUN_SOFTWARE, STUN_SOURCE_ADDRESS, STUN_UNKNOWN_ATTRIBUTES, STUN_USERNAME, STUN_XOR_MAPPED_ADDRESS, and value.