mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-16 16:02:54 +02:00
* added vlc_url_t structure, vlc_UrlParse and vlc_UrlClean.
(It could avoid a lot of duplicated code...)
This commit is contained in:
parent
7a9053f225
commit
8b67f70abe
@ -2,9 +2,10 @@
|
|||||||
* network.h: interface to communicate with network plug-ins
|
* network.h: interface to communicate with network plug-ins
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 2002 VideoLAN
|
* Copyright (C) 2002 VideoLAN
|
||||||
* $Id: network.h,v 1.4 2003/07/31 23:44:49 fenrir Exp $
|
* $Id: network.h,v 1.5 2003/11/07 17:44:43 fenrir Exp $
|
||||||
*
|
*
|
||||||
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
||||||
|
* Laurent Aimar <fenrir@via.ecp.fr>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -46,3 +47,109 @@ struct network_socket_t
|
|||||||
#define NETWORK_UDP 1
|
#define NETWORK_UDP 1
|
||||||
#define NETWORK_TCP 2
|
#define NETWORK_TCP 2
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *psz_protocol;
|
||||||
|
char *psz_host;
|
||||||
|
int i_port;
|
||||||
|
|
||||||
|
char *psz_path;
|
||||||
|
|
||||||
|
char *psz_option;
|
||||||
|
} vlc_url_t;
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* vlc_UrlParse:
|
||||||
|
*****************************************************************************
|
||||||
|
* option : if != 0 then path is split at this char
|
||||||
|
*
|
||||||
|
* format protocol://host[:port]/path[OPTIONoption]
|
||||||
|
*****************************************************************************/
|
||||||
|
static inline void vlc_UrlParse( vlc_url_t *url, char *psz_url, char option )
|
||||||
|
{
|
||||||
|
char *psz_dup = strdup( psz_url );
|
||||||
|
char *psz_parse = psz_dup;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
url->psz_protocol = NULL;
|
||||||
|
url->psz_host = NULL;
|
||||||
|
url->i_port = 0;
|
||||||
|
url->psz_path = NULL;
|
||||||
|
url->psz_option = NULL;
|
||||||
|
|
||||||
|
p = strchr( psz_dup, ':' );
|
||||||
|
|
||||||
|
if( p )
|
||||||
|
{
|
||||||
|
/* we have a protocol */
|
||||||
|
|
||||||
|
/* skip :// */
|
||||||
|
*p++ = '\0';
|
||||||
|
if( p[0] == '/' && p[1] == '/' )
|
||||||
|
{
|
||||||
|
p += 2;
|
||||||
|
}
|
||||||
|
url->psz_protocol = strdup( psz_dup );
|
||||||
|
|
||||||
|
psz_parse = p;
|
||||||
|
|
||||||
|
p = strchr( psz_parse, '/' );
|
||||||
|
if( !p || psz_parse < p )
|
||||||
|
{
|
||||||
|
char *p2;
|
||||||
|
|
||||||
|
/* We have a host[:port] */
|
||||||
|
url->psz_host = strdup( psz_parse );
|
||||||
|
if( p )
|
||||||
|
{
|
||||||
|
url->psz_host[p - psz_parse] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
p2 = strchr( url->psz_host, ':' );
|
||||||
|
if( p2 )
|
||||||
|
{
|
||||||
|
*p2++ = '\0';
|
||||||
|
url->i_port = atoi( p2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
psz_parse = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now parse psz_path and psz_option */
|
||||||
|
if( psz_parse )
|
||||||
|
{
|
||||||
|
url->psz_path = strdup( psz_parse );
|
||||||
|
if( option != '\0' )
|
||||||
|
{
|
||||||
|
p = strchr( url->psz_path, option );
|
||||||
|
if( p )
|
||||||
|
{
|
||||||
|
*p++ = '\0';
|
||||||
|
url->psz_option = strdup( p );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free( psz_dup );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
* vlc_UrlClean:
|
||||||
|
*****************************************************************************
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
static inline void vlc_UrlClean( vlc_url_t *url )
|
||||||
|
{
|
||||||
|
if( url->psz_protocol ) free( url->psz_protocol );
|
||||||
|
if( url->psz_host ) free( url->psz_host );
|
||||||
|
if( url->psz_path ) free( url->psz_path );
|
||||||
|
if( url->psz_option ) free( url->psz_option );
|
||||||
|
|
||||||
|
url->psz_protocol = NULL;
|
||||||
|
url->psz_host = NULL;
|
||||||
|
url->i_port = 0;
|
||||||
|
url->psz_path = NULL;
|
||||||
|
url->psz_option = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user