annotate libpurple/protocols/jabber/usermood.c @ 32797:aacfb71133cc

Fix a possible MSN remote crash Incoming messages with certain characters or character encodings can cause clients to crash. The fix is for the contents of all incoming plaintext messages are converted to UTF-8 and validated before used. This was reported to us by Fabian Yamaguchi and this patch was written by Elliott Sales de Andrade (maybe with small, insignificant changes by me)
author Mark Doliner <mark@kingant.net>
date Mon, 07 May 2012 03:18:08 +0000
parents 979bab4c3bca
children 2ec94166be43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
1 /*
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
2 * purple - Jabber Protocol Plugin
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
3 *
28048
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28047
diff changeset
4 * Purple is the legal property of its developers, whose names are too numerous
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28047
diff changeset
5 * to list here. Please refer to the COPYRIGHT file distributed with this
c585572e80dd Remove specific copyright lines from the XMPP prpl.
Paul Aurich <paul@darkrain42.org>
parents: 28047
diff changeset
6 * source distribution.
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
7 *
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
11 * (at your option) any later version.
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
12 *
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
16 * GNU General Public License for more details.
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
17 *
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
28047
8c991e09efcb Update various header copyrights thanks to licensecheck.
Paul Aurich <paul@darkrain42.org>
parents: 25985
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
21 *
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
22 */
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
23
19698
d32ed28cf645 Fix mingw build of xmpp prpl
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19279
diff changeset
24 #include "internal.h"
d32ed28cf645 Fix mingw build of xmpp prpl
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19279
diff changeset
25
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
26 #include "usermood.h"
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
27 #include "pep.h"
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
28 #include <string.h>
17846
2f067d8fb19a Fixed a few small mistakes I discovered while testing user mood in Adium.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17845
diff changeset
29 #include "internal.h"
17850
2e41e74dabd0 Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17849
diff changeset
30 #include "request.h"
20334
58a57a0ca807 applied changes from 1095e0c294d15e95c8909d270748c5253226bfe6
Luke Schierer <lschiere@pidgin.im>
parents: 20000
diff changeset
31 #include "debug.h"
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
32
29441
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
33 static PurpleMood moods[] = {
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
34 {"afraid", N_("Afraid"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
35 {"amazed", N_("Amazed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
36 {"amorous", N_("Amorous"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
37 {"angry", N_("Angry"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
38 {"annoyed", N_("Annoyed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
39 {"anxious", N_("Anxious"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
40 {"aroused", N_("Aroused"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
41 {"ashamed", N_("Ashamed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
42 {"bored", N_("Bored"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
43 {"brave", N_("Brave"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
44 {"calm", N_("Calm"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
45 {"cautious", N_("Cautious"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
46 {"cold", N_("Cold"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
47 {"confident", N_("Confident"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
48 {"confused", N_("Confused"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
49 {"contemplative", N_("Contemplative"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
50 {"contented", N_("Contented"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
51 {"cranky", N_("Cranky"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
52 {"crazy", N_("Crazy"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
53 {"creative", N_("Creative"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
54 {"curious", N_("Curious"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
55 {"dejected", N_("Dejected"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
56 {"depressed", N_("Depressed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
57 {"disappointed", N_("Disappointed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
58 {"disgusted", N_("Disgusted"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
59 {"dismayed", N_("Dismayed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
60 {"distracted", N_("Distracted"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
61 {"embarrassed", N_("Embarrassed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
62 {"envious", N_("Envious"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
63 {"excited", N_("Excited"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
64 {"flirtatious", N_("Flirtatious"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
65 {"frustrated", N_("Frustrated"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
66 {"grateful", N_("Grateful"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
67 {"grieving", N_("Grieving"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
68 {"grumpy", N_("Grumpy"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
69 {"guilty", N_("Guilty"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
70 {"happy", N_("Happy"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
71 {"hopeful", N_("Hopeful"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
72 {"hot", N_("Hot"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
73 {"humbled", N_("Humbled"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
74 {"humiliated", N_("Humiliated"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
75 {"hungry", N_("Hungry"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
76 {"hurt", N_("Hurt"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
77 {"impressed", N_("Impressed"), NULL},
29489
7e150a194aef jabber: Remove a couple of underscores that slipped in in the textual
Marcus Lundblad <ml@update.uu.se>
parents: 29467
diff changeset
78 {"in_awe", N_("In awe"), NULL},
7e150a194aef jabber: Remove a couple of underscores that slipped in in the textual
Marcus Lundblad <ml@update.uu.se>
parents: 29467
diff changeset
79 {"in_love", N_("In love"), NULL},
29441
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
80 {"indignant", N_("Indignant"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
81 {"interested", N_("Interested"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
82 {"intoxicated", N_("Intoxicated"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
83 {"invincible", N_("Invincible"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
84 {"jealous", N_("Jealous"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
85 {"lonely", N_("Lonely"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
86 {"lost", N_("Lost"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
87 {"lucky", N_("Lucky"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
88 {"mean", N_("Mean"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
89 {"moody", N_("Moody"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
90 {"nervous", N_("Nervous"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
91 {"neutral", N_("Neutral"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
92 {"offended", N_("Offended"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
93 {"outraged", N_("Outraged"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
94 {"playful", N_("Playful"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
95 {"proud", N_("Proud"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
96 {"relaxed", N_("Relaxed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
97 {"relieved", N_("Relieved"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
98 {"remorseful", N_("Remorseful"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
99 {"restless", N_("Restless"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
100 {"sad", N_("Sad"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
101 {"sarcastic", N_("Sarcastic"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
102 {"satisfied", N_("Satisfied"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
103 {"serious", N_("Serious"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
104 {"shocked", N_("Shocked"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
105 {"shy", N_("Shy"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
106 {"sick", N_("Sick"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
107 {"sleepy", N_("Sleepy"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
108 {"spontaneous", N_("Spontaneous"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
109 {"stressed", N_("Stressed"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
110 {"strong", N_("Strong"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
111 {"surprised", N_("Surprised"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
112 {"thankful", N_("Thankful"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
113 {"thirsty", N_("Thirsty"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
114 {"tired", N_("Tired"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
115 {"undefined", N_("Undefined"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
116 {"weak", N_("Weak"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
117 {"worried", N_("Worried"), NULL},
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
118 /* Mark the last record. */
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
119 {NULL, NULL, NULL}
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
120 };
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
121
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
122 static void jabber_mood_cb(JabberStream *js, const char *from, xmlnode *items) {
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
123 /* it doesn't make sense to have more than one item here, so let's just pick the first one */
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
124 xmlnode *item = xmlnode_get_child(items, "item");
19279
39779b201e7c Initialize newmood to NULL, as there are codepaths by which we can check against whether it is NULL or not before setting it, and that's bad.
Evan Schoenberg <evan.s@dreskin.net>
parents: 17869
diff changeset
125 const char *newmood = NULL;
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
126 char *moodtext = NULL;
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
127 JabberBuddy *buddy = jabber_buddy_find(js, from, FALSE);
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
128 xmlnode *moodinfo, *mood;
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
129 /* ignore the mood of people not on our buddy list */
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
130 if (!buddy || !item)
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
131 return;
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22795
diff changeset
132
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
133 mood = xmlnode_get_child_with_namespace(item, "mood", "http://jabber.org/protocol/mood");
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
134 if (!mood)
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
135 return;
17856
f108b91e2fee Fixed a minor mistake which could leave the usermood to be parsed incompletely.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17853
diff changeset
136 for (moodinfo = mood->child; moodinfo; moodinfo = moodinfo->next) {
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
137 if (moodinfo->type == XMLNODE_TYPE_TAG) {
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
138 if (!strcmp(moodinfo->name, "text")) {
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
139 if (!moodtext) /* only pick the first one */
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
140 moodtext = xmlnode_get_data(moodinfo);
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
141 } else {
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
142 int i;
29441
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
143 for (i = 0; moods[i].mood; ++i) {
17847
267f614152c4 Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <pidgin@monitzer.com>
parents: 17846
diff changeset
144 /* verify that the mood is known (valid) */
29441
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
145 if (!strcmp(moodinfo->name, moods[i].mood)) {
086b26f60913 Convert XMPP to use an array of PurpleMoods internally.
Richard Laager <rlaager@wiktel.com>
parents: 29440
diff changeset
146 newmood = moods[i].mood;
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
147 break;
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
148 }
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
149 }
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
150 }
17847
267f614152c4 Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <pidgin@monitzer.com>
parents: 17846
diff changeset
151 if (newmood != NULL && moodtext != NULL)
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
152 break;
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
153 }
28594
ecca39fe50d7 jabber: Update to v1.2 of the spec (adds a few more elements).
Paul Aurich <paul@darkrain42.org>
parents: 28048
diff changeset
154 if (newmood != NULL && moodtext != NULL)
ecca39fe50d7 jabber: Update to v1.2 of the spec (adds a few more elements).
Paul Aurich <paul@darkrain42.org>
parents: 28048
diff changeset
155 break;
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
156 }
17847
267f614152c4 Removed the huge enum for the user mood states, since it's now passed as localized strings anyways
Andreas Monitzer <pidgin@monitzer.com>
parents: 17846
diff changeset
157 if (newmood != NULL) {
29440
1fb503adb2ae Move the mood UI for ICQ into Pidgin. It still uses the new request API
Richard Laager <rlaager@wiktel.com>
parents: 29430
diff changeset
158 purple_prpl_got_user_status(js->gc->account, from, "mood",
29467
65004796201d Actually set the mood when creating a presence update when receiving mood PEP.
Marcus Lundblad <ml@update.uu.se>
parents: 29463
diff changeset
159 PURPLE_MOOD_NAME, newmood,
29440
1fb503adb2ae Move the mood UI for ICQ into Pidgin. It still uses the new request API
Richard Laager <rlaager@wiktel.com>
parents: 29430
diff changeset
160 PURPLE_MOOD_COMMENT, moodtext,
1fb503adb2ae Move the mood UI for ICQ into Pidgin. It still uses the new request API
Richard Laager <rlaager@wiktel.com>
parents: 29430
diff changeset
161 NULL);
1fb503adb2ae Move the mood UI for ICQ into Pidgin. It still uses the new request API
Richard Laager <rlaager@wiktel.com>
parents: 29430
diff changeset
162 } else {
1fb503adb2ae Move the mood UI for ICQ into Pidgin. It still uses the new request API
Richard Laager <rlaager@wiktel.com>
parents: 29430
diff changeset
163 purple_prpl_got_user_status_deactive(js->gc->account, from, "mood");
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
164 }
19699
680a3aea5eb6 Various warning fixes for the xmpp prpl.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19698
diff changeset
165 g_free(moodtext);
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
166 }
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
167
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
168 void jabber_mood_init(void) {
25017
26eabe8e739b Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents: 22795
diff changeset
169 jabber_add_feature("http://jabber.org/protocol/mood", jabber_pep_namespace_only_when_pep_enabled_cb);
26eabe8e739b Removing short-names for features and calculating own caps hash.
Tobias Markmann <tfar@soc.pidgin.im>
parents: 22795
diff changeset
170 jabber_pep_register_handler("http://jabber.org/protocol/mood", jabber_mood_cb);
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
171 }
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
172
17850
2e41e74dabd0 Implemented setting the User Mood. Currently untested since it requires the fields request API, which isn't implemented in Adium yet.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17849
diff changeset
173 void jabber_mood_set(JabberStream *js, const char *mood, const char *text) {
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
174 xmlnode *publish, *moodnode;
20000
ab38146f8f78 There shouldn't be assert()s in pretty much any libpurple code.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 19699
diff changeset
175
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
176 publish = xmlnode_new("publish");
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
177 xmlnode_set_attrib(publish,"node","http://jabber.org/protocol/mood");
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
178 moodnode = xmlnode_new_child(xmlnode_new_child(publish, "item"), "mood");
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
179 xmlnode_set_namespace(moodnode, "http://jabber.org/protocol/mood");
31720
979bab4c3bca jabber: Check for empty string when setting mood.
Paul Aurich <paul@darkrain42.org>
parents: 29545
diff changeset
180 if (mood && *mood) {
29490
1c6c2f5ecf53 Allow unsetting mood in mood selector, works with XMPP... Oscar is not yet
Marcus Lundblad <ml@update.uu.se>
parents: 29489
diff changeset
181 /* if mood is NULL, set an empty mood node, meaning: unset mood */
1c6c2f5ecf53 Allow unsetting mood in mood selector, works with XMPP... Oscar is not yet
Marcus Lundblad <ml@update.uu.se>
parents: 29489
diff changeset
182 xmlnode_new_child(moodnode, mood);
1c6c2f5ecf53 Allow unsetting mood in mood selector, works with XMPP... Oscar is not yet
Marcus Lundblad <ml@update.uu.se>
parents: 29489
diff changeset
183 }
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
184
31720
979bab4c3bca jabber: Check for empty string when setting mood.
Paul Aurich <paul@darkrain42.org>
parents: 29545
diff changeset
185 if (text && *text) {
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
186 xmlnode *textnode = xmlnode_new_child(moodnode, "text");
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
187 xmlnode_insert_data(textnode, text, -1);
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
188 }
25952
5f9a24d1c25e Remove some extra trailing whitespace I noticed after merging mlundblad's
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 22795
diff changeset
189
17845
2e0799b916b9 Fixed whitespace to match the coding convention used in libpurple
Andreas Monitzer <pidgin@monitzer.com>
parents: 17844
diff changeset
190 jabber_pep_publish(js, publish);
17852
af833a3204bb Fixed usermood memory management and removed publishing empty <text/>s.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17851
diff changeset
191 /* publish is freed by jabber_pep_publish -> jabber_iq_send -> jabber_iq_free
af833a3204bb Fixed usermood memory management and removed publishing empty <text/>s.
Andreas Monitzer <pidgin@monitzer.com>
parents: 17851
diff changeset
192 (yay for well-defined memory management rules) */
17842
a0cd74d7b51e forgot to add usermood.[hc]
Andreas Monitzer <pidgin@monitzer.com>
parents:
diff changeset
193 }
29463
f3654983e1da Implemented the get_moods prpl function for XMPP. Enables the generic mood
Marcus Lundblad <ml@update.uu.se>
parents: 29458
diff changeset
194
f3654983e1da Implemented the get_moods prpl function for XMPP. Enables the generic mood
Marcus Lundblad <ml@update.uu.se>
parents: 29458
diff changeset
195 PurpleMood *jabber_get_moods(PurpleAccount *account)
f3654983e1da Implemented the get_moods prpl function for XMPP. Enables the generic mood
Marcus Lundblad <ml@update.uu.se>
parents: 29458
diff changeset
196 {
29530
9f6a657af957 Allow showing moods for buddies when signed on using an XMPP account not
Marcus Lundblad <ml@update.uu.se>
parents: 29517
diff changeset
197 return moods;
31720
979bab4c3bca jabber: Check for empty string when setting mood.
Paul Aurich <paul@darkrain42.org>
parents: 29545
diff changeset
198 }