Commit ec06c01a authored by Loïc Minier's avatar Loïc Minier

* configure.ac.in:

    . renamed access_slp to slp
    . slp is enabled by default if slp.h is present
  * modules/access/slp.c:
    . slp is now an access and a demux and forces the use of itself
    . cleanups and bug corrections
    . disappears of the playlist
      Thanks to fenrir for the help in debugging!
parent 1e97f6ad
......@@ -2499,14 +2499,14 @@ dnl
dnl SLP access plugin
dnl
AC_ARG_ENABLE(slp,
[ --enable-slp SLP service discovery support (default disabled)])
if test "x${enable_slp}" = "xyes"
[ --enable-slp SLP service discovery support (default enabled)])
if test "x${enable_slp}" != "xno"
then
AC_CHECK_HEADER(slp.h, have_slp="true", have_slp="false")
if test "x${have_slp}" = "xtrue"
then
PLUGINS="${PLUGINS} access_slp"
LDFLAGS_access_slp="${LDFLAGS_access_slp} -lslp"
PLUGINS="${PLUGINS} slp"
LDFLAGS_slp="${LDFLAGS_slp} -lslp"
fi
fi
......
......@@ -4,7 +4,7 @@
* control the pace of reading.
*****************************************************************************
* Copyright (C) 1999, 2000 VideoLAN
* $Id: input_ext-intf.h,v 1.83 2003/01/07 21:49:01 fenrir Exp $
* $Id: input_ext-intf.h,v 1.84 2003/01/16 23:25:54 lool Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
......@@ -352,6 +352,7 @@ struct input_thread_t
#define INPUT_METHOD_VLAN_BCAST 0x34 /* UDP broadcast with VLANs */
#define INPUT_METHOD_SATELLITE 0x40 /* stream is read from a */
/* satellite card */
#define INPUT_METHOD_SLP 0x50 /* SLP stream */
/* Status changing methods */
#define INPUT_STATUS_END 0
......
......@@ -2,4 +2,4 @@ SOURCES_access_file = modules/access/file.c
SOURCES_access_udp = modules/access/udp.c
SOURCES_access_http = modules/access/http.c
SOURCES_access_ftp = modules/access/ftp.c
SOURCES_access_slp = modules/access/slp.c
SOURCES_slp = modules/access/slp.c
......@@ -2,7 +2,7 @@
* slp.c: SLP access plugin
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: slp.c,v 1.2 2003/01/10 06:16:55 lool Exp $
* $Id: slp.c,v 1.3 2003/01/16 23:25:55 lool Exp $
*
* Authors: Loc Minier <lool@videolan.org>
*
......@@ -27,13 +27,20 @@
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <vlc_playlist.h>
#include <slp.h>
/*****************************************************************************
* Local prototypes
*****************************************************************************/
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
static int Open ( vlc_object_t * );
static void Close ( vlc_object_t * );
static ssize_t Read ( input_thread_t *, byte_t *, size_t );
static int Init ( vlc_object_t * );
static void End ( vlc_object_t * );
static int Demux ( input_thread_t * );
/*****************************************************************************
* Module descriptor
......@@ -59,15 +66,19 @@ static void Close ( vlc_object_t * );
vlc_module_begin();
set_description( _("SLP access module") );
add_category_hint( N_("slp"), NULL );
set_capability( "access", 0 );
add_shortcut( "slp" );
add_string( "slp-srvtype", "service:vls.services.videolan.org:udpm",
NULL, SRVTYPE_TEXT, SRVTYPE_LONGTEXT );
add_string( "slp-scopelist", "", NULL, SCOPELIST_TEXT,
SCOPELIST_LONGTEXT );
add_string( "slp-filter", "", NULL, FILTER_TEXT, FILTER_LONGTEXT );
add_string( "slp-lang", "", NULL, LANG_TEXT, LANG_LONGTEXT );
set_callbacks( Open, Close );
add_submodule();
set_capability( "access", 0 );
set_callbacks( Open, Close );
add_submodule();
add_shortcut( "demux_slp" );
set_capability( "demux", 0 );
set_callbacks( Init, End );
vlc_module_end();
/*****************************************************************************
......@@ -123,7 +134,7 @@ static SLPBoolean SrvUrlCallback( SLPHandle hslp,
}
/*****************************************************************************
* Open: initialize library
* Open: initialize library for the access module
*****************************************************************************/
static int Open( vlc_object_t * p_this )
{
......@@ -131,6 +142,19 @@ static int Open( vlc_object_t * p_this )
char * psz_name = strdup(p_input->psz_name);
SLPError slpe_result;
SLPHandle slph_slp;
playlist_t * p_playlist;
/* remove the "slp:" entry of the playlist */
p_playlist = (playlist_t *) vlc_object_find( p_input, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( !p_playlist )
{
msg_Err( p_input, "can't find playlist" );
return -1;
}
p_playlist->pp_items[p_playlist->i_index]->b_autodeletion = VLC_TRUE;
vlc_object_release( (vlc_object_t *)p_playlist );
/* get a new handle to the library */
if( SLPOpen( config_GetPsz( p_input, "slp-lang" ),
......@@ -155,14 +179,77 @@ static int Open( vlc_object_t * p_this )
SLPClose( slph_slp );
}
return( -1 );
if( !p_input->psz_demux || !*p_input->psz_demux )
{
p_input->psz_demux = "demux_slp";
}
p_input->pf_read = Read;
p_input->pf_set_program = NULL;
p_input->pf_set_area = NULL;
p_input->pf_seek = NULL;
vlc_mutex_lock( &p_input->stream.stream_lock );
p_input->stream.b_pace_control = VLC_FALSE;
p_input->stream.b_seekable = VLC_FALSE;
p_input->stream.b_connected = VLC_TRUE;
p_input->stream.p_selected_area->i_tell = 0;
p_input->stream.p_selected_area->i_size = 0;
p_input->stream.i_method = INPUT_METHOD_SLP;
vlc_mutex_unlock( &p_input->stream.stream_lock );
p_input->i_mtu = 0;
return 0;
}
/*****************************************************************************
* Close: free unused data structures
* Close: close access
*****************************************************************************/
static void Close( vlc_object_t * p_this )
{
return;
}
/*****************************************************************************
* Read: should fill but zeroes the buffer
*****************************************************************************/
static ssize_t Read ( input_thread_t *p_input, byte_t *p_buffer, size_t s )
{
memset( p_buffer, 0, s );
return s;
}
/*****************************************************************************
* Init: initialize demux
*****************************************************************************/
int Init ( vlc_object_t *p_this )
{
input_thread_t *p_input = (input_thread_t *)p_this;
if( p_input->stream.i_method != INPUT_METHOD_SLP )
{
return -1;
}
p_input->pf_demux = Demux;
p_input->pf_rewind = NULL;
return 0;
}
/*****************************************************************************
* Demux: should demux but does nothing
*****************************************************************************/
static int Demux ( input_thread_t * p_input )
{
return 0;
}
/*****************************************************************************
* End: end demux
*****************************************************************************/
static void End ( vlc_object_t *p_this )
{
return;
}
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