- return VLC_SUCCESS;
- }
- return VLC_SUCCESS;
-}
-
-static char *SDPGenerate( sap_handler_t *p_sap,
- const session_descriptor_t *p_session,
- const sap_address_t *p_addr, vlc_bool_t b_ssm )
-{
- 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,
- (const struct sockaddr *)&p_session->orig, p_session->origlen,
- (const struct sockaddr *)&p_session->addr, p_session->addrlen);
- if (head == NULL)
- return NULL;
-
- psz_group = p_session->psz_group;
- psz_name = p_session->psz_name;
-
- char *plgroup;
- if ((psz_group == 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;
-
- int res = asprintf (&psz_sdp, "%s" "%s" "%s"
- "m=video %d %s\r\n",
- head,
- plgroup ?: "",
- sfilter ?: "",
- net_GetPort ((const struct sockaddr *)&p_session->addr),
- p_session->sdpformat);
- free (plgroup);
- free (sfilter);
-
- if (res == -1)
- return NULL;
-
- msg_Dbg( p_sap, "Generated SDP (%i bytes):\n%s", strlen(psz_sdp),
- psz_sdp );
- return psz_sdp;
-}
-
-static int CalculateRate( sap_handler_t *p_sap, sap_address_t *p_address )
-{
- int i_read;
- uint8_t buffer[SAP_MAX_BUFFER];
- int i_tot = 0;
- mtime_t i_temp;
- int i_rate;
-
- if( p_address->t1 == 0 )
- {
- p_address->t1 = mdate();
- return VLC_SUCCESS;
- }
- do
- {
- /* Might be too slow if we have huge data */
- i_read = net_ReadNonBlock( p_sap, p_address->i_rfd, NULL, buffer,
- SAP_MAX_BUFFER, 0 );
- i_tot += i_read;
- } while( i_read > 0 );
-
- i_temp = mdate();
-
- /* We calculate the rate every 5 seconds */
- if( i_temp - p_address->t1 < 5000000 )
- {
- p_address->i_buff += i_tot;
- return VLC_SUCCESS;
- }
-
- /* Bits/second */
- i_rate = (int)(8*1000000*((mtime_t)p_address->i_buff + (mtime_t)i_tot ) /
- (i_temp - p_address->t1 ));
-
- p_address->i_limit = 10000;
-
- p_address->i_interval = ((1000*i_rate / p_address->i_limit) *
- (MAX_INTERVAL - MIN_INTERVAL))/1000 + MIN_INTERVAL;
-
- if( p_address->i_interval > MAX_INTERVAL || p_address->i_interval < 0 )
- {
- p_address->i_interval = MAX_INTERVAL;