char *psz_icy_title;
uint64_t i_remaining;
+ uint64_t size;
bool b_seekable;
bool b_reconnect;
p_sys->i_remaining = 0;
p_sys->b_persist = false;
p_sys->b_has_size = false;
- p_access->info.i_size = 0;
+ p_sys->size = 0;
p_access->info.i_pos = 0;
p_access->info.b_eof = false;
if( p_sys->i_code == 401 )
{
+ if( p_sys->auth.psz_realm == NULL )
+ {
+ msg_Err( p_access, "authentication failed without realm" );
+ goto error;
+ }
char *psz_login, *psz_password;
/* FIXME ? */
if( p_sys->url.psz_username && p_sys->url.psz_password &&
if( p_sys->b_has_size )
{
/* Remaining bytes in the file */
- uint64_t remainder = p_access->info.i_size - p_access->info.i_pos;
+ uint64_t remainder = p_sys->size - p_access->info.i_pos;
if( remainder < i_len )
i_len = remainder;
p_access->info.i_pos += i_read;
if( p_sys->b_has_size )
{
- assert( p_access->info.i_pos <= p_access->info.i_size );
+ assert( p_access->info.i_pos <= p_sys->size );
assert( (unsigned)i_read <= p_sys->i_remaining );
p_sys->i_remaining -= i_read;
}
*****************************************************************************/
static int Seek( access_t *p_access, uint64_t i_pos )
{
- msg_Dbg( p_access, "trying to seek to %"PRId64, i_pos );
+ access_sys_t *p_sys = p_access->p_sys;
+ msg_Dbg( p_access, "trying to seek to %"PRId64, i_pos );
Disconnect( p_access );
- if( p_access->info.i_size
- && i_pos >= p_access->info.i_size ) {
- msg_Err( p_access, "seek to far" );
- int retval = Seek( p_access, p_access->info.i_size - 1 );
+ if( p_sys->size && i_pos >= p_sys->size )
+ {
+ msg_Err( p_access, "seek too far" );
+ int retval = Seek( p_access, p_sys->size - 1 );
if( retval == VLC_SUCCESS ) {
uint8_t p_buffer[2];
Read( p_access, p_buffer, 1);
* var_InheritInteger( p_access, "network-caching" );
break;
+ case ACCESS_GET_SIZE:
+ pi_64 = (int64_t*)va_arg( args, int64_t * );
+ *pi_64 = p_sys->size;
+ break;
+
/* */
case ACCESS_SET_PAUSE_STATE:
break;
p_sys->i_remaining = 0;
p_sys->b_persist = false;
p_sys->b_has_size = false;
- p_access->info.i_size = 0;
+ p_sys->size = 0;
p_access->info.i_pos = i_tell;
p_access->info.b_eof = false;
if( !strcasecmp( psz, "Content-Length" ) )
{
uint64_t i_size = i_tell + (p_sys->i_remaining = (uint64_t)atoll( p ));
- if(i_size > p_access->info.i_size) {
+ if(i_size > p_sys->size) {
p_sys->b_has_size = true;
- p_access->info.i_size = i_size;
+ p_sys->size = i_size;
}
msg_Dbg( p_access, "this frame size=%"PRIu64, p_sys->i_remaining );
}
else if( !strcasecmp( psz, "Content-Range" ) ) {
uint64_t i_ntell = i_tell;
- uint64_t i_nend = (p_access->info.i_size > 0)?(p_access->info.i_size - 1):i_tell;
- uint64_t i_nsize = p_access->info.i_size;
+ uint64_t i_nend = (p_sys->size > 0) ? (p_sys->size - 1) : i_tell;
+ uint64_t i_nsize = p_sys->size;
sscanf(p,"bytes %"SCNu64"-%"SCNu64"/%"SCNu64,&i_ntell,&i_nend,&i_nsize);
if(i_nend > i_ntell ) {
p_access->info.i_pos = i_ntell;
p_sys->i_icy_offset = i_ntell;
p_sys->i_remaining = i_nend+1-i_ntell;
uint64_t i_size = (i_nsize > i_nend) ? i_nsize : (i_nend + 1);
- if(i_size > p_access->info.i_size) {
+ if(i_size > p_sys->size) {
p_sys->b_has_size = true;
- p_access->info.i_size = i_size;
+ p_sys->size = i_size;
}
msg_Dbg( p_access, "stream size=%"PRIu64",pos=%"PRIu64",remaining=%"PRIu64,
i_nsize, i_ntell, p_sys->i_remaining);