Changeset e1cfc6b69e75c5f3ac564bf116e68bac9735db77

Show
Ignore:
Timestamp:
18/08/07 19:55:51 (1 year ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1187459751 +0000
git-parent:

[c92a74565af6e57bbd6c29d00702ac04bdf3a5aa]

git-author:
Rémi Denis-Courmont <rem@videolan.org> 1187459751 +0000
Message:

Make sure SOCKS is only attempted with TCP

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/network/tcp.c

    rc4c6895 re1cfc6b  
    8585    hints.ai_socktype = SOCK_STREAM; 
    8686 
    87     psz_socks = var_CreateGetString( p_this, "socks" ); 
    88     if( *psz_socks && *psz_socks != ':'
     87    psz_socks = var_CreateGetNonEmptyString( p_this, "socks" ); 
     88    if( psz_socks != NULL
    8989    { 
    9090        char *psz = strchr( psz_socks, ':' ); 
     
    9696        i_realport = ( psz != NULL ) ? atoi( psz ) : 1080; 
    9797 
    98         msg_Dbg( p_this, "net: connecting to %s port %d for %s port %d", 
     98        msg_Dbg( p_this, "net: connecting to %s port %d (SOCKS) for %s port %d", 
    9999                 psz_realhost, i_realport, psz_host, i_port ); 
     100 
     101        /* We only implement TCP with SOCKS */ 
     102        switch( type ) 
     103        { 
     104            case 0: 
     105                type = SOCK_STREAM; 
     106            case SOCK_STREAM: 
     107                break; 
     108            default: 
     109                msg_Err( p_this, "Socket type not supported through SOCKS" ); 
     110                free( psz_socks ); 
     111                return -1; 
     112        } 
     113        switch( proto ) 
     114        { 
     115            case 0: 
     116                proto = IPPROTO_TCP; 
     117            case IPPROTO_TCP: 
     118                break; 
     119            default: 
     120                msg_Err( p_this, "Transport not supported through SOCKS" ); 
     121                free( psz_socks ); 
     122                return -1; 
     123        } 
    100124    } 
    101125    else 
     
    109133 
    110134    i_val = vlc_getaddrinfo( p_this, psz_realhost, i_realport, &hints, &res ); 
     135    free( psz_socks ); 
     136 
    111137    if( i_val ) 
    112138    { 
    113139        msg_Err( p_this, "cannot resolve %s port %d : %s", psz_realhost, 
    114140                 i_realport, vlc_gai_strerror( i_val ) ); 
    115         free( psz_socks ); 
    116141        return -1; 
    117142    } 
     
    170195                    net_Close( fd ); 
    171196                    vlc_freeaddrinfo( res ); 
    172                     free( psz_socks ); 
    173197                    return -1; 
    174198                } 
     
    231255        msg_Err( p_this, "Connection to %s port %d failed: %s", psz_host, 
    232256                 i_port, net_strerror( i_saved_errno ) ); 
    233         free( psz_socks ); 
    234257        return -1; 
    235258    } 
    236259 
    237     if( *psz_socks && *psz_socks != ':' ) 
    238     { 
     260    if( psz_socks != NULL ) 
     261    { 
     262        /* NOTE: psz_socks already free'd! */ 
    239263        char *psz_user = var_CreateGetString( p_this, "socks-user" ); 
    240264        char *psz_pwd  = var_CreateGetString( p_this, "socks-pwd" ); 
     
    251275        free( psz_pwd ); 
    252276    } 
    253     free( psz_socks ); 
    254277 
    255278    return i_handle;