Frameworks/libpurple.framework/Versions/0.6.0/Headers/util.h
changeset 2592 e8d15275025e
parent 2591 f66a716bfc79
child 2593 b4bd28402abc
     1.1 --- a/Frameworks/libpurple.framework/Versions/0.6.0/Headers/util.h	Fri Aug 21 13:24:36 2009 -0700
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,1430 +0,0 @@
     1.4 -/**
     1.5 - * @file util.h Utility Functions
     1.6 - * @ingroup core
     1.7 - */
     1.8 -
     1.9 -/* purple
    1.10 - *
    1.11 - * Purple is the legal property of its developers, whose names are too numerous
    1.12 - * to list here.  Please refer to the COPYRIGHT file distributed with this
    1.13 - * source distribution.
    1.14 - *
    1.15 - * This program is free software; you can redistribute it and/or modify
    1.16 - * it under the terms of the GNU General Public License as published by
    1.17 - * the Free Software Foundation; either version 2 of the License, or
    1.18 - * (at your option) any later version.
    1.19 - *
    1.20 - * This program is distributed in the hope that it will be useful,
    1.21 - * but WITHOUT ANY WARRANTY; without even the implied warranty of
    1.22 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    1.23 - * GNU General Public License for more details.
    1.24 - *
    1.25 - * You should have received a copy of the GNU General Public License
    1.26 - * along with this program; if not, write to the Free Software
    1.27 - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
    1.28 - *
    1.29 - * @todo Rename the functions so that they live somewhere in the purple
    1.30 - *       namespace.
    1.31 - */
    1.32 -#ifndef _PURPLE_UTIL_H_
    1.33 -#define _PURPLE_UTIL_H_
    1.34 -
    1.35 -#include <stdio.h>
    1.36 -
    1.37 -typedef struct _PurpleUtilFetchUrlData PurpleUtilFetchUrlData;
    1.38 -typedef struct _PurpleMenuAction PurpleMenuAction;
    1.39 -typedef struct _PurpleKeyValuePair PurpleKeyValuePair;
    1.40 -
    1.41 -#include "account.h"
    1.42 -#include "xmlnode.h"
    1.43 -#include "notify.h"
    1.44 -
    1.45 -
    1.46 -#ifdef __cplusplus
    1.47 -extern "C" {
    1.48 -#endif
    1.49 -
    1.50 -struct _PurpleMenuAction
    1.51 -{
    1.52 -	char *label;
    1.53 -	PurpleCallback callback;
    1.54 -	gpointer data;
    1.55 -	GList *children;
    1.56 -};
    1.57 -
    1.58 -typedef char *(*PurpleInfoFieldFormatCallback)(const char *field, size_t len);
    1.59 -
    1.60 -/**
    1.61 - * A key-value pair.
    1.62 - *
    1.63 - * This is used by, among other things, purple_gtk_combo* functions to pass in a
    1.64 - * list of key-value pairs so it can display a user-friendly value.
    1.65 - */
    1.66 -struct _PurpleKeyValuePair
    1.67 -{
    1.68 -	gchar *key;
    1.69 -	void *value;
    1.70 -
    1.71 -};
    1.72 -
    1.73 -/**
    1.74 - * Creates a new PurpleMenuAction.
    1.75 - *
    1.76 - * @param label    The text label to display for this action.
    1.77 - * @param callback The function to be called when the action is used on
    1.78 - *                 the selected item.
    1.79 - * @param data     Additional data to be passed to the callback.
    1.80 - * @param children A GList of PurpleMenuActions to be added as a submenu
    1.81 - *                 of the action.
    1.82 - * @return The PurpleMenuAction.
    1.83 - */
    1.84 -PurpleMenuAction *purple_menu_action_new(const char *label, PurpleCallback callback,
    1.85 -                                     gpointer data, GList *children);
    1.86 -
    1.87 -/**
    1.88 - * Frees a PurpleMenuAction
    1.89 - *
    1.90 - * @param act The PurpleMenuAction to free.
    1.91 - */
    1.92 -void purple_menu_action_free(PurpleMenuAction *act);
    1.93 -
    1.94 -/**
    1.95 - * Set the appropriate presence values for the currently playing song.
    1.96 - *
    1.97 - * @param title     The title of the song, @c NULL to unset the value.
    1.98 - * @param artist    The artist of the song, can be @c NULL.
    1.99 - * @param album     The album of the song, can be @c NULL.
   1.100 - * @since 2.4.0
   1.101 - */
   1.102 -void purple_util_set_current_song(const char *title, const char *artist,
   1.103 -		const char *album);
   1.104 -
   1.105 -/**
   1.106 - * Format song information.
   1.107 - *
   1.108 - * @param title     The title of the song, @c NULL to unset the value.
   1.109 - * @param artist    The artist of the song, can be @c NULL.
   1.110 - * @param album     The album of the song, can be @c NULL.
   1.111 - * @param unused    Currently unused, must be @c NULL.
   1.112 - *
   1.113 - * @return   The formatted string. The caller must #g_free the returned string.
   1.114 - * @since 2.4.0
   1.115 - */
   1.116 -char * purple_util_format_song_info(const char *title, const char *artist,
   1.117 -		const char *album, gpointer unused);
   1.118 -
   1.119 -/**************************************************************************/
   1.120 -/** @name Utility Subsystem                                               */
   1.121 -/**************************************************************************/
   1.122 -/*@{*/
   1.123 -
   1.124 -/**
   1.125 - * Initializes the utility subsystem.
   1.126 - *
   1.127 - * @since 2.3.0
   1.128 - */
   1.129 -void purple_util_init(void);
   1.130 -
   1.131 -/**
   1.132 - * Uninitializes the util subsystem.
   1.133 - *
   1.134 - * @since 2.3.0
   1.135 - */
   1.136 -void purple_util_uninit(void);
   1.137 -
   1.138 -/*@}*/
   1.139 -
   1.140 -/**************************************************************************/
   1.141 -/** @name Base16 Functions                                                */
   1.142 -/**************************************************************************/
   1.143 -/*@{*/
   1.144 -
   1.145 -/**
   1.146 - * Converts a chunk of binary data to its base-16 equivalent.
   1.147 - *
   1.148 - * @param data The data to convert.
   1.149 - * @param len  The length of the data.
   1.150 - *
   1.151 - * @return The base-16 string in the ASCII encoding.  Must be
   1.152 - *         g_free'd when no longer needed.
   1.153 - *
   1.154 - * @see purple_base16_decode()
   1.155 - */
   1.156 -gchar *purple_base16_encode(const guchar *data, gsize len);
   1.157 -
   1.158 -/**
   1.159 - * Converts an ASCII string of base-16 encoded data to
   1.160 - * the binary equivalent.
   1.161 - *
   1.162 - * @param str     The base-16 string to convert to raw data.
   1.163 - * @param ret_len The length of the returned data.  You can
   1.164 - *                pass in NULL if you're sure that you know
   1.165 - *                the length of the decoded data, or if you
   1.166 - *                know you'll be able to use strlen to
   1.167 - *                determine the length, etc.
   1.168 - *
   1.169 - * @return The raw data.  Must be g_free'd when no longer needed.
   1.170 - *
   1.171 - * @see purple_base16_encode()
   1.172 - */
   1.173 -guchar *purple_base16_decode(const char *str, gsize *ret_len);
   1.174 -
   1.175 -/**
   1.176 - * Converts a chunk of binary data to a chunked base-16 representation
   1.177 - * (handy for key fingerprints)
   1.178 - *
   1.179 - * Example output: 01:23:45:67:89:AB:CD:EF
   1.180 - *
   1.181 - * @param data The data to convert.
   1.182 - * @param len  The length of the data.
   1.183 - *
   1.184 - * @return The base-16 string in the ASCII chunked encoding.  Must be
   1.185 - *         g_free'd when no longer needed.
   1.186 - */
   1.187 -gchar *purple_base16_encode_chunked(const guchar *data, gsize len);
   1.188 -
   1.189 -
   1.190 -/*@}*/
   1.191 -
   1.192 -/**************************************************************************/
   1.193 -/** @name Base64 Functions                                                */
   1.194 -/**************************************************************************/
   1.195 -/*@{*/
   1.196 -
   1.197 -/**
   1.198 - * Converts a chunk of binary data to its base-64 equivalent.
   1.199 - *
   1.200 - * @param data The data to convert.
   1.201 - * @param len  The length of the data.
   1.202 - *
   1.203 - * @return The base-64 string in the ASCII encoding.  Must be
   1.204 - *         g_free'd when no longer needed.
   1.205 - *
   1.206 - * @see purple_base64_decode()
   1.207 - */
   1.208 -gchar *purple_base64_encode(const guchar *data, gsize len);
   1.209 -
   1.210 -/**
   1.211 - * Converts an ASCII string of base-64 encoded data to
   1.212 - * the binary equivalent.
   1.213 - *
   1.214 - * @param str     The base-64 string to convert to raw data.
   1.215 - * @param ret_len The length of the returned data.  You can
   1.216 - *                pass in NULL if you're sure that you know
   1.217 - *                the length of the decoded data, or if you
   1.218 - *                know you'll be able to use strlen to
   1.219 - *                determine the length, etc.
   1.220 - *
   1.221 - * @return The raw data.  Must be g_free'd when no longer needed.
   1.222 - *
   1.223 - * @see purple_base64_encode()
   1.224 - */
   1.225 -guchar *purple_base64_decode(const char *str, gsize *ret_len);
   1.226 -
   1.227 -/*@}*/
   1.228 -
   1.229 -/**************************************************************************/
   1.230 -/** @name Quoted Printable Functions                                      */
   1.231 -/**************************************************************************/
   1.232 -/*@{*/
   1.233 -
   1.234 -/**
   1.235 - * Converts a quoted printable string back to its readable equivalent.
   1.236 - * What is a quoted printable string, you ask?  It's an encoding used
   1.237 - * to transmit binary data as ASCII.  It's intended purpose is to send
   1.238 - * emails containing non-ASCII characters.  Wikipedia has a pretty good
   1.239 - * explanation.  Also see RFC 2045.
   1.240 - *
   1.241 - * @param str     The quoted printable ASCII string to convert to raw data.
   1.242 - * @param ret_len The length of the returned data.
   1.243 - *
   1.244 - * @return The readable string.  Must be g_free'd when no longer needed.
   1.245 - */
   1.246 -guchar *purple_quotedp_decode(const char *str, gsize *ret_len);
   1.247 -
   1.248 -/*@}*/
   1.249 -
   1.250 -/**************************************************************************/
   1.251 -/** @name MIME Functions                                                  */
   1.252 -/**************************************************************************/
   1.253 -/*@{*/
   1.254 -
   1.255 -/**
   1.256 - * Converts a MIME header field string back to its readable equivalent
   1.257 - * according to RFC 2047.  Basically, a header is plain ASCII and can
   1.258 - * contain any number of sections called "encoded-words."  The format
   1.259 - * of an encoded word is =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=
   1.260 - * =? designates the beginning of the encoded-word
   1.261 - * ?= designates the end of the encoded-word
   1.262 - *
   1.263 - * An encoded word is segmented into three pieces by the use of a
   1.264 - * question mark.  The first piece is the character set, the second
   1.265 - * piece is the encoding, and the third piece is the encoded text.
   1.266 - *
   1.267 - * @param str The ASCII string, possibly containing any number of
   1.268 - *            encoded-word sections.
   1.269 - *
   1.270 - * @return The string, with any encoded-word sections decoded and
   1.271 - *         converted to UTF-8.  Must be g_free'd when no longer
   1.272 - *         needed.
   1.273 - */
   1.274 -char *purple_mime_decode_field(const char *str);
   1.275 -
   1.276 -/*@}*/
   1.277 -
   1.278 -
   1.279 -/**************************************************************************/
   1.280 -/** @name Date/Time Functions                                             */
   1.281 -/**************************************************************************/
   1.282 -/*@{*/
   1.283 -
   1.284 -/**
   1.285 - * Formats a time into the specified format.
   1.286 - *
   1.287 - * This is essentially strftime(), but it has a static buffer
   1.288 - * and handles the UTF-8 conversion for the caller.
   1.289 - *
   1.290 - * This function also provides the GNU %z formatter if the underlying C
   1.291 - * library doesn't.  However, the format string parser is very naive, which
   1.292 - * means that conversions specifiers to %z cannot be guaranteed.  The GNU
   1.293 - * strftime(3) man page describes %z as: 'The time-zone as hour offset from
   1.294 - * GMT.  Required to emit RFC822-conformant dates
   1.295 - * (using "%a, %d %b %Y %H:%M:%S %z"). (GNU)'
   1.296 - *
   1.297 - * On Windows, this function also converts the results for %Z from a timezone
   1.298 - * name (as returned by the system strftime() %Z format string) to a timezone
   1.299 - * abbreviation (as is the case on Unix).  As with %z, conversion specifiers
   1.300 - * should not be used.
   1.301 - *
   1.302 - * @param format The format string, in UTF-8
   1.303 - * @param tm     The time to format, or @c NULL to use the current local time
   1.304 - *
   1.305 - * @return The formatted time, in UTF-8.
   1.306 - *
   1.307 - * @note @a format is required to be in UTF-8.  This differs from strftime(),
   1.308 - *       where the format is provided in the locale charset.
   1.309 - */
   1.310 -const char *purple_utf8_strftime(const char *format, const struct tm *tm);
   1.311 -
   1.312 -/**
   1.313 - * Gets a string representation of the local timezone offset
   1.314 - *
   1.315 - * @param tm   The time to get the timezone for
   1.316 - * @param iso  TRUE to format the offset according to ISO-8601, FALSE to
   1.317 - *             not substitute 'Z' for 0 offset, and to not separate
   1.318 - *             hours and minutes with a colon.
   1.319 - */
   1.320 -const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso);
   1.321 -
   1.322 -/**
   1.323 - * Formats a time into the user's preferred short date format.
   1.324 - *
   1.325 - * The returned string is stored in a static buffer, so the result
   1.326 - * should be g_strdup()'d if it's going to be kept.
   1.327 - *
   1.328 - * @param tm The time to format, or @c NULL to use the current local time
   1.329 - *
   1.330 - * @return The date, formatted as per the user's settings.
   1.331 - */
   1.332 -const char *purple_date_format_short(const struct tm *tm);
   1.333 -
   1.334 -/**
   1.335 - * Formats a time into the user's preferred short date plus time format.
   1.336 - *
   1.337 - * The returned string is stored in a static buffer, so the result
   1.338 - * should be g_strdup()'d if it's going to be kept.
   1.339 - *
   1.340 - * @param tm The time to format, or @c NULL to use the current local time
   1.341 - *
   1.342 - * @return The timestamp, formatted as per the user's settings.
   1.343 - */
   1.344 -const char *purple_date_format_long(const struct tm *tm);
   1.345 -
   1.346 -/**
   1.347 - * Formats a time into the user's preferred full date and time format.
   1.348 - *
   1.349 - * The returned string is stored in a static buffer, so the result
   1.350 - * should be g_strdup()'d if it's going to be kept.
   1.351 - *
   1.352 - * @param tm The time to format, or @c NULL to use the current local time
   1.353 - *
   1.354 - * @return The date and time, formatted as per the user's settings.
   1.355 - */
   1.356 -const char *purple_date_format_full(const struct tm *tm);
   1.357 -
   1.358 -/**
   1.359 - * Formats a time into the user's preferred time format.
   1.360 - *
   1.361 - * The returned string is stored in a static buffer, so the result
   1.362 - * should be g_strdup()'d if it's going to be kept.
   1.363 - *
   1.364 - * @param tm The time to format, or @c NULL to use the current local time
   1.365 - *
   1.366 - * @return The time, formatted as per the user's settings.
   1.367 - */
   1.368 -const char *purple_time_format(const struct tm *tm);
   1.369 -
   1.370 -/**
   1.371 - * Builds a time_t from the supplied information.
   1.372 - *
   1.373 - * @param year  The year.
   1.374 - * @param month The month.
   1.375 - * @param day   The day.
   1.376 - * @param hour  The hour.
   1.377 - * @param min   The minute.
   1.378 - * @param sec   The second.
   1.379 - *
   1.380 - * @return A time_t.
   1.381 - */
   1.382 -time_t purple_time_build(int year, int month, int day, int hour,
   1.383 -					   int min, int sec);
   1.384 -
   1.385 -/** Used by purple_str_to_time to indicate no timezone offset was
   1.386 -  * specified in the timestamp string. */
   1.387 -#define PURPLE_NO_TZ_OFF -500000
   1.388 -
   1.389 -/**
   1.390 - * Parses a timestamp in jabber, ISO8601, or MM/DD/YYYY format and returns
   1.391 - * a time_t.
   1.392 - *
   1.393 - * @param timestamp The timestamp
   1.394 - * @param utc       Assume UTC if no timezone specified
   1.395 - * @param tm        If not @c NULL, the caller can get a copy of the
   1.396 - *                  struct tm used to calculate the time_t return value.
   1.397 - * @param tz_off    If not @c NULL, the caller can get a copy of the
   1.398 - *                  timezone offset (from UTC) used to calculate the time_t
   1.399 - *                  return value. Note: Zero is a valid offset. As such,
   1.400 - *                  the value of the macro @c PURPLE_NO_TZ_OFF indicates no
   1.401 - *                  offset was specified (which means that the local
   1.402 - *                  timezone was used in the calculation).
   1.403 - * @param rest      If not @c NULL, the caller can get a pointer to the
   1.404 - *                  part of @a timestamp left over after parsing is
   1.405 - *                  completed, if it's not the end of @a timestamp.
   1.406 - *
   1.407 - * @return A time_t.
   1.408 - */
   1.409 -time_t purple_str_to_time(const char *timestamp, gboolean utc,
   1.410 -                        struct tm *tm, long *tz_off, const char **rest);
   1.411 -
   1.412 -/*@}*/
   1.413 -
   1.414 -
   1.415 -/**************************************************************************/
   1.416 -/** @name Markup Functions                                                */
   1.417 -/**************************************************************************/
   1.418 -/*@{*/
   1.419 -
   1.420 -/**
   1.421 - * Escapes special characters in a plain-text string so they display
   1.422 - * correctly as HTML.  For example, & is replaced with &amp; and < is
   1.423 - * replaced with &lt;
   1.424 - *
   1.425 - * This is exactly the same as g_markup_escape_text(), except that it
   1.426 - * does not change ' to &apos; because &apos; is not a valid HTML 4 entity,
   1.427 - * and is displayed literally in IE7.
   1.428 - *
   1.429 - * @since 2.6.0
   1.430 - */
   1.431 -gchar *purple_markup_escape_text(const gchar *text, gssize length);
   1.432 -
   1.433 -/**
   1.434 - * Finds an HTML tag matching the given name.
   1.435 - *
   1.436 - * This locates an HTML tag's start and end, and stores its attributes
   1.437 - * in a GData hash table. The names of the attributes are lower-cased
   1.438 - * in the hash table, and the name of the tag is case insensitive.
   1.439 - *
   1.440 - * @param needle	  The name of the tag
   1.441 - * @param haystack	  The null-delimited string to search in
   1.442 - * @param start		  A pointer to the start of the tag if found
   1.443 - * @param end		  A pointer to the end of the tag if found
   1.444 - * @param attributes  The attributes, if the tag was found.  This should
   1.445 - *                    be freed with g_datalist_clear().
   1.446 - * @return TRUE if the tag was found
   1.447 - */
   1.448 -gboolean purple_markup_find_tag(const char *needle, const char *haystack,
   1.449 -							  const char **start, const char **end,
   1.450 -							  GData **attributes);
   1.451 -
   1.452 -/**
   1.453 - * Extracts a field of data from HTML.
   1.454 - *
   1.455 - * This is a scary function. See protocols/msn/msn.c and
   1.456 - * protocols/yahoo/yahoo_profile.c for example usage.
   1.457 - *
   1.458 - * @param str            The string to parse.
   1.459 - * @param len            The size of str.
   1.460 - * @param user_info      The destination PurpleNotifyUserInfo to which the new
   1.461 - *                       field info should be added.
   1.462 - * @param start_token    The beginning token.
   1.463 - * @param skip           The number of characters to skip after the
   1.464 - *                       start token.
   1.465 - * @param end_token      The ending token.
   1.466 - * @param check_value    The value that the last character must meet.
   1.467 - * @param no_value_token The token indicating no value is given.
   1.468 - * @param display_name   The short descriptive name to display for this token.
   1.469 - * @param is_link        TRUE if this should be a link, or FALSE otherwise.
   1.470 - * @param link_prefix    The prefix for the link.
   1.471 - * @param format_cb      A callback to format the value before adding it.
   1.472 - *
   1.473 - * @return TRUE if successful, or FALSE otherwise.
   1.474 - */
   1.475 -gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
   1.476 -                                        const char *start_token, int skip,
   1.477 -                                        const char *end_token, char check_value,
   1.478 -                                        const char *no_value_token,
   1.479 -                                        const char *display_name, gboolean is_link,
   1.480 -                                        const char *link_prefix,
   1.481 -					PurpleInfoFieldFormatCallback format_cb);
   1.482 -
   1.483 -/**
   1.484 - * Converts HTML markup to XHTML.
   1.485 - *
   1.486 - * @param html       The HTML markup.
   1.487 - * @param dest_xhtml The destination XHTML output.
   1.488 - * @param dest_plain The destination plain-text output.
   1.489 - */
   1.490 -void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml,
   1.491 -							   char **dest_plain);
   1.492 -
   1.493 -/**
   1.494 - * Strips HTML tags from a string.
   1.495 - *
   1.496 - * @param str The string to strip HTML from.
   1.497 - *
   1.498 - * @return The new string without HTML.  You must g_free this string
   1.499 - *         when finished with it.
   1.500 - */
   1.501 -char *purple_markup_strip_html(const char *str);
   1.502 -
   1.503 -/**
   1.504 - * Adds the necessary HTML code to turn URIs into HTML links in a string.
   1.505 - *
   1.506 - * @param str The string to linkify.
   1.507 - *
   1.508 - * @return The new string with all URIs surrounded in standard
   1.509 - *         HTML <a href="whatever"></a> tags.  You must g_free this
   1.510 - *         string when finished with it.
   1.511 - */
   1.512 -char *purple_markup_linkify(const char *str);
   1.513 -
   1.514 -/**
   1.515 - * Unescapes HTML entities to their literal characters. Also translates
   1.516 - * "<br>" to "\n".
   1.517 - * For example "&amp;" is replaced by '&' and so on.
   1.518 - * Actually only "&amp;", "&quot;", "&lt;" and "&gt;" are currently
   1.519 - * supported.
   1.520 - *
   1.521 - * @param html The string in which to unescape any HTML entities
   1.522 - *
   1.523 - * @return The text with HTML entities literalized.  You must g_free
   1.524 - *         this string when finished with it.
   1.525 - */
   1.526 -char *purple_unescape_html(const char *html);
   1.527 -
   1.528 -/**
   1.529 - * Returns a newly allocated substring of the HTML UTF-8 string "str".
   1.530 - * The markup is preserved such that the substring will have the same
   1.531 - * formatting as original string, even though some tags may have been
   1.532 - * opened before "x", or may close after "y". All open tags are closed
   1.533 - * at the end of the returned string, in the proper order.
   1.534 - *
   1.535 - * Note that x and y are in character offsets, not byte offsets, and
   1.536 - * are offsets into an unformatted version of str. Because of this,
   1.537 - * this function may be sensitive to changes in GtkIMHtml and may break
   1.538 - * when used with other UI's. libpurple users are encouraged to report and
   1.539 - * work out any problems encountered.
   1.540 - *
   1.541 - * @param str The input NUL terminated, HTML, UTF-8 (or ASCII) string.
   1.542 - * @param x The character offset into an unformatted version of str to
   1.543 - *          begin at.
   1.544 - * @param y The character offset (into an unformatted vesion of str) of
   1.545 - *          one past the last character to include in the slice.
   1.546 - *
   1.547 - * @return The HTML slice of string, with all formatting retained.
   1.548 - */
   1.549 -char *purple_markup_slice(const char *str, guint x, guint y);
   1.550 -
   1.551 -/**
   1.552 - * Returns a newly allocated string containing the name of the tag
   1.553 - * located at "tag". Tag is expected to point to a '<', and contain
   1.554 - * a '>' sometime after that. If there is no '>' and the string is
   1.555 - * not NUL terminated, this function can be expected to segfault.
   1.556 - *
   1.557 - * @param tag The string starting a HTML tag.
   1.558 - * @return A string containing the name of the tag.
   1.559 - */
   1.560 -char *purple_markup_get_tag_name(const char *tag);
   1.561 -
   1.562 -/**
   1.563 - * Returns a constant string of the character representation of the HTML
   1.564 - * entity pointed to by @a text. For example, purple_markup_unescape_entity("&amp;")
   1.565 - * will return "&". The @a text variable is expected to point to an '&',
   1.566 - * the first character of the entity. If given an unrecognized entity, the function
   1.567 - * returns @c NULL.
   1.568 - *
   1.569 - * Note that this function, unlike purple_unescape_html(), does not search
   1.570 - * the string for the entity, does not replace the entity, and does not
   1.571 - * return a newly allocated string.
   1.572 - *
   1.573 - * @param text   A string containing an HTML entity.
   1.574 - * @param length If not @c NULL, the string length of the entity is stored in this location.
   1.575 - *
   1.576 - * @return A constant string containing the character representation of the given entity.
   1.577 - */
   1.578 -const char * purple_markup_unescape_entity(const char *text, int *length);
   1.579 -
   1.580 -/**
   1.581 - * Returns a newly allocated string containing the value of the CSS property specified
   1.582 - * in opt. The @a style argument is expected to point to a HTML inline CSS.
   1.583 - * The function will seek for the CSS property and return its value.
   1.584 - *
   1.585 - * For example, purple_markup_get_css_property("direction:rtl;color:#dc4d1b;",
   1.586 - * "color") would return "#dc4d1b".
   1.587 - *
   1.588 - * On error or if the requested property was not found, the function returns
   1.589 - * @c NULL.
   1.590 - *
   1.591 - * @param style A string containing the inline CSS text.
   1.592 - * @param opt   The requested CSS property.
   1.593 - *
   1.594 - * @return The value of the requested CSS property.
   1.595 - */
   1.596 -char * purple_markup_get_css_property(const gchar *style, const gchar *opt);
   1.597 -
   1.598 -/**
   1.599 - * Check if the given HTML contains RTL text.
   1.600 - *
   1.601 - * @param html  The HTML text.
   1.602 - *
   1.603 - * @return  TRUE if the text contains RTL text, FALSE otherwise.
   1.604 - *
   1.605 - * @since 2.6.0
   1.606 - */
   1.607 -gboolean purple_markup_is_rtl(const char *html);
   1.608 -
   1.609 -/*@}*/
   1.610 -
   1.611 -
   1.612 -/**************************************************************************/
   1.613 -/** @name Path/Filename Functions                                         */
   1.614 -/**************************************************************************/
   1.615 -/*@{*/
   1.616 -
   1.617 -/**
   1.618 - * Returns the user's home directory.
   1.619 - *
   1.620 - * @return The user's home directory.
   1.621 - *
   1.622 - * @see purple_user_dir()
   1.623 - */
   1.624 -const gchar *purple_home_dir(void);
   1.625 -
   1.626 -/**
   1.627 - * Returns the purple settings directory in the user's home directory.
   1.628 - * This is usually ~/.purple
   1.629 - *
   1.630 - * @return The purple settings directory.
   1.631 - *
   1.632 - * @see purple_home_dir()
   1.633 - */
   1.634 -const char *purple_user_dir(void);
   1.635 -
   1.636 -/**
   1.637 - * Define a custom purple settings directory, overriding the default (user's home directory/.purple)
   1.638 - * @param dir The custom settings directory
   1.639 - */
   1.640 -void purple_util_set_user_dir(const char *dir);
   1.641 -
   1.642 -/**
   1.643 - * Builds a complete path from the root, making any directories along
   1.644 - * the path which do not already exist.
   1.645 - *
   1.646 - * @param path The path you wish to create.  Note that it must start
   1.647 - *        from the root or this function will fail.
   1.648 - * @param mode Unix-style permissions for this directory.
   1.649 - *
   1.650 - * @return 0 for success, nonzero on any error.
   1.651 - */
   1.652 -int purple_build_dir(const char *path, int mode);
   1.653 -
   1.654 -/**
   1.655 - * Write a string of data to a file of the given name in the Purple
   1.656 - * user directory ($HOME/.purple by default).  The data is typically
   1.657 - * a serialized version of one of Purple's config files, such as
   1.658 - * prefs.xml, accounts.xml, etc.  And the string is typically
   1.659 - * obtained using xmlnode_to_formatted_str.  However, this function
   1.660 - * should work fine for saving binary files as well.
   1.661 - *
   1.662 - * @param filename The basename of the file to write in the purple_user_dir.
   1.663 - * @param data     A null-terminated string of data to write.
   1.664 - * @param size     The size of the data to save.  If data is
   1.665 - *                 null-terminated you can pass in -1.
   1.666 - *
   1.667 - * @return TRUE if the file was written successfully.  FALSE otherwise.
   1.668 - */
   1.669 -gboolean purple_util_write_data_to_file(const char *filename, const char *data,
   1.670 -									  gssize size);
   1.671 -
   1.672 -/**
   1.673 - * Write data to a file using the absolute path.
   1.674 - *
   1.675 - * This exists for Glib backwards compatibility reasons.
   1.676 - *
   1.677 - * @param filename_full Filename to write to
   1.678 - * @param data          A null-terminated string of data to write.
   1.679 - * @param size          The size of the data to save.  If data is
   1.680 - *                      null-terminated you can pass in -1.
   1.681 - *
   1.682 - * @return TRUE if the file was written successfully.  FALSE otherwise.
   1.683 - *
   1.684 - * @todo Remove this function (use g_file_set_contents instead) when 3.0.0
   1.685 - *       rolls around.
   1.686 - * @see purple_util_write_data_to_file()
   1.687 - *
   1.688 - */
   1.689 -gboolean
   1.690 -purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size);
   1.691 -
   1.692 -/**
   1.693 - * Read the contents of a given file and parse the results into an
   1.694 - * xmlnode tree structure.  This is intended to be used to read
   1.695 - * Purple's configuration xml files (prefs.xml, pounces.xml, etc.)
   1.696 - *
   1.697 - * @param filename    The basename of the file to open in the purple_user_dir.
   1.698 - * @param description A very short description of the contents of this
   1.699 - *                    file.  This is used in error messages shown to the
   1.700 - *                    user when the file can not be opened.  For example,
   1.701 - *                    "preferences," or "buddy pounces."
   1.702 - *
   1.703 - * @return An xmlnode tree of the contents of the given file.  Or NULL, if
   1.704 - *         the file does not exist or there was an error reading the file.
   1.705 - */
   1.706 -xmlnode *purple_util_read_xml_from_file(const char *filename,
   1.707 -									  const char *description);
   1.708 -
   1.709 -/**
   1.710 - * Creates a temporary file and returns a file pointer to it.
   1.711 - *
   1.712 - * This is like mkstemp(), but returns a file pointer and uses a
   1.713 - * pre-set template. It uses the semantics of tempnam() for the
   1.714 - * directory to use and allocates the space for the file path.
   1.715 - *
   1.716 - * The caller is responsible for closing the file and removing it when
   1.717 - * done, as well as freeing the space pointed to by @a path with
   1.718 - * g_free().
   1.719 - *
   1.720 - * @param path   The returned path to the temp file.
   1.721 - * @param binary Text or binary, for platforms where it matters.
   1.722 - *
   1.723 - * @return A file pointer to the temporary file, or @c NULL on failure.
   1.724 - */
   1.725 -FILE *purple_mkstemp(char **path, gboolean binary);
   1.726 -
   1.727 -/**
   1.728 - * Returns an extension corresponding to the image data's file type.
   1.729 - *
   1.730 - * @param data A pointer to the image data
   1.731 - * @param len  The length of the image data
   1.732 - *
   1.733 - * @return The appropriate extension, or "icon" if unknown.
   1.734 - */
   1.735 -const char *
   1.736 -purple_util_get_image_extension(gconstpointer data, size_t len);
   1.737 -
   1.738 -/**
   1.739 - * Returns a SHA-1 hash string of the data passed in.
   1.740 - */
   1.741 -char *purple_util_get_image_checksum(gconstpointer image_data, size_t image_len);
   1.742 -
   1.743 -/**
   1.744 - * @return A hex encoded version of the SHA-1 hash of the data passed
   1.745 - *         in with the correct file extention appended.  The file
   1.746 - *         extension is determined by calling
   1.747 - *         purple_util_get_image_extension().  This return value must
   1.748 - *         be g_freed by the caller.
   1.749 - */
   1.750 -char *purple_util_get_image_filename(gconstpointer image_data, size_t image_len);
   1.751 -
   1.752 -/*@}*/
   1.753 -
   1.754 -
   1.755 -/**************************************************************************/
   1.756 -/** @name Environment Detection Functions                                 */
   1.757 -/**************************************************************************/
   1.758 -/*@{*/
   1.759 -
   1.760 -/**
   1.761 - * Checks if the given program name is valid and executable.
   1.762 - *
   1.763 - * @param program The file name of the application.
   1.764 - *
   1.765 - * @return TRUE if the program is runable.
   1.766 - */
   1.767 -gboolean purple_program_is_valid(const char *program);
   1.768 -
   1.769 -/**
   1.770 - * Check if running GNOME.
   1.771 - *
   1.772 - * @return TRUE if running GNOME, FALSE otherwise.
   1.773 - */
   1.774 -gboolean purple_running_gnome(void);
   1.775 -
   1.776 -/**
   1.777 - * Check if running KDE.
   1.778 - *
   1.779 - * @return TRUE if running KDE, FALSE otherwise.
   1.780 - */
   1.781 -gboolean purple_running_kde(void);
   1.782 -
   1.783 -/**
   1.784 - * Check if running OS X.
   1.785 - *
   1.786 - * @return TRUE if running OS X, FALSE otherwise.
   1.787 - */
   1.788 -gboolean purple_running_osx(void);
   1.789 -
   1.790 -/**
   1.791 - * Returns the IP address from a socket file descriptor.
   1.792 - *
   1.793 - * @param fd The socket file descriptor.
   1.794 - *
   1.795 - * @return The IP address, or @c NULL on error.
   1.796 - */
   1.797 -char *purple_fd_get_ip(int fd);
   1.798 -
   1.799 -/*@}*/
   1.800 -
   1.801 -
   1.802 -/**************************************************************************/
   1.803 -/** @name String Functions                                                */
   1.804 -/**************************************************************************/
   1.805 -/*@{*/
   1.806 -
   1.807 -/**
   1.808 - * Tests two strings for equality.
   1.809 - *
   1.810 - * Unlike strcmp(), this function will not crash if one or both of the
   1.811 - * strings are @c NULL.
   1.812 - *
   1.813 - * @param left	A string
   1.814 - * @param right A string to compare with left
   1.815 - *
   1.816 - * @return @c TRUE if the strings are the same, else @c FALSE.
   1.817 - *
   1.818 - * @since 2.6.0
   1.819 - */
   1.820 -gboolean purple_strequal(const gchar *left, const gchar *right);
   1.821 -
   1.822 -/**
   1.823 - * Normalizes a string, so that it is suitable for comparison.
   1.824 - *
   1.825 - * The returned string will point to a static buffer, so if the
   1.826 - * string is intended to be kept long-term, you <i>must</i>
   1.827 - * g_strdup() it. Also, calling normalize() twice in the same line
   1.828 - * will lead to problems.
   1.829 - *
   1.830 - * @param account  The account the string belongs to, or NULL if you do
   1.831 - *                 not know the account.  If you use NULL, the string
   1.832 - *                 will still be normalized, but if the PRPL uses a
   1.833 - *                 custom normalization function then the string may
   1.834 - *                 not be normalized correctly.
   1.835 - * @param str      The string to normalize.
   1.836 - *
   1.837 - * @return A pointer to the normalized version stored in a static buffer.
   1.838 - */
   1.839 -const char *purple_normalize(const PurpleAccount *account, const char *str);
   1.840 -
   1.841 -/**
   1.842 - * Normalizes a string, so that it is suitable for comparison.
   1.843 - *
   1.844 - * This is one possible implementation for the PRPL callback
   1.845 - * function "normalize."  It returns a lowercase and UTF-8
   1.846 - * normalized version of the string.
   1.847 - *
   1.848 - * @param account  The account the string belongs to.
   1.849 - * @param str      The string to normalize.
   1.850 - *
   1.851 - * @return A pointer to the normalized version stored in a static buffer.
   1.852 - */
   1.853 -const char *purple_normalize_nocase(const PurpleAccount *account, const char *str);
   1.854 -
   1.855 -/**
   1.856 - * Compares two strings to see if the first contains the second as
   1.857 - * a proper prefix.
   1.858 - *
   1.859 - * @param s  The string to check.
   1.860 - * @param p  The prefix in question.
   1.861 - *
   1.862 - * @return   TRUE if p is a prefix of s, otherwise FALSE.
   1.863 - */
   1.864 -gboolean purple_str_has_prefix(const char *s, const char *p);
   1.865 -
   1.866 -/**
   1.867 - * Compares two strings to see if the second is a proper suffix
   1.868 - * of the first.
   1.869 - *
   1.870 - * @param s  The string to check.
   1.871 - * @param x  The suffix in question.
   1.872 - *
   1.873 - * @return   TRUE if x is a a suffix of s, otherwise FALSE.
   1.874 - */
   1.875 -gboolean purple_str_has_suffix(const char *s, const char *x);
   1.876 -
   1.877 -/**
   1.878 - * Duplicates a string and replaces all newline characters from the
   1.879 - * source string with HTML linebreaks.
   1.880 - *
   1.881 - * @param src The source string.
   1.882 - *
   1.883 - * @return The new string.  Must be g_free'd by the caller.
   1.884 - */
   1.885 -gchar *purple_strdup_withhtml(const gchar *src);
   1.886 -
   1.887 -/**
   1.888 - * Ensures that all linefeeds have a matching carriage return.
   1.889 - *
   1.890 - * @param str The source string.
   1.891 - *
   1.892 - * @return The string with carriage returns.
   1.893 - */
   1.894 -char *purple_str_add_cr(const char *str);
   1.895 -
   1.896 -/**
   1.897 - * Strips all instances of the given character from the
   1.898 - * given string.  The string is modified in place.  This
   1.899 - * is useful for stripping new line characters, for example.
   1.900 - *
   1.901 - * Example usage:
   1.902 - * purple_str_strip_char(my_dumb_string, '\n');
   1.903 - *
   1.904 - * @param str     The string to strip characters from.
   1.905 - * @param thechar The character to strip from the given string.
   1.906 - */
   1.907 -void purple_str_strip_char(char *str, char thechar);
   1.908 -
   1.909 -/**
   1.910 - * Given a string, this replaces all instances of one character
   1.911 - * with another.  This happens inline (the original string IS
   1.912 - * modified).
   1.913 - *
   1.914 - * @param string The string from which to replace stuff.
   1.915 - * @param delimiter The character you want replaced.
   1.916 - * @param replacement The character you want inserted in place
   1.917 - *        of the delimiting character.
   1.918 - */
   1.919 -void purple_util_chrreplace(char *string, char delimiter,
   1.920 -						  char replacement);
   1.921 -
   1.922 -/**
   1.923 - * Given a string, this replaces one substring with another
   1.924 - * and returns a newly allocated string.
   1.925 - *
   1.926 - * @param string The string from which to replace stuff.
   1.927 - * @param delimiter The substring you want replaced.
   1.928 - * @param replacement The substring you want inserted in place
   1.929 - *        of the delimiting substring.
   1.930 - *
   1.931 - * @return A new string, after performing the substitution.
   1.932 - *         free this with g_free().
   1.933 - */
   1.934 -gchar *purple_strreplace(const char *string, const char *delimiter,
   1.935 -					   const char *replacement);
   1.936 -
   1.937 -
   1.938 -/**
   1.939 - * Given a string, this replaces any utf-8 substrings in that string with
   1.940 - * the corresponding numerical character reference, and returns a newly
   1.941 - * allocated string.
   1.942 - *
   1.943 - * @param in The string which might contain utf-8 substrings
   1.944 - *
   1.945 - * @return A new string, with utf-8 replaced with numerical character
   1.946 - *         references, free this with g_free()
   1.947 -*/
   1.948 -char *purple_utf8_ncr_encode(const char *in);
   1.949 -
   1.950 -
   1.951 -/**
   1.952 - * Given a string, this replaces any numerical character references
   1.953 - * in that string with the corresponding actual utf-8 substrings,
   1.954 - * and returns a newly allocated string.
   1.955 - *
   1.956 - * @param in The string which might contain numerical character references.
   1.957 - *
   1.958 - * @return A new string, with numerical character references
   1.959 - *         replaced with actual utf-8, free this with g_free().
   1.960 - */
   1.961 -char *purple_utf8_ncr_decode(const char *in);
   1.962 -
   1.963 -
   1.964 -/**
   1.965 - * Given a string, this replaces one substring with another
   1.966 - * ignoring case and returns a newly allocated string.
   1.967 - *
   1.968 - * @param string The string from which to replace stuff.
   1.969 - * @param delimiter The substring you want replaced.
   1.970 - * @param replacement The substring you want inserted in place
   1.971 - *        of the delimiting substring.
   1.972 - *
   1.973 - * @return A new string, after performing the substitution.
   1.974 - *         free this with g_free().
   1.975 - */
   1.976 -gchar *purple_strcasereplace(const char *string, const char *delimiter,
   1.977 -						   const char *replacement);
   1.978 -
   1.979 -/**
   1.980 - * This is like strstr, except that it ignores ASCII case in
   1.981 - * searching for the substring.
   1.982 - *
   1.983 - * @param haystack The string to search in.
   1.984 - * @param needle   The substring to find.
   1.985 - *
   1.986 - * @return the location of the substring if found, or NULL if not
   1.987 - */
   1.988 -const char *purple_strcasestr(const char *haystack, const char *needle);
   1.989 -
   1.990 -/**
   1.991 - * Returns a string representing a filesize in the appropriate
   1.992 - * units (MB, KB, GB, etc.)
   1.993 - *
   1.994 - * @param size The size
   1.995 - *
   1.996 - * @return The string in units form. This must be freed.
   1.997 - */
   1.998 -char *purple_str_size_to_units(size_t size);
   1.999 -
  1.1000 -/**
  1.1001 - * Converts seconds into a human-readable form.
  1.1002 - *
  1.1003 - * @param sec The seconds.
  1.1004 - *
  1.1005 - * @return A human-readable form, containing days, hours, minutes, and
  1.1006 - *         seconds.
  1.1007 - */
  1.1008 -char *purple_str_seconds_to_string(guint sec);
  1.1009 -
  1.1010 -/**
  1.1011 - * Converts a binary string into a NUL terminated ascii string,
  1.1012 - * replacing nonascii characters and characters below SPACE (including
  1.1013 - * NUL) into \\xyy, where yy are two hex digits. Also backslashes are
  1.1014 - * changed into two backslashes (\\\\). The returned, newly allocated
  1.1015 - * string can be outputted to the console, and must be g_free()d.
  1.1016 - *
  1.1017 - * @param binary A string of random data, possibly with embedded NULs
  1.1018 - *               and such.
  1.1019 - * @param len The length in bytes of the input string. Must not be 0.
  1.1020 - *
  1.1021 - * @return A newly allocated ASCIIZ string.
  1.1022 - */
  1.1023 -char *purple_str_binary_to_ascii(const unsigned char *binary, guint len);
  1.1024 -/*@}*/
  1.1025 -
  1.1026 -
  1.1027 -/**************************************************************************/
  1.1028 -/** @name URI/URL Functions                                               */
  1.1029 -/**************************************************************************/
  1.1030 -/*@{*/
  1.1031 -
  1.1032 -void purple_got_protocol_handler_uri(const char *uri);
  1.1033 -
  1.1034 -/**
  1.1035 - * Parses a URL, returning its host, port, file path, username and password.
  1.1036 - *
  1.1037 - * The returned data must be freed.
  1.1038 - *
  1.1039 - * @param url      The URL to parse.
  1.1040 - * @param ret_host The returned host.
  1.1041 - * @param ret_port The returned port.
  1.1042 - * @param ret_path The returned path.
  1.1043 - * @param ret_user The returned username.
  1.1044 - * @param ret_passwd The returned password.
  1.1045 - */
  1.1046 -gboolean purple_url_parse(const char *url, char **ret_host, int *ret_port,
  1.1047 -						char **ret_path, char **ret_user, char **ret_passwd);
  1.1048 -
  1.1049 -/**
  1.1050 - * This is the signature used for functions that act as the callback
  1.1051 - * to purple_util_fetch_url() or purple_util_fetch_url_request().
  1.1052 - *
  1.1053 - * @param url_data      The same value that was returned when you called
  1.1054 - *                      purple_fetch_url() or purple_fetch_url_request().
  1.1055 - * @param user_data     The user data that your code passed into either
  1.1056 - *                      purple_util_fetch_url() or purple_util_fetch_url_request().
  1.1057 - * @param url_text      This will be NULL on error.  Otherwise this
  1.1058 - *                      will contain the contents of the URL.
  1.1059 - * @param len           0 on error, otherwise this is the length of buf.
  1.1060 - * @param error_message If something went wrong then this will contain
  1.1061 - *                      a descriptive error message, and buf will be
  1.1062 - *                      NULL and len will be 0.
  1.1063 - */
  1.1064 -typedef void (*PurpleUtilFetchUrlCallback)(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message);
  1.1065 -
  1.1066 -/**
  1.1067 - * Fetches the data from a URL, and passes it to a callback function.
  1.1068 - *
  1.1069 - * @param url        The URL.
  1.1070 - * @param full       TRUE if this is the full URL, or FALSE if it's a
  1.1071 - *                   partial URL.
  1.1072 - * @param user_agent The user agent field to use, or NULL.
  1.1073 - * @param http11     TRUE if HTTP/1.1 should be used to download the file.
  1.1074 - * @param cb         The callback function.
  1.1075 - * @param data       The user data to pass to the callback function.
  1.1076 - */
  1.1077 -#define purple_util_fetch_url(url, full, user_agent, http11, cb, data) \
  1.1078 -	purple_util_fetch_url_request(url, full, user_agent, http11, NULL, \
  1.1079 -		FALSE, cb, data);
  1.1080 -
  1.1081 -/**
  1.1082 - * Fetches the data from a URL, and passes it to a callback function.
  1.1083 - *
  1.1084 - * @param url        The URL.
  1.1085 - * @param full       TRUE if this is the full URL, or FALSE if it's a
  1.1086 - *                   partial URL.
  1.1087 - * @param user_agent The user agent field to use, or NULL.
  1.1088 - * @param http11     TRUE if HTTP/1.1 should be used to download the file.
  1.1089 - * @param max_len    The maximum number of bytes to retrieve (-1 for unlimited)
  1.1090 - * @param cb         The callback function.
  1.1091 - * @param data       The user data to pass to the callback function.
  1.1092 - * @deprecated       In 3.0.0, we'll rename this to "purple_util_fetch_url" and get rid of the old one
  1.1093 - */
  1.1094 -#define purple_util_fetch_url_len(url, full, user_agent, http11, max_len, cb, data) \
  1.1095 -	purple_util_fetch_url_request_len(url, full, user_agent, http11, NULL, \
  1.1096 -		FALSE, max_len, cb, data);
  1.1097 -
  1.1098 -/**
  1.1099 - * Fetches the data from a URL, and passes it to a callback function.
  1.1100 - *
  1.1101 - * @param url        The URL.
  1.1102 - * @param full       TRUE if this is the full URL, or FALSE if it's a
  1.1103 - *                   partial URL.
  1.1104 - * @param user_agent The user agent field to use, or NULL.
  1.1105 - * @param http11     TRUE if HTTP/1.1 should be used to download the file.
  1.1106 - * @param request    A HTTP request to send to the server instead of the
  1.1107 - *                   standard GET
  1.1108 - * @param include_headers
  1.1109 - *                   If TRUE, include the HTTP headers in the response.
  1.1110 - * @param callback   The callback function.
  1.1111 - * @param data       The user data to pass to the callback function.
  1.1112 - */
  1.1113 -PurpleUtilFetchUrlData *purple_util_fetch_url_request(const gchar *url,
  1.1114 -		gboolean full, const gchar *user_agent, gboolean http11,
  1.1115 -		const gchar *request, gboolean include_headers,
  1.1116 -		PurpleUtilFetchUrlCallback callback, gpointer data);
  1.1117 -
  1.1118 -/**
  1.1119 - * Fetches the data from a URL, and passes it to a callback function.
  1.1120 - *
  1.1121 - * @param url        The URL.
  1.1122 - * @param full       TRUE if this is the full URL, or FALSE if it's a
  1.1123 - *                   partial URL.
  1.1124 - * @param user_agent The user agent field to use, or NULL.
  1.1125 - * @param http11     TRUE if HTTP/1.1 should be used to download the file.
  1.1126 - * @param request    A HTTP request to send to the server instead of the
  1.1127 - *                   standard GET
  1.1128 - * @param include_headers
  1.1129 - *                   If TRUE, include the HTTP headers in the response.
  1.1130 - * @param max_len    The maximum number of bytes to retrieve (-1 for unlimited)
  1.1131 - * @param callback   The callback function.
  1.1132 - * @param data       The user data to pass to the callback function.
  1.1133 - * @deprecated       In 3.0.0, this will go away.
  1.1134 - */
  1.1135 -PurpleUtilFetchUrlData *purple_util_fetch_url_request_len(const gchar *url,
  1.1136 -		gboolean full, const gchar *user_agent, gboolean http11,
  1.1137 -		const gchar *request, gboolean include_headers, gssize max_len,
  1.1138 -		PurpleUtilFetchUrlCallback callback, gpointer data);
  1.1139 -
  1.1140 -/**
  1.1141 - * Fetches the data from a URL, and passes it to a callback function.
  1.1142 - *
  1.1143 - * @param account    The account for which the request is needed, or NULL.
  1.1144 - * @param url        The URL.
  1.1145 - * @param full       TRUE if this is the full URL, or FALSE if it's a
  1.1146 - *                   partial URL.
  1.1147 - * @param user_agent The user agent field to use, or NULL.
  1.1148 - * @param http11     TRUE if HTTP/1.1 should be used to download the file.
  1.1149 - * @param request    A HTTP request to send to the server instead of the
  1.1150 - *                   standard GET
  1.1151 - * @param include_headers
  1.1152 - *                   If TRUE, include the HTTP headers in the response.
  1.1153 - * @param max_len    The maximum number of bytes to retrieve (-1 for unlimited)
  1.1154 - * @param callback   The callback function.
  1.1155 - * @param data       The user data to pass to the callback function.
  1.1156 - * @deprecated       In 3.0.0, we'll rename this to "purple_util_fetch_url_request" and get rid of the old one
  1.1157 - */
  1.1158 -PurpleUtilFetchUrlData *purple_util_fetch_url_request_len_with_account(
  1.1159 -		PurpleAccount *account, const gchar *url,
  1.1160 -		gboolean full, const gchar *user_agent, gboolean http11,
  1.1161 -		const gchar *request, gboolean include_headers, gssize max_len,
  1.1162 -		PurpleUtilFetchUrlCallback callback, gpointer data);
  1.1163 -
  1.1164 -/**
  1.1165 - * Cancel a pending URL request started with either
  1.1166 - * purple_util_fetch_url_request() or purple_util_fetch_url().
  1.1167 - *
  1.1168 - * @param url_data The data returned when you initiated the URL fetch.
  1.1169 - */
  1.1170 -void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *url_data);
  1.1171 -
  1.1172 -/**
  1.1173 - * Decodes a URL into a plain string.
  1.1174 - *
  1.1175 - * This will change hex codes and such to their ascii equivalents.
  1.1176 - *
  1.1177 - * @param str The string to translate.
  1.1178 - *
  1.1179 - * @return The resulting string.
  1.1180 - */
  1.1181 -const char *purple_url_decode(const char *str);
  1.1182 -
  1.1183 -/**
  1.1184 - * Encodes a URL into an escaped string.
  1.1185 - *
  1.1186 - * This will change non-alphanumeric characters to hex codes.
  1.1187 - *
  1.1188 - * @param str The string to translate.
  1.1189 - *
  1.1190 - * @return The resulting string.
  1.1191 - */
  1.1192 -const char *purple_url_encode(const char *str);
  1.1193 -
  1.1194 -/**
  1.1195 - * Checks if the given email address is syntactically valid.
  1.1196 - *
  1.1197 - * @param address The email address to validate.
  1.1198 - *
  1.1199 - * @return True if the email address is syntactically correct.
  1.1200 - */
  1.1201 -gboolean purple_email_is_valid(const char *address);
  1.1202 -
  1.1203 -/**
  1.1204 - * Checks if the given IP address is a syntactically valid IPv4 address.
  1.1205 - *
  1.1206 - * @param ip The IP address to validate.
  1.1207 - *
  1.1208 - * @return True if the IP address is syntactically correct.
  1.1209 - * @deprecated This function will be replaced with one that validates
  1.1210 - *             as either IPv4 or IPv6 in 3.0.0. If you don't want this,
  1.1211 - *             behavior, use one of the more specific functions.
  1.1212 - */
  1.1213 -gboolean purple_ip_address_is_valid(const char *ip);
  1.1214 -
  1.1215 -/**
  1.1216 - * Checks if the given IP address is a syntactically valid IPv4 address.
  1.1217 - *
  1.1218 - * @param ip The IP address to validate.
  1.1219 - *
  1.1220 - * @return True if the IP address is syntactically correct.
  1.1221 - * @since 2.6.0
  1.1222 - */
  1.1223 -gboolean purple_ipv4_address_is_valid(const char *ip);
  1.1224 -
  1.1225 -/**
  1.1226 - * Checks if the given IP address is a syntactically valid IPv6 address.
  1.1227 - *
  1.1228 - * @param ip The IP address to validate.
  1.1229 - *
  1.1230 - * @return True if the IP address is syntactically correct.
  1.1231 - * @since 2.6.0
  1.1232 - */
  1.1233 -gboolean purple_ipv6_address_is_valid(const char *ip);
  1.1234 -
  1.1235 -/**
  1.1236 - * This function extracts a list of URIs from the a "text/uri-list"
  1.1237 - * string.  It was "borrowed" from gnome_uri_list_extract_uris
  1.1238 - *
  1.1239 - * @param uri_list An uri-list in the standard format.
  1.1240 - *
  1.1241 - * @return A GList containing strings allocated with g_malloc
  1.1242 - *         that have been splitted from uri-list.
  1.1243 - */
  1.1244 -GList *purple_uri_list_extract_uris(const gchar *uri_list);
  1.1245 -
  1.1246 -/**
  1.1247 - * This function extracts a list of filenames from a
  1.1248 - * "text/uri-list" string.  It was "borrowed" from
  1.1249 - * gnome_uri_list_extract_filenames
  1.1250 - *
  1.1251 - * @param uri_list A uri-list in the standard format.
  1.1252 - *
  1.1253 - * @return A GList containing strings allocated with g_malloc that
  1.1254 - *         contain the filenames in the uri-list. Note that unlike
  1.1255 - *         purple_uri_list_extract_uris() function, this will discard
  1.1256 - *         any non-file uri from the result value.
  1.1257 - */
  1.1258 -GList *purple_uri_list_extract_filenames(const gchar *uri_list);
  1.1259 -
  1.1260 -/*@}*/
  1.1261 -
  1.1262 -/**************************************************************************
  1.1263 - * UTF8 String Functions
  1.1264 - **************************************************************************/
  1.1265 -/*@{*/
  1.1266 -
  1.1267 -/**
  1.1268 - * Attempts to convert a string to UTF-8 from an unknown encoding.
  1.1269 - *
  1.1270 - * This function checks the locale and tries sane defaults.
  1.1271 - *
  1.1272 - * @param str The source string.
  1.1273 - *
  1.1274 - * @return The UTF-8 string, or @c NULL if it could not be converted.
  1.1275 - */
  1.1276 -gchar *purple_utf8_try_convert(const char *str);
  1.1277 -
  1.1278 -/**
  1.1279 - * Salvages the valid UTF-8 characters from a string, replacing any
  1.1280 - * invalid characters with a filler character (currently hardcoded to
  1.1281 - * '?').
  1.1282 - *
  1.1283 - * @param str The source string.
  1.1284 - *
  1.1285 - * @return A valid UTF-8 string.
  1.1286 - */
  1.1287 -gchar *purple_utf8_salvage(const char *str);
  1.1288 -
  1.1289 -/**
  1.1290 - * Removes unprintable characters from a UTF-8 string. These characters
  1.1291 - * (in particular low-ASCII characters) are invalid in XML 1.0 and thus
  1.1292 - * are not allowed in XMPP and are rejected by libxml2 by default. This
  1.1293 - * function uses g_unichar_isprint to determine what characters should
  1.1294 - * be stripped. The returned string must be freed by the caller.
  1.1295 - *
  1.1296 - * @param str A valid UTF-8 string.
  1.1297 - *
  1.1298 - * @return A newly allocated UTF-8 string without the unprintable characters.
  1.1299 - * @since 2.6.0
  1.1300 - *
  1.1301 - * @see g_unichar_isprint
  1.1302 - */
  1.1303 -gchar *purple_utf8_strip_unprintables(const gchar *str);
  1.1304 -
  1.1305 -/**
  1.1306 - * Return the UTF-8 version of gai_strerror().  It calls gai_strerror()
  1.1307 - * then converts the result to UTF-8.  This function is analogous to
  1.1308 - * g_strerror().
  1.1309 - *
  1.1310 - * @param errnum The error code.
  1.1311 - *
  1.1312 - * @return The UTF-8 error message.
  1.1313 - * @since 2.4.0
  1.1314 - */
  1.1315 -G_CONST_RETURN gchar *purple_gai_strerror(gint errnum);
  1.1316 -
  1.1317 -/**
  1.1318 - * Compares two UTF-8 strings case-insensitively.  This comparison is
  1.1319 - * more expensive than a simple g_utf8_collate() comparison because
  1.1320 - * it calls g_utf8_casefold() on each string, which allocates new
  1.1321 - * strings.
  1.1322 - *
  1.1323 - * @param a The first string.
  1.1324 - * @param b The second string.
  1.1325 - *
  1.1326 - * @return -1 if @a is less than @a b.
  1.1327 - *          0 if @a is equal to @a b.
  1.1328 - *          1 if @a is greater than @a b.
  1.1329 - */
  1.1330 -int purple_utf8_strcasecmp(const char *a, const char *b);
  1.1331 -
  1.1332 -/**
  1.1333 - * Case insensitive search for a word in a string. The needle string
  1.1334 - * must be contained in the haystack string and not be immediately
  1.1335 - * preceded or immediately followed by another alpha-numeric character.
  1.1336 - *
  1.1337 - * @param haystack The string to search in.
  1.1338 - * @param needle   The substring to find.
  1.1339 - *
  1.1340 - * @return TRUE if haystack has the word, otherwise FALSE
  1.1341 - */
  1.1342 -gboolean purple_utf8_has_word(const char *haystack, const char *needle);
  1.1343 -
  1.1344 -/**
  1.1345 - * Prints a UTF-8 message to the given file stream. The function
  1.1346 - * tries to convert the UTF-8 message to user's locale. If this
  1.1347 - * is not possible, the original UTF-8 text will be printed.
  1.1348 - *
  1.1349 - * @param filestream The file stream (e.g. STDOUT or STDERR)
  1.1350 - * @param message    The message to print.
  1.1351 - */
  1.1352 -void purple_print_utf8_to_console(FILE *filestream, char *message);
  1.1353 -
  1.1354 -/**
  1.1355 - * Checks for messages starting (post-HTML) with "/me ", including the space.
  1.1356 - *
  1.1357 - * @param message The message to check
  1.1358 - * @param len     The message length, or -1
  1.1359 - *
  1.1360 - * @return TRUE if it starts with "/me ", and it has been removed, otherwise
  1.1361 - *         FALSE
  1.1362 - */
  1.1363 -gboolean purple_message_meify(char *message, gssize len);
  1.1364 -
  1.1365 -/**
  1.1366 - * Removes the underscore characters from a string used identify the mnemonic
  1.1367 - * character.
  1.1368 - *
  1.1369 - * @param in  The string to strip
  1.1370 - *
  1.1371 - * @return The stripped string
  1.1372 - */
  1.1373 -char *purple_text_strip_mnemonic(const char *in);
  1.1374 -
  1.1375 -/*@}*/
  1.1376 -
  1.1377 -/**
  1.1378 - * Adds 8 to something.
  1.1379 - *
  1.1380 - * Blame SimGuy.
  1.1381 - *
  1.1382 - * @param x The number to add 8 to.
  1.1383 - *
  1.1384 - * @return x + 8
  1.1385 - */
  1.1386 -#define purple_add_eight(x) ((x)+8)
  1.1387 -
  1.1388 -/**
  1.1389 - * Does the reverse of purple_escape_filename
  1.1390 - *
  1.1391 - * This will change hex codes and such to their ascii equivalents.
  1.1392 - *
  1.1393 - * @param str The string to translate.
  1.1394 - *
  1.1395 - * @return The resulting string.
  1.1396 - */
  1.1397 -const char *purple_unescape_filename(const char *str);
  1.1398 -
  1.1399 -/**
  1.1400 - * Escapes filesystem-unfriendly characters from a filename
  1.1401 - *
  1.1402 - * @param str The string to translate.
  1.1403 - *
  1.1404 - * @return The resulting string.
  1.1405 - */
  1.1406 -const char *purple_escape_filename(const char *str);
  1.1407 -
  1.1408 -/**
  1.1409 - * This is added temporarily to assist the split of oscar into aim and icq.
  1.1410 - * This should not be used by plugins.
  1.1411 - */
  1.1412 -const char *_purple_oscar_convert(const char *act, const char *protocol);
  1.1413 -
  1.1414 -/**
  1.1415 - * Restore default signal handlers for signals which might reasonably have
  1.1416 - * handlers. This should be called by a fork()'d child process, since child processes
  1.1417 - * inherit the handlers of the parent.
  1.1418 - */
  1.1419 -void purple_restore_default_signal_handlers(void);
  1.1420 -
  1.1421 -/**
  1.1422 - * Gets the host name of the machine. If it not possible to determine the
  1.1423 - * host name, "localhost" is returned
  1.1424 - *
  1.1425 - * @constreturn The hostname
  1.1426 - */
  1.1427 -const gchar *purple_get_host_name(void);
  1.1428 -
  1.1429 -#ifdef __cplusplus
  1.1430 -}
  1.1431 -#endif
  1.1432 -
  1.1433 -#endif /* _PURPLE_UTIL_H_ */