static void buddy_add_input(PurpleConnection *gc, guint32 uid, gchar *reason) { PurpleAccount *account = purple_connection_get_account(gc); qq_buddy_req *add_req; gchar *who; g_return_if_fail(uid != 0 && reason != NULL); purple_debug_info("QQ", "Buddy %u request adding, msg: %s\n", uid, reason); add_req = g_new0(qq_buddy_req, 1); add_req->gc = gc; add_req->uid = uid; if (purple_prefs_get_bool("/plugins/prpl/qq/auto_get_authorize_info")) { qq_request_buddy_info(gc, add_req->uid, 0, QQ_BUDDY_INFO_DISPLAY); } who = uid_to_purple_name(add_req->uid); purple_account_request_authorization(account, who, NULL, NULL, reason, purple_find_buddy(account, who) != NULL, buddy_add_authorize_cb, buddy_add_deny_cb, add_req); g_free(who); }
static void skypeweb_got_authrequests(SkypeWebAccount *sa, JsonNode *node, gpointer user_data) { JsonArray *requests; guint index, length; time_t latest_timestamp = 0; requests = json_node_get_array(node); length = json_array_get_length(requests); for(index = 0; index < length; index++) { JsonObject *request = json_array_get_object_element(requests, index); const gchar *event_time_iso = json_object_get_string_member(request, "event_time_iso"); const gchar *sender = json_object_get_string_member(request, "sender"); const gchar *greeting = json_object_get_string_member(request, "greeting"); time_t event_timestamp = purple_str_to_time(event_time_iso, TRUE, NULL, NULL, NULL); latest_timestamp = MAX(latest_timestamp, event_timestamp); if (sa->last_authrequest && event_timestamp <= sa->last_authrequest) continue; purple_account_request_authorization( sa->account, sender, NULL, NULL, greeting, FALSE, skypeweb_auth_accept_cb, skypeweb_auth_reject_cb, purple_buddy_new(sa->account, sender, NULL)); } sa->last_authrequest = latest_timestamp; }
/* When other people ask you for authorization */ void oscar_auth_recvrequest(PurpleConnection *gc, gchar *name, gchar *nick, gchar *reason) { PurpleAccount* account = purple_connection_get_account(gc); struct name_data *data = g_new(struct name_data, 1); data->gc = gc; data->name = name; data->nick = nick; purple_account_request_authorization(account, data->name, NULL, data->nick, reason, purple_find_buddy(account, data->name) != NULL, oscar_auth_grant, oscar_auth_dontgrant_msgprompt, data); }
static void got_new_entry(PurpleConnection *gc, const char *passport, const char *friendly) { MsnPermitAdd *pa; pa = g_new0(MsnPermitAdd, 1); pa->who = g_strdup(passport); pa->friendly = g_strdup(friendly); pa->gc = gc; purple_account_request_authorization(purple_connection_get_account(gc), passport, NULL, friendly, NULL, purple_find_buddy(purple_connection_get_account(gc), passport) != NULL, msn_accept_add_cb, msn_cancel_add_cb, pa); }
void jabber_presence_parse(JabberStream *js, xmlnode *packet) { const char *type; JabberBuddyResource *jbr = NULL; gboolean signal_return, ret; JabberPresence presence; xmlnode *child; memset(&presence, 0, sizeof(presence)); /* defaults */ presence.state = JABBER_BUDDY_STATE_UNKNOWN; presence.sent = time(NULL); /* interesting values */ presence.from = xmlnode_get_attrib(packet, "from"); presence.to = xmlnode_get_attrib(packet, "to"); type = xmlnode_get_attrib(packet, "type"); presence.type = str_to_presence_type(type); presence.jb = jabber_buddy_find(js, presence.from, TRUE); g_return_if_fail(presence.jb != NULL); presence.jid_from = jabber_id_new(presence.from); if (presence.jid_from == NULL) { purple_debug_error("jabber", "Ignoring presence with malformed 'from' " "JID: %s\n", presence.from); return; } signal_return = GPOINTER_TO_INT(purple_signal_emit_return_1(purple_connection_get_prpl(js->gc), "jabber-receiving-presence", js->gc, type, presence.from, packet)); if (signal_return) { goto out; } if (presence.jid_from->node) presence.chat = jabber_chat_find(js, presence.jid_from->node, presence.jid_from->domain); if(presence.jb->error_msg) { g_free(presence.jb->error_msg); presence.jb->error_msg = NULL; } if (presence.type == JABBER_PRESENCE_AVAILABLE) { presence.state = JABBER_BUDDY_STATE_ONLINE; } else if (presence.type == JABBER_PRESENCE_ERROR) { /* TODO: Is this handled properly? Should it be treated as per-jbr? */ char *msg = jabber_parse_error(js, packet, NULL); presence.state = JABBER_BUDDY_STATE_ERROR; presence.jb->error_msg = msg ? msg : g_strdup(_("Unknown Error in presence")); } else if (presence.type == JABBER_PRESENCE_SUBSCRIBE) { /* TODO: Move to handle_subscribe() (so nick is extracted by the * PresenceHandler */ struct _jabber_add_permit *jap = g_new0(struct _jabber_add_permit, 1); gboolean onlist = FALSE; PurpleAccount *account; PurpleBuddy *buddy; xmlnode *nick; account = purple_connection_get_account(js->gc); buddy = purple_find_buddy(account, presence.from); nick = xmlnode_get_child_with_namespace(packet, "nick", "http://jabber.org/protocol/nick"); if (nick) presence.nickname = xmlnode_get_data(nick); if (buddy) { if ((presence.jb->subscription & (JABBER_SUB_TO | JABBER_SUB_PENDING))) onlist = TRUE; } jap->gc = js->gc; jap->who = g_strdup(presence.from); jap->js = js; purple_account_request_authorization(account, presence.from, NULL, presence.nickname, NULL, onlist, authorize_add_cb, deny_add_cb, jap); goto out; } else if (presence.type == JABBER_PRESENCE_SUBSCRIBED) {
static void fb_check_friend_request_cb(FacebookAccount *fba, gchar *data, gsize data_len, gpointer user_data) { const char *uid_pre_text = "class=\"confirm\" id=\"friend_add_"; const char *name_pre_text = "<td class=\"info\"><a "; const char *msg_pre_text = "<div class=\"personal_msg\"><span>"; gchar *uid; gint32 uid_int; gchar *name; gchar *msg; gchar *msg_plain; FacebookBuddy *buddy; gchar *search_start = data; /* loop through the data and look for confirm_friend_add_([0-9]*)" */ while ((search_start = strstr(search_start, uid_pre_text))) { search_start += strlen(uid_pre_text); uid = g_strndup(search_start, strchr(search_start, '"') - search_start); purple_debug_info("facebook", "uid: %s\n", uid); uid_int = atoi(uid); if (g_slist_find(fba->auth_buddies, GINT_TO_POINTER(uid_int)) != NULL) { /* we've already notified the user of this friend request */ g_free(uid); continue; } name = strstr(search_start, name_pre_text); if (name != NULL) { name += strlen(name_pre_text); name = strchr(name, '>') + 1; name = g_strndup(name, strchr(name, '<') - name); purple_debug_info("facebook", "name: %s\n", name); } else { name = NULL; } msg = strstr(search_start, msg_pre_text); if (msg != NULL) { msg += strlen(msg_pre_text); msg = g_strndup(msg, strstr(msg, "</span></div>") - msg); msg_plain = purple_markup_strip_html(msg); g_free(msg); purple_debug_info("facebook", "msg: %s\n", msg_plain); } else { msg_plain = NULL; } buddy = g_new0(FacebookBuddy, 1); buddy->fba = fba; buddy->uid = uid_int; purple_account_request_authorization( fba->account, uid, NULL, name, msg_plain, TRUE, fb_auth_accept_cb, fb_auth_reject_cb, buddy); g_free(uid); /* TODO: msg_plain might be leaking here? */ /* Don't display an auth request for this buddy again */ fba->auth_buddies = g_slist_prepend( fba->auth_buddies, GINT_TO_POINTER(uid_int)); } }