[Nice] [nice/master] Pass compat flag everywhere to not put stun-server into packets in gtalk mode

Olivier Crête olivier.crete at collabora.co.uk
Wed Nov 5 14:01:21 PST 2008


---
 stun/stun-ice.c             |    6 +++---
 stun/stun-msg.h             |    7 ++++---
 stun/stund.c                |    6 +++---
 stun/stunsend.c             |   21 ++++++++++++---------
 stun/tests/test-bind.c      |    8 ++++----
 stun/tests/test-conncheck.c |    2 +-
 stun/tests/test-format.c    |    6 +++---
 7 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/stun/stun-ice.c b/stun/stun-ice.c
index 0f07cd9..329b7be 100644
--- a/stun/stun-ice.c
+++ b/stun/stun-ice.c
@@ -60,7 +60,7 @@ stun_bind_error (uint8_t *buf, size_t *plen, const uint8_t *req,
   *plen = 0;
   DBG ("STUN Error Reply (buffer size: %u)...\n", (unsigned)len);
 
-  val = stun_init_error (buf, len, req, code);
+  val = stun_init_error (buf, len, req, code, compat);
   if (val)
     return val;
 
@@ -111,7 +111,7 @@ stun_conncheck_reply (uint8_t *restrict buf, size_t *restrict plen,
   if (stun_has_unknown (msg))
   {
     DBG (" Unknown mandatory attributes in message.\n");
-    val = stun_init_error_unknown (buf, len, msg);
+    val = stun_init_error_unknown (buf, len, msg, compat);
     if (!val)
       val = stun_finish_short (buf, &len, NULL, pass, NULL, compat);
     if (val)
@@ -186,7 +186,7 @@ stun_conncheck_reply (uint8_t *restrict buf, size_t *restrict plen,
     DBG ("STUN Role not specified by peer!\n");
 #endif
 
-  stun_init_response (buf, len, msg);
+  stun_init_response (buf, len, msg, compat);
   if (compat == 1) {
     val = stun_append_addr (buf, len, STUN_MAPPED_ADDRESS, src, srclen);
   } else {
diff --git a/stun/stun-msg.h b/stun/stun-msg.h
index 6d8d4d5..71d875b 100644
--- a/stun/stun-msg.h
+++ b/stun/stun-msg.h
@@ -546,7 +546,7 @@ void stun_init_indication (uint8_t *msg, stun_method_t m);
  *
  * ans == req is allowed.
  */
-void stun_init_response (uint8_t *ans, size_t msize, const uint8_t *req);
+void stun_init_response (uint8_t *ans, size_t msize, const uint8_t *req, int compat);
 
 /**
  * Initializes a STUN error response message buffer with an ERROR-CODE
@@ -564,7 +564,7 @@ void stun_init_response (uint8_t *ans, size_t msize, const uint8_t *req);
  * ans == req is allowed.
  */
 int stun_init_error (uint8_t *ans,  size_t msize, const uint8_t *req,
-                     stun_error_t err);
+                     stun_error_t err, int compat);
 
 /**
  * Initializes a STUN error response message buffer, in response to a valid
@@ -578,7 +578,8 @@ int stun_init_error (uint8_t *ans,  size_t msize, const uint8_t *req,
  *
  * ans == req is allowed.
  */
-int stun_init_error_unknown (uint8_t *ans, size_t msize, const uint8_t *req);
+int stun_init_error_unknown (uint8_t *ans, size_t msize, const uint8_t *req,
+                             int compat);
 
 size_t
 stun_finish_long (uint8_t *msg, size_t *restrict plen,
diff --git a/stun/stund.c b/stun/stund.c
index cc91a5f..abfb6fd 100644
--- a/stun/stund.c
+++ b/stun/stund.c
@@ -213,14 +213,14 @@ static int dgram_process (int sock)
   /* Unknown attributes */
   if (stun_has_unknown (buf))
   {
-    stun_init_error_unknown (buf, sizeof (buf), buf);
+    stun_init_error_unknown (buf, sizeof (buf), buf, 0);
     goto finish;
   }
 
   switch (stun_get_method (buf))
   {
     case STUN_BINDING:
-      stun_init_response (buf, sizeof (buf), buf);
+      stun_init_response (buf, sizeof (buf), buf, 0);
       if (stun_has_cookie (buf))
         stun_append_xor_addr (buf, sizeof (buf),
                               STUN_XOR_MAPPED_ADDRESS,
@@ -231,7 +231,7 @@ static int dgram_process (int sock)
       break;
 
     default:
-      stun_init_error (buf, sizeof (buf), buf, STUN_BAD_REQUEST);
+      stun_init_error (buf, sizeof (buf), buf, STUN_BAD_REQUEST, 0);
   }
 
 finish:
diff --git a/stun/stunsend.c b/stun/stunsend.c
index 1d8929b..1170c7b 100644
--- a/stun/stunsend.c
+++ b/stun/stunsend.c
@@ -213,17 +213,19 @@ stun_append_string (uint8_t *restrict msg, size_t msize,
 }
 
 
-static int stun_append_server (uint8_t *restrict msg, size_t msize)
+static int stun_append_server (uint8_t *restrict msg, size_t msize, int compat)
 {
   static const char server[] = PACKAGE_STRING;
   assert (strlen (server) < 128);
 
-  //  return stun_append_string (msg, msize, STUN_SERVER, server);
-  return 0;
+  if (compat == 1)
+    return 0;
+  else
+    return stun_append_string (msg, msize, STUN_SERVER, server);
 }
 
 
-void stun_init_response (uint8_t *ans, size_t msize, const uint8_t *req)
+void stun_init_response (uint8_t *ans, size_t msize, const uint8_t *req, int compat)
 {
   assert (stun_valid (req));
   assert (stun_get_class (req) == STUN_REQUEST);
@@ -232,7 +234,7 @@ void stun_init_response (uint8_t *ans, size_t msize, const uint8_t *req)
   stun_init (ans, STUN_RESPONSE, stun_get_method (req), stun_id (req));
   /* For RFC3489 compatibility, we cannot assume the cookie */
   memcpy (ans + 4, req + 4, 4);
-  (void)stun_append_server (ans, msize);
+  (void)stun_append_server (ans, msize, compat);
 }
 
 
@@ -320,7 +322,7 @@ stun_append_error (uint8_t *restrict msg, size_t msize, stun_error_t code)
 
 
 int stun_init_error (uint8_t *ans, size_t msize, const uint8_t *req,
-                     stun_error_t err)
+                     stun_error_t err, int compat)
 {
   assert (stun_valid (req));
   assert (msize >= 20u);
@@ -329,12 +331,13 @@ int stun_init_error (uint8_t *ans, size_t msize, const uint8_t *req,
   stun_init (ans, STUN_ERROR, stun_get_method (req), stun_id (req));
   /* For RFC3489 compatibility, we cannot assume the cookie */
   memcpy (ans + 4, req + 4, 4);
-  (void)stun_append_server (ans, msize);
+  (void)stun_append_server (ans, msize, compat);
   return stun_append_error (ans, msize, err);
 }
 
 
-int stun_init_error_unknown (uint8_t *ans, size_t msize, const uint8_t *req)
+int stun_init_error_unknown (uint8_t *ans, size_t msize, const uint8_t *req,
+                             int compat)
 {
   unsigned counter, i;
 #ifdef HAVE_C_VARARRAYS
@@ -346,7 +349,7 @@ int stun_init_error_unknown (uint8_t *ans, size_t msize, const uint8_t *req)
   counter = stun_find_unknown (req, ids, sizeof (ids) / sizeof (ids[0]));
   assert (counter > 0);
 
-  if (stun_init_error (ans, msize, req, STUN_UNKNOWN_ATTRIBUTE))
+  if (stun_init_error (ans, msize, req, STUN_UNKNOWN_ATTRIBUTE, compat))
     return ENOBUFS;
 
   for (i = 0; i < counter; i++)
diff --git a/stun/tests/test-bind.c b/stun/tests/test-bind.c
index ed97996..50d5089 100644
--- a/stun/tests/test-bind.c
+++ b/stun/tests/test-bind.c
@@ -266,7 +266,7 @@ static void responses (void)
   val = recv (servfd, buf, 1000, MSG_DONTWAIT);
   assert (val >= 0);
 
-  stun_init_error (buf, sizeof (buf), buf, STUN_SERVER_ERROR);
+  stun_init_error (buf, sizeof (buf), buf, STUN_SERVER_ERROR, 0);
   len = sizeof (buf);
   val = stun_finish (buf, &len, 0);
   assert (val == 0);
@@ -284,7 +284,7 @@ static void responses (void)
   val = recv (servfd, buf, 1000, MSG_DONTWAIT);
   assert (val >= 0);
 
-  stun_init_response (buf, sizeof (buf), buf);
+  stun_init_response (buf, sizeof (buf), buf, 0);
   val = stun_append_string (buf, sizeof (buf), 0x6000,
                             "This is an unknown attribute!");
   assert (val == 0);
@@ -306,7 +306,7 @@ static void responses (void)
   val = recv (servfd, buf, 1000, MSG_DONTWAIT);
   assert (val >= 0);
 
-  stun_init_response (buf, sizeof (buf), buf);
+  stun_init_response (buf, sizeof (buf), buf, 0);
   len = sizeof (buf);
   val = stun_finish (buf, &len, 0);
   assert (val == 0);
@@ -325,7 +325,7 @@ static void responses (void)
   val = recv (servfd, buf, 1000, MSG_DONTWAIT);
   assert (val >= 0);
 
-  stun_init_response (buf, sizeof (buf), buf);
+  stun_init_response (buf, sizeof (buf), buf, 0);
   val = stun_append_addr (buf, sizeof (buf), STUN_MAPPED_ADDRESS,
                           (struct sockaddr *)&addr, addrlen);
   assert (val == 0);
diff --git a/stun/tests/test-conncheck.c b/stun/tests/test-conncheck.c
index 3adee92..5895855 100644
--- a/stun/tests/test-conncheck.c
+++ b/stun/tests/test-conncheck.c
@@ -75,7 +75,7 @@ int main (void)
 
   /* Incorrect message class */
   stun_init_request (req, STUN_BINDING);
-  stun_init_response (req, sizeof (req), req);
+  stun_init_response (req, sizeof (req), req, 0);
   len = sizeof (req);
   val = stun_finish (req, &len, 0);
   assert (val == 0);
diff --git a/stun/tests/test-format.c b/stun/tests/test-format.c
index 4a29d65..9cbf53e 100644
--- a/stun/tests/test-format.c
+++ b/stun/tests/test-format.c
@@ -149,14 +149,14 @@ int main (void)
     fatal ("Request formatting test failed");
 
   /* Response formatting test */
-  stun_init_response (msg, sizeof (msg), msg);
+  stun_init_response (msg, sizeof (msg), msg, 0);
   finish_check (msg);
   if (memcmp (msg, "\x01\x01", 2))
     fatal ("Response formatting test failed");
 
   /* Error formatting test */
   stun_init_request (msg, STUN_BINDING);
-  if (stun_init_error (msg, sizeof (msg), msg, 400))
+  if (stun_init_error (msg, sizeof (msg), msg, 400, 0))
     fatal ("Error initialization test failed");
   finish_check (msg);
   if (memcmp (msg, "\x01\x11", 2))
@@ -164,7 +164,7 @@ int main (void)
 
   /* Unknown error formatting test */
   stun_init_request (msg, STUN_BINDING);
-  if (stun_init_error (msg, sizeof (msg), msg, 666))
+  if (stun_init_error (msg, sizeof (msg), msg, 666, 0))
     fatal ("Unknown error initialization test failed");
   finish_check (msg);
   if (memcmp (msg, "\x01\x11", 2))
-- 
1.5.6.5




More information about the Nice mailing list