util.h

Go to the documentation of this file.
00001 
00006 /* purple
00007  *
00008  * Purple is the legal property of its developers, whose names are too numerous
00009  * to list here.  Please refer to the COPYRIGHT file distributed with this
00010  * source distribution.
00011  *
00012  * This program is free software; you can redistribute it and/or modify
00013  * it under the terms of the GNU General Public License as published by
00014  * the Free Software Foundation; either version 2 of the License, or
00015  * (at your option) any later version.
00016  *
00017  * This program is distributed in the hope that it will be useful,
00018  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020  * GNU General Public License for more details.
00021  *
00022  * You should have received a copy of the GNU General Public License
00023  * along with this program; if not, write to the Free Software
00024  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
00025  *
00026  * @todo Rename the functions so that they live somewhere in the purple
00027  *       namespace.
00028  */
00029 #ifndef _PURPLE_UTIL_H_
00030 #define _PURPLE_UTIL_H_
00031 
00032 #include <stdio.h>
00033 
00038 typedef struct _PurpleUtilFetchUrlData PurpleUtilFetchUrlData;
00040 typedef struct _PurpleMenuAction PurpleMenuAction;
00042 typedef struct _PurpleKeyValuePair PurpleKeyValuePair;
00043 
00044 #include "account.h"
00045 #include "signals.h"
00046 #include "xmlnode.h"
00047 #include "notify.h"
00048 
00049 
00050 #ifdef __cplusplus
00051 extern "C" {
00052 #endif
00053 
00054 struct _PurpleMenuAction
00055 {
00056     char *label;
00057     PurpleCallback callback;
00058     gpointer data;
00059     GList *children;
00060 };
00061 
00062 typedef char *(*PurpleInfoFieldFormatCallback)(const char *field, size_t len);
00063 
00070 struct _PurpleKeyValuePair
00071 {
00072     gchar *key;
00073     void *value;
00074 
00075 };
00076 
00088 PurpleMenuAction *purple_menu_action_new(const char *label, PurpleCallback callback,
00089                                      gpointer data, GList *children);
00090 
00096 void purple_menu_action_free(PurpleMenuAction *act);
00097 
00106 void purple_util_set_current_song(const char *title, const char *artist,
00107         const char *album);
00108 
00120 char * purple_util_format_song_info(const char *title, const char *artist,
00121         const char *album, gpointer unused);
00122 
00123 /**************************************************************************/
00125 /**************************************************************************/
00133 void purple_util_init(void);
00134 
00140 void purple_util_uninit(void);
00141 
00144 /**************************************************************************/
00146 /**************************************************************************/
00160 gchar *purple_base16_encode(const guchar *data, gsize len);
00161 
00177 guchar *purple_base16_decode(const char *str, gsize *ret_len);
00178 
00191 gchar *purple_base16_encode_chunked(const guchar *data, gsize len);
00192 
00193 
00196 /**************************************************************************/
00198 /**************************************************************************/
00212 gchar *purple_base64_encode(const guchar *data, gsize len);
00213 
00229 guchar *purple_base64_decode(const char *str, gsize *ret_len);
00230 
00233 /**************************************************************************/
00235 /**************************************************************************/
00250 guchar *purple_quotedp_decode(const char *str, gsize *ret_len);
00251 
00254 /**************************************************************************/
00256 /**************************************************************************/
00278 char *purple_mime_decode_field(const char *str);
00279 
00283 /**************************************************************************/
00285 /**************************************************************************/
00314 const char *purple_utf8_strftime(const char *format, const struct tm *tm);
00315 
00324 const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso);
00325 
00336 const char *purple_date_format_short(const struct tm *tm);
00337 
00348 const char *purple_date_format_long(const struct tm *tm);
00349 
00360 const char *purple_date_format_full(const struct tm *tm);
00361 
00372 const char *purple_time_format(const struct tm *tm);
00373 
00386 time_t purple_time_build(int year, int month, int day, int hour,
00387                        int min, int sec);
00388 
00391 #define PURPLE_NO_TZ_OFF -500000
00392 
00413 time_t purple_str_to_time(const char *timestamp, gboolean utc,
00414                         struct tm *tm, long *tz_off, const char **rest);
00415 
00419 /**************************************************************************/
00421 /**************************************************************************/
00435 gchar *purple_markup_escape_text(const gchar *text, gssize length);
00436 
00452 gboolean purple_markup_find_tag(const char *needle, const char *haystack,
00453                               const char **start, const char **end,
00454                               GData **attributes);
00455 
00479 gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
00480                                         const char *start_token, int skip,
00481                                         const char *end_token, char check_value,
00482                                         const char *no_value_token,
00483                                         const char *display_name, gboolean is_link,
00484                                         const char *link_prefix,
00485                     PurpleInfoFieldFormatCallback format_cb);
00486 
00494 void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml,
00495                                char **dest_plain);
00496 
00505 char *purple_markup_strip_html(const char *str);
00506 
00516 char *purple_markup_linkify(const char *str);
00517 
00536 char *purple_unescape_text(const char *text);
00537 
00549 char *purple_unescape_html(const char *html);
00550 
00572 char *purple_markup_slice(const char *str, guint x, guint y);
00573 
00583 char *purple_markup_get_tag_name(const char *tag);
00584 
00601 const char * purple_markup_unescape_entity(const char *text, int *length);
00602 
00619 char * purple_markup_get_css_property(const gchar *style, const gchar *opt);
00620 
00630 gboolean purple_markup_is_rtl(const char *html);
00631 
00635 /**************************************************************************/
00637 /**************************************************************************/
00647 const gchar *purple_home_dir(void);
00648 
00657 const char *purple_user_dir(void);
00658 
00663 void purple_util_set_user_dir(const char *dir);
00664 
00675 int purple_build_dir(const char *path, int mode);
00676 
00692 gboolean purple_util_write_data_to_file(const char *filename, const char *data,
00693                                       gssize size);
00694 
00712 gboolean
00713 purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size);
00714 
00729 xmlnode *purple_util_read_xml_from_file(const char *filename,
00730                                       const char *description);
00731 
00748 FILE *purple_mkstemp(char **path, gboolean binary);
00749 
00758 const char *
00759 purple_util_get_image_extension(gconstpointer data, size_t len);
00760 
00764 char *purple_util_get_image_checksum(gconstpointer image_data, size_t image_len);
00765 
00773 char *purple_util_get_image_filename(gconstpointer image_data, size_t image_len);
00774 
00778 /**************************************************************************/
00780 /**************************************************************************/
00790 gboolean purple_program_is_valid(const char *program);
00791 
00797 gboolean purple_running_gnome(void);
00798 
00804 gboolean purple_running_kde(void);
00805 
00811 gboolean purple_running_osx(void);
00812 
00820 char *purple_fd_get_ip(int fd);
00821 
00831 int purple_socket_get_family(int fd);
00832 
00843 gboolean purple_socket_speaks_ipv4(int fd);
00844 
00848 /**************************************************************************/
00850 /**************************************************************************/
00866 gboolean purple_strequal(const gchar *left, const gchar *right);
00867 
00885 const char *purple_normalize(const PurpleAccount *account, const char *str);
00886 
00899 const char *purple_normalize_nocase(const PurpleAccount *account, const char *str);
00900 
00910 gboolean purple_str_has_prefix(const char *s, const char *p);
00911 
00921 gboolean purple_str_has_suffix(const char *s, const char *x);
00922 
00931 gchar *purple_strdup_withhtml(const gchar *src);
00932 
00940 char *purple_str_add_cr(const char *str);
00941 
00953 void purple_str_strip_char(char *str, char thechar);
00954 
00965 void purple_util_chrreplace(char *string, char delimiter,
00966                           char replacement);
00967 
00980 gchar *purple_strreplace(const char *string, const char *delimiter,
00981                        const char *replacement);
00982 
00983 
00994 char *purple_utf8_ncr_encode(const char *in);
00995 
00996 
01007 char *purple_utf8_ncr_decode(const char *in);
01008 
01009 
01022 gchar *purple_strcasereplace(const char *string, const char *delimiter,
01023                            const char *replacement);
01024 
01034 const char *purple_strcasestr(const char *haystack, const char *needle);
01035 
01044 char *purple_str_size_to_units(size_t size);
01045 
01054 char *purple_str_seconds_to_string(guint sec);
01055 
01069 char *purple_str_binary_to_ascii(const unsigned char *binary, guint len);
01073 /**************************************************************************/
01075 /**************************************************************************/
01078 void purple_got_protocol_handler_uri(const char *uri);
01079 
01092 gboolean purple_url_parse(const char *url, char **ret_host, int *ret_port,
01093                         char **ret_path, char **ret_user, char **ret_passwd);
01094 
01110 typedef void (*PurpleUtilFetchUrlCallback)(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message);
01111 
01123 #define purple_util_fetch_url(url, full, user_agent, http11, cb, data) \
01124     purple_util_fetch_url_request(url, full, user_agent, http11, NULL, \
01125         FALSE, cb, data);
01126 
01140 #define purple_util_fetch_url_len(url, full, user_agent, http11, max_len, cb, data) \
01141     purple_util_fetch_url_request_len(url, full, user_agent, http11, NULL, \
01142         FALSE, max_len, cb, data);
01143 
01159 PurpleUtilFetchUrlData *purple_util_fetch_url_request(const gchar *url,
01160         gboolean full, const gchar *user_agent, gboolean http11,
01161         const gchar *request, gboolean include_headers,
01162         PurpleUtilFetchUrlCallback callback, gpointer data);
01163 
01181 PurpleUtilFetchUrlData *purple_util_fetch_url_request_len(const gchar *url,
01182         gboolean full, const gchar *user_agent, gboolean http11,
01183         const gchar *request, gboolean include_headers, gssize max_len,
01184         PurpleUtilFetchUrlCallback callback, gpointer data);
01185 
01204 PurpleUtilFetchUrlData *purple_util_fetch_url_request_len_with_account(
01205         PurpleAccount *account, const gchar *url,
01206         gboolean full, const gchar *user_agent, gboolean http11,
01207         const gchar *request, gboolean include_headers, gssize max_len,
01208         PurpleUtilFetchUrlCallback callback, gpointer data);
01209 
01216 void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *url_data);
01217 
01227 const char *purple_url_decode(const char *str);
01228 
01238 const char *purple_url_encode(const char *str);
01239 
01247 gboolean purple_email_is_valid(const char *address);
01248 
01259 gboolean purple_ip_address_is_valid(const char *ip);
01260 
01269 gboolean purple_ipv4_address_is_valid(const char *ip);
01270 
01279 gboolean purple_ipv6_address_is_valid(const char *ip);
01280 
01290 GList *purple_uri_list_extract_uris(const gchar *uri_list);
01291 
01304 GList *purple_uri_list_extract_filenames(const gchar *uri_list);
01305 
01308 /**************************************************************************
01309  * UTF8 String Functions
01310  **************************************************************************/
01322 gchar *purple_utf8_try_convert(const char *str);
01323 
01333 gchar *purple_utf8_salvage(const char *str);
01334 
01347 gchar *purple_utf8_strip_unprintables(const gchar *str);
01348 
01359 G_CONST_RETURN gchar *purple_gai_strerror(gint errnum);
01360 
01374 int purple_utf8_strcasecmp(const char *a, const char *b);
01375 
01386 gboolean purple_utf8_has_word(const char *haystack, const char *needle);
01387 
01396 void purple_print_utf8_to_console(FILE *filestream, char *message);
01397 
01407 gboolean purple_message_meify(char *message, gssize len);
01408 
01417 char *purple_text_strip_mnemonic(const char *in);
01418 
01430 #define purple_add_eight(x) ((x)+8)
01431 
01441 const char *purple_unescape_filename(const char *str);
01442 
01450 const char *purple_escape_filename(const char *str);
01451 
01460 const char *_purple_oscar_convert(const char *act, const char *protocol);
01461 
01467 void purple_restore_default_signal_handlers(void);
01468 
01475 const gchar *purple_get_host_name(void);
01476 
01483 gchar *purple_uuid_random(void);
01484 
01485 #ifdef __cplusplus
01486 }
01487 #endif
01488 
01489 /* to address incompatibility with cp932. */
01490 void botch_ucs(gchar *ucs, gsize len);
01491 void sanitize_ucs(gchar *ucs, gsize len);
01492 gchar *botch_utf(const gchar *utf, gsize len, gsize *newlen);
01493 gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen);
01494 
01495 #endif /* _PURPLE_UTIL_H_ */