Commit ddb6df15 authored by Youness Alaoui's avatar Youness Alaoui

Merge commit 'tester/nice-stund' into nice-kakaroto

Conflicts:

	stun/tools/stund.c
parents b4246f04 eab8bebc
...@@ -192,7 +192,7 @@ ssize_t send_safe (int fd, const struct msghdr *msg) ...@@ -192,7 +192,7 @@ ssize_t send_safe (int fd, const struct msghdr *msg)
} }
static int dgram_process (int sock, StunAgent *agent) static int dgram_process (int sock, StunAgent *oldagent, StunAgent *newagent)
{ {
struct sockaddr_storage addr; struct sockaddr_storage addr;
uint8_t buf[STUN_MAX_MESSAGE_SIZE]; uint8_t buf[STUN_MAX_MESSAGE_SIZE];
...@@ -201,6 +201,7 @@ static int dgram_process (int sock, StunAgent *agent) ...@@ -201,6 +201,7 @@ static int dgram_process (int sock, StunAgent *agent)
StunMessage request; StunMessage request;
StunMessage response; StunMessage response;
StunValidationStatus validation; StunValidationStatus validation;
StunAgent *agent = NULL;
struct msghdr mh = struct msghdr mh =
{ {
...@@ -216,7 +217,15 @@ static int dgram_process (int sock, StunAgent *agent) ...@@ -216,7 +217,15 @@ static int dgram_process (int sock, StunAgent *agent)
if (len == (size_t)-1) if (len == (size_t)-1)
return -1; return -1;
validation = stun_agent_validate (agent, &request, buf, len, NULL, 0); validation = stun_agent_validate (newagent, &request, buf, len, NULL, 0);
if (validation == STUN_VALIDATION_SUCCESS) {
agent = newagent;
}
else {
validation = stun_agent_validate (oldagent, &request, buf, len, NULL, 0);
agent = oldagent;
}
/* Unknown attributes */ /* Unknown attributes */
if (validation == STUN_VALIDATION_UNKNOWN_REQUEST_ATTRIBUTE) if (validation == STUN_VALIDATION_UNKNOWN_REQUEST_ATTRIBUTE)
...@@ -260,17 +269,19 @@ send_buf: ...@@ -260,17 +269,19 @@ send_buf:
static int run (int family, int protocol, unsigned port) static int run (int family, int protocol, unsigned port)
{ {
StunAgent agent; StunAgent oldagent;
StunAgent newagent;
int sock = listen_socket (family, SOCK_DGRAM, protocol, htons (port)); int sock = listen_socket (family, SOCK_DGRAM, protocol, htons (port));
if (sock == -1) if (sock == -1)
return -1; return -1;
stun_agent_init (&oldagent, known_attributes,
stun_agent_init (&agent, known_attributes, STUN_COMPATIBILITY_RFC3489, 0);
stun_agent_init (&newagent, known_attributes,
STUN_COMPATIBILITY_RFC5389, STUN_AGENT_USAGE_USE_FINGERPRINT); STUN_COMPATIBILITY_RFC5389, STUN_AGENT_USAGE_USE_FINGERPRINT);
for (;;) for (;;)
dgram_process (sock, &agent); dgram_process (sock, &oldagent, &newagent);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment