]> git.sesse.net Git - vlc/blobdiff - modules/control/telnet.c
NTService: fix stray ‘\302’ in program issue
[vlc] / modules / control / telnet.c
index 62a413a6f8c0875e03c688bbed7b5f7db19f4a04..f35fb288b6f3f033a0218794eaceb2581b8e421f 100644 (file)
@@ -89,21 +89,21 @@ static void Close( vlc_object_t * );
     "to protect this interface. The default value is \"admin\"." )
 #define TELNETPWD_DEFAULT "admin"
 
-vlc_module_begin();
-    set_shortname( "Telnet" );
-    set_category( CAT_INTERFACE );
-    set_subcategory( SUBCAT_INTERFACE_CONTROL );
+vlc_module_begin ()
+    set_shortname( "Telnet" )
+    set_category( CAT_INTERFACE )
+    set_subcategory( SUBCAT_INTERFACE_CONTROL )
     add_string( "telnet-host", "", NULL, TELNETHOST_TEXT,
-                 TELNETHOST_LONGTEXT, true );
+                 TELNETHOST_LONGTEXT, true )
     add_integer( "telnet-port", TELNETPORT_DEFAULT, NULL, TELNETPORT_TEXT,
-                 TELNETPORT_LONGTEXT, true );
+                 TELNETPORT_LONGTEXT, true )
     add_password( "telnet-password", TELNETPWD_DEFAULT, NULL, TELNETPWD_TEXT,
-                TELNETPWD_LONGTEXT, true );
-    set_description( N_("VLM remote control interface") );
-    add_category_hint( "VLM", NULL, false );
-    set_capability( "interface", 0 );
-    set_callbacks( Open , Close );
-vlc_module_end();
+                TELNETPWD_LONGTEXT, true )
+    set_description( N_("VLM remote control interface") )
+    add_category_hint( "VLM", NULL, false )
+    set_capability( "interface", 0 )
+    set_callbacks( Open , Close )
+vlc_module_end ()
 
 /*****************************************************************************
  * Local prototypes.
@@ -171,9 +171,8 @@ static int Open( vlc_object_t *p_this )
 
     msg_Info( p_intf, "using the VLM interface plugin..." );
 
-    i_telnetport = config_GetInt( p_intf, "telnet-port" );
-    psz_address  = config_GetPsz( p_intf, "telnet-host" );
-
+    i_telnetport = var_InheritInteger( p_intf, "telnet-port" );
+    psz_address  = var_InheritString( p_intf, "telnet-host" );
     vlc_UrlParse(&url, psz_address, 0);
     free( psz_address );
 
@@ -247,7 +246,7 @@ static void Run( intf_thread_t *p_intf )
         nlisten++; /* How many listening sockets do we have? */
 
     /* FIXME: make sure config_* is cancel-safe */
-    psz_password = config_GetPsz( p_intf, "telnet-password" );
+    psz_password = var_InheritString( p_intf, "telnet-password" );
     vlc_cleanup_push( free, psz_password );
 
     for( ;; )
@@ -280,8 +279,12 @@ static void Run( intf_thread_t *p_intf )
                 if (net_errno != EINTR)
                 {
                     msg_Err (p_intf, "network poll error");
-                    msleep (1000);
-                    continue;
+#ifndef WIN32
+                    pause ();  /* We are screwed! */
+#else
+                    abort (); /* We are even more screwed! (no pause() in win32) */
+#endif
+                    break;
                 }
             case 0:
                 continue;
@@ -299,6 +302,7 @@ static void Run( intf_thread_t *p_intf )
                 net_Close( cl->fd );
                 TAB_REMOVE( p_intf->p_sys->i_clients ,
                             p_intf->p_sys->clients , cl );
+                free( cl->buffer_write );
                 free( cl );
                 continue;
             }
@@ -372,7 +376,13 @@ static void Run( intf_thread_t *p_intf )
                                    cl->i_mode + 2 );
                 }
 
-                if (i_recv <= 0 && ( end || errno != EAGAIN ) )
+#ifdef WIN32
+                if( i_recv <= 0 && WSAGetLastError() == WSAEWOULDBLOCK )
+                {
+                    errno = EAGAIN;
+                }
+#endif
+                if( i_recv == 0 || ( i_recv == -1 && ( end || errno != EAGAIN ) ) )
                     goto drop;
             }
         }
