]> git.sesse.net Git - vlc/commitdiff
Repair SAP + SSM
authorRémi Denis-Courmont <rem@videolan.org>
Sat, 10 Feb 2007 21:32:28 +0000 (21:32 +0000)
committerRémi Denis-Courmont <rem@videolan.org>
Sat, 10 Feb 2007 21:32:28 +0000 (21:32 +0000)
src/stream_output/sap.c
src/stream_output/sdp.c
src/stream_output/stream_output.h

index b5ccd3bf1ede327f8852bb5a49a50f675a8f69e3..71fb7849e079bef93bf9d33f0c424d79e5df77c3 100644 (file)
@@ -321,7 +321,6 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
                 ipv4 = 0xe0027ffe;
             }
 
-            /* FIXME FIXME FIXME */
             if( ipv4 == 0 )
             {
                 msg_Err( p_sap, "Out-of-scope multicast address "
@@ -600,7 +599,7 @@ static char *SDPGenerate( sap_handler_t *p_sap,
     char *psz_group, *psz_name, *psz_sdp;
 
      char *head = StartSDP (p_session->psz_name, p_session->description,
-        p_session->url, p_session->email, p_session->phone,
+        p_session->url, p_session->email, p_session->phone, b_ssm,
         (const struct sockaddr *)&p_session->orig, p_session->origlen,
         (const struct sockaddr *)&p_session->addr, p_session->addrlen);
     if (head == NULL)
@@ -614,32 +613,20 @@ static char *SDPGenerate( sap_handler_t *p_sap,
      || (asprintf (&plgroup, "a=x-plgroup:%s\r\n", psz_group) == -1))
         plgroup = NULL;
 
-    char *sfilter;
-#if 0
-    if ((!b_ssm)
-     || (asprintf (&sfilter, "a=source-filter: incl IN IP%c * %s\r\n",
-                   ipv, p_addr->psz_machine) == -1))
-#else
-# warning FIXME: repair Source Specific Multicast
-#endif
-        sfilter = NULL;
-
     const char *comedia = NULL;
     if (!strncasecmp (p_session->sdpformat, "DCCP", 4)
      || !strncasecmp (p_session->sdpformat, "TCP", 3))
         comedia = "a=setup:passive\r\n"
                   "a=connection:new\r\n";
 
-    int res = asprintf (&psz_sdp, "%s" "%s" "%s" "%s"
+    int res = asprintf (&psz_sdp, "%s" "%s" "%s"
                         "m=video %d %s\r\n",
                         head,
                         plgroup ?: "",
-                        sfilter ?: "",
                         comedia ?: "",
                         net_GetPort ((const struct sockaddr *)&p_session->addr),
                         p_session->sdpformat);
     free (plgroup);
-    free (sfilter);
 
     if (res == -1)
         return NULL;
index 95734f9ee32b5949d0930d5d956803c2b815a2cc..d49a92afb0519fb6d394830a125a566cb84ab889 100644 (file)
@@ -85,12 +85,13 @@ static vlc_bool_t IsSDPString (const char *str)
 
 
 char *StartSDP (const char *name, const char *description, const char *url,
-                const char *email, const char *phone,
+                const char *email, const char *phone, vlc_bool_t ssm,
                 const struct sockaddr *orig, socklen_t origlen,
                 const struct sockaddr *addr, socklen_t addrlen)
 {
     uint64_t t = NTPtime64 ();
-    char *sdp, machine[MAXSDPADDRESS], conn[MAXSDPADDRESS];
+    char *sdp, machine[MAXSDPADDRESS], conn[MAXSDPADDRESS],
+         sfilter[MAXSDPADDRESS + sizeof ("\r\na=source-filter: incl * ")];
     const char *preurl = "\r\nu=", *premail = "\r\ne=", *prephone = "\r\np=";
 
     if (name == NULL)
@@ -110,6 +111,12 @@ char *StartSDP (const char *name, const char *description, const char *url,
      || (AddressToSDP ((struct sockaddr *)addr, addrlen, conn) == NULL))
         return NULL;
 
+    if (ssm)
+        sprintf (sfilter, "\r\na=source-filter: incl IN IP%c * %s",
+                 machine[5], machine + 7);
+    else
+        *sfilter = '\0';
+
     if (asprintf (&sdp, "v=0"
                     "\r\no=- "I64Fu" "I64Fu" %s"
                     "\r\ns=%s"
@@ -127,6 +134,7 @@ char *StartSDP (const char *name, const char *description, const char *url,
                     "\r\na=recvonly"
                     "\r\na=type:broadcast"
                     "\r\na=charset:UTF-8"
+                   "%s" // optional source filter
                     "\r\n",
                /* o= */ t, t, machine,
                /* s= */ name,
@@ -134,7 +142,8 @@ char *StartSDP (const char *name, const char *description, const char *url,
                /* u= */ preurl, url,
                /* e= */ premail, email,
                /* p= */ prephone, phone,
-               /* c= */ conn) == -1)
+               /* c= */ conn,
+    /* source-filter */ sfilter) == -1)
         return NULL;
     return sdp;
 }
index 01b98592193b1a63a9b28163ea324475b7598540..4ecdf9bf672e1f23438d919a5944031ca17593cd 100644 (file)
@@ -111,7 +111,7 @@ sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce );
 void announce_SAPHandlerDestroy( sap_handler_t *p_sap );
 
 char *StartSDP (const char *name, const char *description, const char *url,
-                const char *email, const char *phone,
+                const char *email, const char *phone, vlc_bool_t ssm,
                 const struct sockaddr *orig, socklen_t origlen,
                 const struct sockaddr *addr, socklen_t addrlen);