]> git.sesse.net Git - vlc/blobdiff - modules/access/http.c
Revert "Helpers to emit asynchronous key press events (refs #3661)"
[vlc] / modules / access / http.c
index 8f5cfbcc77645d442de9d658023bc71054708446..94355047918333d12e3f817b83b5d482c1848170 100644 (file)
@@ -123,7 +123,7 @@ vlc_module_begin ()
     add_integer( "http-caching", 4 * DEFAULT_PTS_DELAY / 1000, NULL,
                  CACHING_TEXT, CACHING_LONGTEXT, true )
         change_safe()
-    add_string( "http-user-agent", PACKAGE_NAME" "PACKAGE_VERSION, NULL,
+    add_string( "http-user-agent", PACKAGE_NAME"/"PACKAGE_VERSION, NULL,
                 AGENT_TEXT, AGENT_LONGTEXT, true )
         change_safe()
     add_bool( "http-reconnect", false, NULL, RECONNECT_TEXT,
@@ -344,8 +344,15 @@ static int OpenWithCookies( vlc_object_t *p_this, const char *psz_access,
             p_sys->url.i_port = 80;
     }
 
-    /* Do user agent */
+    /* Determine the HTTP user agent */
+    /* See RFC2616 §2.2 token definition and §3.8 user-agent header */
     p_sys->psz_user_agent = var_InheritString( p_access, "http-user-agent" );
+    for( char *p = p_sys->psz_user_agent; *p; p++ )
+    {
+        uint8_t c = *p;
+        if( c < 32 || strchr( "()<>@,;:\\\"[]?={}", c ) )
+            *p = '_'; /* remove potentially harmful characters */
+    }
 
     /* Check proxy */
     psz = var_InheritString( p_access, "http-proxy" );
@@ -1279,7 +1286,8 @@ static int Request( access_t *p_access, uint64_t i_tell )
         }
     }
     /* User Agent */
-    net_Printf( p_access, p_sys->fd, pvs, "User-Agent: %s\r\n",
+    net_Printf( p_access, p_sys->fd, pvs,
+                "User-Agent: %s LibVLC/"VERSION"\r\n",
                 p_sys->psz_user_agent );
     /* Offset */
     if( p_sys->i_version == 1 && ! p_sys->b_continuous )