Changeset 32618df3197f77a203655603a2288d633822e40e

Show
Ignore:
Timestamp:
30/05/04 23:16:53 (5 years ago)
Author:
Laurent Aimar <fenrir@videolan.org>
git-committer:
Laurent Aimar <fenrir@videolan.org> 1085951813 +0000
git-parent:

[f3810735e07538d8309afae1c7278544e274b59e]

git-author:
Laurent Aimar <fenrir@videolan.org> 1085951813 +0000
Message:
  • tcp: convertd to access2.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/access/access2.c

    rdab3b92 r32618df  
    4343    add_shortcut( "http" ); 
    4444    add_shortcut( "ftp" ); 
     45    add_shortcut( "tcp" ); 
    4546 
    4647    /* Hack */ 
  • modules/access/tcp.c

    r4b9f4ff r32618df  
    4949                 CACHING_LONGTEXT, VLC_TRUE ); 
    5050 
    51     set_capability( "access", 0 ); 
     51    set_capability( "access2", 0 ); 
    5252    add_shortcut( "tcp" ); 
    5353    set_callbacks( Open, Close ); 
     
    5959struct access_sys_t 
    6060{ 
    61     int fd; 
     61    int        fd; 
     62    int64_t    i_tell; 
     63    vlc_bool_t b_eof; 
    6264}; 
    6365 
    64 static ssize_t Read ( input_thread_t *, byte_t *, size_t ); 
     66 
     67static int Read( access_t *, uint8_t *, int ); 
     68static int Control( access_t *, int, va_list ); 
    6569 
    6670/***************************************************************************** 
     
    6973static int Open( vlc_object_t *p_this ) 
    7074{ 
    71     input_thread_t *p_input = (input_thread_t *)p_this; 
    72     access_sys_t   *p_sys; 
    73  
    74     char           *psz_dup = strdup(p_input->psz_name); 
    75     char           *psz_parser = psz_dup; 
    76  
    77     vlc_value_t    val; 
     75    access_t     *p_access = (access_t *)p_this; 
     76    access_sys_t *p_sys; 
     77 
     78    char         *psz_dup = strdup(p_access->psz_path); 
     79    char         *psz_parser = psz_dup; 
    7880 
    7981    /* Parse server:port */ 
     
    9294    if( *psz_parser != ':' || psz_parser == psz_dup ) 
    9395    { 
    94         msg_Err( p_input, "you have to provide server:port addresse" ); 
     96        msg_Err( p_access, "you have to provide server:port addresse" ); 
    9597        free( psz_dup ); 
    9698        return VLC_EGENERIC; 
     
    100102    if( atoi( psz_parser ) <= 0 ) 
    101103    { 
    102         msg_Err( p_input, "invalid port number (%d)", atoi( psz_parser ) ); 
     104        msg_Err( p_access, "invalid port number (%d)", atoi( psz_parser ) ); 
    103105        free( psz_dup ); 
    104106        return VLC_EGENERIC; 
     
    106108 
    107109    /* Connect */ 
    108     p_input->p_access_data = p_sys = malloc( sizeof( access_sys_t ) ); 
    109     p_sys->fd = net_OpenTCP( p_input, psz_dup, atoi( psz_parser ) ); 
     110    p_access->p_sys = p_sys = malloc( sizeof( access_sys_t ) ); 
     111    p_sys->fd = net_OpenTCP( p_access, psz_dup, atoi( psz_parser ) ); 
     112    p_sys->i_tell = 0; 
     113    p_sys->b_eof = VLC_FALSE; 
    110114    free( psz_dup ); 
    111115 
     
    116120    } 
    117121 
    118     p_input->pf_read = Read; 
    119     p_input->pf_set_program = input_SetProgram; 
    120     p_input->pf_set_area = NULL; 
    121     p_input->pf_seek = NULL; 
    122  
    123     vlc_mutex_lock( &p_input->stream.stream_lock ); 
    124     p_input->stream.b_pace_control = VLC_TRUE;  /* FIXME ? */ 
    125     p_input->stream.b_seekable = 0; 
    126     p_input->stream.p_selected_area->i_tell = 0; 
    127     p_input->stream.i_method = INPUT_METHOD_NETWORK; 
    128     p_input->i_mtu = 0; 
    129     vlc_mutex_unlock( &p_input->stream.stream_lock ); 
     122    p_access->pf_read    = Read; 
     123    p_access->pf_block   = NULL; 
     124    p_access->pf_seek    = NULL; 
     125    p_access->pf_control = Control; 
    130126 
    131127    /* Update default_pts to a suitable value for udp access */ 
    132     var_Create( p_input, "tcp-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 
    133     var_Get( p_input, "tcp-caching", &val ); 
    134     p_input->i_pts_delay = val.i_int * 1000; 
     128    var_Create( p_access, "tcp-caching", VLC_VAR_INTEGER | VLC_VAR_DOINHERIT ); 
    135129 
    136130    return VLC_SUCCESS; 
     
    142136static void Close( vlc_object_t *p_this ) 
    143137{ 
    144     input_thread_t *p_input = (input_thread_t *)p_this; 
    145     access_sys_t   *p_sys = p_input->p_access_data; 
    146  
    147     msg_Info( p_input, "closing TCP target `%s'", p_input->psz_source ); 
     138    access_t     *p_access = (access_t *)p_this; 
     139    access_sys_t *p_sys = p_access->p_sys; 
    148140 
    149141    net_Close( p_sys->fd ); 
     
    154146 * Read: read on a file descriptor, checking b_die periodically 
    155147 *****************************************************************************/ 
    156 static ssize_t Read( input_thread_t * p_input, byte_t * p_buffer, size_t i_len ) 
    157 
    158     access_sys_t   *p_sys = p_input->p_access_data; 
    159  
    160     return net_Read( p_input, p_sys->fd, p_buffer, i_len, VLC_FALSE ); 
    161 
     148static int Read( access_t *p_access, uint8_t *p_buffer, int i_len ) 
     149
     150    access_sys_t *p_sys = p_access->p_sys; 
     151    int i_read; 
     152 
     153    if( p_sys->b_eof ) 
     154        return 0; 
     155 
     156    i_read = net_Read( p_access, p_sys->fd, p_buffer, i_len, VLC_FALSE ); 
     157    if( i_read == 0 ) 
     158        p_sys->b_eof = VLC_TRUE; 
     159    else if( i_read > 0 ) 
     160        p_sys->i_tell += i_read; 
     161 
     162    return i_read; 
     163
     164 
     165/***************************************************************************** 
     166 * Control: 
     167 *****************************************************************************/ 
     168static int Control( access_t *p_access, int i_query, va_list args ) 
     169
     170    access_sys_t *p_sys = p_access->p_sys; 
     171    vlc_bool_t   *pb_bool; 
     172    int          *pi_int; 
     173    int64_t      *pi_64; 
     174    vlc_value_t  val; 
     175 
     176    switch( i_query ) 
     177    { 
     178        /* */ 
     179        case ACCESS_CAN_SEEK: 
     180        case ACCESS_CAN_FASTSEEK: 
     181            pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); 
     182            *pb_bool = VLC_FALSE; 
     183            break; 
     184        case ACCESS_CAN_PAUSE: 
     185            pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); 
     186            *pb_bool = VLC_TRUE;    /* FIXME */ 
     187            break; 
     188        case ACCESS_CAN_CONTROL_PACE: 
     189            pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); 
     190            *pb_bool = VLC_TRUE;    /* FIXME */ 
     191            break; 
     192 
     193        /* */ 
     194        case ACCESS_GET_MTU: 
     195            pi_int = (int*)va_arg( args, int * ); 
     196            *pi_int = 0; 
     197            break; 
     198        case ACCESS_GET_SIZE: 
     199            pi_64 = (int64_t*)va_arg( args, int64_t * );  
     200            *pi_64 = 0; 
     201            break; 
     202        case ACCESS_GET_POS: 
     203            pi_64 = (int64_t*)va_arg( args, int64_t * ); 
     204            *pi_64 = p_sys->i_tell; 
     205            break; 
     206        case ACCESS_GET_EOF: 
     207            pb_bool = (vlc_bool_t*)va_arg( args, vlc_bool_t* ); 
     208            *pb_bool = p_sys->b_eof; 
     209            break; 
     210 
     211        case ACCESS_GET_PTS_DELAY: 
     212            pi_64 = (int64_t*)va_arg( args, int64_t * ); 
     213            var_Get( p_access, "tcp-caching", &val ); 
     214            *pi_64 = val.i_int * 1000; 
     215            break; 
     216 
     217        /* */ 
     218        case ACCESS_SET_PAUSE_STATE: 
     219            /* Nothing to do */ 
     220            break; 
     221 
     222        default: 
     223            msg_Err( p_access, "unimplemented query in control" ); 
     224            return VLC_EGENERIC; 
     225 
     226    } 
     227    return VLC_SUCCESS; 
     228