Mercurial > pidgin.yaz
changeset 10744:1b927566fcc4
[gaim-migrate @ 12346]
Some lovin' for stuff that isn't compiled by default.
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Sun, 27 Mar 2005 01:14:41 +0000 |
parents | 279eee07dd42 |
children | ca69d597a5e2 |
files | plugins/chkmail.c plugins/filectl.c src/protocols/toc/toc.c src/protocols/trepia/trepia.c |
diffstat | 4 files changed, 121 insertions(+), 228 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/chkmail.c Sun Mar 27 00:33:58 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/* This is some funky code. It is still being developed by Rob Flynn - rob@linuxpimps.com - * I recommend not using this code right now. :) -*/ - -#define GAIM_PLUGINS - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <netinet/in.h> -#include <arpa/inet.h> -#include <sys/socket.h> -#include <netdb.h> -#include <netinet/in.h> -#include <pthread.h> - -#include "internal.h" -#include "gtkgaim.h" - -char username[] = ""; -char password[] = ""; -char mailhost[] = ""; -int mailport = 110; -int state = 0; - -static void *handle = NULL; -extern GtkWidget *buddies; - -int lastnum = 0; -int orig = 0; -int mytimer; - -void update_mail(); -void check_mail(); - -int num_msgs() -{ - struct in_addr *sin; - char recv[1024]; - char command[256]; - int fd; - int num = 0; - int step = 0; - int len; - - sin = (struct in_addr *)get_address(mailhost); - fd = connect_address(sin->s_addr, mailport); - while ((len = read(fd, recv, 1023))>0) { - recv[len] = 0; - if (!strncmp(recv, "-ERR", strlen("-ERR"))) { - step = 4; - break; - } else if (!strncmp(recv, "+OK", strlen("+OK"))) { - if (step == 3) { - if (sscanf(recv, "+OK %d %d\n", &num, &step) != 2) - break; - g_snprintf(command, sizeof(command), "QUIT\n"); - write(fd, command, strlen(command)); - close(fd); - return num; - } - - if (step == 0) { - g_snprintf(command, sizeof(command), "USER %s\n", username); - write(fd, command, strlen(command)); - step = 1; - } else if (step == 1) { - g_snprintf(command, sizeof(command), "PASS %s\n", password); - write(fd, command, strlen(command)); - step = 2; - } else if (step == 2) { - g_snprintf(command, sizeof(command), "STAT\n"); - write(fd, command, strlen(command)); - step = 3; - } - } - } - close(fd); - - return 0; -} - -void destroy_mail_list() -{ - GList *list; - GtkWidget *w; - - list = GTK_TREE(buddies)->children; - while (list) { - w = (GtkWidget *)list->data; - if (!strcmp(GTK_LABEL(GTK_BIN(w)->child)->label, _("Mail Server"))) { - gtk_tree_remove_items(GTK_TREE(buddies), list); - list = GTK_TREE(buddies)->children; - if (!list) - break; - } - list = list->next; - } -} - -void setup_mail_list() -{ - GList *list; - GtkWidget *w; - GtkWidget *item; - GtkWidget *tree; - gchar *buf; - - list = GTK_TREE(buddies)->children; - - while (list) { - w = (GtkWidget *)list->data; - if (!strcmp(GTK_LABEL(GTK_BIN(w)->child)->label, _("Mail Server"))) { - gtk_tree_remove_items(GTK_TREE(buddies), list); - list = GTK_TREE(buddies)->children; - if (!list) - break; - } - list = list->next; - } - - item = gtk_tree_item_new_with_label(_("Mail Server")); - tree = gtk_tree_new(); - gtk_widget_show(item); - gtk_widget_show(tree); - gtk_tree_append(GTK_TREE(buddies), item); - gtk_tree_item_set_subtree(GTK_TREE_ITEM(item), tree); - gtk_tree_item_expand(GTK_TREE_ITEM(item)); - - /* XXX - This needs to use ngettext() */ - buf = g_strdup_printf(_("%s (%d new/%d total)"), mailhost, lastnum - orig, lastnum); - item = gtk_tree_item_new_with_label(buf); - g_free(buf); - - gtk_tree_append(GTK_TREE(tree), item); - gtk_widget_show(item); -} - -void gaim_plugin_init(void *h) { - handle = h; - - orig = num_msgs(); - lastnum = orig; - - gaim_signal_connect(handle, event_blist_update, setup_mail_list, NULL); - setup_mail_list(); - - mytimer = g_timeout_add(30000, check_mail, NULL); -} - -void check_mail() { - pthread_t mail_thread; - pthread_attr_t attr; - - if (state == 0) { - state = 1; - pthread_attr_init(&attr); - pthread_create(&mail_thread, &attr, (void *)&update_mail, NULL); - } -} - -void update_mail () { - int newnum; - - g_source_remove(mytimer); - - newnum = num_msgs(); - - if ((newnum >= lastnum) && (newnum > 0)) { - newnum = newnum - lastnum; - } else { - newnum = 0; - } - - if (newnum < lastnum) { - orig = lastnum; - } - - lastnum = newnum; - mytimer = g_timeout_add(30000, check_mail, NULL); - setup_mail_list(); - state = 0; -} - -void gaim_plugin_remove() { - g_source_remove(mytimer); - while (state == 1) { } - destroy_mail_list(); - handle = NULL; -} - -char *name() { - return _("Check Mail"); -} - -char *description() { - return _("Check email every X seconds.\n"); -}
--- a/plugins/filectl.c Sun Mar 27 00:33:58 2005 +0000 +++ b/plugins/filectl.c Sun Mar 27 01:14:41 2005 +0000 @@ -64,14 +64,13 @@ account = gaim_accounts_find(arg1, arg2); if (account != NULL) /* username found */ - gaim_account_connect(account, gaim_account_get_status(account, "online")); + gaim_account_connect(account); free(arg1); free(arg2); } else if (!strncasecmp(command, "logout", 7)) { GaimAccount *account; - GaimConnection *gc; arg1 = getarg(buffer, 1, 1); arg2 = getarg(buffer, 2, 1);
--- a/src/protocols/toc/toc.c Sun Mar 27 00:33:58 2005 +0000 +++ b/src/protocols/toc/toc.c Sun Mar 27 01:14:41 2005 +0000 @@ -25,6 +25,7 @@ #include "conversation.h" #include "debug.h" #include "notify.h" +#include "privacy.h" #include "proxy.h" #include "prpl.h" #include "request.h" @@ -559,6 +560,96 @@ return buf; } +static void +parse_toc_buddy_list(GaimAccount *account, char *config) +{ + char *c; + char current[256]; + GList *buddies = NULL; + + if (config == NULL) + return; + + /* skip "CONFIG:" (if it exists) */ + c = strncmp(config + 6 /* sizeof(struct sflap_hdr) */ , "CONFIG:", strlen("CONFIG:")) ? + strtok(config, "\n") : + strtok(config + 6 /* sizeof(struct sflap_hdr) */ + strlen("CONFIG:"), "\n"); + do { + if (c == NULL) + break; + if (*c == 'g') { + char *utf8 = NULL; + utf8 = gaim_utf8_try_convert(c + 2); + if (utf8 == NULL) { + g_strlcpy(current, _("Invalid Groupname"), sizeof(current)); + } else { + g_strlcpy(current, utf8, sizeof(current)); + g_free(utf8); + } + if (!gaim_find_group(current)) { + GaimGroup *g = gaim_group_new(current); + gaim_blist_add_group(g, NULL); + } + } else if (*c == 'b') { /*&& !gaim_find_buddy(user, c + 2)) {*/ + char nm[80], sw[388], *a, *utf8 = NULL; + + if ((a = strchr(c + 2, ':')) != NULL) { + *a++ = '\0'; /* nul the : */ + } + + g_strlcpy(nm, c + 2, sizeof(nm)); + if (a) { + utf8 = gaim_utf8_try_convert(a); + if (utf8 == NULL) { + gaim_debug(GAIM_DEBUG_ERROR, "toc blist", + "Failed to convert alias for " + "'%s' to UTF-8\n", nm); + } + } + if (utf8 == NULL) { + sw[0] = '\0'; + } else { + /* This can leave a partial sequence at the end, + * but who cares? */ + g_strlcpy(sw, utf8, sizeof(sw)); + g_free(utf8); + } + + if (!gaim_find_buddy(account, nm)) { + GaimBuddy *b = gaim_buddy_new(account, nm, sw); + GaimGroup *g = gaim_find_group(current); + gaim_blist_add_buddy(b, NULL, g, NULL); + buddies = g_list_append(buddies, b); + } + } else if (*c == 'p') { + gaim_privacy_permit_add(account, c + 2, TRUE); + } else if (*c == 'd') { + gaim_privacy_deny_add(account, c + 2, TRUE); + } else if (!strncmp("toc", c, 3)) { + sscanf(c + strlen(c) - 1, "%d", &account->perm_deny); + gaim_debug(GAIM_DEBUG_MISC, "toc blist", + "permdeny: %d\n", account->perm_deny); + if (account->perm_deny == 0) + account->perm_deny = GAIM_PRIVACY_ALLOW_ALL; + } else if (*c == 'm') { + sscanf(c + 2, "%d", &account->perm_deny); + gaim_debug(GAIM_DEBUG_MISC, "toc blist", + "permdeny: %d\n", account->perm_deny); + if (account->perm_deny == 0) + account->perm_deny = GAIM_PRIVACY_ALLOW_ALL; + } + } while ((c = strtok(NULL, "\n"))); + + if (account->gc) { + if (buddies != NULL) { + serv_add_buddies(account->gc, buddies); + g_list_free(buddies); + } + serv_set_permit_deny(account->gc); + } + g_list_free(buddies); +} + static void toc_callback(gpointer data, gint source, GaimInputCondition condition) { GaimConnection *gc = (GaimConnection *)data; @@ -602,9 +693,9 @@ "Client sends TOC \"toc_signon\" message\n"); /* i hate icq. */ if (username[0] >= '0' && username[0] <= '9') - password = g_strndup(gaim_connection_get_password(connection), 8); + password = g_strndup(gaim_connection_get_password(gc), 8); else - password = g_strdup(gaim_connection_get_password(connection)); + password = g_strdup(gaim_connection_get_password(gc)); g_snprintf(snd, sizeof snd, "toc_signon %s %d %s %s %s \"%s\"", AUTH_HOST, AUTH_PORT, gaim_normalize(account, username), roast_password(password), LANGUAGE, REVISION); @@ -684,7 +775,7 @@ g_snprintf(snd, sizeof snd, "toc_signon %s %d %s %s %s \"%s\"", AUTH_HOST, AUTH_PORT, gaim_normalize(account, gaim_account_get_username(account)), - roast_password(gaim_connection_get_password(connection)), + roast_password(gaim_connection_get_password(gc)), LANGUAGE, REVISION); if (sflap_send(gc, snd, -1, TYPE_DATA) < 0) { gaim_connection_error(gc, _("Disconnected.")); @@ -698,7 +789,7 @@ } } else if (!g_ascii_strcasecmp(c, "CONFIG")) { c = strtok(NULL, ":"); - gaim_blist_parse_toc_buddy_list(account, c); + parse_toc_buddy_list(account, c); } else if (!g_ascii_strcasecmp(c, "NICK")) { /* ignore NICK so that things get imported/exported properly c = strtok(NULL, ":");
--- a/src/protocols/trepia/trepia.c Sun Mar 27 00:33:58 2005 +0000 +++ b/src/protocols/trepia/trepia.c Sun Mar 27 01:14:41 2005 +0000 @@ -23,6 +23,7 @@ #include "account.h" #include "accountopt.h" +#include "cipher.h" #include "debug.h" #include "notify.h" #include "request.h" @@ -30,7 +31,6 @@ #include "util.h" #include "version.h" -#include "md5.h" #include "profile.h" /* XXX */ @@ -123,7 +123,7 @@ #endif static void -__clear_user_list(TrepiaSession *session) +_clear_user_list(TrepiaSession *session) { GaimBlistNode *gnode, *cnode, *bnode; for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { @@ -152,7 +152,7 @@ #if 0 static char * -__get_mac_address(const char *ip) +_get_mac_address(const char *ip) { char *mac = NULL; #ifndef _WIN32 @@ -484,7 +484,7 @@ } static void -__free_parser_data(gpointer user_data) +_free_parser_data(gpointer user_data) { #if 0 TrepiaParserData *data = user_data; @@ -500,7 +500,7 @@ } static void -__start_element_handler(GMarkupParseContext *context, +_start_element_handler(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, @@ -522,7 +522,7 @@ } static void -__end_element_handler(GMarkupParseContext *context, const gchar *element_name, +_end_element_handler(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { TrepiaParserData *data = user_data; @@ -550,7 +550,7 @@ } static void -__text_handler(GMarkupParseContext *context, const gchar *text, +_text_handler(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { TrepiaParserData *data = user_data; @@ -563,15 +563,15 @@ static GMarkupParser accounts_parser = { - __start_element_handler, - __end_element_handler, - __text_handler, + _start_element_handler, + _end_element_handler, + _text_handler, NULL, NULL }; static int -__parse_message(const char *buf, TrepiaMessageType *type, GHashTable **info) +_parse_message(const char *buf, TrepiaMessageType *type, GHashTable **info) { TrepiaParserData *parser_data = g_new0(TrepiaParserData, 1); GMarkupParseContext *context; @@ -582,7 +582,7 @@ parser_data->type = type; context = g_markup_parse_context_new(&accounts_parser, 0, - parser_data, __free_parser_data); + parser_data, _free_parser_data); if (!g_markup_parse_context_parse(context, buf, strlen(buf), NULL)) { g_markup_parse_context_free(context); @@ -625,7 +625,7 @@ account = gaim_connection_get_account(session->gc); - ret = __parse_message(buf, &type, &info); + ret = _parse_message(buf, &type, &info); if (ret == 1) return TRUE; @@ -974,7 +974,7 @@ } static void -__login_cb(gpointer data, gint source, GaimInputCondition cond) +_login_cb(gpointer data, gint source, GaimInputCondition cond) { TrepiaSession *session = data; GaimAccount *account; @@ -983,8 +983,9 @@ char *mac = "00:01:02:03:04:05"; char buf[3]; char md5_password[17]; - md5_state_t st; - md5_byte_t di[16]; + GaimCipher *cipher; + GaimCipherContext *context; + guint8 di[16]; int i; if (source < 0) { @@ -993,7 +994,7 @@ } #if 0 - mac = __get_mac_address(); + mac = _get_mac_address(); #endif session->fd = source; @@ -1002,9 +1003,10 @@ password = gaim_connection_get_password(session->gc); - md5_init(&st); - md5_append(&st, (const md5_byte_t *)password, strlen(password)); - md5_finish(&st, di); + cipher = gaim_ciphers_find_cipher("md5"); + context = gaim_cipher_context_new(cipher, NULL); + gaim_cipher_context_append(context, password, strlen(password)); + gaim_cipher_context_digest(context, sizeof(di), di, NULL); *md5_password = '\0'; @@ -1063,12 +1065,12 @@ session->user_profiles = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, NULL); - __clear_user_list(session); + _clear_user_list(session); gaim_connection_update_progress(gc, _("Connecting"), 0, TREPIA_CONNECT_STEPS); - i = gaim_proxy_connect(account, server, port, __login_cb, session); + i = gaim_proxy_connect(account, server, port, _login_cb, session); if (i != 0) gaim_connection_error(gc, _("Unable to create socket")); @@ -1195,7 +1197,7 @@ "<f></f><g></g><h></h><i></i><j></j><k></k><l></l>" "<m></m></J>", mac, "", TREPIA_VERSION, gaim_account_get_username(account), - gaim_connection_get_password(gc->account)); + gaim_connection_get_password(account->gc)); } static GaimPluginProtocolInfo prpl_info =