GNUnet  0.10.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 81 of file nat_stun.h.

81  {
82  INVALID_CLASS = 0,
83  STUN_REQUEST = 0x0000,
84  STUN_INDICATION = 0x0001,
85  STUN_RESPONSE = 0x0002,
86  STUN_ERROR_RESPONSE = 0x0003
87 };

◆ 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 89 of file nat_stun.h.

89  {
90  INVALID_METHOD = 0,
91  STUN_BINDING = 0x0001,
92  STUN_SHARED_SECRET = 0x0002,
93  STUN_ALLOCATE = 0x0003,
94  STUN_REFRESH = 0x0004,
95  STUN_SEND = 0x0006,
96  STUN_DATA = 0x0007,
97  STUN_CREATE_PERMISSION = 0x0008,
98  STUN_CHANNEL_BIND = 0x0009
99 };

◆ 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 106 of file nat_stun.h.

106  {
107  STUN_MAPPED_ADDRESS = 0x0001,
108  STUN_RESPONSE_ADDRESS = 0x0002,
109  STUN_CHANGE_ADDRESS = 0x0003,
110  STUN_SOURCE_ADDRESS = 0x0004,
111  STUN_CHANGED_ADDRESS = 0x0005,
112  STUN_USERNAME = 0x0006,
113  STUN_PASSWORD = 0x0007,
114  STUN_MESSAGE_INTEGRITY = 0x0008,
115  STUN_ERROR_CODE = 0x0009,
116  STUN_UNKNOWN_ATTRIBUTES = 0x000a,
117  STUN_REFLECTED_FROM = 0x000b,
118  STUN_REALM = 0x0014,
119  STUN_NONCE = 0x0015,
120  STUN_XOR_MAPPED_ADDRESS = 0x0020,
121  STUN_MS_VERSION = 0x8008,
123  STUN_SOFTWARE = 0x8022,
124  STUN_ALTERNATE_SERVER = 0x8023,
125  STUN_FINGERPRINT = 0x8028
126 };

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 136 of file nat_stun.h.

Referenced by stun_msg2str().

137 {
138  /* Sorry for the magic, but this maps the class according to rfc5245 */
139  return (enum StunClasses)((msg & 0x0010) >> 4) | ((msg & 0x0100) >> 7);
140 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
StunClasses
STUN message classes.
Definition: nat_stun.h:81
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 150 of file nat_stun.h.

References GNUNET_UNUSED.

Referenced by stun_msg2str().

151 {
152  return (enum StunMethods)(msg & 0x000f) | ((msg & 0x00e0) >> 1) | ((msg & 0x3e00) >> 2);
153 }
struct GNUNET_MessageHeader * msg
Definition: 005.c:2
StunMethods
Definition: nat_stun.h:89
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 164 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_().

165 {
166  static const struct {
167  enum StunClasses value;
168  const char *name;
169  } classes[] = {
170  { STUN_REQUEST, "Request" },
171  { STUN_INDICATION, "Indication" },
172  { STUN_RESPONSE, "Response" },
173  { STUN_ERROR_RESPONSE, "Error Response" },
174  { INVALID_CLASS, NULL }
175  };
176  static const struct {
177  enum StunMethods value;
178  const char *name;
179  } methods[] = {
180  { STUN_BINDING, "Binding" },
181  { INVALID_METHOD, NULL }
182  };
183  static char result[64];
184  const char *msg_class = NULL;
185  const char *method = NULL;
186  enum StunClasses cvalue;
187  enum StunMethods mvalue;
188 
189  cvalue = decode_class(msg);
190  for (unsigned int i = 0; classes[i].name; i++)
191  if (classes[i].value == cvalue)
192  {
193  msg_class = classes[i].name;
194  break;
195  }
196  mvalue = decode_method(msg);
197  for (unsigned int i = 0; methods[i].name; i++)
198  if (methods[i].value == mvalue)
199  {
200  method = methods[i].name;
201  break;
202  }
203  GNUNET_snprintf(result,
204  sizeof(result),
205  "%s %s",
206  method ? : "Unknown Method",
207  msg_class ? : "Unknown Class Message");
208  return result;
209 }
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:136
StunMethods
Definition: nat_stun.h:89
static char * value
Value of the record to add/remove.
static int result
Global testing status.
const char * name
StunClasses
STUN message classes.
Definition: nat_stun.h:81
static enum StunMethods decode_method(int msg)
Convert a message to a StunMethod.
Definition: nat_stun.h:150
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 220 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.

221 {
222  static const struct {
223  enum StunAttributes value;
224  const char *name;
225  } attrs[] = {
226  { STUN_MAPPED_ADDRESS, "Mapped Address" },
227  { STUN_RESPONSE_ADDRESS, "Response Address" },
228  { STUN_CHANGE_ADDRESS, "Change Address" },
229  { STUN_SOURCE_ADDRESS, "Source Address" },
230  { STUN_CHANGED_ADDRESS, "Changed Address" },
231  { STUN_USERNAME, "Username" },
232  { STUN_PASSWORD, "Password" },
233  { STUN_MESSAGE_INTEGRITY, "Message Integrity" },
234  { STUN_ERROR_CODE, "Error Code" },
235  { STUN_UNKNOWN_ATTRIBUTES, "Unknown Attributes" },
236  { STUN_REFLECTED_FROM, "Reflected From" },
237  { STUN_REALM, "Realm" },
238  { STUN_NONCE, "Nonce" },
239  { STUN_XOR_MAPPED_ADDRESS, "XOR Mapped Address" },
240  { STUN_MS_VERSION, "MS Version" },
241  { STUN_MS_XOR_MAPPED_ADDRESS, "MS XOR Mapped Address" },
242  { STUN_SOFTWARE, "Software" },
243  { STUN_ALTERNATE_SERVER, "Alternate Server" },
244  { STUN_FINGERPRINT, "Fingerprint" },
245  { 0, NULL }
246  };
247 
248  for (unsigned int i = 0; attrs[i].name; i++)
249  if (attrs[i].value == msg)
250  return attrs[i].name;
251  return "Unknown Attribute";
252 }
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:106
const char * name