/** Too big socket address test */ static void big_srv_addr (void) { uint8_t buf[sizeof (struct sockaddr_storage) + 16]; struct sockaddr dummy; int fd, val; memset (buf, 0, sizeof (buf)); val = stun_usage_bind_run ((struct sockaddr *)buf, sizeof (buf), &dummy, &(socklen_t){ sizeof (dummy) }); assert (val == STUN_USAGE_BIND_RETURN_ERROR); }
/** Too small socket address test */ static void small_srv_addr (void) { struct sockaddr addr, dummy; int val; memset (&addr, 0, sizeof (addr)); addr.sa_family = AF_INET; #ifdef HAVE_SA_LEN addr.sa_len = sizeof (addr); #endif val = stun_usage_bind_run (&addr, 1, &dummy, &(socklen_t){ sizeof (dummy) }); assert (val == STUN_USAGE_BIND_RETURN_ERROR); }
/** Incorrect socket family test */ static void bad_family (void) { struct sockaddr addr, dummy; int val; memset (&addr, 0, sizeof (addr)); addr.sa_family = AF_UNSPEC; #ifdef HAVE_SA_LEN addr.sa_len = sizeof (addr); #endif val = stun_usage_bind_run (&addr, sizeof (addr), &dummy, &(socklen_t){ sizeof (dummy) }); assert (val != 0); }
/** Timeout test */ static void timeout (void) { struct sockaddr_storage srv, dummy; socklen_t srvlen = sizeof (srv); socklen_t dummylen = sizeof(dummy); int val; /* Allocate a local UDP port, so we are 100% sure nobody responds there */ int servfd = listen_dgram (); assert (servfd != -1); val = getsockname (servfd, (struct sockaddr *)&srv, &srvlen); assert (val == 0); val = stun_usage_bind_run ((struct sockaddr *)&srv, srvlen, &dummy, &dummylen); assert (val == STUN_USAGE_BIND_RETURN_TIMEOUT); close (servfd); }