mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 17:38:59 +00:00
spring cleaning
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4795 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -38,55 +38,58 @@ struct value_mapping {
|
||||
};
|
||||
|
||||
static const struct value_mapping PACKET_TYPES[] = {
|
||||
{ SWITCH_STUN_BINDING_REQUEST, "BINDING_REQUEST" },
|
||||
{ SWITCH_STUN_BINDING_RESPONSE, "BINDING_RESPONSE" },
|
||||
{ SWITCH_STUN_BINDING_ERROR_RESPONSE, "BINDING_ERROR_RESPONSE" },
|
||||
{ SWITCH_STUN_SHARED_SECRET_REQUEST, "SHARED_SECRET_REQUEST" },
|
||||
{ SWITCH_STUN_SHARED_SECRET_RESPONSE, "SHARED_SECRET_RESPONSE" },
|
||||
{ SWITCH_STUN_SHARED_SECRET_ERROR_RESPONSE, "SHARED_SECRET_ERROR_RESPONSE" },
|
||||
{ SWITCH_STUN_ALLOCATE_REQUEST, "ALLOCATE_REQUEST" },
|
||||
{ SWITCH_STUN_ALLOCATE_RESPONSE, "ALLOCATE_RESPONSE" },
|
||||
{ SWITCH_STUN_ALLOCATE_ERROR_RESPONSE, "ALLOCATE_ERROR_RESPONSE" },
|
||||
{ SWITCH_STUN_SEND_REQUEST, "SEND_REQUEST" },
|
||||
{ SWITCH_STUN_SEND_RESPONSE, "SEND_RESPONSE" },
|
||||
{ SWITCH_STUN_SEND_ERROR_RESPONSE, "SEND_ERROR_RESPONSE" },
|
||||
{ SWITCH_STUN_DATA_INDICATION , "DATA_INDICATION"},
|
||||
{ 0, 0} };
|
||||
{SWITCH_STUN_BINDING_REQUEST, "BINDING_REQUEST"},
|
||||
{SWITCH_STUN_BINDING_RESPONSE, "BINDING_RESPONSE"},
|
||||
{SWITCH_STUN_BINDING_ERROR_RESPONSE, "BINDING_ERROR_RESPONSE"},
|
||||
{SWITCH_STUN_SHARED_SECRET_REQUEST, "SHARED_SECRET_REQUEST"},
|
||||
{SWITCH_STUN_SHARED_SECRET_RESPONSE, "SHARED_SECRET_RESPONSE"},
|
||||
{SWITCH_STUN_SHARED_SECRET_ERROR_RESPONSE, "SHARED_SECRET_ERROR_RESPONSE"},
|
||||
{SWITCH_STUN_ALLOCATE_REQUEST, "ALLOCATE_REQUEST"},
|
||||
{SWITCH_STUN_ALLOCATE_RESPONSE, "ALLOCATE_RESPONSE"},
|
||||
{SWITCH_STUN_ALLOCATE_ERROR_RESPONSE, "ALLOCATE_ERROR_RESPONSE"},
|
||||
{SWITCH_STUN_SEND_REQUEST, "SEND_REQUEST"},
|
||||
{SWITCH_STUN_SEND_RESPONSE, "SEND_RESPONSE"},
|
||||
{SWITCH_STUN_SEND_ERROR_RESPONSE, "SEND_ERROR_RESPONSE"},
|
||||
{SWITCH_STUN_DATA_INDICATION, "DATA_INDICATION"},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
static const struct value_mapping ATTR_TYPES[] = {
|
||||
{ SWITCH_STUN_ATTR_MAPPED_ADDRESS, "MAPPED_ADDRESS" },
|
||||
{ SWITCH_STUN_ATTR_RESPONSE_ADDRESS, "RESPONSE_ADDRESS" },
|
||||
{ SWITCH_STUN_ATTR_CHANGE_REQUEST, "CHANGE_REQUEST" },
|
||||
{ SWITCH_STUN_ATTR_SOURCE_ADDRESS, "SOURCE_ADDRESS" },
|
||||
{ SWITCH_STUN_ATTR_CHANGED_ADDRESS, "CHANGED_ADDRESS" },
|
||||
{ SWITCH_STUN_ATTR_USERNAME, "USERNAME" },
|
||||
{ SWITCH_STUN_ATTR_PASSWORD, "PASSWORD" },
|
||||
{ SWITCH_STUN_ATTR_MESSAGE_INTEGRITY, "MESSAGE_INTEGRITY" },
|
||||
{ SWITCH_STUN_ATTR_ERROR_CODE, "ERROR_CODE" },
|
||||
{ SWITCH_STUN_ATTR_UNKNOWN_ATTRIBUTES, "UNKNOWN_ATTRIBUTES" },
|
||||
{ SWITCH_STUN_ATTR_REFLECTED_FROM, "REFLECTED_FROM" },
|
||||
{ SWITCH_STUN_ATTR_TRANSPORT_PREFERENCES, "TRANSPORT_PREFERENCES" },
|
||||
{ SWITCH_STUN_ATTR_LIFETIME, "LIFETIME" },
|
||||
{ SWITCH_STUN_ATTR_ALTERNATE_SERVER, "ALTERNATE_SERVER" },
|
||||
{ SWITCH_STUN_ATTR_MAGIC_COOKIE, "MAGIC_COOKIE" },
|
||||
{ SWITCH_STUN_ATTR_BANDWIDTH, "BANDWIDTH" },
|
||||
{ SWITCH_STUN_ATTR_DESTINATION_ADDRESS, "DESTINATION_ADDRESS" },
|
||||
{ SWITCH_STUN_ATTR_SOURCE_ADDRESS2, "SOURCE_ADDRESS2" },
|
||||
{ SWITCH_STUN_ATTR_DATA, "DATA" },
|
||||
{ SWITCH_STUN_ATTR_OPTIONS, "OPTIONS" },
|
||||
{ 0, 0} };
|
||||
{SWITCH_STUN_ATTR_MAPPED_ADDRESS, "MAPPED_ADDRESS"},
|
||||
{SWITCH_STUN_ATTR_RESPONSE_ADDRESS, "RESPONSE_ADDRESS"},
|
||||
{SWITCH_STUN_ATTR_CHANGE_REQUEST, "CHANGE_REQUEST"},
|
||||
{SWITCH_STUN_ATTR_SOURCE_ADDRESS, "SOURCE_ADDRESS"},
|
||||
{SWITCH_STUN_ATTR_CHANGED_ADDRESS, "CHANGED_ADDRESS"},
|
||||
{SWITCH_STUN_ATTR_USERNAME, "USERNAME"},
|
||||
{SWITCH_STUN_ATTR_PASSWORD, "PASSWORD"},
|
||||
{SWITCH_STUN_ATTR_MESSAGE_INTEGRITY, "MESSAGE_INTEGRITY"},
|
||||
{SWITCH_STUN_ATTR_ERROR_CODE, "ERROR_CODE"},
|
||||
{SWITCH_STUN_ATTR_UNKNOWN_ATTRIBUTES, "UNKNOWN_ATTRIBUTES"},
|
||||
{SWITCH_STUN_ATTR_REFLECTED_FROM, "REFLECTED_FROM"},
|
||||
{SWITCH_STUN_ATTR_TRANSPORT_PREFERENCES, "TRANSPORT_PREFERENCES"},
|
||||
{SWITCH_STUN_ATTR_LIFETIME, "LIFETIME"},
|
||||
{SWITCH_STUN_ATTR_ALTERNATE_SERVER, "ALTERNATE_SERVER"},
|
||||
{SWITCH_STUN_ATTR_MAGIC_COOKIE, "MAGIC_COOKIE"},
|
||||
{SWITCH_STUN_ATTR_BANDWIDTH, "BANDWIDTH"},
|
||||
{SWITCH_STUN_ATTR_DESTINATION_ADDRESS, "DESTINATION_ADDRESS"},
|
||||
{SWITCH_STUN_ATTR_SOURCE_ADDRESS2, "SOURCE_ADDRESS2"},
|
||||
{SWITCH_STUN_ATTR_DATA, "DATA"},
|
||||
{SWITCH_STUN_ATTR_OPTIONS, "OPTIONS"},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
static const struct value_mapping ERROR_TYPES[] = {
|
||||
{ SWITCH_STUN_ERROR_BAD_REQUEST, "BAD_REQUEST" },
|
||||
{ SWITCH_STUN_ERROR_UNAUTHORIZED, "UNAUTHORIZED" },
|
||||
{ SWITCH_STUN_ERROR_UNKNOWN_ATTRIBUTE, "UNKNOWN_ATTRIBUTE" },
|
||||
{ SWITCH_STUN_ERROR_STALE_CREDENTIALS, "STALE_CREDENTIALS" },
|
||||
{ SWITCH_STUN_ERROR_INTEGRITY_CHECK_FAILURE, "INTEGRITY_CHECK_FAILURE" },
|
||||
{ SWITCH_STUN_ERROR_MISSING_USERNAME, "MISSING_USERNAME" },
|
||||
{ SWITCH_STUN_ERROR_USE_TLS, "USE_TLS" },
|
||||
{ SWITCH_STUN_ERROR_SERVER_ERROR, "SERVER_ERROR" },
|
||||
{ SWITCH_STUN_ERROR_GLOBAL_FAILURE, "GLOBAL_FAILURE" },
|
||||
{ 0, 0 }};
|
||||
{SWITCH_STUN_ERROR_BAD_REQUEST, "BAD_REQUEST"},
|
||||
{SWITCH_STUN_ERROR_UNAUTHORIZED, "UNAUTHORIZED"},
|
||||
{SWITCH_STUN_ERROR_UNKNOWN_ATTRIBUTE, "UNKNOWN_ATTRIBUTE"},
|
||||
{SWITCH_STUN_ERROR_STALE_CREDENTIALS, "STALE_CREDENTIALS"},
|
||||
{SWITCH_STUN_ERROR_INTEGRITY_CHECK_FAILURE, "INTEGRITY_CHECK_FAILURE"},
|
||||
{SWITCH_STUN_ERROR_MISSING_USERNAME, "MISSING_USERNAME"},
|
||||
{SWITCH_STUN_ERROR_USE_TLS, "USE_TLS"},
|
||||
{SWITCH_STUN_ERROR_SERVER_ERROR, "SERVER_ERROR"},
|
||||
{SWITCH_STUN_ERROR_GLOBAL_FAILURE, "GLOBAL_FAILURE"},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
SWITCH_DECLARE(void) switch_stun_random_string(char *buf, uint16_t len, char *set)
|
||||
{
|
||||
@@ -98,19 +101,19 @@ SWITCH_DECLARE(void) switch_stun_random_string(char *buf, uint16_t len, char *se
|
||||
set = chars;
|
||||
}
|
||||
|
||||
max = (int)strlen(set);
|
||||
max = (int) strlen(set);
|
||||
|
||||
srand((unsigned int)switch_time_now());
|
||||
srand((unsigned int) switch_time_now());
|
||||
|
||||
for(x = 0; x < len; x++) {
|
||||
int j = (int)(max*1.0*rand()/(RAND_MAX+1.0));
|
||||
for (x = 0; x < len; x++) {
|
||||
int j = (int) (max * 1.0 * rand() / (RAND_MAX + 1.0));
|
||||
buf[x] = set[j];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
SWITCH_DECLARE(switch_stun_packet_t *)switch_stun_packet_parse(uint8_t *buf, uint32_t len)
|
||||
SWITCH_DECLARE(switch_stun_packet_t *) switch_stun_packet_parse(uint8_t * buf, uint32_t len)
|
||||
{
|
||||
switch_stun_packet_t *packet;
|
||||
switch_stun_packet_attribute_t *attr;
|
||||
@@ -129,7 +132,7 @@ SWITCH_DECLARE(switch_stun_packet_t *)switch_stun_packet_parse(uint8_t *buf, uin
|
||||
if (!attr->length) {
|
||||
break;
|
||||
}
|
||||
switch(attr->type) {
|
||||
switch (attr->type) {
|
||||
case SWITCH_STUN_ATTR_MAPPED_ADDRESS:
|
||||
if (attr->type) {
|
||||
switch_stun_ip_t *ip;
|
||||
@@ -143,8 +146,7 @@ SWITCH_DECLARE(switch_stun_packet_t *)switch_stun_packet_parse(uint8_t *buf, uin
|
||||
return packet;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(const char *)switch_stun_value_to_name(int32_t type, uint32_t value)
|
||||
|
||||
SWITCH_DECLARE(const char *) switch_stun_value_to_name(int32_t type, uint32_t value)
|
||||
{
|
||||
uint32_t x = 0;
|
||||
const struct value_mapping *map = NULL;
|
||||
@@ -164,26 +166,27 @@ SWITCH_DECLARE(const char *)switch_stun_value_to_name(int32_t type, uint32_t val
|
||||
}
|
||||
|
||||
if (map) {
|
||||
for(x = 0; map[x].value; x++) {
|
||||
for (x = 0; map[x].value; x++) {
|
||||
if (map[x].value == value) {
|
||||
return map[x].name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return "INVALID";
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_get_mapped_address(switch_stun_packet_attribute_t *attribute, char *ipstr, uint16_t *port)
|
||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_get_mapped_address(switch_stun_packet_attribute_t *attribute,
|
||||
char *ipstr, uint16_t * port)
|
||||
{
|
||||
switch_stun_ip_t *ip;
|
||||
uint8_t x, *i;
|
||||
char *p = ipstr;
|
||||
|
||||
|
||||
ip = (switch_stun_ip_t *) attribute->value;
|
||||
i = (uint8_t *) &ip->address;
|
||||
i = (uint8_t *) & ip->address;
|
||||
*ipstr = 0;
|
||||
for(x =0; x < 4; x++) {
|
||||
for (x = 0; x < 4; x++) {
|
||||
sprintf(p, "%u%s", i[x], x == 3 ? "" : ".");
|
||||
p = ipstr + strlen(ipstr);
|
||||
}
|
||||
@@ -191,7 +194,8 @@ SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_get_mapped_address(switch_s
|
||||
return 1;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(char *)switch_stun_packet_attribute_get_username(switch_stun_packet_attribute_t *attribute, char *username, uint16_t len)
|
||||
SWITCH_DECLARE(char *) switch_stun_packet_attribute_get_username(switch_stun_packet_attribute_t *attribute,
|
||||
char *username, uint16_t len)
|
||||
{
|
||||
uint16_t cpylen;
|
||||
|
||||
@@ -199,18 +203,16 @@ SWITCH_DECLARE(char *)switch_stun_packet_attribute_get_username(switch_stun_pack
|
||||
return memcpy(username, attribute->value, cpylen);
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_stun_packet_t *)switch_stun_packet_build_header(switch_stun_message_t type,
|
||||
char *id,
|
||||
uint8_t *buf
|
||||
)
|
||||
SWITCH_DECLARE(switch_stun_packet_t *) switch_stun_packet_build_header(switch_stun_message_t type,
|
||||
char *id, uint8_t * buf)
|
||||
{
|
||||
switch_stun_packet_header_t *header;
|
||||
|
||||
|
||||
|
||||
header = (switch_stun_packet_header_t *) buf;
|
||||
header->type = htons(type);
|
||||
header->length = 0;
|
||||
|
||||
|
||||
if (id) {
|
||||
memcpy(header->id, id, 16);
|
||||
} else {
|
||||
@@ -220,24 +222,26 @@ SWITCH_DECLARE(switch_stun_packet_t *)switch_stun_packet_build_header(switch_stu
|
||||
return (switch_stun_packet_t *) buf;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_add_binded_address(switch_stun_packet_t *packet, char *ipstr, uint16_t port)
|
||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_add_binded_address(switch_stun_packet_t *packet, char *ipstr,
|
||||
uint16_t port)
|
||||
{
|
||||
switch_stun_packet_attribute_t *attribute;
|
||||
switch_stun_ip_t *ip;
|
||||
uint8_t *i, x;
|
||||
char *p = ipstr;
|
||||
|
||||
attribute = (switch_stun_packet_attribute_t *) ((uint8_t *) &packet->first_attribute + ntohs(packet->header.length));
|
||||
attribute =
|
||||
(switch_stun_packet_attribute_t *) ((uint8_t *) & packet->first_attribute + ntohs(packet->header.length));
|
||||
attribute->type = htons(SWITCH_STUN_ATTR_MAPPED_ADDRESS);
|
||||
attribute->length = htons(8);
|
||||
ip = (switch_stun_ip_t *) attribute->value;
|
||||
|
||||
ip->port = htons(port);
|
||||
ip->family = 1;
|
||||
i = (uint8_t *) &ip->address;
|
||||
i = (uint8_t *) & ip->address;
|
||||
|
||||
for(x = 0; x < 4 ; x++) {
|
||||
i[x] = (uint8_t)atoi(p);
|
||||
for (x = 0; x < 4; x++) {
|
||||
i[x] = (uint8_t) atoi(p);
|
||||
if ((p = strchr(p, '.'))) {
|
||||
p++;
|
||||
} else {
|
||||
@@ -249,41 +253,40 @@ SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_add_binded_address(switch_s
|
||||
return 1;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_add_username(switch_stun_packet_t *packet, char *username, uint16_t ulen)
|
||||
SWITCH_DECLARE(uint8_t) switch_stun_packet_attribute_add_username(switch_stun_packet_t *packet, char *username,
|
||||
uint16_t ulen)
|
||||
{
|
||||
switch_stun_packet_attribute_t *attribute;
|
||||
|
||||
if (ulen % 4 != 0) {
|
||||
return 0;
|
||||
}
|
||||
attribute = (switch_stun_packet_attribute_t *) ((uint8_t *) &packet->first_attribute + ntohs(packet->header.length));
|
||||
attribute =
|
||||
(switch_stun_packet_attribute_t *) ((uint8_t *) & packet->first_attribute + ntohs(packet->header.length));
|
||||
attribute->type = htons(SWITCH_STUN_ATTR_USERNAME);
|
||||
attribute->length = htons(ulen);
|
||||
if (username) {
|
||||
memcpy(attribute->value, username, ulen);
|
||||
} else {
|
||||
switch_stun_random_string(attribute->value, ulen, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
packet->header.length += htons(sizeof(switch_stun_packet_attribute_t)) + attribute->length;
|
||||
return 1;
|
||||
}
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_stun_lookup (char **ip,
|
||||
switch_port_t *port,
|
||||
char *stunip,
|
||||
switch_port_t stunport,
|
||||
char **err,
|
||||
switch_memory_pool_t *pool)
|
||||
|
||||
SWITCH_DECLARE(switch_status_t) switch_stun_lookup(char **ip,
|
||||
switch_port_t *port,
|
||||
char *stunip,
|
||||
switch_port_t stunport, char **err, switch_memory_pool_t *pool)
|
||||
{
|
||||
switch_sockaddr_t *local_addr = NULL, *remote_addr = NULL, *from_addr = NULL;
|
||||
switch_socket_t *sock = NULL;
|
||||
uint8_t buf[256] = {0};
|
||||
uint8_t buf[256] = { 0 };
|
||||
switch_stun_packet_t *packet;
|
||||
switch_stun_packet_attribute_t *attr;
|
||||
switch_size_t bytes = 0;
|
||||
char username[33] = {0};
|
||||
char username[33] = { 0 };
|
||||
char rip[16];
|
||||
uint16_t rport = 0;
|
||||
switch_time_t started = 0;
|
||||
@@ -307,31 +310,31 @@ SWITCH_DECLARE(switch_status_t) switch_stun_lookup (char **ip,
|
||||
*err = "Socket Error!";
|
||||
return SWITCH_STATUS_FALSE;
|
||||
}
|
||||
|
||||
|
||||
if (switch_socket_bind(sock, local_addr) != SWITCH_STATUS_SUCCESS) {
|
||||
*err = "Bind Error!";
|
||||
return SWITCH_STATUS_FALSE;
|
||||
}
|
||||
|
||||
|
||||
switch_socket_opt_set(sock, SWITCH_SO_NONBLOCK, TRUE);
|
||||
packet = switch_stun_packet_build_header(SWITCH_STUN_BINDING_REQUEST, NULL, buf);
|
||||
switch_stun_random_string(username, 32, NULL);
|
||||
switch_stun_packet_attribute_add_username(packet, username, 32);
|
||||
bytes = switch_stun_packet_length(packet);
|
||||
switch_socket_sendto(sock, remote_addr, 0, (void *)packet, &bytes);
|
||||
switch_socket_sendto(sock, remote_addr, 0, (void *) packet, &bytes);
|
||||
started = switch_time_now();
|
||||
|
||||
|
||||
*ip = NULL;
|
||||
*port = 0;
|
||||
|
||||
|
||||
for(;;) {
|
||||
for (;;) {
|
||||
bytes = sizeof(buf);
|
||||
if (switch_socket_recvfrom(from_addr, sock, 0, (char *)&buf, &bytes) == SWITCH_STATUS_SUCCESS && bytes > 0) {
|
||||
if (switch_socket_recvfrom(from_addr, sock, 0, (char *) &buf, &bytes) == SWITCH_STATUS_SUCCESS && bytes > 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ((elapsed = (unsigned int)((switch_time_now() - started) / 1000)) > 5000) {
|
||||
if ((elapsed = (unsigned int) ((switch_time_now() - started) / 1000)) > 5000) {
|
||||
*err = "Timeout";
|
||||
switch_socket_shutdown(sock, SWITCH_SHUTDOWN_READWRITE);
|
||||
switch_socket_close(sock);
|
||||
@@ -345,14 +348,14 @@ SWITCH_DECLARE(switch_status_t) switch_stun_lookup (char **ip,
|
||||
switch_stun_packet_first_attribute(packet, attr);
|
||||
|
||||
do {
|
||||
switch(attr->type) {
|
||||
switch (attr->type) {
|
||||
case SWITCH_STUN_ATTR_MAPPED_ADDRESS:
|
||||
if (attr->type) {
|
||||
switch_stun_packet_attribute_get_mapped_address(attr, rip, &rport);
|
||||
}
|
||||
break;
|
||||
case SWITCH_STUN_ATTR_USERNAME:
|
||||
if(attr->type) {
|
||||
if (attr->type) {
|
||||
switch_stun_packet_attribute_get_username(attr, username, 32);
|
||||
}
|
||||
break;
|
||||
@@ -366,7 +369,7 @@ SWITCH_DECLARE(switch_status_t) switch_stun_lookup (char **ip,
|
||||
} else {
|
||||
*err = "Invalid Reply";
|
||||
}
|
||||
|
||||
|
||||
|
||||
return SWITCH_STATUS_FALSE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user