X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fnetwork.h;h=f0893d45cb75ed61baa37a06e94e0841b9611110;hb=421fd5926877699ed9e29451d6857f6045749ede;hp=e6eaf40e01c1fcacce3cc23e8a479996e1c024ed;hpb=436b59c583a0e3315b2a94246cbdff3a607ff097;p=vlc diff --git a/include/network.h b/include/network.h index e6eaf40e01..f0893d45cb 100644 --- a/include/network.h +++ b/include/network.h @@ -1,11 +1,12 @@ /***************************************************************************** * network.h: interface to communicate with network plug-ins ***************************************************************************** - * Copyright (C) 2002 VideoLAN + * Copyright (C) 2002-2005 VideoLAN * $Id$ * * Authors: Christophe Massiot * Laurent Aimar + * Rémi Denis-Courmont * * 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 @@ -22,6 +23,8 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. *****************************************************************************/ +#ifndef __VLC_NETWORK_H +# define __VLC_NETWORK_H /***************************************************************************** * network_socket_t: structure passed to a network plug-in to define the * kind of socket we want @@ -164,17 +167,82 @@ static inline void vlc_UrlClean( vlc_url_t *url ) url->psz_path = NULL; url->psz_option = NULL; } + +/***************************************************************************** + * vlc_UrlEncode: + ***************************************************************************** + * perform URL encoding + * (you do NOT want to do URL decoding - it is not reversible - do NOT do it) + *****************************************************************************/ +static inline char *vlc_UrlEncode( const char *psz_url ) +{ + char *psz_enc, *out; + const char *in; + + psz_enc = (char *)malloc( 3 * strlen( psz_url ) + 1 ); + if( psz_enc == NULL ) + return NULL; + + out = psz_enc; + for( in = psz_url; *in; in++ ) + { + char c = *in; + + if( ( c <= 32 ) || ( c == '%' ) || ( c == '?' ) || ( c == '&' ) + || ( c == '+' ) ) + { + *out++ = '%'; + *out++ = ( ( c >> 4 ) >= 0xA ) ? 'A' + ( c >> 4 ) - 0xA + : '0' + ( c >> 4 ); + *out++ = ( ( c & 0xf ) >= 0xA ) ? 'A' + ( c & 0xf ) - 0xA + : '0' + ( c & 0xf ); + } + else + *out++ = c; + } + *out++ = '\0'; + + return (char *)realloc( psz_enc, out - psz_enc ); +} + +/***************************************************************************** + * vlc_UrlIsNotEncoded: + ***************************************************************************** + * check if given string is not a valid URL and must hence be encoded + *****************************************************************************/ +#include + +static inline int vlc_UrlIsNotEncoded( const char *psz_url ) +{ + const char *ptr; + + for( ptr = psz_url; *ptr; ptr++ ) + { + char c = *ptr; + + if( c == '%' ) + { + if( !isxdigit( ptr[1] ) || !isxdigit( ptr[2] ) ) + return 1; /* not encoded */ + ptr += 2; + } + else + if( c == ' ' ) + return 1; + } + return 0; /* looks fine - but maybe it is not encoded */ +} /***************************************************************************** * vlc_b64_encode: ***************************************************************************** * *****************************************************************************/ -static inline char *vlc_b64_encode( unsigned char *src ) +static inline char *vlc_b64_encode( char *src ) { static const char b64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - char *dst = malloc( strlen( src ) * 4 / 3 + 12 ); + char *dst = (char *)malloc( strlen( src ) * 4 / 3 + 12 ); char *ret = dst; unsigned i_bits = 0; unsigned i_shift = 0; @@ -209,6 +277,7 @@ static inline char *vlc_b64_encode( unsigned char *src ) return ret; } +VLC_EXPORT( int, net_ConvertIPv4, ( uint32_t *p_addr, const char * psz_address ) ); /* Portable networking layer communication */ #define net_OpenTCP(a, b, c) __net_OpenTCP(VLC_OBJECT(a), b, c) @@ -253,3 +322,5 @@ VLC_EXPORT( int, net_Printf, ( vlc_object_t *p_this, int fd, v_socket_t *, const #define net_vaPrintf(a,b,c,d,e) __net_vaPrintf(VLC_OBJECT(a),b,c,d,e) VLC_EXPORT( int, __net_vaPrintf, ( vlc_object_t *p_this, int fd, v_socket_t *, const char *psz_fmt, va_list args ) ); + +#endif