Browse Source

make HTTP_ParseURL compatible with IPv4/IPv6 #1559

pull/1/head
ghost 11 months ago
parent
commit
f3e4497b58
  1. 92
      engine/common/net_ws.c

92
engine/common/net_ws.c

@ -2780,81 +2780,41 @@ HTTP_ParseURL
*/ */
static httpserver_t *HTTP_ParseURL( const char *url ) static httpserver_t *HTTP_ParseURL( const char *url )
{ {
httpserver_t *server; httpserver_t *server = Z_Calloc( sizeof( httpserver_t ));
int i; int i = 0;
url = Q_strstr( url, "http://" );
if( !url ) // IPv6
return NULL; if( Q_strstr( url, "http://[" ) )
url += 7;
server = Z_Calloc( sizeof( httpserver_t ));
i = 0;
while( *url && ( *url != ':' ) && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' ))
{ {
if( i > sizeof( server->host )) url += 8;
return NULL;
server->host[i++] = *url++; while( *url && ( *url != ']' ) && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' ))
} {
if( i > sizeof( server->host ))
server->host[i] = 0; return NULL;
if( *url == ':' )
{
server->port = Q_atoi( ++url );
while( *url && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' )) server->host[i++] = *url++;
url++; }
} }
else
server->port = 80;
i = 0; // IPv4
else
while( *url && ( *url != '\r' ) && ( *url != '\n' ))
{ {
if( i > sizeof( server->path )) if( Q_strstr( url, "http://" ) )
return NULL; {
url += 7;
server->path[i++] = *url++;
}
server->path[i] = 0;
server->next = NULL;
server->needfree = false;
return server;
}
/*
==================
HTTP_ParseURL_IPv6
==================
*/
static httpserver_t *HTTP_ParseURL_IPv6( const char *url )
{
httpserver_t *server;
int i;
url = Q_strstr( url, "http://[" );
if( !url ) while( *url && ( *url != ':' ) && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' ))
return NULL; {
if( i > sizeof( server->host ))
return NULL;
url += 8; server->host[i++] = *url++;
server = Z_Calloc( sizeof( httpserver_t )); }
i = 0; }
while( *url && ( *url != ']' ) && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' )) else
{
if( i > sizeof( server->host ))
return NULL; return NULL;
server->host[i++] = *url++;
} }
server->host[i] = 0; server->host[i] = 0;
@ -2893,8 +2853,6 @@ HTTP_AddCustomServer
*/ */
void HTTP_AddCustomServer( const char *url ) void HTTP_AddCustomServer( const char *url )
{ {
// todo condition
// httpserver_t *server = HTTP_ParseURL_IPv6( url );
httpserver_t *server = HTTP_ParseURL( url ); httpserver_t *server = HTTP_ParseURL( url );
if( !server ) if( !server )
@ -3055,8 +3013,6 @@ void HTTP_Init( void )
{ {
while(( line = COM_ParseFile( line, token, sizeof( token )))) while(( line = COM_ParseFile( line, token, sizeof( token ))))
{ {
// todo condition
// httpserver_t *server = HTTP_ParseURL_IPv6( token );
httpserver_t *server = HTTP_ParseURL( token ); httpserver_t *server = HTTP_ParseURL( token );
if( !server ) if( !server )

Loading…
Cancel
Save