diff options
author | Mark Doliner <markdoliner@pidgin.im> | 2007-09-23 22:08:46 +0000 |
---|---|---|
committer | Mark Doliner <markdoliner@pidgin.im> | 2007-09-23 22:08:46 +0000 |
commit | fedc2fa8166f534ed7e9f8498567845e384b6b0f (patch) | |
tree | 5be1058f0bd2223f0cc0968c5b50afeb7a65fc63 | |
parent | 63bc604ca93af336b8c98e20c19e46b2793c1c23 (diff) | |
parent | 0cde2d9637369633c560a26a0ea49d5e3ddc3ca1 (diff) | |
download | pidgin-fedc2fa8166f534ed7e9f8498567845e384b6b0f.tar.gz |
merge of 'f53d4ab5fd1ab886b7ec9f70f3385b1bb12e31c9'
and 'a3a7cbfe1c1c56f2ba6a66b47137144f6297b615'
-rw-r--r-- | libpurple/protocols/jabber/jabber.c | 38 | ||||
-rw-r--r-- | libpurple/protocols/jabber/jabber.h | 5 | ||||
-rw-r--r-- | libpurple/protocols/jabber/libxmpp.c | 4 | ||||
-rw-r--r-- | libpurple/protocols/myspace/markup.c | 3 | ||||
-rw-r--r-- | libpurple/protocols/myspace/myspace.c | 10 | ||||
-rw-r--r-- | libpurple/protocols/myspace/user.c | 37 |
6 files changed, 80 insertions, 17 deletions
diff --git a/libpurple/protocols/jabber/jabber.c b/libpurple/protocols/jabber/jabber.c index e9ca6fb6e8..8788e328a2 100644 --- a/libpurple/protocols/jabber/jabber.c +++ b/libpurple/protocols/jabber/jabber.c @@ -2240,6 +2240,44 @@ static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, return PURPLE_CMD_RET_FAILED; } +GList *jabber_attention_types(PurpleAccount *account) +{ + static GList *types = NULL; + PurpleAttentionType *attn; + + if (!types) { + attn = g_new0(PurpleAttentionType, 1); + attn->name = _("Buzz"); + attn->incoming_description = _("%s has buzzed you!"); + attn->outgoing_description = _("Buzzing %s..."); + types = g_list_append(types, attn); + } + + return types; +} + +gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code) +{ + PurpleConversation *conv; + char *error; + char *args[1]; + PurpleCmdRet ret; + + conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_ANY, username, gc->account); + + args[0] = (char *)username; + + ret = jabber_cmd_buzz(conv, "buzz", args, &error, NULL); + + if (ret == PURPLE_CMD_RET_FAILED) { + purple_debug_error("jabber", "jabber_send_attention: jabber_cmd_buzz failed with error: %s\n", error ? error : "(NULL)"); + return FALSE; + } else { + return TRUE; + } +} + + gboolean jabber_offline_message(const PurpleBuddy *buddy) { return TRUE; diff --git a/libpurple/protocols/jabber/jabber.h b/libpurple/protocols/jabber/jabber.h index 97d762b6e9..b8fc3c7fc3 100644 --- a/libpurple/protocols/jabber/jabber.h +++ b/libpurple/protocols/jabber/jabber.h @@ -66,6 +66,9 @@ typedef struct _JabberStream JabberStream; #define CAPS0115_NODE "http://pidgin.im/caps" +/* Index into attention_types list */ +#define JABBER_BUZZ 0 + typedef enum { JABBER_STREAM_OFFLINE, JABBER_STREAM_CONNECTING, @@ -231,6 +234,8 @@ void jabber_keepalive(PurpleConnection *gc); void jabber_register_gateway(JabberStream *js, const char *gateway); void jabber_register_account(PurpleAccount *account); void jabber_unregister_account(PurpleAccount *account, PurpleAccountUnregistrationCb cb, void *user_data); +gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code); +GList *jabber_attention_types(PurpleAccount *account); void jabber_convo_closed(PurpleConnection *gc, const char *who); PurpleChat *jabber_find_blist_chat(PurpleAccount *account, const char *name); gboolean jabber_offline_message(const PurpleBuddy *buddy); diff --git a/libpurple/protocols/jabber/libxmpp.c b/libpurple/protocols/jabber/libxmpp.c index 7d02be62e3..b3ab3eb190 100644 --- a/libpurple/protocols/jabber/libxmpp.c +++ b/libpurple/protocols/jabber/libxmpp.c @@ -113,10 +113,10 @@ static PurplePluginProtocolInfo prpl_info = jabber_prpl_send_raw, /* send_raw */ jabber_roomlist_room_serialize, /* roomlist_room_serialize */ jabber_unregister_account, /* unregister_user */ + jabber_attention_types, /* attention_types */ + jabber_send_attention, /* send_attention */ /* padding */ - NULL, - NULL, NULL }; diff --git a/libpurple/protocols/myspace/markup.c b/libpurple/protocols/myspace/markup.c index 6f8311bd8e..ff45010cee 100644 --- a/libpurple/protocols/myspace/markup.c +++ b/libpurple/protocols/myspace/markup.c @@ -515,7 +515,8 @@ html_tag_to_msim_markup(MsimSession *session, xmlnode *root, gchar **begin, #endif err = g_strdup_printf("html_tag_to_msim_markup: unrecognized " - "HTML tag %s was sent by the IM client; ignoring", root->name); + "HTML tag %s was sent by the IM client; ignoring", + root->name ? root->name : "(NULL)"); msim_unrecognized(NULL, NULL, err); g_free(err); } diff --git a/libpurple/protocols/myspace/myspace.c b/libpurple/protocols/myspace/myspace.c index c27b24362c..1803331b50 100644 --- a/libpurple/protocols/myspace/myspace.c +++ b/libpurple/protocols/myspace/myspace.c @@ -454,6 +454,7 @@ msim_compute_login_response(const gchar nonce[2 * NONCE_SIZE], purple_cipher_context_append(key_context, hash_pw, HASH_SIZE); purple_cipher_context_append(key_context, (guchar *)(nonce + NONCE_SIZE), NONCE_SIZE); purple_cipher_context_digest(key_context, sizeof(key), key, NULL); + purple_cipher_context_destroy(key_context); #ifdef MSIM_DEBUG_LOGIN_CHALLENGE purple_debug_info("msim", "key = "); @@ -1030,7 +1031,7 @@ msim_set_status(PurpleAccount *account, PurpleStatus *status) PurpleStatusType *type; MsimSession *session; guint status_code; - const gchar *statstring; + gchar *statstring; session = (MsimSession *)account->gc->proto_data; @@ -1064,7 +1065,7 @@ msim_set_status(PurpleAccount *account, PurpleStatus *status) break; } - statstring = purple_status_get_attr_string(status, "message"); + statstring = (gchar *)purple_status_get_attr_string(status, "message"); if (!statstring) { statstring = ""; @@ -1073,7 +1074,7 @@ msim_set_status(PurpleAccount *account, PurpleStatus *status) /* Status strings are plain text. */ statstring = purple_markup_strip_html(statstring); - msim_set_status_code(session, status_code, g_strdup(statstring)); + msim_set_status_code(session, status_code, statstring); } /** Go idle. */ @@ -1204,7 +1205,7 @@ msim_uid2username_from_blist(MsimSession *session, guint wanted_uid) if (uid == wanted_uid) { ret = g_strdup(name); - break; + break; } } @@ -1863,6 +1864,7 @@ msim_incoming_status(MsimSession *session, MsimMessage *msg) purple_blist_add_buddy(buddy, NULL, NULL, NULL); user = msim_get_user_from_buddy(buddy); + /* TODO: free user. memory leak? */ /* All buddies on list should have 'uid' integer associated with them. */ purple_blist_node_set_int(&buddy->node, "UserID", msim_msg_get_integer(msg, "f")); diff --git a/libpurple/protocols/myspace/user.c b/libpurple/protocols/myspace/user.c index dbeb371fd6..4d2a6a1e88 100644 --- a/libpurple/protocols/myspace/user.c +++ b/libpurple/protocols/myspace/user.c @@ -154,7 +154,13 @@ msim_append_user_info(MsimSession *session, PurpleNotifyUserInfo *user_info, Msi } } -/** Store a field of information about a buddy. */ +/** Store a field of information about a buddy. + * + * @param key_str Key to store. + * @param value_str Value string, either user takes ownership of this string + * or it is freed if MsimUser doesn't store the string. + * @param user User to store data in. Existing data will be replaced. + * */ void msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user) { @@ -168,25 +174,33 @@ msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user /* Need to store in MsimUser, too? What if not on blist? */ } else if (g_str_equal(key_str, "Age")) { user->age = atol(value_str); + g_free(value_str); } else if (g_str_equal(key_str, "Gender")) { - user->gender = g_strdup(value_str); + g_free(user->gender); + user->gender = value_str; } else if (g_str_equal(key_str, "Location")) { - user->location = g_strdup(value_str); + g_free(user->location); + user->location = value_str; } else if (g_str_equal(key_str, "TotalFriends")) { user->total_friends = atol(value_str); } else if (g_str_equal(key_str, "DisplayName")) { - user->display_name = g_strdup(value_str); + g_free(user->display_name); + user->display_name = value_str; } else if (g_str_equal(key_str, "BandName")) { - user->band_name = g_strdup(value_str); + g_free(user->band_name); + user->band_name = value_str; } else if (g_str_equal(key_str, "SongName")) { - user->song_name = g_strdup(value_str); + g_free(user->song_name); + user->song_name = value_str; } else if (g_str_equal(key_str, "UserName") || g_str_equal(key_str, "IMName") || g_str_equal(key_str, "NickName")) { /* Ignore because PurpleBuddy knows this already */ - ; + g_free(value_str); } else if (g_str_equal(key_str, "ImageURL") || g_str_equal(key_str, "AvatarURL")) { const gchar *previous_url; - user->image_url = g_strdup(value_str); + g_free(user->image_url); + + user->image_url = value_str; /* Instead of showing 'no photo' picture, show nothing. */ if (g_str_equal(user->image_url, "http://x.myspace.com/images/no_pic.gif")) @@ -207,14 +221,17 @@ msim_store_user_info_each(const gchar *key_str, gchar *value_str, MsimUser *user } else if (g_str_equal(key_str, "LastImageUpdated")) { /* TODO: use somewhere */ user->last_image_updated = atol(value_str); + g_free(value_str); } else if (g_str_equal(key_str, "Headline")) { - user->headline = g_strdup(value_str); + g_free(user->headline); + user->headline = value_str; } else { /* TODO: other fields in MsimUser */ gchar *msg; msg = g_strdup_printf("msim_store_user_info_each: unknown field %s=%s", key_str, value_str); + g_free(value_str); msim_unrecognized(NULL, NULL, msg); @@ -284,7 +301,6 @@ msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user) value_str = msim_msg_get_string_from_element(elem); msim_store_user_info_each(key_str, value_str, user); - g_free(value_str); } if (msim_msg_get_integer(msg, "dsn") == MG_OWN_IM_INFO_DSN && @@ -301,6 +317,7 @@ msim_store_user_info(MsimSession *session, MsimMessage *msg, MsimUser *user) } msim_msg_free(body); + g_free(username); return TRUE; } |