address-pool: Verify that multicast addresses are used for multicast and vice-versa
authorOlivier CrĂȘte <olivier.crete@collabora.com>
Wed, 20 Feb 2013 19:26:03 +0000 (14:26 -0500)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 11 Mar 2013 10:07:20 +0000 (11:07 +0100)
gst/rtsp-server/rtsp-address-pool.c
tests/check/gst/addresspool.c

index c339ac5..b6e2711 100644 (file)
@@ -183,7 +183,8 @@ gst_rtsp_address_pool_clear (GstRTSPAddressPool * pool)
 }
 
 static gboolean
-fill_address (const gchar * address, guint16 port, Addr * addr)
+fill_address (const gchar * address, guint16 port, Addr * addr,
+    gboolean is_multicast)
 {
   GInetAddress *inet;
 
@@ -191,6 +192,11 @@ fill_address (const gchar * address, guint16 port, Addr * addr)
   if (inet == NULL)
     return FALSE;
 
+  if (is_multicast != g_inet_address_get_is_multicast (inet)) {
+    g_object_unref (inet);
+    return FALSE;
+  }
+
   addr->size = g_inet_address_get_native_size (inet);
   memcpy (addr->bytes, g_inet_address_to_bytes (inet), addr->size);
   g_object_unref (inet);
@@ -243,9 +249,9 @@ gst_rtsp_address_pool_add_range (GstRTSPAddressPool * pool,
 
   range = g_slice_new0 (AddrRange);
 
-  if (!fill_address (min_address, min_port, &range->min))
+  if (!fill_address (min_address, min_port, &range->min, (ttl != 0)))
     goto invalid;
-  if (!fill_address (max_address, max_port, &range->max))
+  if (!fill_address (max_address, max_port, &range->max, (ttl != 0)))
     goto invalid;
 
   if (range->min.size != range->max.size)
@@ -603,7 +609,7 @@ gst_rtsp_address_pool_reserve_address (GstRTSPAddressPool * pool,
   result = NULL;
   addr = NULL;
 
-  if (!fill_address (address, port, &input_addr)) {
+  if (!fill_address (address, port, &input_addr, (ttl != 0))) {
     GST_ERROR_OBJECT (pool, "invalid address %s", address);
     return NULL;
   }
index 3341e48..b4d7742 100644 (file)
@@ -78,14 +78,14 @@ GST_START_TEST (test_pool)
    * starting with even port
    */
   fail_unless (gst_rtsp_address_pool_add_range (pool,
-          "2001:DB8::1", "2001:DB8::1", 5001, 5003, 1));
+          "FF11:DB8::1", "FF11:DB8::1", 5001, 5003, 1));
 
   addr = gst_rtsp_address_pool_acquire_address (pool,
       GST_RTSP_ADDRESS_FLAG_IPV6 | GST_RTSP_ADDRESS_FLAG_EVEN_PORT |
       GST_RTSP_ADDRESS_FLAG_MULTICAST, 2);
   fail_unless (addr != NULL);
   fail_unless (addr->port == 5002);
-  fail_unless (!g_ascii_strcasecmp (addr->address, "2001:DB8::1"));
+  fail_unless (!g_ascii_strcasecmp (addr->address, "FF11:DB8::1"));
 
   /* Will fail becuse there is only one IPv6 address left */
   addr2 = gst_rtsp_address_pool_acquire_address (pool,