Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

url.c File Reference


Detailed Description

URL handling of specific formats.

Author:
Raphael Manfredi
Date:
2002-2003

#include "common.h"
#include "host_addr.h"
#include "url.h"
#include "misc.h"
#include "walloc.h"
#include "override.h"

Defines

#define ESCAPE_CHAR   '%'
#define TRANSPARENT_CHAR(x, m)   ((x) >= 32 && (x) < 128 && (is_transparent[(x)-32] & (m)))
#define PATH_MASK   0x1
#define QUERY_MASK   0x2
#define D(x)   { (x), CONST_STRLEN(x) }

Functions

 RCSID ("$Id:url.c, v 1.23 2005/10/20 07:17:12 cbiere Exp $")
gchar * url_escape_mask (const gchar *url, guint8 mask)
 Escape undesirable characters using xx, where xx is an hex code.

gint url_escape_mask_into (const gchar *url, gchar *target, gint len, guint8 mask)
 Escape undesirable characters using xx, where xx is an hex code.

gchar * url_escape (const gchar *url)
 Escape undesirable characters using xx, where xx is an hex code.

gchar * url_escape_query (const gchar *url)
 Same as url_escape(), but '+' are also escaped for the query string.

gint url_escape_into (const gchar *url, gchar *target, gint len)
 Escape undesirable characters using xx, where xx is an hex code.

gchar * url_escape_cntrl (gchar *url)
 Escape control characters using xx, where xx is an hex code.

gchar * url_unescape (gchar *url, gboolean inplace)
 Unescape string, in-place if `inplace' is TRUE.

url_params_turl_params_parse (gchar *query)
 Parse all the parameters in the URL query string.

const gchar * url_params_get (url_params_t *up, const gchar *name)
 Get the value of a parameter, or NULL if the parameter is not present.

void free_params_kv (gpointer key, gpointer value, gpointer unused_udata)
void url_params_free (url_params_t *up)
 Dispose of the url_params_t structure.

gboolean url_safe_char (gchar c, url_policy_t p)
gchar * url_normalize (gchar *url, url_policy_t pol)
 
Attention:
NB: May modify ``url'' in all cased; pass a copy if necessary!



Variables

guint32 lib_debug
const guint8 is_transparent [96]
 Reserved chars: ";", "/", "?", ":", "@", "=" and "&" Unsafe chars : " ", '"', "<", ">", "#", and "%" Misc chars : "{", "}", "|", "\", "^", "~", "[", "]" and "`".

const char hex_alphabet [] = "0123456789ABCDEF"


Define Documentation

#define D  )     { (x), CONST_STRLEN(x) }
 

#define ESCAPE_CHAR   '%'
 

#define PATH_MASK   0x1
 

#define QUERY_MASK   0x2
 

#define TRANSPARENT_CHAR x,
 )     ((x) >= 32 && (x) < 128 && (is_transparent[(x)-32] & (m)))
 


Function Documentation

void free_params_kv gpointer  key,
gpointer  value,
gpointer  unused_udata
[static]
 

RCSID "$Id:url.  c,
v 1.23 2005/10/20 07:17:12 cbiere Exp $" 
 

gchar* url_escape const gchar *  url  ) 
 

Escape undesirable characters using xx, where xx is an hex code.

Returns:
argument if no escaping is necessary, or a new string otherwise.

gchar* url_escape_cntrl gchar *  url  ) 
 

Escape control characters using xx, where xx is an hex code.

Returns:
argument if no escaping is necessary, or a new string otherwise.

gint url_escape_into const gchar *  url,
gchar *  target,
gint  len
 

Escape undesirable characters using xx, where xx is an hex code.

This is done in the `target' buffer, whose size is `len'.

Returns:
amount of characters written into buffer (not counting trailing NUL), or -1 if the buffer was too small.

gchar* url_escape_mask const gchar *  url,
guint8  mask
[static]
 

Escape undesirable characters using xx, where xx is an hex code.

Parameters:
`url' no brief description.
`mask' tells us whether we're escaping an URL path or a query string.
Returns:
argument if no escaping is necessary, or a new string otherwise.

gint url_escape_mask_into const gchar *  url,
gchar *  target,
gint  len,
guint8  mask
[static]
 

Escape undesirable characters using xx, where xx is an hex code.

This is done in the `target' buffer, whose size is `len'. `mask' tells us whether we're escaping an URL path or a query string.

Returns:
amount of characters written into buffer (not counting trailing NUL), or -1 if the buffer was too small.

gchar* url_escape_query const gchar *  url  ) 
 

Same as url_escape(), but '+' are also escaped for the query string.

Returns:
argument if no escaping is necessary, or a new string otherwise.

gchar* url_normalize gchar *  url,
url_policy_t  pol
 

Attention:
NB: May modify ``url'' in all cased; pass a copy if necessary!

Returns:
NULL if ``url'' isn't a valid resp. allowed URL. Otherwise, it returns either a pointer to the original URL or a g_malloc()ed modified copy which has to be g_free()ed.
The URL is validated according to the specified policy. Unnecessary parts such as ":80" (for the port) and "/./" are removed: the hostname is forced to lowercase; a base URI "/" is appended if missing. This allows comparing different variants of the same URL to detect duplicates.

void url_params_free url_params_t up  ) 
 

Dispose of the url_params_t structure.

const gchar* url_params_get url_params_t up,
const gchar *  name
 

Get the value of a parameter, or NULL if the parameter is not present.

The value returned has already been URL-unescaped.

url_params_t* url_params_parse gchar *  query  ) 
 

Parse all the parameters in the URL query string.

All parameter values are stored in their URL-unescaped form, but parameter names are NOT un-escaped.

Returns:
an url_params_t object that can be queried for later... or NULL if the argument isn't valid encoded.

gboolean url_safe_char gchar  c,
url_policy_t  p
[static]
 

gchar* url_unescape gchar *  url,
gboolean  inplace
 

Unescape string, in-place if `inplace' is TRUE.

Returns the argument if un-escaping is NOT necessary, a new string otherwise unless in-place decoding was requested.

Returns:
NULL if the argument isn't valid encoded.


Variable Documentation

const char hex_alphabet[] = "0123456789ABCDEF" [static]
 

const guint8 is_transparent[96] [static]
 

Initial value:

 {
    
    0,3,0,0,3,0,0,3,3,3,3,1,3,3,3,3,    
    3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,    
    0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,    
    3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,3,    
    0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,    
    3,3,3,3,3,3,3,3,3,3,3,0,0,0,0,0,    
}
Reserved chars: ";", "/", "?", ":", "@", "=" and "&" Unsafe chars : " ", '"', "<", ">", "#", and "%" Misc chars : "{", "}", "|", "\", "^", "~", "[", "]" and "`".

  • * - * - * - Bit 0 encodes regular transparent set (pathnames, '/' is transparent).
  • Bit 1 encodes regular transparent set minus '+' (query string).

guint32 lib_debug
 


Generated on Sun Feb 12 10:50:09 2006 for Gtk-Gnutella by doxygen 1.3.6