make HTTP_ParseURL compatible with IPv4/IPv6 #1559

This commit is contained in:
ghost 2024-01-15 12:53:24 +02:00
parent 97112f2780
commit f3e4497b58

View File

@ -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://" ); // IPv6
if( Q_strstr( url, "http://[" ) )
if( !url )
return NULL;
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 ))
return NULL;
server->host[i++] = *url++;
}
} }
server->host[i] = 0; // IPv4
if( *url == ':' )
{
server->port = Q_atoi( ++url );
while( *url && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' ))
url++;
}
else else
server->port = 80;
i = 0;
while( *url && ( *url != '\r' ) && ( *url != '\n' ))
{ {
if( i > sizeof( server->path )) if( Q_strstr( url, "http://" ) )
{
url += 7;
while( *url && ( *url != ':' ) && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' ))
{
if( i > sizeof( server->host ))
return NULL;
server->host[i++] = *url++;
}
}
else
return NULL; return NULL;
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 )
return NULL;
url += 8;
server = Z_Calloc( sizeof( httpserver_t ));
i = 0;
while( *url && ( *url != ']' ) && ( *url != '/' ) && ( *url != '\r' ) && ( *url != '\n' ))
{
if( i > sizeof( server->host ))
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 )