summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Doliner <markdoliner@pidgin.im>2007-09-23 22:08:46 +0000
committerMark Doliner <markdoliner@pidgin.im>2007-09-23 22:08:46 +0000
commitfedc2fa8166f534ed7e9f8498567845e384b6b0f (patch)
tree5be1058f0bd2223f0cc0968c5b50afeb7a65fc63
parent63bc604ca93af336b8c98e20c19e46b2793c1c23 (diff)
parent0cde2d9637369633c560a26a0ea49d5e3ddc3ca1 (diff)
downloadpidgin-fedc2fa8166f534ed7e9f8498567845e384b6b0f.tar.gz
merge of 'f53d4ab5fd1ab886b7ec9f70f3385b1bb12e31c9'
and 'a3a7cbfe1c1c56f2ba6a66b47137144f6297b615'
-rw-r--r--libpurple/protocols/jabber/jabber.c38
-rw-r--r--libpurple/protocols/jabber/jabber.h5
-rw-r--r--libpurple/protocols/jabber/libxmpp.c4
-rw-r--r--libpurple/protocols/myspace/markup.c3
-rw-r--r--libpurple/protocols/myspace/myspace.c10
-rw-r--r--libpurple/protocols/myspace/user.c37
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;
}