00001
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
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
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
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