X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fmisc%2Flua%2Fintf.c;h=3fea2731d0108ffd1ef6307849cb9d640e4b5fec;hb=27cdf52e972a7bfbde24c7e42b3b8144cc83a7e2;hp=34159076160ae8a14f728879ee9b073d786af1b2;hpb=2c24456389d6518d0d429c0c4f41e5bf52c2d793;p=vlc diff --git a/modules/misc/lua/intf.c b/modules/misc/lua/intf.c index 3415907616..3fea2731d0 100644 --- a/modules/misc/lua/intf.c +++ b/modules/misc/lua/intf.c @@ -36,7 +36,6 @@ #include #include -#include #include #include #include @@ -78,20 +77,22 @@ static const struct { "luatelnet", "telnet" }, { "telnet", "telnet" }, { "luahttp", "http" }, - { "http", "http" }, + /* { "http", "http" }, */ { NULL, NULL } }; static const char *WordInList( const char *psz_list, const char *psz_word ) { - size_t i_len = strlen( psz_word ); - - for( const char *s = psz_list; s; s = strchr( s, ',' ) ) + for( ;; ) { - if( !strncmp( s, psz_word, i_len ) - && memchr( ",", s[i_len], 2 ) ) - return s; + const char *end = strchr( psz_list, ',' ); + if( end == NULL ) + break; + + if( !strncmp( psz_list, psz_word, end - psz_list ) ) + return psz_list; + psz_list = end + 1; } - return NULL; + return !strcmp( psz_list, psz_word ) ? psz_list : NULL; } static char *GetModuleName( intf_thread_t *p_intf ) @@ -169,6 +170,7 @@ int Open_LuaIntf( vlc_object_t *p_this ) } vlclua_set_this( L, p_intf ); + vlclua_set_intf( L, p_sys ); luaL_openlibs( L ); @@ -210,13 +212,87 @@ int Open_LuaIntf( vlc_object_t *p_this ) goto error; } - psz_config = var_CreateGetString( p_intf, "lua-config" ); - if( psz_config && *psz_config ) + /* + * Get the lua-config string. + * If the string is empty, try with the old http-* or telnet-* options + * and build the right configuration line + */ + psz_config = var_CreateGetNonEmptyString( p_intf, "lua-config" ); + if( !psz_config ) + { + if( !strcmp( psz_name, "http" ) ) + { + char *psz_http_host = var_CreateGetNonEmptyString( p_intf, "http-host" ); + char *psz_http_src = var_CreateGetNonEmptyString( p_intf, "http-src" ); + bool b_http_index = var_CreateGetBool( p_intf, "http-index" ); + if( psz_http_host ) + { + char *psz_esc = config_StringEscape( psz_http_host ); + asprintf( &psz_config, "http={host='%s'", psz_esc ); + free( psz_esc ); + free( psz_http_host ); + } + if( psz_http_src ) + { + char *psz_esc = config_StringEscape( psz_http_src ); + if( psz_config ) + { + char *psz_tmp; + asprintf( &psz_tmp, "%s,dir='%s'", psz_config, psz_esc ); + free( psz_config ); + psz_config = psz_tmp; + } + else + asprintf( &psz_config, "http={dir='%s'", psz_esc ); + free( psz_esc ); + free( psz_http_src ); + } + if( psz_config ) + { + char *psz_tmp; + asprintf( &psz_tmp, "%s,no_index=%s}", psz_config, b_http_index ? "true" : "false" ); + free( psz_config ); + psz_config = psz_tmp; + } + else + asprintf( &psz_config, "http={no_index=%s}", b_http_index ? "true" : "false" ); + } + else if( !strcmp( psz_name, "telnet" ) ) + { + char *psz_telnet_host = var_CreateGetString( p_intf, "telnet-host" ); + int i_telnet_port = var_CreateGetInteger( p_intf, "telnet-port" ); + char *psz_telnet_passwd = var_CreateGetString( p_intf, "telnet-password" ); + + char *psz_esc_host = config_StringEscape( psz_telnet_host ); + char *psz_esc_passwd = config_StringEscape( psz_telnet_passwd ); + + asprintf( &psz_config, "telnet={host='%s:%d',password='%s'}", psz_esc_host ? psz_esc_host : "", i_telnet_port, psz_esc_passwd ); + + free( psz_esc_host ); + free( psz_esc_passwd ); + free( psz_telnet_passwd ); + free( psz_telnet_host ); + } + else if( !strcmp( psz_name, "rc" ) ) + { + char *psz_rc_host = var_CreateGetNonEmptyString( p_intf, "rc-host" ); + if( psz_rc_host ) + { + char *psz_esc_host = config_StringEscape( psz_rc_host ); + asprintf( &psz_config, "rc={host='%s'}", psz_esc_host ); + + free( psz_esc_host ); + free( psz_rc_host ); + } + } + } + + if( psz_config ) { char *psz_buffer; if( asprintf( &psz_buffer, "config={%s}", psz_config ) != -1 ) { - printf("%s\n", psz_buffer); + msg_Dbg( p_intf, "Setting config variable: %s", psz_buffer ); if( luaL_dostring( L, psz_buffer ) == 1 ) msg_Err( p_intf, "Error while parsing \"lua-config\"." ); free( psz_buffer ); @@ -231,8 +307,8 @@ int Open_LuaIntf( vlc_object_t *p_this ) } } } + free( psz_config ); } - free( psz_config ); if( b_config_set == false ) {