GNUnet  0.11.x
Data Structures | Macros | Enumerations | Functions
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

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 };

◆ 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 {
96  INVALID_METHOD = 0,
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 };

◆ 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,
123  STUN_UNKNOWN_ATTRIBUTES = 0x000a,
124  STUN_REFLECTED_FROM = 0x000b,
125  STUN_REALM = 0x0014,
126  STUN_NONCE = 0x0015,
127  STUN_XOR_MAPPED_ADDRESS = 0x0020,
128  STUN_MS_VERSION = 0x8008,
130  STUN_SOFTWARE = 0x8022,
131  STUN_ALTERNATE_SERVER = 0x8023,
132  STUN_FINGERPRINT = 0x8028
133 };

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.

Referenced by stun_msg2str().

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:85
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.

References GNUNET_UNUSED.

Referenced by stun_msg2str().

158 {
159  return (enum StunMethods) (msg & 0x000f) | ((msg & 0x00e0) >> 1) | ((msg
160  & 0x3e00)
161  >> 2);
162 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
StunMethods
Definition: nat_stun.h:94
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.

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

Referenced by GNUNET_NAT_stun_handle_packet_().

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  }
214  GNUNET_snprintf (result,
215  sizeof(result),
216  "%s %s",
217  method ? : "Unknown Method",
218  msg_class ? : "Unknown Class Message");
219  return result;
220 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
int GNUNET_snprintf(char *buf, size_t size, const char *format,...)
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
StunMethods
Definition: nat_stun.h:94
static char * value
Value of the record to add/remove.
static int result
Global testing status.
StunClasses
STUN message classes.
Definition: nat_stun.h:85
const char * name
static enum StunMethods decode_method(int msg)
Convert a message to a StunMethod.
Definition: nat_stun.h:157
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.

References 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.

232 {
233  static const struct
234  {
235  enum StunAttributes value;
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 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
static char * value
Value of the record to add/remove.
StunAttributes
Basic attribute types in stun messages.
Definition: nat_stun.h:112
const char * name