# include "config.h"
#endif
+#include <assert.h>
+
#include <vlc_common.h>
#include <vlc_access.h>
-#include "vlc_strings.h"
-#include "vlc_input.h"
+#include <vlc_strings.h>
+#include <vlc_input.h>
+#include <vlc_memory.h>
#include <vlc_network.h>
-#include "vlc_url.h"
+#include <vlc_url.h>
#include "asf.h"
#include "buffer.h"
( *p_sys->url.psz_host == '\0' ) )
{
msg_Err( p_access, "invalid host" );
- vlc_UrlClean( &p_sys->proxy );
- vlc_UrlClean( &p_sys->url );
- free( p_sys );
- return VLC_EGENERIC;
+ goto error;
}
if( p_sys->url.i_port <= 0 )
p_sys->url.i_port = 80;
if( Describe( p_access, &psz_location ) )
- {
- vlc_UrlClean( &p_sys->proxy );
- vlc_UrlClean( &p_sys->url );
- free( p_sys );
- return VLC_EGENERIC;
- }
+ goto error;
+
/* Handle redirection */
if( psz_location && *psz_location )
{
msg_Dbg( p_access, "redirection to %s", psz_location );
- input_thread_t * p_input = vlc_object_find( p_access, VLC_OBJECT_INPUT, FIND_PARENT );
+ input_thread_t * p_input = access_GetParentInput( p_access );
input_item_t * p_new_loc;
if( !p_input )
{
- vlc_UrlClean( &p_sys->proxy );
- vlc_UrlClean( &p_sys->url );
- free( p_sys );
free( psz_location );
- return VLC_EGENERIC;
+ goto error;
}
/** \bug we do not autodelete here */
p_new_loc = input_item_New( p_access, psz_location, psz_location );
{
msg_Err( p_access, "cannot start stream" );
free( p_sys->p_header );
- vlc_UrlClean( &p_sys->proxy );
- vlc_UrlClean( &p_sys->url );
- free( p_sys );
- return VLC_EGENERIC;
+ goto error;
}
if( !p_sys->b_broadcast )
}
return VLC_SUCCESS;
+
+error:
+ vlc_UrlClean( &p_sys->proxy );
+ vlc_UrlClean( &p_sys->url );
+ free( p_sys );
+ return VLC_EGENERIC;
}
/*****************************************************************************
Stop( p_access );
- free( p_sys->p_header );
+ free( p_sys->p_header );
vlc_UrlClean( &p_sys->proxy );
vlc_UrlClean( &p_sys->url );
msg_Err( p_access, "describe failed" );
return VLC_EGENERIC;
}
+ free( psz_location );
+
/* */
if( Start( p_access, 0 ) )
{
if( p_sys->i_header <= 0 )
return VLC_EGENERIC;
- asf_HeaderParse ( &p_sys->asfh,
- p_sys->p_header, p_sys->i_header );
+ asf_HeaderParse ( &p_sys->asfh,
+ p_sys->p_header, p_sys->i_header );
msg_Dbg( p_access, "packet count=%"PRId64" packet size=%d",
p_sys->asfh.i_data_packets_count,
p_sys->asfh.i_min_data_packet_size );
- asf_StreamSelect( &p_sys->asfh,
- var_CreateGetInteger( p_access, "mms-maxbitrate" ),
- var_CreateGetInteger( p_access, "mms-all" ),
- var_CreateGetInteger( p_access, "audio" ),
- var_CreateGetInteger( p_access, "video" ) );
+ asf_StreamSelect( &p_sys->asfh,
+ var_CreateGetInteger( p_access, "mms-maxbitrate" ),
+ var_CreateGetInteger( p_access, "mms-all" ),
+ var_CreateGetInteger( p_access, "audio" ),
+ var_CreateGetInteger( p_access, "video" ) );
/* Check we have comptible asfh */
for( i = 1; i < 128; i++ )
p_sys->i_packet_used = 0;
p_sys->i_packet_length = 0;
p_sys->p_packet = NULL;
- GenerateGuid ( &p_sys->guid );
+
+ GenerateGuid ( &p_sys->guid );
if( OpenConnection( p_access ) )
return VLC_EGENERIC;
}
/* Receive the http header */
- if( ( psz = net_Gets( VLC_OBJECT(p_access), p_sys->fd, NULL ) ) == NULL )
+ if( ( psz = net_Gets( p_access, p_sys->fd, NULL ) ) == NULL )
{
msg_Err( p_access, "failed to read answer" );
goto error;
*ppsz_location = psz_location;
return VLC_SUCCESS;
}
+ free( psz_location );
/* Read the asf header */
GetHeader( p_access );
*
* TODO : stream bitrates properties(optional)
* and bitrate mutual exclusion(optional) */
- asf_HeaderParse ( &p_sys->asfh,
- p_sys->p_header, p_sys->i_header );
+ asf_HeaderParse ( &p_sys->asfh,
+ p_sys->p_header, p_sys->i_header );
msg_Dbg( p_access, "packet count=%"PRId64" packet size=%d",
p_sys->asfh.i_data_packets_count,
p_sys->asfh.i_min_data_packet_size );
if( p_sys->asfh.i_min_data_packet_size <= 0 )
goto error;
- asf_StreamSelect( &p_sys->asfh,
- var_CreateGetInteger( p_access, "mms-maxbitrate" ),
- var_CreateGetInteger( p_access, "mms-all" ),
- var_CreateGetInteger( p_access, "audio" ),
- var_CreateGetInteger( p_access, "video" ) );
+ asf_StreamSelect( &p_sys->asfh,
+ var_CreateGetInteger( p_access, "mms-maxbitrate" ),
+ var_CreateGetInteger( p_access, "mms-all" ),
+ var_CreateGetInteger( p_access, "audio" ),
+ var_CreateGetInteger( p_access, "video" ) );
return VLC_SUCCESS;
error:
if( ck.i_data > 0 )
{
p_sys->i_header += ck.i_data;
- p_sys->p_header = realloc( p_sys->p_header, p_sys->i_header );
+ p_sys->p_header = realloc_or_free( p_sys->p_header, p_sys->i_header );
+ assert( p_sys->p_header );
memcpy( &p_sys->p_header[p_sys->i_header - ck.i_data],
ck.p_data, ck.i_data );
}
return VLC_EGENERIC;
}
- psz = net_Gets( VLC_OBJECT(p_access), p_sys->fd, NULL );
+ psz = net_Gets( p_access, p_sys->fd, NULL );
if( psz == NULL )
{
msg_Err( p_access, "cannot read data 0" );