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 "xmlnode.h"
00046 #include "notify.h"
00047 
00048 
00049 #ifdef __cplusplus
00050 extern "C" {
00051 #endif
00052 
00053 struct _PurpleMenuAction
00054 {
00055     char *label;
00056     PurpleCallback callback;
00057     gpointer data;
00058     GList *children;
00059 };
00060 
00061 typedef char *(*PurpleInfoFieldFormatCallback)(const char *field, size_t len);
00062 
00069 struct _PurpleKeyValuePair
00070 {
00071     gchar *key;
00072     void *value;
00073 
00074 };
00075 
00087 PurpleMenuAction *purple_menu_action_new(const char *label, PurpleCallback callback,
00088                                      gpointer data, GList *children);
00089 
00095 void purple_menu_action_free(PurpleMenuAction *act);
00096 
00105 void purple_util_set_current_song(const char *title, const char *artist,
00106         const char *album);
00107 
00119 char * purple_util_format_song_info(const char *title, const char *artist,
00120         const char *album, gpointer unused);
00121 
00122 /**************************************************************************/
00124 /**************************************************************************/
00132 void purple_util_init(void);
00133 
00139 void purple_util_uninit(void);
00140 
00143 /**************************************************************************/
00145 /**************************************************************************/
00159 gchar *purple_base16_encode(const guchar *data, gsize len);
00160 
00176 guchar *purple_base16_decode(const char *str, gsize *ret_len);
00177 
00190 gchar *purple_base16_encode_chunked(const guchar *data, gsize len);
00191 
00192 
00195 /**************************************************************************/
00197 /**************************************************************************/
00211 gchar *purple_base64_encode(const guchar *data, gsize len);
00212 
00228 guchar *purple_base64_decode(const char *str, gsize *ret_len);
00229 
00232 /**************************************************************************/
00234 /**************************************************************************/
00249 guchar *purple_quotedp_decode(const char *str, gsize *ret_len);
00250 
00253 /**************************************************************************/
00255 /**************************************************************************/
00277 char *purple_mime_decode_field(const char *str);
00278 
00282 /**************************************************************************/
00284 /**************************************************************************/
00313 const char *purple_utf8_strftime(const char *format, const struct tm *tm);
00314 
00323 const char *purple_get_tzoff_str(const struct tm *tm, gboolean iso);
00324 
00335 const char *purple_date_format_short(const struct tm *tm);
00336 
00347 const char *purple_date_format_long(const struct tm *tm);
00348 
00359 const char *purple_date_format_full(const struct tm *tm);
00360 
00371 const char *purple_time_format(const struct tm *tm);
00372 
00385 time_t purple_time_build(int year, int month, int day, int hour,
00386                        int min, int sec);
00387 
00390 #define PURPLE_NO_TZ_OFF -500000
00391 
00412 time_t purple_str_to_time(const char *timestamp, gboolean utc,
00413                         struct tm *tm, long *tz_off, const char **rest);
00414 
00418 /**************************************************************************/
00420 /**************************************************************************/
00434 gchar *purple_markup_escape_text(const gchar *text, gssize length);
00435 
00451 gboolean purple_markup_find_tag(const char *needle, const char *haystack,
00452                               const char **start, const char **end,
00453                               GData **attributes);
00454 
00478 gboolean purple_markup_extract_info_field(const char *str, int len, PurpleNotifyUserInfo *user_info,
00479                                         const char *start_token, int skip,
00480                                         const char *end_token, char check_value,
00481                                         const char *no_value_token,
00482                                         const char *display_name, gboolean is_link,
00483                                         const char *link_prefix,
00484                     PurpleInfoFieldFormatCallback format_cb);
00485 
00493 void purple_markup_html_to_xhtml(const char *html, char **dest_xhtml,
00494                                char **dest_plain);
00495 
00504 char *purple_markup_strip_html(const char *str);
00505 
00515 char *purple_markup_linkify(const char *str);
00516 
00529 char *purple_unescape_html(const char *html);
00530 
00552 char *purple_markup_slice(const char *str, guint x, guint y);
00553 
00563 char *purple_markup_get_tag_name(const char *tag);
00564 
00581 const char * purple_markup_unescape_entity(const char *text, int *length);
00582 
00599 char * purple_markup_get_css_property(const gchar *style, const gchar *opt);
00600 
00610 gboolean purple_markup_is_rtl(const char *html);
00611 
00615 /**************************************************************************/
00617 /**************************************************************************/
00627 const gchar *purple_home_dir(void);
00628 
00637 const char *purple_user_dir(void);
00638 
00643 void purple_util_set_user_dir(const char *dir);
00644 
00655 int purple_build_dir(const char *path, int mode);
00656 
00672 gboolean purple_util_write_data_to_file(const char *filename, const char *data,
00673                                       gssize size);
00674 
00692 gboolean
00693 purple_util_write_data_to_file_absolute(const char *filename_full, const char *data, gssize size);
00694 
00709 xmlnode *purple_util_read_xml_from_file(const char *filename,
00710                                       const char *description);
00711 
00728 FILE *purple_mkstemp(char **path, gboolean binary);
00729 
00738 const char *
00739 purple_util_get_image_extension(gconstpointer data, size_t len);
00740 
00744 char *purple_util_get_image_checksum(gconstpointer image_data, size_t image_len);
00745 
00753 char *purple_util_get_image_filename(gconstpointer image_data, size_t image_len);
00754 
00758 /**************************************************************************/
00760 /**************************************************************************/
00770 gboolean purple_program_is_valid(const char *program);
00771 
00777 gboolean purple_running_gnome(void);
00778 
00784 gboolean purple_running_kde(void);
00785 
00791 gboolean purple_running_osx(void);
00792 
00800 char *purple_fd_get_ip(int fd);
00801 
00805 /**************************************************************************/
00807 /**************************************************************************/
00823 gboolean purple_strequal(const gchar *left, const gchar *right);
00824 
00842 const char *purple_normalize(const PurpleAccount *account, const char *str);
00843 
00856 const char *purple_normalize_nocase(const PurpleAccount *account, const char *str);
00857 
00867 gboolean purple_str_has_prefix(const char *s, const char *p);
00868 
00878 gboolean purple_str_has_suffix(const char *s, const char *x);
00879 
00888 gchar *purple_strdup_withhtml(const gchar *src);
00889 
00897 char *purple_str_add_cr(const char *str);
00898 
00910 void purple_str_strip_char(char *str, char thechar);
00911 
00922 void purple_util_chrreplace(char *string, char delimiter,
00923                           char replacement);
00924 
00937 gchar *purple_strreplace(const char *string, const char *delimiter,
00938                        const char *replacement);
00939 
00940 
00951 char *purple_utf8_ncr_encode(const char *in);
00952 
00953 
00964 char *purple_utf8_ncr_decode(const char *in);
00965 
00966 
00979 gchar *purple_strcasereplace(const char *string, const char *delimiter,
00980                            const char *replacement);
00981 
00991 const char *purple_strcasestr(const char *haystack, const char *needle);
00992 
01001 char *purple_str_size_to_units(size_t size);
01002 
01011 char *purple_str_seconds_to_string(guint sec);
01012 
01026 char *purple_str_binary_to_ascii(const unsigned char *binary, guint len);
01030 /**************************************************************************/
01032 /**************************************************************************/
01035 void purple_got_protocol_handler_uri(const char *uri);
01036 
01049 gboolean purple_url_parse(const char *url, char **ret_host, int *ret_port,
01050                         char **ret_path, char **ret_user, char **ret_passwd);
01051 
01067 typedef void (*PurpleUtilFetchUrlCallback)(PurpleUtilFetchUrlData *url_data, gpointer user_data, const gchar *url_text, gsize len, const gchar *error_message);
01068 
01080 #define purple_util_fetch_url(url, full, user_agent, http11, cb, data) \
01081     purple_util_fetch_url_request(url, full, user_agent, http11, NULL, \
01082         FALSE, cb, data);
01083 
01097 #define purple_util_fetch_url_len(url, full, user_agent, http11, max_len, cb, data) \
01098     purple_util_fetch_url_request_len(url, full, user_agent, http11, NULL, \
01099         FALSE, max_len, cb, data);
01100 
01116 PurpleUtilFetchUrlData *purple_util_fetch_url_request(const gchar *url,
01117         gboolean full, const gchar *user_agent, gboolean http11,
01118         const gchar *request, gboolean include_headers,
01119         PurpleUtilFetchUrlCallback callback, gpointer data);
01120 
01138 PurpleUtilFetchUrlData *purple_util_fetch_url_request_len(const gchar *url,
01139         gboolean full, const gchar *user_agent, gboolean http11,
01140         const gchar *request, gboolean include_headers, gssize max_len,
01141         PurpleUtilFetchUrlCallback callback, gpointer data);
01142 
01161 PurpleUtilFetchUrlData *purple_util_fetch_url_request_len_with_account(
01162         PurpleAccount *account, const gchar *url,
01163         gboolean full, const gchar *user_agent, gboolean http11,
01164         const gchar *request, gboolean include_headers, gssize max_len,
01165         PurpleUtilFetchUrlCallback callback, gpointer data);
01166 
01173 void purple_util_fetch_url_cancel(PurpleUtilFetchUrlData *url_data);
01174 
01184 const char *purple_url_decode(const char *str);
01185 
01195 const char *purple_url_encode(const char *str);
01196 
01204 gboolean purple_email_is_valid(const char *address);
01205 
01216 gboolean purple_ip_address_is_valid(const char *ip);
01217 
01226 gboolean purple_ipv4_address_is_valid(const char *ip);
01227 
01236 gboolean purple_ipv6_address_is_valid(const char *ip);
01237 
01247 GList *purple_uri_list_extract_uris(const gchar *uri_list);
01248 
01261 GList *purple_uri_list_extract_filenames(const gchar *uri_list);
01262 
01265 /**************************************************************************
01266  * UTF8 String Functions
01267  **************************************************************************/
01279 gchar *purple_utf8_try_convert(const char *str);
01280 
01290 gchar *purple_utf8_salvage(const char *str);
01291 
01304 gchar *purple_utf8_strip_unprintables(const gchar *str);
01305 
01316 G_CONST_RETURN gchar *purple_gai_strerror(gint errnum);
01317 
01331 int purple_utf8_strcasecmp(const char *a, const char *b);
01332 
01343 gboolean purple_utf8_has_word(const char *haystack, const char *needle);
01344 
01353 void purple_print_utf8_to_console(FILE *filestream, char *message);
01354 
01364 gboolean purple_message_meify(char *message, gssize len);
01365 
01374 char *purple_text_strip_mnemonic(const char *in);
01375 
01387 #define purple_add_eight(x) ((x)+8)
01388 
01398 const char *purple_unescape_filename(const char *str);
01399 
01407 const char *purple_escape_filename(const char *str);
01408 
01413 const char *_purple_oscar_convert(const char *act, const char *protocol);
01414 
01420 void purple_restore_default_signal_handlers(void);
01421 
01428 const gchar *purple_get_host_name(void);
01429 
01430 #ifdef __cplusplus
01431 }
01432 #endif
01433 
01434 /* to address incompatibility with cp932. */
01435 void botch_ucs(gchar *ucs, gsize len);
01436 void sanitize_ucs(gchar *ucs, gsize len);
01437 gchar *botch_utf(const gchar *utf, gsize len, gsize *newlen);
01438 gchar *sanitize_utf(const gchar *msg, gsize len, gsize *newlen);
01439 
01440 #endif /* _PURPLE_UTIL_H_ */