Changeset 32618df3197f77a203655603a2288d633822e40e
- Timestamp:
- 30/05/04 23:16:53 (5 years ago)
- git-parent:
- Files:
-
- modules/access/access2.c (modified) (1 diff)
- modules/access/tcp.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
modules/access/access2.c
rdab3b92 r32618df 43 43 add_shortcut( "http" ); 44 44 add_shortcut( "ftp" ); 45 add_shortcut( "tcp" ); 45 46 46 47 /* Hack */ modules/access/tcp.c
r4b9f4ff r32618df 49 49 CACHING_LONGTEXT, VLC_TRUE ); 50 50 51 set_capability( "access ", 0 );51 set_capability( "access2", 0 ); 52 52 add_shortcut( "tcp" ); 53 53 set_callbacks( Open, Close ); … … 59 59 struct access_sys_t 60 60 { 61 int fd; 61 int fd; 62 int64_t i_tell; 63 vlc_bool_t b_eof; 62 64 }; 63 65 64 static ssize_t Read ( input_thread_t *, byte_t *, size_t ); 66 67 static int Read( access_t *, uint8_t *, int ); 68 static int Control( access_t *, int, va_list ); 65 69 66 70 /***************************************************************************** … … 69 73 static int Open( vlc_object_t *p_this ) 70 74 { 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; 78 80 79 81 /* Parse server:port */ … … 92 94 if( *psz_parser != ':' || psz_parser == psz_dup ) 93 95 { 94 msg_Err( p_ input, "you have to provide server:port addresse" );96 msg_Err( p_access, "you have to provide server:port addresse" ); 95 97 free( psz_dup ); 96 98 return VLC_EGENERIC; … … 100 102 if( atoi( psz_parser ) <= 0 ) 101 103 { 102 msg_Err( p_ input, "invalid port number (%d)", atoi( psz_parser ) );104 msg_Err( p_access, "invalid port number (%d)", atoi( psz_parser ) ); 103 105 free( psz_dup ); 104 106 return VLC_EGENERIC; … … 106 108 107 109 /* 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; 110 114 free( psz_dup ); 111 115 … … 116 120 } 117 121 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; 130 126 131 127 /* 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 ); 135 129 136 130 return VLC_SUCCESS; … … 142 136 static void Close( vlc_object_t *p_this ) 143 137 { 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; 148 140 149 141 net_Close( p_sys->fd ); … … 154 146 * Read: read on a file descriptor, checking b_die periodically 155 147 *****************************************************************************/ 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 } 148 static 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 *****************************************************************************/ 168 static 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 }
