Commit 2db764f9 authored by Clément Stenac's avatar Clément Stenac

* The VLC-integrated SAP server now sends compliant packets. They can

  only be viewed with the CVS version of VLC
parent 9de7a7eb
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* announce.h : Session announcement * announce.h : Session announcement
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* $Id: announce.h,v 1.1 2003/05/20 16:20:33 zorglub Exp $ * $Id: announce.h,v 1.2 2003/05/26 13:45:51 zorglub Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Laurent Aimar <fenrir@via.ecp.fr> * Laurent Aimar <fenrir@via.ecp.fr>
...@@ -51,6 +51,7 @@ struct sap_session_t ...@@ -51,6 +51,7 @@ struct sap_session_t
{ {
char psz_url[256]; char psz_url[256];
char psz_name[1024]; char psz_name[1024];
char psz_port[8];
module_t p_network; module_t p_network;
unsigned int socket; unsigned int socket;
unsigned int sendnow; unsigned int sendnow;
...@@ -62,6 +63,6 @@ struct sap_session_t ...@@ -62,6 +63,6 @@ struct sap_session_t
/***************************************************************************** /*****************************************************************************
* Prototypes * Prototypes
*****************************************************************************/ *****************************************************************************/
VLC_EXPORT( sap_session_t *, sout_SAPNew, ( sout_instance_t *,char * , char * ) ); VLC_EXPORT( sap_session_t *, sout_SAPNew, ( sout_instance_t *,char * , char * , char * ) );
VLC_EXPORT( void, sout_SAPSend, ( sout_instance_t *,sap_session_t * ) ); VLC_EXPORT( void, sout_SAPSend, ( sout_instance_t *,sap_session_t * ) );
VLC_EXPORT( void, sout_SAPDelete, ( sap_session_t * ) ); VLC_EXPORT( void, sout_SAPDelete, ( sap_session_t * ) );
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* standard.c * standard.c
***************************************************************************** *****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN * Copyright (C) 2001, 2002 VideoLAN
* $Id: standard.c,v 1.2 2003/05/20 16:20:33 zorglub Exp $ * $Id: standard.c,v 1.3 2003/05/26 13:45:52 zorglub Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -77,6 +77,8 @@ static int Open( vlc_object_t *p_this ) ...@@ -77,6 +77,8 @@ static int Open( vlc_object_t *p_this )
char *psz_sap = NULL; char *psz_sap = NULL;
char *psz_port = "1234";
sap_session_t *p_sap = NULL; sap_session_t *p_sap = NULL;
sout_access_out_t *p_access; sout_access_out_t *p_access;
...@@ -126,7 +128,7 @@ static int Open( vlc_object_t *p_this ) ...@@ -126,7 +128,7 @@ static int Open( vlc_object_t *p_this )
if(p_sys->b_sap) if(p_sys->b_sap)
{ {
msg_Dbg( p_sout , "Creating SAP" ); msg_Dbg( p_sout , "Creating SAP" );
p_sap = sout_SAPNew( p_sout , psz_url , psz_sap ); p_sap = sout_SAPNew( p_sout , psz_url , psz_port , psz_sap );
} }
/* XXX beurk */ /* XXX beurk */
......
...@@ -3,9 +3,8 @@ ...@@ -3,9 +3,8 @@
***************************************************************************** *****************************************************************************
* Copyright (C) 2002 VideoLAN * Copyright (C) 2002 VideoLAN
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Clment Stenac <zorglub@via.ecp.fr>
* Laurent Aimar <fenrir@via.ecp.fr> * Damien Lucas <nitrox@via.ecp.fr>
* Eric Petit <titer@videolan.org>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -37,13 +36,13 @@ ...@@ -37,13 +36,13 @@
#include <announce.h> #include <announce.h>
#include <network.h> #include <network.h>
#define SAP_ADDR "224.2.127.254" #define SAP_ADDR "224.2.127.254" /* Standard port and address for SAP */
#define SAP_PORT 9875 #define SAP_PORT 9875
/***************************************************************************** /*****************************************************************************
* sout_SAPNew: Creates a SAP Session * sout_SAPNew: Creates a SAP Session
*****************************************************************************/ *****************************************************************************/
sap_session_t * sout_SAPNew ( sout_instance_t *p_sout , char * psz_url_arg , char * psz_name_arg ) sap_session_t * sout_SAPNew ( sout_instance_t *p_sout , char * psz_url_arg , char *psz_port_arg , char * psz_name_arg )
{ {
sap_session_t *p_new; sap_session_t *p_new;
module_t *p_network; module_t *p_network;
...@@ -56,6 +55,7 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout , char * psz_url_arg , cha ...@@ -56,6 +55,7 @@ sap_session_t * sout_SAPNew ( sout_instance_t *p_sout , char * psz_url_arg , cha
sprintf ( p_new->psz_url , "%s" , psz_url_arg ); sprintf ( p_new->psz_url , "%s" , psz_url_arg );
sprintf ( p_new->psz_name , "%s" , psz_name_arg ); sprintf ( p_new->psz_name , "%s" , psz_name_arg );
sprintf ( p_new->psz_port, "%s" , psz_port_arg ); /* Not implemented in SO */
msg_Dbg (p_sout , "Creating SAP Socket" ); msg_Dbg (p_sout , "Creating SAP Socket" );
...@@ -106,32 +106,72 @@ void sout_SAPDelete( sap_session_t * p_this ) ...@@ -106,32 +106,72 @@ void sout_SAPDelete( sap_session_t * p_this )
*****************************************************************************/ *****************************************************************************/
void sout_SAPSend( sout_instance_t *p_sout, sap_session_t * p_this ) void sout_SAPSend( sout_instance_t *p_sout, sap_session_t * p_this )
{ {
char sap_msg[2048]; char *sap_head;
char *user="VideoLAN"; char sap_msg[1000];
char *machine="VideoLAN"; char *sap_send;
char *site="VideoLAN"; char *payload_type="application/sdp";
int i_send_result; int i_send_result;
int i;
int i_header_size;
int i_msg_size;
int i_size;
if(p_this->sendnow == 24) if( p_this->sendnow == 1 )
{ {
sprintf(sap_msg," ***øv=0 \n\ i_header_size = 9 + strlen( payload_type );
o=%s 3247692199 3247895918 IN IP4 %s \n\ sap_head = ( char * )malloc( i_header_size * sizeof( char ) );
s=%s\n\
u=%s \n\ sap_head[0]=0x20; /* Means IPv4, not encrypted, not compressed */
t=3247691400 3250117800 \n\ sap_head[1]=0x00; /* No authentification */
a=type:test \n\ sap_head[2]=0x42; /* Version */
m=audio 1234 udp 14 \n\ sap_head[3]=0x12; /* Version */
c=IN IP4 %s/15 \n\
xxxxxxxxxxxxxxxxxxxxx \n ",user,machine,p_this->psz_name,site,p_this->psz_url); sap_head[4]=0x01; /* Source IP FIXME: we should get the real address */
sap_head[5]=0x02; /* idem */
i_send_result = sendto( p_this->socket , sap_msg , strlen(sap_msg) , 0 , (struct sockaddr *)&p_this->addr , sizeof(p_this->addr) ); sap_head[6]=0x03; /* idem */
sap_head[7]=0x04; /* idem */
strncpy( sap_head+8 , payload_type , 15 );
sap_head[ i_header_size-1 ] = '\0';
/* Do not add spaces at beginning of the lines ! */
sprintf(sap_msg,"v=0\n\
o=VideoLAN 3247692199 3247895918 IN IP4 VideoLAN\n\
s=%s\n\
u=VideoLAN\n\
t=0 0\n\
m=audio %s udp 14\n\
c=IN IP4 %s/15\n\
a=type:test\n", p_this->psz_name , p_this->psz_port , p_this->psz_url );
i_msg_size = strlen( sap_msg );
i_size = i_msg_size + i_header_size;
sap_send = ( char* )malloc( i_size*sizeof(char) );
for(i=0 ; i<i_header_size ; i++)
{
sap_send[i] = sap_head[i];
}
for( ; i<i_size; i++)
{
sap_send[i] = sap_msg[i-i_header_size];
}
/* What we send is the SAP header and the SDP packet */
if(i_size<1024) /* We mustn't send packets larger than 1024B */
i_send_result = sendto( p_this->socket , sap_send , i_size , 0 , (struct sockaddr *)&p_this->addr , sizeof(p_this->addr) );
if(i_send_result == -1) if(i_send_result == -1)
{ {
msg_Warn(p_sout , "SAP Send failed on socket %i. " , p_this->socket ); msg_Warn(p_sout , "SAP Send failed on socket %i. " , p_this->socket );
perror("send"); perror("sendto");
} }
p_this->sendnow=0; p_this->sendnow = 0;
} if(sap_send) free(sap_send);
p_this->sendnow++; if(sap_head) free(sap_head);
}
p_this->sendnow++;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment