[vlc-devel] [PATCH 1/2] cli: remove TCP mode (--rc-host)

Alexandre Janniaux ajanni at videolabs.io
Sat Nov 21 12:10:20 CET 2020


Hi,

That's litterally my only use case for the Cli interface
and was a point that I shared and used for the transition
from lua RC to C RC. If this is to be merged, then there's
no point in replacing the lua RC and I'll vote for restoring
the lua RC.

-1

Regards,
--
Alexandre Janniaux
Videolabs

On Fri, Nov 20, 2020 at 07:05:40PM +0200, remi at remlab.net wrote:
> From: RĂ©mi Denis-Courmont <remi at remlab.net>
>
> There are several issues with TCP mode:
> - It can only handle one client at a time, and will ignore any new
>   connection until the current one properly ends, making it as
>   unreliable as it comes.
> - Most commands are not acknowledged.
> - It has no security whatsoever.
>
> There is not much point trying to "fix" those issues, as it would
> not provide backward compatibility, which was the only reason to keep
> this.
>
> For remote control, the HTTP interface is much better. It is insecure,
> but at least it handles multiple clients, acknowledges requests and
> requires a password.
>
> For reliability and security, a much better approach is to pass the
> CLI commands over SSH (or similar) - which is what people actually do.
> ---
>  modules/control/cli/cli.c | 94 ++++-----------------------------------
>  1 file changed, 9 insertions(+), 85 deletions(-)
>
> diff --git a/modules/control/cli/cli.c b/modules/control/cli/cli.c
> index c741e7fcad..1cd3f846cf 100644
> --- a/modules/control/cli/cli.c
> +++ b/modules/control/cli/cli.c
> @@ -97,11 +97,7 @@ static void msg_vprint(intf_thread_t *p_intf, const char *psz_fmt, va_list args)
>      if( len < 0 )
>          return;
>
> -    if( p_intf->p_sys->i_socket == -1 )
> -        utf8_fprintf( stdout, "%s", msg );
> -    else
> -        net_Write( p_intf, p_intf->p_sys->i_socket, msg, len );
> -
> +    utf8_fprintf( stdout, "%s", msg );
>      free( msg );
>  #endif
>  }
> @@ -247,12 +243,6 @@ static void LogOut(intf_thread_t *intf, const char *const *args, size_t count)
>              vlc_close(fd);
>          }
>      }
> -#else
> -    if (sys->i_socket != -1)
> -    {
> -        net_Close(sys->i_socket);
> -        sys->i_socket = -1;
> -    }
>  #endif
>      (void) args; (void) count;
>  }
> @@ -493,9 +483,9 @@ static bool ReadWin32( intf_thread_t *p_intf, unsigned char *p_buffer, int *pi_s
>  static bool ReadCommand(intf_thread_t *p_intf, char *p_buffer, int *pi_size)
>  {
>  #if !VLC_WINSTORE_APP
> -    if( p_intf->p_sys->i_socket == -1 && !p_intf->p_sys->b_quiet )
> +    if( !p_intf->p_sys->b_quiet )
>          return ReadWin32( p_intf, (unsigned char*)p_buffer, pi_size );
> -    else if( p_intf->p_sys->i_socket == -1 )
> +    else
>      {
>          vlc_tick_sleep( INTF_IDLE_SLEEP );
>          return false;
> @@ -504,25 +494,11 @@ static bool ReadCommand(intf_thread_t *p_intf, char *p_buffer, int *pi_size)
>
>      while( *pi_size < MAX_LINE_LENGTH )
>      {
> -        if( p_intf->p_sys->i_socket == -1 )
> -        {
> -            if( read( 0/*STDIN_FILENO*/, p_buffer + *pi_size, 1 ) <= 0 )
> -            {   /* Standard input closed: exit */
> -                libvlc_Quit( vlc_object_instance(p_intf) );
> -                p_buffer[*pi_size] = 0;
> -                return true;
> -            }
> -        }
> -        else
> -        {   /* Connection closed */
> -            if( net_Read( p_intf, p_intf->p_sys->i_socket, p_buffer + *pi_size,
> -                          1 ) <= 0 )
> -            {
> -                net_Close( p_intf->p_sys->i_socket );
> -                p_intf->p_sys->i_socket = -1;
> -                p_buffer[*pi_size] = 0;
> -                return true;
> -            }
> +        if( read( 0/*STDIN_FILENO*/, p_buffer + *pi_size, 1 ) <= 0 )
> +        {   /* Standard input closed: exit */
> +            libvlc_Quit( vlc_object_instance(p_intf) );
> +            p_buffer[*pi_size] = 0;
> +            return true;
>          }
>
>          if( p_buffer[ *pi_size ] == '\r' || p_buffer[ *pi_size ] == '\n' )
> @@ -574,14 +550,6 @@ static void *Run( void *data )
>          bool b_complete;
>
>          vlc_restorecancel( canc );
> -
> -        if( p_sys->pi_socket_listen != NULL && p_sys->i_socket == -1 )
> -        {
> -            p_sys->i_socket =
> -                net_Accept( p_intf, p_sys->pi_socket_listen );
> -            if( p_sys->i_socket == -1 ) continue;
> -        }
> -
>          b_complete = ReadCommand( p_intf, p_buffer, &i_size );
>          canc = vlc_savecancel( );
>
> @@ -688,42 +656,6 @@ static int Activate( vlc_object_t *p_this )
>  #endif /* AF_LOCAL */
>  #endif /* !_WIN32 */
>
> -    if( ( pi_socket == NULL ) &&
> -        ( psz_host = var_InheritString( p_intf, "rc-host" ) ) != NULL )
> -    {
> -        vlc_url_t url;
> -
> -        vlc_UrlParse( &url, psz_host );
> -        if( url.psz_host == NULL )
> -        {
> -            vlc_UrlClean( &url );
> -            char *psz_backward_compat_host;
> -            if( asprintf( &psz_backward_compat_host, "//%s", psz_host ) < 0 )
> -            {
> -                free( psz_host );
> -                return VLC_EGENERIC;
> -            }
> -            free( psz_host );
> -            psz_host = psz_backward_compat_host;
> -            vlc_UrlParse( &url, psz_host );
> -        }
> -
> -        msg_Dbg( p_intf, "base: %s, port: %d", url.psz_host, url.i_port );
> -
> -        pi_socket = net_ListenTCP(p_this, url.psz_host, url.i_port);
> -        if( pi_socket == NULL )
> -        {
> -            msg_Warn( p_intf, "can't listen to %s port %i",
> -                      url.psz_host, url.i_port );
> -            vlc_UrlClean( &url );
> -            free( psz_host );
> -            return VLC_EGENERIC;
> -        }
> -
> -        vlc_UrlClean( &url );
> -        free( psz_host );
> -    }
> -
>      intf_sys_t *p_sys = malloc( sizeof( *p_sys ) );
>      if( unlikely(p_sys == NULL) )
>      {
> @@ -756,7 +688,6 @@ static int Activate( vlc_object_t *p_this )
>      }
>      p_sys->psz_unix_path = psz_unix_path;
>  #else
> -    p_sys->i_socket = -1;
>  #if VLC_WINSTORE_APP
>      p_sys->b_quiet = true;
>  #else
> @@ -816,9 +747,6 @@ static void Deactivate( vlc_object_t *p_this )
>              unlink(p_sys->psz_unix_path);
>              free(p_sys->psz_unix_path);
>          }
> -#else
> -        if (p_sys->i_socket != -1)
> -            net_Close(p_sys->i_socket);
>  #endif
>      }
>      free( p_sys );
> @@ -838,10 +766,6 @@ static void Deactivate( vlc_object_t *p_this )
>  #define UNIX_LONGTEXT N_("Accept commands over a Unix socket rather than " \
>                           "stdin." )
>
> -#define HOST_TEXT N_("TCP command input")
> -#define HOST_LONGTEXT N_("Accept commands over a socket rather than stdin. " \
> -            "You can set the address and port the interface will bind to." )
> -
>  #ifdef _WIN32
>  #define QUIET_TEXT N_("Do not open a DOS command box interface")
>  #define QUIET_LONGTEXT N_( \
> @@ -868,7 +792,7 @@ vlc_module_begin()
>      add_string("rc-unix", NULL, UNIX_TEXT, UNIX_LONGTEXT, true)
>  #endif
>  #endif
> -    add_string("rc-host", NULL, HOST_TEXT, HOST_LONGTEXT, true)
> +    add_obsolete_string("rc-host") /* since 4.0 */
>
>      set_capability("interface", 20)
>
> --
> 2.29.2
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list