ipv4 = 0xe0027ffe;
}
- /* FIXME FIXME FIXME */
if( ipv4 == 0 )
{
msg_Err( p_sap, "Out-of-scope multicast address "
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)
|| (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;
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)
|| (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"
"\r\na=recvonly"
"\r\na=type:broadcast"
"\r\na=charset:UTF-8"
+ "%s" // optional source filter
"\r\n",
/* o= */ t, t, machine,
/* s= */ name,
/* u= */ preurl, url,
/* e= */ premail, email,
/* p= */ prephone, phone,
- /* c= */ conn) == -1)
+ /* c= */ conn,
+ /* source-filter */ sfilter) == -1)
return NULL;
return sdp;
}
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);