mythtv_plugin/myth_uri.c
branchtrunk
changeset 3 265cdb1c59e3
parent 2 bd3829c2e9c9
child 4 259b9773e5c3
     1.1 --- a/mythtv_plugin/myth_uri.c	Wed Sep 20 23:59:48 2006 +0100
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,208 +0,0 @@
     1.4 -/**
     1.5 - *
     1.6 - *    MythURI utils
     1.7 - *  - Extracts and parses a URI char string, in according with the RFC 2396
     1.8 - *    [http://www.ietf.org/rfc/rfc2396.txt]
     1.9 - *
    1.10 - *   @author Rosfran Borges (rosfran.borges@indt.org.br)
    1.11 - *
    1.12 - */
    1.13 -
    1.14 -#include "myth_uri.h"
    1.15 -#include <glib.h>
    1.16 -#include <string.h>
    1.17 -#include <stdlib.h>
    1.18 -
    1.19 -static gint 
    1.20 -myth_strstr( const gchar *haystack, const gchar *needle )
    1.21 -{
    1.22 -	
    1.23 -	gchar *strPos;
    1.24 -	
    1.25 -	if (haystack == NULL || needle == NULL)
    1.26 -		return -1;
    1.27 -	strPos = strstr(haystack, needle);
    1.28 -	if (strPos == NULL)
    1.29 -		return -1;
    1.30 -		
    1.31 -	return (strPos - haystack);
    1.32 -
    1.33 -}
    1.34 -
    1.35 -static gboolean
    1.36 -myth_uri_isabsolute( const MythURI *uri )
    1.37 -{
    1.38 -	gboolean ret = FALSE;
    1.39 -	
    1.40 -	g_return_val_if_fail( uri != NULL && uri->uri != NULL && uri->protocol != NULL, FALSE );
    1.41 -	
    1.42 -	if ( myth_strstr( uri->uri->str, MYTH_URI_PROTOCOL_DELIM ) == 0 || strlen(uri->protocol->str) > 0 )
    1.43 -		ret = TRUE;
    1.44 -		
    1.45 -	return ret;	
    1.46 -}
    1.47 -
    1.48 -static gint
    1.49 -myth_strrchr( const gchar *str, const gchar *chars, const gint nchars )
    1.50 -{
    1.51 -
    1.52 -	gint strLen;
    1.53 -	gint i, j;
    1.54 -	
    1.55 -	if ( str == NULL || chars == NULL )
    1.56 -		return -1;
    1.57 -		
    1.58 -	strLen = strlen( str );
    1.59 -	for ( i= (strLen-1); 0 <= i; i-- ) {
    1.60 -		for ( j=0; j<nchars; j++ ) {
    1.61 -			if ( str[i] == chars[j] )
    1.62 -				return i;
    1.63 -		}
    1.64 -	}
    1.65 -
    1.66 -	return -1;
    1.67 -
    1.68 -}
    1.69 -
    1.70 -static MythURI *
    1.71 -myth_uri_init( )
    1.72 -{
    1.73 -	MythURI *uri = g_new0( MythURI, 1 );
    1.74 -	uri->host = g_string_new("");
    1.75 -	uri->fragment = g_string_new("");
    1.76 -	uri->password = g_string_new("");
    1.77 -	uri->path = g_string_new("");
    1.78 -	uri->protocol = g_string_new("");
    1.79 -	uri->query = g_string_new("");
    1.80 -	uri->uri = g_string_new("");
    1.81 -	uri->user = g_string_new("");
    1.82 -	return uri;
    1.83 -}
    1.84 -
    1.85 -const MythURI *
    1.86 -myth_uri_new( gchar *value )
    1.87 -{
    1.88 -	
    1.89 -	MythURI *uri = myth_uri_init();
    1.90 -
    1.91 -	gchar *protocol;
    1.92 -	gint uriLen;
    1.93 -	gint currIdx;
    1.94 -	gint protoIdx;
    1.95 -	gint atIdx;
    1.96 -	gint colonIdx;
    1.97 -	gint shashIdx;
    1.98 -	gchar *host;
    1.99 -	gint eblacketIdx;
   1.100 -	GString *hostStr;
   1.101 -	GString *portStr;
   1.102 -	gint hostLen;
   1.103 -	gint sharpIdx;
   1.104 -	gint questionIdx;
   1.105 -	gint queryLen;
   1.106 -	
   1.107 -	uriLen = strlen(value);
   1.108 -	uri->uri = g_string_new( value );
   1.109 -		
   1.110 -	currIdx = 0;
   1.111 -	
   1.112 -	/*** Protocol ****/
   1.113 -	protoIdx = myth_strstr( value, MYTH_URI_PROTOCOL_DELIM );
   1.114 -	if (0 < protoIdx) {
   1.115 -		uri->protocol = g_string_append_len( uri->protocol, value, protoIdx );
   1.116 -		currIdx += protoIdx + strlen( MYTH_URI_PROTOCOL_DELIM );
   1.117 -	}
   1.118 -
   1.119 -	/*** User (Password) ****/
   1.120 -	atIdx = myth_strstr( value+currIdx, MYTH_URI_USER_DELIM );
   1.121 -	if ( 0 < atIdx ) {
   1.122 -		colonIdx = myth_strstr( value+currIdx, MYTH_URI_COLON_DELIM );
   1.123 -
   1.124 -		if (0 < colonIdx && colonIdx < atIdx) {
   1.125 -			uri->user = g_string_append_len( uri->user, value+currIdx,  colonIdx );
   1.126 -			uri->password = g_string_append_len( uri->password, value+currIdx+colonIdx+1, atIdx-(colonIdx+1) );
   1.127 -		}
   1.128 -		else 
   1.129 -			uri->user = g_string_append_len( uri->user, value+currIdx, atIdx - currIdx );
   1.130 -		currIdx += atIdx + 1;
   1.131 -	}
   1.132 -
   1.133 -	/*** Host (Port) ****/
   1.134 -	shashIdx = myth_strstr( value+currIdx, MYTH_URI_SLASH_DELIM );
   1.135 -	if ( 0 < shashIdx )
   1.136 -		uri->host = g_string_append_len( uri->host, value+currIdx, shashIdx );
   1.137 -	else if ( myth_uri_isabsolute(uri) == TRUE )
   1.138 -		uri->host = g_string_append_len( uri->host, value+currIdx, strlen(value) - currIdx );
   1.139 -	host = g_strdup( myth_uri_gethost(uri) );
   1.140 -	colonIdx = myth_strrchr( host, MYTH_URI_COLON_DELIM, 1 );
   1.141 -	eblacketIdx = myth_strrchr( host, MYTH_URI_EBLACET_DELIM, 1 );
   1.142 -	if ( ( 0 < colonIdx ) && ( eblacketIdx < colonIdx ) ) {
   1.143 -		hostStr = g_string_new( host );
   1.144 -
   1.145 -		hostLen = hostStr->len;
   1.146 -		/**** host ****/
   1.147 -		uri->host = g_string_erase( uri->host, 0, hostLen );
   1.148 -		uri->host = g_string_insert_len( uri->host, 0, hostStr->str, colonIdx );
   1.149 -		//host = myth_uri_gethost( uri );
   1.150 -		if (0 < hostLen) {
   1.151 -			if (host[0] == '[' && host[hostLen-1] == ']')
   1.152 -				uri->host = g_string_append_len( uri->host, hostStr->str+1,  colonIdx-2 );
   1.153 -		}
   1.154 -		/**** port ****/
   1.155 -		portStr = g_string_new("");
   1.156 -		portStr = g_string_append_len( portStr, hostStr->str+colonIdx+1, hostLen-colonIdx-1 );
   1.157 -		uri->port = atoi( portStr->str );
   1.158 -		g_string_free( portStr, TRUE );
   1.159 -		g_string_free( hostStr, FALSE );
   1.160 -	}
   1.161 -	else {
   1.162 -		uri->port = MYTH_URI_KNKOWN_PORT;
   1.163 -		protocol = myth_uri_getprotocol(uri);
   1.164 -		if ( strcmp(protocol, MYTH_URI_PROTOCOL_HTTP) == 0 )
   1.165 -			uri->port = MYTH_URI_DEFAULT_HTTP_PORT;
   1.166 -		if ( strcmp(protocol, MYTH_URI_PROTOCOL_FTP) == 0 )
   1.167 -			uri->port = MYTH_URI_DEFAULT_FTP_PORT;
   1.168 -	}
   1.169 -	
   1.170 -	if (shashIdx > 0) currIdx += shashIdx;
   1.171 -	
   1.172 -	/*
   1.173 -		Handle relative URL
   1.174 -	*/
   1.175 -	if (myth_uri_isabsolute(uri) == FALSE)
   1.176 -	{
   1.177 -
   1.178 -		if (shashIdx != 0)
   1.179 -		{
   1.180 -			/* Add slash delimiter at the beginning of the URL,
   1.181 -			   if it doesn't exist 
   1.182 -			*/
   1.183 -			uri->path = g_string_new( MYTH_URI_SLASH_DELIM );
   1.184 -		}
   1.185 -		uri->path = g_string_append( uri->path, value );
   1.186 -		
   1.187 -	} else {
   1.188 -		/* First set path simply to the rest of URI */
   1.189 -		g_string_append_len( uri->path, value+currIdx,  uriLen-currIdx );
   1.190 -	}
   1.191 -		
   1.192 -	/**** Path (Query/Fragment) ****/
   1.193 -	sharpIdx = myth_strstr(value+currIdx, MYTH_URI_SHARP_DELIM);
   1.194 -	if (0 < sharpIdx) {
   1.195 -		uri->path = g_string_append_len( uri->path, value+currIdx, sharpIdx);
   1.196 -		uri->fragment = g_string_append_len( uri->fragment, 
   1.197 -			value+currIdx+sharpIdx+1, uriLen-(currIdx+sharpIdx+1));
   1.198 -	}
   1.199 -	
   1.200 -	questionIdx = myth_strstr( value+currIdx, MYTH_URI_QUESTION_DELIM );
   1.201 -	if ( 0 < questionIdx ) {
   1.202 -		uri->path = g_string_append_len( uri->path, value+currIdx, questionIdx );
   1.203 -		queryLen = uriLen-(currIdx+questionIdx+1);
   1.204 -		if ( 0 < sharpIdx )
   1.205 -			queryLen -= uriLen - (currIdx+sharpIdx+1);
   1.206 -		uri->query = g_string_append_len( uri->query, value+currIdx+questionIdx+1, queryLen );
   1.207 -	}
   1.208 -	
   1.209 -	return uri;
   1.210 -
   1.211 -}