Commit 9a18da4c authored by Youness Alaoui's avatar Youness Alaoui

Updated unit tests for new API of stun usages

parent ca2acb6c
...@@ -97,8 +97,8 @@ static void bad_family (void) ...@@ -97,8 +97,8 @@ static void bad_family (void)
addr.sa_len = sizeof (addr); addr.sa_len = sizeof (addr);
#endif #endif
val = stun_bind_run (-1, &addr, sizeof (addr), val = stun_usage_bind_run (&addr, sizeof (addr),
&dummy, &(socklen_t){ sizeof (dummy) }, 0); &dummy, &(socklen_t){ sizeof (dummy) });
assert (val != 0); assert (val != 0);
} }
...@@ -115,9 +115,9 @@ static void small_srv_addr (void) ...@@ -115,9 +115,9 @@ static void small_srv_addr (void)
addr.sa_len = sizeof (addr); addr.sa_len = sizeof (addr);
#endif #endif
val = stun_bind_run (-1, &addr, 1, val = stun_usage_bind_run (&addr, 1,
&dummy, &(socklen_t){ sizeof (dummy) }, 0); &dummy, &(socklen_t){ sizeof (dummy) });
assert (val == EINVAL); assert (val == STUN_USAGE_BIND_RETURN_ERROR);
} }
...@@ -128,14 +128,11 @@ static void big_srv_addr (void) ...@@ -128,14 +128,11 @@ static void big_srv_addr (void)
struct sockaddr dummy; struct sockaddr dummy;
int fd, val; int fd, val;
fd = socket (AF_INET, SOCK_DGRAM, 0);
assert (fd != -1);
memset (buf, 0, sizeof (buf)); memset (buf, 0, sizeof (buf));
val = stun_bind_run (fd, (struct sockaddr *)buf, sizeof (buf), val = stun_usage_bind_run ((struct sockaddr *)buf, sizeof (buf),
&dummy, &(socklen_t){ sizeof (dummy) }, 0); &dummy, &(socklen_t){ sizeof (dummy) });
assert (val == ENOBUFS); assert (val == STUN_USAGE_BIND_RETURN_ERROR);
close (fd);
} }
...@@ -154,22 +151,37 @@ static void timeout (void) ...@@ -154,22 +151,37 @@ static void timeout (void)
val = getsockname (servfd, (struct sockaddr *)&srv, &srvlen); val = getsockname (servfd, (struct sockaddr *)&srv, &srvlen);
assert (val == 0); assert (val == 0);
val = stun_bind_run (-1, (struct sockaddr *)&srv, srvlen, val = stun_usage_bind_run ((struct sockaddr *)&srv, srvlen,
&dummy, &(socklen_t){ sizeof (dummy) }, 0); &dummy, &(socklen_t){ sizeof (dummy) });
assert (val == ETIMEDOUT); assert (val == STUN_USAGE_BIND_RETURN_TIMEOUT);
close (servfd); close (servfd);
} }
/** Malformed responses test */ /** Malformed responses test */
static void bad_responses (void) static void bad_responses (void)
{ {
stun_bind_t *ctx;
struct sockaddr_storage addr; struct sockaddr_storage addr;
socklen_t addrlen = sizeof (addr); socklen_t addrlen = sizeof (addr);
ssize_t val, len; ssize_t val, len;
uint8_t buf[1000]; uint8_t buf[STUN_MAX_MESSAGE_SIZE];
uint8_t req[STUN_MAX_MESSAGE_SIZE];
size_t req_len;
StunAgent agent;
StunMessage msg;
StunMessage req_msg;
uint16_t known_attributes[] = {
STUN_ATTRIBUTE_MAPPED_ADDRESS,
STUN_ATTRIBUTE_XOR_MAPPED_ADDRESS,
STUN_ATTRIBUTE_XOR_INTERNAL_ADDRESS,
STUN_ATTRIBUTE_PRIORITY,
STUN_ATTRIBUTE_USERNAME,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY,
STUN_ATTRIBUTE_ERROR_CODE, 0};
stun_agent_init (&agent, known_attributes,
STUN_COMPATIBILITY_3489BIS, 0);
/* Allocate a local UDP port */ /* Allocate a local UDP port */
int servfd = listen_dgram (), fd; int servfd = listen_dgram (), fd;
...@@ -181,8 +193,12 @@ static void bad_responses (void) ...@@ -181,8 +193,12 @@ static void bad_responses (void)
fd = socket (addr.ss_family, SOCK_DGRAM, 0); fd = socket (addr.ss_family, SOCK_DGRAM, 0);
assert (fd != -1); assert (fd != -1);
val = stun_bind_start (&ctx, fd, (struct sockaddr *)&addr, addrlen, 0); req_len = stun_usage_bind_create (&agent, &req_msg, req, sizeof(req));
assert (val == 0); assert (req_len > 0);
val = sendto (fd, req, req_len, MSG_DONTWAIT | MSG_NOSIGNAL,
(struct sockaddr *)&addr, addrlen);
assert (val >= 0);
/* Send to/receive from our client instance only */ /* Send to/receive from our client instance only */
val = getsockname (fd, (struct sockaddr *)&addr, &addrlen); val = getsockname (fd, (struct sockaddr *)&addr, &addrlen);
...@@ -191,54 +207,47 @@ static void bad_responses (void) ...@@ -191,54 +207,47 @@ static void bad_responses (void)
val = connect (servfd, (struct sockaddr *)&addr, addrlen); val = connect (servfd, (struct sockaddr *)&addr, addrlen);
assert (val == 0); assert (val == 0);
/* Send crap response */
val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen);
assert (val == 0);
val = stun_bind_process (ctx, "foobar", 6,
(struct sockaddr *)&addr, &addrlen);
assert (val == EAGAIN);
/* Send request instead of response */ /* Send request instead of response */
val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen); val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen);
assert (val == 0); assert (val == 0);
len = recv (servfd, buf, 1000, MSG_DONTWAIT); len = recv (servfd, buf, 1000, MSG_DONTWAIT);
assert (len >= 20); assert (len >= 20);
val = stun_bind_process (ctx, buf, len, assert (stun_agent_validate (&agent, &msg, buf, len, NULL, NULL)
(struct sockaddr *)&addr, &addrlen); == STUN_VALIDATION_SUCCESS);
assert (val == EAGAIN);
val = stun_usage_bind_process (&msg,
(struct sockaddr *)&addr, &addrlen, (struct sockaddr *)&addr, &addrlen);
assert (val == STUN_USAGE_BIND_RETURN_RETRY);
/* Send response with wrong request type */ /* Send response with wrong request type */
buf[0] |= 0x03; buf[0] |= 0x03;
val = stun_bind_process (ctx, buf, len,
(struct sockaddr *)&addr, &addrlen);
assert (val == EAGAIN);
buf[0] ^= 0x02; buf[0] ^= 0x02;
/* Send error response without ERROR-CODE */ /* Send error response without ERROR-CODE */
buf[1] |= 0x10; buf[1] |= 0x10;
val = stun_bind_process (ctx, buf, len, val = stun_usage_bind_process (&msg,
(struct sockaddr *)&addr, &addrlen); (struct sockaddr *)&addr, &addrlen, (struct sockaddr *)&addr, &addrlen);
assert (val == EAGAIN); assert (val == STUN_USAGE_BIND_RETURN_RETRY);
stun_bind_cancel (ctx);
close (fd); close (fd);
close (servfd); close (servfd);
} }
/** Various responses test */ /** Various responses test */
static void responses (void) static void responses (void)
{ {
stun_bind_t *ctx;
struct sockaddr_storage addr; struct sockaddr_storage addr;
socklen_t addrlen = sizeof (addr); socklen_t addrlen = sizeof (addr);
ssize_t val; ssize_t val;
size_t len; size_t len;
int servfd, fd; int servfd, fd;
uint8_t buf[STUN_MAX_MESSAGE_SIZE]; uint8_t buf[STUN_MAX_MESSAGE_SIZE];
uint8_t req[STUN_MAX_MESSAGE_SIZE];
size_t req_len;
StunAgent agent; StunAgent agent;
StunMessage msg; StunMessage msg;
StunMessage req_msg;
uint16_t known_attributes[] = { uint16_t known_attributes[] = {
STUN_ATTRIBUTE_MAPPED_ADDRESS, STUN_ATTRIBUTE_MAPPED_ADDRESS,
...@@ -274,53 +283,35 @@ static void responses (void) ...@@ -274,53 +283,35 @@ static void responses (void)
assert (val == 0); assert (val == 0);
/* Send error response */ /* Send error response */
val = stun_bind_start (&ctx, fd, NULL, 0, 0); req_len = stun_usage_bind_create (&agent, &req_msg, req, sizeof(req));
assert (val == 0); assert (req_len > 0);
val = recv (servfd, buf, 1000, MSG_DONTWAIT); val = send (fd, req, req_len, MSG_DONTWAIT | MSG_NOSIGNAL);
assert (val >= 0); assert (val >= 0);
assert (stun_agent_validate (&agent, &msg, buf, val, NULL, NULL)
== STUN_VALIDATION_SUCCESS);
stun_agent_init_error (&agent, &msg, buf, sizeof (buf), &msg, STUN_ERROR_SERVER_ERROR);
len = stun_agent_finish_message (&agent, &msg, NULL, 0);
assert (len > 0);
val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen);
assert (val == 0);
val = stun_bind_process (ctx, buf, len,
(struct sockaddr *)&addr, &addrlen);
assert (val == ECONNREFUSED);
/* Send response with an unknown attribute */
val = stun_bind_start (&ctx, fd, NULL, 0, 0);
assert (val == 0);
val = recv (servfd, buf, 1000, MSG_DONTWAIT); val = recv (servfd, buf, 1000, MSG_DONTWAIT);
assert (val >= 0); assert (val >= 0);
assert (stun_agent_validate (&agent, &msg, buf, val, NULL, NULL) assert (stun_agent_validate (&agent, &msg, buf, val, NULL, NULL)
== STUN_VALIDATION_SUCCESS); == STUN_VALIDATION_SUCCESS);
stun_agent_init_response (&agent, &msg, buf, sizeof (buf), &msg); stun_agent_init_error (&agent, &msg, buf, sizeof (buf), &msg, STUN_ERROR_SERVER_ERROR);
val = stun_message_append_string (&msg, 0x6000,
"This is an unknown attribute!");
assert (val == 0);
len = stun_agent_finish_message (&agent, &msg, NULL, 0); len = stun_agent_finish_message (&agent, &msg, NULL, 0);
assert (len > 0); assert (len > 0);
val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen); val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen);
assert (val == 0); assert (val == 0);
val = stun_bind_process (ctx, buf, len, val = stun_usage_bind_process (&msg,
(struct sockaddr *)&addr, &addrlen); (struct sockaddr *)&addr, &addrlen, (struct sockaddr *)&addr, &addrlen);
assert (val == EPROTO); assert (val == STUN_USAGE_BIND_RETURN_ERROR);
/* Send response with a no mapped address at all */ /* Send response with a no mapped address at all */
val = stun_bind_start (&ctx, fd, NULL, 0, 0); req_len = stun_usage_bind_create (&agent, &req_msg, req, sizeof(req));
assert (val == 0); assert (req_len > 0);
val = send (fd, req, req_len, MSG_DONTWAIT | MSG_NOSIGNAL);
assert (val >= 0);
val = recv (servfd, buf, 1000, MSG_DONTWAIT); val = recv (servfd, buf, 1000, MSG_DONTWAIT);
assert (val >= 0); assert (val >= 0);
...@@ -332,16 +323,22 @@ static void responses (void) ...@@ -332,16 +323,22 @@ static void responses (void)
len = stun_agent_finish_message (&agent, &msg, NULL, 0); len = stun_agent_finish_message (&agent, &msg, NULL, 0);
assert (len > 0); assert (len > 0);
assert (stun_agent_validate (&agent, &msg, buf, len, NULL, NULL)
== STUN_VALIDATION_SUCCESS);
val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen); val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen);
assert (val == 0); assert (val == 0);
val = stun_bind_process (ctx, buf, len, val = stun_usage_bind_process (&msg,
(struct sockaddr *)&addr, &addrlen); (struct sockaddr *)&addr, &addrlen, (struct sockaddr *)&addr, &addrlen);
assert (val == ENOENT); assert (val == STUN_USAGE_BIND_RETURN_ERROR);
/* Send old-style response */ /* Send old-style response */
val = stun_bind_start (&ctx, fd, NULL, 0, 0); req_len = stun_usage_bind_create (&agent, &req_msg, req, sizeof(req));
assert (val == 0); assert (req_len > 0);
val = send (fd, req, req_len, MSG_DONTWAIT | MSG_NOSIGNAL);
assert (val >= 0);
val = recv (servfd, buf, 1000, MSG_DONTWAIT); val = recv (servfd, buf, 1000, MSG_DONTWAIT);
assert (val >= 0); assert (val >= 0);
...@@ -356,12 +353,15 @@ static void responses (void) ...@@ -356,12 +353,15 @@ static void responses (void)
len = stun_agent_finish_message (&agent, &msg, NULL, 0); len = stun_agent_finish_message (&agent, &msg, NULL, 0);
assert (len > 0); assert (len > 0);
assert (stun_agent_validate (&agent, &msg, buf, len, NULL, NULL)
== STUN_VALIDATION_SUCCESS);
val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen); val = getsockname (servfd, (struct sockaddr *)&addr, &addrlen);
assert (val == 0); assert (val == 0);
val = stun_bind_process (ctx, buf, len, val = stun_usage_bind_process (&msg,
(struct sockaddr *)&addr, &addrlen); (struct sockaddr *)&addr, &addrlen, (struct sockaddr *)&addr, &addrlen);
assert (val == 0); assert (val == STUN_USAGE_BIND_RETURN_SUCCESS);
/* End */ /* End */
close (servfd); close (servfd);
...@@ -370,13 +370,29 @@ static void responses (void) ...@@ -370,13 +370,29 @@ static void responses (void)
assert (val == 0); assert (val == 0);
} }
static void keepalive (void) static void keepalive (void)
{ {
struct sockaddr_storage addr; struct sockaddr_storage addr;
socklen_t addrlen = sizeof (addr); socklen_t addrlen = sizeof (addr);
int val, servfd, fd; int val, servfd, fd;
uint8_t buf[STUN_MAX_MESSAGE_SIZE];
size_t len;
StunAgent agent;
StunMessage msg;
uint16_t known_attributes[] = {
STUN_ATTRIBUTE_MAPPED_ADDRESS,
STUN_ATTRIBUTE_XOR_MAPPED_ADDRESS,
STUN_ATTRIBUTE_XOR_INTERNAL_ADDRESS,
STUN_ATTRIBUTE_PRIORITY,
STUN_ATTRIBUTE_USERNAME,
STUN_ATTRIBUTE_MESSAGE_INTEGRITY,
STUN_ATTRIBUTE_ERROR_CODE, 0};
stun_agent_init (&agent, known_attributes,
STUN_COMPATIBILITY_3489BIS, 0);
/* Allocate a local UDP port for server */ /* Allocate a local UDP port for server */
servfd = listen_dgram (); servfd = listen_dgram ();
assert (servfd != -1); assert (servfd != -1);
...@@ -389,13 +405,19 @@ static void keepalive (void) ...@@ -389,13 +405,19 @@ static void keepalive (void)
assert (fd != -1); assert (fd != -1);
/* Keep alive sending smoke test */ /* Keep alive sending smoke test */
val = stun_bind_keepalive (fd, (struct sockaddr *)&addr, addrlen, 0); len = stun_usage_bind_keepalive (&agent, &msg, buf, sizeof(buf));
assert (val == 0); assert (len == 28);
val = sendto (fd, buf, len, MSG_DONTWAIT | MSG_NOSIGNAL,
(struct sockaddr *)&addr, addrlen);
assert (val >= 0);
/* Wrong address family test */ /* Wrong address family test */
addr.ss_family = addr.ss_family == AF_INET ? AF_INET6 : AF_INET; addr.ss_family = addr.ss_family == AF_INET ? AF_INET6 : AF_INET;
val = stun_bind_keepalive (fd, (struct sockaddr *)&addr, addrlen, 0); val = sendto (fd, buf, len, MSG_DONTWAIT | MSG_NOSIGNAL,
assert (val != 0); (struct sockaddr *)&addr, addrlen);
assert (val < 0);
/* End */ /* End */
close (servfd); close (servfd);
...@@ -407,7 +429,7 @@ static void keepalive (void) ...@@ -407,7 +429,7 @@ static void keepalive (void)
static void test (void (*func) (void), const char *name) static void test (void (*func) (void), const char *name)
{ {
//alarm (10); alarm (10);
printf ("%s test... ", name); printf ("%s test... ", name);
func (); func ();
......
...@@ -73,6 +73,7 @@ int main (void) ...@@ -73,6 +73,7 @@ int main (void)
{ufrag, strlen (ufrag), pass, strlen (pass)}, {ufrag, strlen (ufrag), pass, strlen (pass)},
{username, strlen (username), pass, strlen (pass)}, {username, strlen (username), pass, strlen (pass)},
{NULL, 0, NULL, 0}}; {NULL, 0, NULL, 0}};
StunValidationStatus valid;
stun_agent_init (&agent, STUN_ALL_KNOWN_ATTRIBUTES, stun_agent_init (&agent, STUN_ALL_KNOWN_ATTRIBUTES,
STUN_COMPATIBILITY_3489BIS, STUN_COMPATIBILITY_3489BIS,
...@@ -95,9 +96,9 @@ int main (void) ...@@ -95,9 +96,9 @@ int main (void)
assert (rlen > 0); assert (rlen > 0);
len = sizeof (resp_buf); len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, val = stun_usage_ice_conncheck_create_reply (&agent, &req,
&resp, resp_buf, &len, (struct sockaddr *)&ip4, &resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); sizeof (ip4), &control, tie);
assert (val == EINVAL); assert (val == EINVAL);
assert (len == 0); assert (len == 0);
...@@ -109,9 +110,9 @@ int main (void) ...@@ -109,9 +110,9 @@ int main (void)
assert (rlen > 0); assert (rlen > 0);
len = sizeof (resp_buf); len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, val = stun_usage_ice_conncheck_create_reply (&agent, &req,
&resp, resp_buf, &len, (struct sockaddr *)&ip4, &resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); sizeof (ip4), &control, tie);
assert (val == EPROTO); assert (val == EPROTO);
assert (len > 0); assert (len > 0);
...@@ -124,46 +125,32 @@ int main (void) ...@@ -124,46 +125,32 @@ int main (void)
rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass)); rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass));
assert (rlen > 0); assert (rlen > 0);
len = sizeof (resp_buf); valid = stun_agent_validate (&agent, &req, req_buf, rlen,
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, stun_agent_default_validater, validater_data);
&resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), username, strlen (username), pass, strlen (pass), &control, tie, 0); assert (valid == STUN_VALIDATION_UNKNOWN_REQUEST_ATTRIBUTE);
assert (val == EPROTO);
assert (len > 0);
/* Unauthenticated message */ /* Unauthenticated message */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING)); assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
rlen = stun_agent_finish_message (&agent, &req, NULL, 0); rlen = stun_agent_finish_message (&agent, &req, NULL, 0);
assert (rlen > 0); assert (rlen > 0);
len = sizeof (resp_buf); valid = stun_agent_validate (&agent, &req, req_buf, rlen,
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, stun_agent_default_validater, validater_data);
&resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); assert (valid == STUN_VALIDATION_UNAUTHORIZED_BAD_REQUEST);
assert (val == EPERM);
assert (len > 0);
assert (stun_agent_validate (&agent, &resp, resp_buf, len,
stun_agent_default_validater, validater_data) == STUN_VALIDATION_SUCCESS);
stun_message_find_error (&resp, &code);
assert (code == STUN_ERROR_BAD_REQUEST);
/* No username */ /* No username */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING)); assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass)); rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass));
assert (rlen > 0); assert (rlen > 0);
len = sizeof (resp_buf); valid = stun_agent_validate (&agent, &req, req_buf, rlen,
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, stun_agent_default_validater, validater_data);
&resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); assert (valid == STUN_VALIDATION_UNAUTHORIZED_BAD_REQUEST);
assert (val == EPERM); assert (stun_usage_ice_conncheck_priority (&req) == 0);
assert (len > 0); assert (stun_usage_ice_conncheck_use_candidate (&req) == false);
assert (stun_agent_validate (&agent, &resp, resp_buf, len,
stun_agent_default_validater, validater_data) == STUN_VALIDATION_SUCCESS);
stun_message_find_error (&resp, &code);
assert (code == STUN_ERROR_BAD_REQUEST);
assert (stun_conncheck_priority (&req) == 0);
assert (stun_conncheck_use_candidate (&req) == false);
/* Good message */ /* Good message */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING)); assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
...@@ -177,55 +164,16 @@ int main (void) ...@@ -177,55 +164,16 @@ int main (void)
assert (rlen > 0); assert (rlen > 0);
len = sizeof (resp_buf); len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, val = stun_usage_ice_conncheck_create_reply (&agent, &req,
&resp, resp_buf, &len, (struct sockaddr *)&ip4, &resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); sizeof (ip4), &control, tie);
assert (val == 0); assert (val == 0);
assert (len > 0); assert (len > 0);
assert (stun_agent_validate (&agent, &resp, resp_buf, len, assert (stun_agent_validate (&agent, &resp, resp_buf, len,
stun_agent_default_validater, validater_data) == STUN_VALIDATION_SUCCESS); stun_agent_default_validater, validater_data) == STUN_VALIDATION_SUCCESS);
assert (stun_message_get_class (&resp) == STUN_RESPONSE); assert (stun_message_get_class (&resp) == STUN_RESPONSE);
assert (stun_conncheck_priority (&req) == 0x12345678); assert (stun_usage_ice_conncheck_priority (&req) == 0x12345678);
assert (stun_conncheck_use_candidate (&req) == true); assert (stun_usage_ice_conncheck_use_candidate (&req) == true);
/* Bad username */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
val = stun_message_append_string (&req, STUN_ATTRIBUTE_USERNAME, ufrag);
assert (val == 0);
rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass));
assert (rlen > 0);
len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen,
&resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), "bad", strlen ("bad"), pass, strlen (pass), &control, tie, 0);
assert (val == EPERM);
assert (len > 0);
assert (stun_agent_validate (&agent, &resp, resp_buf, len,
stun_agent_default_validater, validater_data) == STUN_VALIDATION_SUCCESS);
assert (stun_message_get_class (&resp) == STUN_ERROR);
stun_message_find_error (&resp, &code);
assert (code == STUN_ERROR_UNAUTHORIZED);
/* Bad integrity (bad password) */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
val = stun_message_append_string (&req, STUN_ATTRIBUTE_USERNAME, ufrag);
assert (val == 0);
rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass));
assert (rlen > 0);
len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen,
&resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), "bad", strlen ("bad"), &control, tie, 0);
assert (val == EPERM);
assert (len > 0);
assert (stun_agent_validate (&agent, &resp, resp_buf, len,
stun_agent_default_validater, validater_data) == STUN_VALIDATION_SUCCESS);
assert (stun_message_get_class (&resp) == STUN_ERROR);
stun_message_find_error (&resp, &code);
assert (code == STUN_ERROR_UNAUTHORIZED);
/* Invalid socket address */ /* Invalid socket address */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING)); assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
...@@ -236,29 +184,14 @@ int main (void) ...@@ -236,29 +184,14 @@ int main (void)
ip4.sin_family = AF_UNSPEC; ip4.sin_family = AF_UNSPEC;
len = sizeof (resp_buf); len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, val = stun_usage_ice_conncheck_create_reply (&agent, &req,
&resp, resp_buf, &len, (struct sockaddr *)&ip4, &resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); sizeof (ip4), &control, tie);
assert (val == EAFNOSUPPORT); assert (val == EAFNOSUPPORT);
assert (len == 0); assert (len == 0);
ip4.sin_family = AF_INET; ip4.sin_family = AF_INET;
/* Bad CRC32 */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
val = stun_message_append_string (&req, STUN_ATTRIBUTE_USERNAME, ufrag);
assert (val == 0);
rlen = stun_agent_finish_message (&agent, &req, pass, strlen (pass));
assert (rlen > 0);
((uint8_t *)stun_message_find (&req, STUN_ATTRIBUTE_FINGERPRINT, &alen))[0] ^= 1;
len = sizeof (resp_buf);
val = stun_conncheck_reply (&agent, &req, req_buf, rlen,
&resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0);
assert (val == EINVAL);
assert (len == 0);
/* Lost role conflict */ /* Lost role conflict */
assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING)); assert (stun_agent_init_request (&agent, &req, req_buf, sizeof(req_buf), STUN_BINDING));
val = stun_message_append64 (&req, STUN_ATTRIBUTE_ICE_CONTROLLING, tie + 1); val = stun_message_append64 (&req, STUN_ATTRIBUTE_ICE_CONTROLLING, tie + 1);
...@@ -271,9 +204,9 @@ int main (void) ...@@ -271,9 +204,9 @@ int main (void)
len = sizeof (resp_buf); len = sizeof (resp_buf);
control = true; control = true;
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, val = stun_usage_ice_conncheck_create_reply (&agent, &req,
&resp, resp_buf, &len, (struct sockaddr *)&ip4, &resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); sizeof (ip4), &control, tie);
assert (val == EACCES); assert (val == EACCES);
assert (len > 0); assert (len > 0);
assert (control == false); assert (control == false);
...@@ -292,9 +225,9 @@ int main (void) ...@@ -292,9 +225,9 @@ int main (void)
len = sizeof (resp_buf); len = sizeof (resp_buf);
control = false; control = false;
val = stun_conncheck_reply (&agent, &req, req_buf, rlen, val = stun_usage_ice_conncheck_create_reply (&agent, &req,
&resp, resp_buf, &len, (struct sockaddr *)&ip4, &resp, resp_buf, &len, (struct sockaddr *)&ip4,
sizeof (ip4), ufrag, strlen (ufrag), pass, strlen (pass), &control, tie, 0); sizeof (ip4), &control, tie);
assert (val == 0); assert (val == 0);
assert (len > 0); assert (len > 0);
assert (control == false); assert (control == false);
......
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