Mercurial > pidgin
annotate libpurple/protocols/jabber/jutil.c @ 27508:95c56191d26c
For contacts who advertise Entity Caps, check for XHTML-IM support. Refs #4650.
For backward-compatibility (and what I, as someone who knows that
Jabber supports rich-text, would expect), continue sending it if the
contact is offline (i.e. not on the roster).
author | Paul Aurich <paul@darkrain42.org> |
---|---|
date | Sun, 12 Jul 2009 04:39:31 +0000 |
parents | f1f901b3d6f2 |
children | aac25c66a843 |
rev | line source |
---|---|
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
1 /* |
15822 | 2 * purple - Jabber Protocol Plugin |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
3 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
4 * Copyright (C) 2003, Nathan Walp <faceprint@faceprint.com> |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
5 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
6 * This program is free software; you can redistribute it and/or modify |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
9 * (at your option) any later version. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
10 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
11 * This program is distributed in the hope that it will be useful, |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
14 * GNU General Public License for more details. |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
15 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
16 * You should have received a copy of the GNU General Public License |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
17 * along with this program; if not, write to the Free Software |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
15889
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
19 * |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
20 */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
21 #include "internal.h" |
15889
87ea711b9781
Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
22 #include "account.h" |
24693
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
23 #include "cipher.h" |
15889
87ea711b9781
Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
24 #include "conversation.h" |
24693
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
25 #include "debug.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
26 #include "server.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
27 #include "util.h" |
15889
87ea711b9781
Re-arrange #includes so 'make check' stands a chance of passing during
Stu Tomlinson <stu@nosnilmot.com>
parents:
15822
diff
changeset
|
28 #include "xmlnode.h" |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
29 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
30 #include "chat.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
31 #include "presence.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
32 #include "jutil.h" |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
33 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
34 gboolean jabber_nodeprep_validate(const char *str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
35 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
36 const char *c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
37 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
38 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
39 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
40 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
41 if(strlen(str) > 1023) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
42 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
43 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
44 c = str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
45 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
46 gunichar ch = g_utf8_get_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
47 if(ch == '\"' || ch == '&' || ch == '\'' || ch == '/' || ch == ':' || |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
48 ch == '<' || ch == '>' || ch == '@' || !g_unichar_isgraph(ch)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
49 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
50 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
51 c = g_utf8_next_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
52 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
53 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
54 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
55 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
56 |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
57 gboolean jabber_domain_validate(const char *str) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
58 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
59 const char *c; |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
60 size_t len; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
61 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
62 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
63 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
64 |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
65 len = strlen(str); |
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
66 if (len > 1023) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
67 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
68 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
69 c = str; |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
70 |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
71 if (*c == '[') { |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
72 /* Check if str is a valid IPv6 identifier */ |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
73 gboolean valid = FALSE; |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
74 |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
75 if (*(c + len - 1) != ']') |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
76 return FALSE; |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
77 |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
78 /* Ugly, but in-place */ |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
79 *(gchar *)(c + len - 1) = '\0'; |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
80 valid = purple_ipv6_address_is_valid(c + 1); |
27472
f1f901b3d6f2
Save one traversal of the domain for IPv6 validation.
Paul Aurich <paul@darkrain42.org>
parents:
27470
diff
changeset
|
81 *(gchar *)(c + len - 1) = ']'; |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
82 |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
83 return valid; |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
84 } |
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
85 |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
86 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
87 gunichar ch = g_utf8_get_char(c); |
27461
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
88 /* The list of characters allowed in domain names is pretty small */ |
27463
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27462
diff
changeset
|
89 if ((ch <= 0x7F && !( (ch >= 'a' && ch <= 'z') |
27461
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
90 || (ch >= '0' && ch <= '9') |
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
91 || (ch >= 'A' && ch <= 'Z') |
7e79102cda40
Be more restrictive in the characters allowed by jabber_nameprep_validate()
Mark Doliner <mark@kingant.net>
parents:
27460
diff
changeset
|
92 || ch == '.' |
27463
167d7c3a4f7b
XMPP allows for internationalized domain names.
Paul Aurich <paul@darkrain42.org>
parents:
27462
diff
changeset
|
93 || ch == '-' )) || (ch >= 0x80 && !g_unichar_isgraph(ch))) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
94 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
95 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
96 c = g_utf8_next_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
97 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
98 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
99 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
100 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
101 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
102 gboolean jabber_resourceprep_validate(const char *str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
103 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
104 const char *c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
105 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
106 if(!str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
107 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
108 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
109 if(strlen(str) > 1023) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
110 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
111 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
112 c = str; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
113 while(c && *c) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
114 gunichar ch = g_utf8_get_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
115 if(!g_unichar_isgraph(ch) && ch != ' ') |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
116 return FALSE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
117 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
118 c = g_utf8_next_char(c); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
119 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
120 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
121 return TRUE; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
122 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
123 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
124 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
125 JabberID* |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
126 jabber_id_new(const char *str) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
127 { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
128 const char *at = NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
129 const char *slash = NULL; |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
130 const char *c; |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
131 gboolean needs_validation = FALSE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
132 #if 0 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
133 gboolean node_is_required = FALSE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
134 #endif |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
135 char *node = NULL; |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
136 char *domain; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
137 JabberID *jid; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
138 |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
139 if (!str) |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
140 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
141 |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
142 for (c = str; *c != '\0'; c++) |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
143 { |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
144 switch (*c) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
145 case '@': |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
146 if (!slash) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
147 if (at) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
148 /* Multiple @'s in the node/domain portion, not a valid JID! */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
149 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
150 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
151 if (c == str) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
152 /* JIDs cannot start with @ */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
153 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
154 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
155 if (c[1] == '\0') { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
156 /* JIDs cannot end with @ */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
157 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
158 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
159 at = c; |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
160 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
161 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
162 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
163 case '/': |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
164 if (!slash) { |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
165 if (c == str) { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
166 /* JIDs cannot start with / */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
167 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
168 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
169 if (c[1] == '\0') { |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
170 /* JIDs cannot end with / */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
171 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
172 } |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
173 slash = c; |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
174 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
175 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
176 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
177 default: |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
178 /* characters allowed everywhere */ |
27460
8f2dfa6ef2f7
Of course, these should be >= and <=
Mark Doliner <mark@kingant.net>
parents:
27456
diff
changeset
|
179 if ((*c >= 'a' && *c <= 'z') |
8f2dfa6ef2f7
Of course, these should be >= and <=
Mark Doliner <mark@kingant.net>
parents:
27456
diff
changeset
|
180 || (*c >= '0' && *c <= '9') |
8f2dfa6ef2f7
Of course, these should be >= and <=
Mark Doliner <mark@kingant.net>
parents:
27456
diff
changeset
|
181 || (*c >= 'A' && *c <= 'Z') |
27456
04d8452dee48
Change jabber_id_new() to iterate byte by byte instead of character
Mark Doliner <mark@kingant.net>
parents:
27454
diff
changeset
|
182 || *c == '.' || *c == '-') |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
183 /* We're good */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
184 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
185 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
186 #if 0 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
187 if (slash != NULL) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
188 /* characters allowed only in the resource */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
189 if (implement_me) |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
190 /* We're good */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
191 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
192 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
193 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
194 /* characters allowed only in the node */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
195 if (implement_me) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
196 /* |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
197 * Ok, this character is valid, but only if it's a part |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
198 * of the node and not the domain. But we don't know |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
199 * if "c" is a part of the node or the domain until after |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
200 * we've found the @. So set a flag for now and check |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
201 * that we found an @ later. |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
202 */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
203 node_is_required = TRUE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
204 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
205 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
206 #endif |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
207 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
208 /* |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
209 * Hmm, this character is a bit more exotic. Better fall |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
210 * back to using the more expensive UTF-8 compliant |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
211 * stringprep functions. |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
212 */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
213 needs_validation = TRUE; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
214 break; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
215 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
216 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
217 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
218 #if 0 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
219 if (node_is_required && at == NULL) |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
220 /* Found invalid characters in the domain */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
221 return NULL; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
222 #endif |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
223 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
224 if (!needs_validation) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
225 /* JID is made of only ASCII characters--just lowercase and return */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
226 jid = g_new0(JabberID, 1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
227 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
228 if (at) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
229 jid->node = g_ascii_strdown(str, at - str); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
230 if (slash) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
231 jid->domain = g_ascii_strdown(at + 1, slash - (at + 1)); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
232 jid->resource = g_strdup(slash + 1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
233 } else { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
234 jid->domain = g_ascii_strdown(at + 1, -1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
235 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
236 } else { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
237 if (slash) { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
238 jid->domain = g_ascii_strdown(str, slash - str); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
239 jid->resource = g_strdup(slash + 1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
240 } else { |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
241 jid->domain = g_ascii_strdown(str, -1); |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
242 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
243 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
244 return jid; |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
245 } |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
246 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
247 /* |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
248 * If we get here, there are some non-ASCII chars in the string, so |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
249 * we'll need to validate it, normalize, and finally do a full jabber |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
250 * nodeprep on the jid. |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
251 */ |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
252 |
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
253 if (!g_utf8_validate(str, -1, NULL)) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
254 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
255 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
256 jid = g_new0(JabberID, 1); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
257 |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
258 /* normalization */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
259 if(at) { |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
260 node = g_utf8_normalize(str, at-str, G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
261 if(slash) { |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
262 domain = g_utf8_normalize(at+1, slash-(at+1), G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
263 jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
264 } else { |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
265 domain = g_utf8_normalize(at+1, -1, G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
266 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
267 } else { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
268 if(slash) { |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
269 domain = g_utf8_normalize(str, slash-str, G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
270 jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
271 } else { |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
272 domain = g_utf8_normalize(str, -1, G_NORMALIZE_NFKC); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
273 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
274 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
275 |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
276 if (node) { |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
277 jid->node = g_utf8_strdown(node, -1); |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
278 g_free(node); |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
279 } |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
280 |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
281 if (domain) { |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
282 jid->domain = g_utf8_strdown(domain, -1); |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
283 g_free(domain); |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
284 } |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
285 |
27454
1b580473e753
Check in a version of jabber_id_new() that is hopefully more efficient.
Mark Doliner <mark@kingant.net>
parents:
27430
diff
changeset
|
286 /* and finally the jabber nodeprep */ |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
287 if(!jabber_nodeprep_validate(jid->node) || |
27470
e90fa379fcec
Validate IPv6 identifiers in the domain portion of a JID.
Paul Aurich <paul@darkrain42.org>
parents:
27464
diff
changeset
|
288 !jabber_domain_validate(jid->domain) || |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
289 !jabber_resourceprep_validate(jid->resource)) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
290 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
291 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
292 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
293 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
294 return jid; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
295 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
296 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
297 void |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
298 jabber_id_free(JabberID *jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
299 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
300 if(jid) { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
301 if(jid->node) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
302 g_free(jid->node); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
303 if(jid->domain) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
304 g_free(jid->domain); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
305 if(jid->resource) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
306 g_free(jid->resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
307 g_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
308 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
309 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
310 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
311 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
312 char *jabber_get_resource(const char *in) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
313 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
314 JabberID *jid = jabber_id_new(in); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
315 char *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
316 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
317 if(!jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
318 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
319 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
320 out = g_strdup(jid->resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
321 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
322 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
323 return out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
324 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
325 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
326 char *jabber_get_bare_jid(const char *in) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
327 { |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
328 JabberID *jid = jabber_id_new(in); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
329 char *out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
330 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
331 if(!jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
332 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
333 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
334 out = g_strdup_printf("%s%s%s", jid->node ? jid->node : "", |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
335 jid->node ? "@" : "", jid->domain); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
336 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
337 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
338 return out; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
339 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
340 |
15822 | 341 const char *jabber_normalize(const PurpleAccount *account, const char *in) |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
342 { |
15822 | 343 PurpleConnection *gc = account ? account->gc : NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
344 JabberStream *js = gc ? gc->proto_data : NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
345 static char buf[3072]; /* maximum legal length of a jabber jid */ |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
346 JabberID *jid; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
347 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
348 jid = jabber_id_new(in); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
349 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
350 if(!jid) |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
351 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
352 |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
353 if(js && jid->node && jid->resource && |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
354 jabber_chat_find(js, jid->node, jid->domain)) |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
355 g_snprintf(buf, sizeof(buf), "%s@%s/%s", jid->node, jid->domain, |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
356 jid->resource); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
357 else |
26897
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
358 g_snprintf(buf, sizeof(buf), "%s%s%s", jid->node ? jid->node : "", |
34e4e2ca7db9
jabber_id_new() needs to be case-folding the node and domain.
Paul Aurich <paul@darkrain42.org>
parents:
24693
diff
changeset
|
359 jid->node ? "@" : "", jid->domain); |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
360 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
361 jabber_id_free(jid); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
362 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
363 return buf; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
364 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
365 |
26941
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
366 gboolean |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
367 jabber_is_own_server(JabberStream *js, const char *str) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
368 { |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
369 JabberID *jid; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
370 gboolean equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
371 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
372 if (str == NULL) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
373 return FALSE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
374 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
375 g_return_val_if_fail(*str != '\0', FALSE); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
376 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
377 jid = jabber_id_new(str); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
378 if (!jid) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
379 return FALSE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
380 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
381 equal = (jid->node == NULL && |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
382 g_str_equal(jid->domain, js->user->domain) && |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
383 jid->resource == NULL); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
384 jabber_id_free(jid); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
385 return equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
386 } |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
387 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
388 gboolean |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
389 jabber_is_own_account(JabberStream *js, const char *str) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
390 { |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
391 JabberID *jid; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
392 gboolean equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
393 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
394 if (str == NULL) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
395 return TRUE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
396 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
397 g_return_val_if_fail(*str != '\0', FALSE); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
398 |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
399 jid = jabber_id_new(str); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
400 if (!jid) |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
401 return FALSE; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
402 |
26968
fd7dc5cc0310
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <paul@darkrain42.org>
parents:
26941
diff
changeset
|
403 equal = (purple_strequal(jid->node, js->user->node) && |
26941
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
404 g_str_equal(jid->domain, js->user->domain) && |
26968
fd7dc5cc0310
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <paul@darkrain42.org>
parents:
26941
diff
changeset
|
405 (jid->resource == NULL || |
fd7dc5cc0310
Allow incoming stanzas to match 'our account' if they come from our resource.
Paul Aurich <paul@darkrain42.org>
parents:
26941
diff
changeset
|
406 g_str_equal(jid->resource, js->user->resource))); |
26941
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
407 jabber_id_free(jid); |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
408 return equal; |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
409 } |
e8795ced8c9b
Add two helper functions useful for matching the 'from' attribute on packets to either our server or our account.
Paul Aurich <paul@darkrain42.org>
parents:
26897
diff
changeset
|
410 |
15822 | 411 PurpleConversation * |
412 jabber_find_unnormalized_conv(const char *name, PurpleAccount *account) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
413 { |
15822 | 414 PurpleConversation *c = NULL; |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
415 GList *cnv; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
416 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
417 g_return_val_if_fail(name != NULL, NULL); |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
418 |
15822 | 419 for(cnv = purple_get_conversations(); cnv; cnv = cnv->next) { |
420 c = (PurpleConversation*)cnv->data; | |
421 if(purple_conversation_get_type(c) == PURPLE_CONV_TYPE_IM && | |
422 !purple_utf8_strcasecmp(name, purple_conversation_get_name(c)) && | |
423 account == purple_conversation_get_account(c)) | |
15373
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
424 return c; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
425 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
426 |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
427 return NULL; |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
428 } |
5fe8042783c1
Rename gtk/ and libgaim/ to pidgin/ and libpurple/
Sean Egan <seanegan@gmail.com>
parents:
diff
changeset
|
429 |
24693
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
430 /* The same as purple_util_get_image_checksum, but guaranteed to remain SHA1 */ |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
431 char * |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
432 jabber_calculate_data_sha1sum(gconstpointer data, size_t len) |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
433 { |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
434 PurpleCipherContext *context; |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
435 static gchar digest[41]; |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
436 |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
437 context = purple_cipher_context_new_by_name("sha1", NULL); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
438 if (context == NULL) |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
439 { |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
440 purple_debug_error("jabber", "Could not find sha1 cipher\n"); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
441 g_return_val_if_reached(NULL); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
442 } |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
443 |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
444 /* Hash the data */ |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
445 purple_cipher_context_append(context, data, len); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
446 if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL)) |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
447 { |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
448 purple_debug_error("jabber", "Failed to get SHA-1 digest.\n"); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
449 g_return_val_if_reached(NULL); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
450 } |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
451 purple_cipher_context_destroy(context); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
452 |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
453 return g_strdup(digest); |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
454 } |
61e0924de04a
Fix up the XMPP User Avatar SHA1 hashing so that we don't mess up the checksum
Paul Aurich <paul@darkrain42.org>
parents:
19681
diff
changeset
|
455 |