/usr/include/re/re_stun.h is in libre-dev 0.5.0-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | /**
* @file re_stun.h Session Traversal Utilities for (NAT) (STUN)
*
* Copyright (C) 2010 Creytiv.com
*/
/** STUN Protocol values */
enum {
STUN_PORT = 3478, /**< STUN Port number */
STUNS_PORT = 5349, /**< STUNS Port number */
STUN_HEADER_SIZE = 20, /**< Number of bytes in header */
STUN_ATTR_HEADER_SIZE = 4, /**< Size of attribute header */
STUN_TID_SIZE = 12, /**< Number of bytes in transaction ID */
STUN_DEFAULT_RTO = 500, /**< Default Retrans Timeout in [ms] */
STUN_DEFAULT_RC = 7, /**< Default number of retransmits */
STUN_DEFAULT_RM = 16, /**< Wait time after last request is sent */
STUN_DEFAULT_TI = 39500 /**< Reliable timeout */
};
/** STUN Address Family */
enum stun_af {
STUN_AF_IPv4 = 0x01, /**< IPv4 Address Family */
STUN_AF_IPv6 = 0x02 /**< IPv6 Address Family */
};
/** STUN Transport */
enum stun_transp {
STUN_TRANSP_UDP = IPPROTO_UDP, /**< UDP-transport (struct udp_sock) */
STUN_TRANSP_TCP = IPPROTO_TCP, /**< TCP-transport (struct tcp_conn) */
STUN_TRANSP_DTLS, /**< DTLS-transport (struct tls_conn) */
};
/** STUN Methods */
enum stun_method {
STUN_METHOD_BINDING = 0x001,
STUN_METHOD_ALLOCATE = 0x003,
STUN_METHOD_REFRESH = 0x004,
STUN_METHOD_SEND = 0x006,
STUN_METHOD_DATA = 0x007,
STUN_METHOD_CREATEPERM = 0x008,
STUN_METHOD_CHANBIND = 0x009,
};
/** STUN Message class */
enum stun_msg_class {
STUN_CLASS_REQUEST = 0x0, /**< STUN Request */
STUN_CLASS_INDICATION = 0x1, /**< STUN Indication */
STUN_CLASS_SUCCESS_RESP = 0x2, /**< STUN Success Response */
STUN_CLASS_ERROR_RESP = 0x3 /**< STUN Error Response */
};
/** STUN Attributes */
enum stun_attrib {
/* Comprehension-required range (0x0000-0x7FFF) */
STUN_ATTR_MAPPED_ADDR = 0x0001,
STUN_ATTR_CHANGE_REQ = 0x0003,
STUN_ATTR_USERNAME = 0x0006,
STUN_ATTR_MSG_INTEGRITY = 0x0008,
STUN_ATTR_ERR_CODE = 0x0009,
STUN_ATTR_UNKNOWN_ATTR = 0x000a,
STUN_ATTR_CHANNEL_NUMBER = 0x000c,
STUN_ATTR_LIFETIME = 0x000d,
STUN_ATTR_XOR_PEER_ADDR = 0x0012,
STUN_ATTR_DATA = 0x0013,
STUN_ATTR_REALM = 0x0014,
STUN_ATTR_NONCE = 0x0015,
STUN_ATTR_XOR_RELAY_ADDR = 0x0016,
STUN_ATTR_REQ_ADDR_FAMILY = 0x0017,
STUN_ATTR_EVEN_PORT = 0x0018,
STUN_ATTR_REQ_TRANSPORT = 0x0019,
STUN_ATTR_DONT_FRAGMENT = 0x001a,
STUN_ATTR_XOR_MAPPED_ADDR = 0x0020,
STUN_ATTR_RSV_TOKEN = 0x0022,
STUN_ATTR_PRIORITY = 0x0024,
STUN_ATTR_USE_CAND = 0x0025,
STUN_ATTR_PADDING = 0x0026,
STUN_ATTR_RESP_PORT = 0x0027,
/* Comprehension-optional range (0x8000-0xFFFF) */
STUN_ATTR_SOFTWARE = 0x8022,
STUN_ATTR_ALT_SERVER = 0x8023,
STUN_ATTR_FINGERPRINT = 0x8028,
STUN_ATTR_CONTROLLED = 0x8029,
STUN_ATTR_CONTROLLING = 0x802a,
STUN_ATTR_RESP_ORIGIN = 0x802b,
STUN_ATTR_OTHER_ADDR = 0x802c,
};
struct stun_change_req {
bool ip;
bool port;
};
struct stun_errcode {
uint16_t code;
char *reason;
};
struct stun_unknown_attr {
uint16_t typev[8];
uint32_t typec;
};
struct stun_even_port {
bool r;
};
/** Defines a STUN attribute */
struct stun_attr {
struct le le;
uint16_t type;
union {
/* generic types */
struct sa sa;
char *str;
uint64_t uint64;
uint32_t uint32;
uint16_t uint16;
uint8_t uint8;
struct mbuf mb;
/* actual attributes */
struct sa mapped_addr;
struct stun_change_req change_req;
char *username;
uint8_t msg_integrity[20];
struct stun_errcode err_code;
struct stun_unknown_attr unknown_attr;
uint16_t channel_number;
uint32_t lifetime;
struct sa xor_peer_addr;
struct mbuf data;
char *realm;
char *nonce;
struct sa xor_relay_addr;
uint8_t req_addr_family;
struct stun_even_port even_port;
uint8_t req_transport;
struct sa xor_mapped_addr;
uint64_t rsv_token;
uint32_t priority;
struct mbuf padding;
uint16_t resp_port;
char *software;
struct sa alt_server;
uint32_t fingerprint;
uint64_t controlled;
uint64_t controlling;
struct sa resp_origin;
struct sa other_addr;
} v;
};
/** STUN Configuration */
struct stun_conf {
uint32_t rto; /**< RTO Retransmission TimeOut [ms] */
uint32_t rc; /**< Rc Retransmission count (default 7) */
uint32_t rm; /**< Rm Max retransmissions (default 16) */
uint32_t ti; /**< Ti Timeout for reliable transport [ms] */
uint8_t tos; /**< Type-of-service field */
};
extern const char *stun_software;
struct stun;
struct stun_msg;
struct stun_ctrans;
typedef void(stun_resp_h)(int err, uint16_t scode, const char *reason,
const struct stun_msg *msg, void *arg);
typedef void(stun_ind_h)(struct stun_msg *msg, void *arg);
typedef bool(stun_attr_h)(const struct stun_attr *attr, void *arg);
int stun_alloc(struct stun **stunp, const struct stun_conf *conf,
stun_ind_h *indh, void *arg);
struct stun_conf *stun_conf(struct stun *stun);
int stun_send(int proto, void *sock, const struct sa *dst, struct mbuf *mb);
int stun_recv(struct stun *stun, struct mbuf *mb);
int stun_ctrans_recv(struct stun *stun, const struct stun_msg *msg,
const struct stun_unknown_attr *ua);
struct re_printf;
int stun_debug(struct re_printf *pf, const struct stun *stun);
int stun_request(struct stun_ctrans **ctp, struct stun *stun, int proto,
void *sock, const struct sa *dst, size_t presz,
uint16_t method, const uint8_t *key, size_t keylen, bool fp,
stun_resp_h *resph, void *arg, uint32_t attrc, ...);
int stun_reply(int proto, void *sock, const struct sa *dst, size_t presz,
const struct stun_msg *req, const uint8_t *key,
size_t keylen, bool fp, uint32_t attrc, ...);
int stun_ereply(int proto, void *sock, const struct sa *dst, size_t presz,
const struct stun_msg *req, uint16_t scode,
const char *reason, const uint8_t *key, size_t keylen,
bool fp, uint32_t attrc, ...);
int stun_indication(int proto, void *sock, const struct sa *dst, size_t presz,
uint16_t method, const uint8_t *key, size_t keylen,
bool fp, uint32_t attrc, ...);
int stun_msg_vencode(struct mbuf *mb, uint16_t method, uint8_t cls,
const uint8_t *tid, const struct stun_errcode *ec,
const uint8_t *key, size_t keylen, bool fp,
uint8_t padding, uint32_t attrc, va_list ap);
int stun_msg_encode(struct mbuf *mb, uint16_t method, uint8_t cls,
const uint8_t *tid, const struct stun_errcode *ec,
const uint8_t *key, size_t keylen, bool fp,
uint8_t padding, uint32_t attrc, ...);
int stun_msg_decode(struct stun_msg **msgpp, struct mbuf *mb,
struct stun_unknown_attr *ua);
uint16_t stun_msg_type(const struct stun_msg *msg);
uint16_t stun_msg_class(const struct stun_msg *msg);
uint16_t stun_msg_method(const struct stun_msg *msg);
bool stun_msg_mcookie(const struct stun_msg *msg);
const uint8_t *stun_msg_tid(const struct stun_msg *msg);
struct stun_attr *stun_msg_attr(const struct stun_msg *msg, uint16_t type);
struct stun_attr *stun_msg_attr_apply(const struct stun_msg *msg,
stun_attr_h *h, void *arg);
int stun_msg_chk_mi(const struct stun_msg *msg, const uint8_t *key,
size_t keylen);
int stun_msg_chk_fingerprint(const struct stun_msg *msg);
void stun_msg_dump(const struct stun_msg *msg);
const char *stun_class_name(uint16_t cls);
const char *stun_method_name(uint16_t method);
const char *stun_attr_name(uint16_t type);
const char *stun_transp_name(enum stun_transp tp);
/* DNS Discovery of a STUN Server */
extern const char *stun_proto_udp;
extern const char *stun_proto_tcp;
extern const char *stun_usage_binding;
extern const char *stuns_usage_binding;
extern const char *stun_usage_relay;
extern const char *stuns_usage_relay;
extern const char *stun_usage_behavior;
extern const char *stuns_usage_behavior;
/**
* Defines the STUN Server Discovery handler
*
* @param err Errorcode
* @param srv IP Address and port of STUN Server
* @param arg Handler argument
*/
typedef void (stun_dns_h)(int err, const struct sa *srv, void *arg);
struct stun_dns;
struct dnsc;
int stun_server_discover(struct stun_dns **dnsp, struct dnsc *dnsc,
const char *service, const char *proto,
int af, const char *domain, uint16_t port,
stun_dns_h *dnsh, void *arg);
/* NAT Keepalives */
struct stun_keepalive;
/**
* Defines the STUN Keepalive Mapped-Address handler
*
* @param err Errorcode
* @param map Mapped Address
* @param arg Handler argument
*/
typedef void (stun_mapped_addr_h)(int err, const struct sa *map, void *arg);
int stun_keepalive_alloc(struct stun_keepalive **skap,
int proto, void *sock, int layer,
const struct sa *dst, const struct stun_conf *conf,
stun_mapped_addr_h *mah, void *arg);
void stun_keepalive_enable(struct stun_keepalive *ska, uint32_t interval);
/* STUN Reason Phrase */
extern const char *stun_reason_300;
extern const char *stun_reason_400;
extern const char *stun_reason_401;
extern const char *stun_reason_403;
extern const char *stun_reason_420;
extern const char *stun_reason_437;
extern const char *stun_reason_438;
extern const char *stun_reason_440;
extern const char *stun_reason_441;
extern const char *stun_reason_442;
extern const char *stun_reason_443;
extern const char *stun_reason_486;
extern const char *stun_reason_500;
extern const char *stun_reason_508;
|