@@ -421,7 +431,7 @@ static void Run( intf_thread_t *p_intf )
                 else if( !strncmp( cl->buffer_read, "shutdown", 8 ) )
                 {
                     msg_Err( p_intf, "shutdown requested" );
-                    vlc_object_kill( p_intf->p_libvlc );
+                    libvlc_Quit( p_intf->p_libvlc );
                 }
                 else if( *cl->buffer_read == '@'
                           && strchr( cl->buffer_read, ' ' ) )
@@ -449,7 +459,7 @@ static void Run( intf_thread_t *p_intf )
                     if( psz_msg )
                     {
                         vlm_message_t *message;
-                        message = vlm_MessageNew( "Module command", psz_msg );
+                        message = vlm_MessageNew( "Module command", "%s", psz_msg );
                         Write_message( cl, message, NULL, WRITE_MODE_CMD );
                         vlm_MessageDelete( message );
                         free( psz_msg );
@@ -467,14 +477,13 @@ static void Run( intf_thread_t *p_intf )
                     if( !strncmp( cl->buffer_read, "help", 4 ) )
                     {
                         vlm_message_t *p_my_help =
-                            vlm_MessageNew( "Telnet Specific Commands:", NULL );
+                            vlm_MessageSimpleNew( "Telnet Specific Commands:" );
                         vlm_MessageAdd( p_my_help,
-                            vlm_MessageNew( "logout, quit, exit" , NULL ) );
+                            vlm_MessageSimpleNew( "logout, quit, exit" ) );
                         vlm_MessageAdd( p_my_help,
-                            vlm_MessageNew( "shutdown" , NULL ) );
+                            vlm_MessageSimpleNew( "shutdown" ) );
                         vlm_MessageAdd( p_my_help,
-                            vlm_MessageNew( "@moduleinstance command argument",
-                                             NULL) );
+                            vlm_MessageSimpleNew( "@moduleinstance command argument" ) );
                         vlm_MessageAdd( message, p_my_help );
                     }
                     Write_message( cl, message, NULL, WRITE_MODE_CMD );
@@ -495,14 +504,13 @@ static void Run( intf_thread_t *p_intf )
             if (fd == -1)
                 continue;
 
-            telnet_client_t *cl = malloc( sizeof( telnet_client_t ));
+            telnet_client_t *cl = calloc( 1, sizeof( telnet_client_t ));
             if (cl == NULL)
             {
                 net_Close (fd);
                 continue;
             }
 
-            memset( cl, 0, sizeof(telnet_client_t) );
             cl->i_tel_cmd = 0;
             cl->fd = fd;
             cl->buffer_write = NULL;
@@ -563,7 +571,7 @@ static char *MessageToString( vlm_message_t *message, int i_level )
     }
 
     i_message += strlen( message->psz_name ) + i_level * sizeof( "    " ) + 1;
-    psz_message = malloc( i_message );
+    psz_message = xmalloc( i_message );
     *psz_message = 0;
     for( i = 0; i < i_level; i++ ) strcat( psz_message, "    " );
     strcat( psz_message, message->psz_name );
@@ -572,7 +580,7 @@ static char *MessageToString( vlm_message_t *message, int i_level )
     {
         i_message += sizeof( " : " ) + strlen( message->psz_value ) +
             sizeof( STRING_CR );
-        psz_message = realloc( psz_message, i_message );
+        psz_message = xrealloc( psz_message, i_message );
         strcat( psz_message, " : " );
         strcat( psz_message, message->psz_value );
         strcat( psz_message, STRING_CR );
@@ -580,7 +588,7 @@ static char *MessageToString( vlm_message_t *message, int i_level )
     else
     {
         i_message += sizeof( STRING_CR );
-        psz_message = realloc( psz_message, i_message );
+        psz_message = xrealloc( psz_message, i_message );
         strcat( psz_message, STRING_CR );
     }
 
@@ -590,7 +598,7 @@ static char *MessageToString( vlm_message_t *message, int i_level )
             MessageToString( message->child[i], i_level + 1 );
 
         i_message += strlen( child_message );
-        psz_message = realloc( psz_message, i_message );
+        psz_message = xrealloc( psz_message, i_message );
         strcat( psz_message, child_message );
         free( child_message );
     }