libpurple/protocols/oscar/util.c

Mon, 25 Jun 2007 08:48:04 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Mon, 25 Jun 2007 08:48:04 +0000
changeset 18343
13d96f8a0d7f
parent 18341
8990ff4ec97c
child 19820
0f82885da3d8
permissions
-rw-r--r--

Make sure we still don't allow screen names of the form "1whatever"

13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
1 /*
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
2 * Purple's oscar protocol plugin
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
3 * This file is the legal property of its developers.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
5 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
6 * This library is free software; you can redistribute it and/or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
8 * License as published by the Free Software Foundation; either
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
9 * version 2 of the License, or (at your option) any later version.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
10 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
11 * This library is distributed in the hope that it will be useful,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
14 * Lesser General Public License for more details.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
15 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
17 * License along with this library; if not, write to the Free Software
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
19 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
20
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 /*
4246
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
22 * A little bit of this
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
23 * A little bit of that
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
24 * It started with a kiss
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
25 * Now we're up to bat
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
28 #include "oscar.h"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #include <ctype.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30
4246
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
31 #ifdef _WIN32
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
32 #include "win32dep.h"
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
33 #endif
36828a69456f [gaim-migrate @ 4496]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
34
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 /*
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 * Tokenizing functions. Used to portably replace strtok/sep.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37 * -- DMP.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 */
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
40 /* TODO: Get rid of this and use glib functions */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
41 int
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
42 aimutil_tokslen(char *toSearch, int theindex, char dl)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
44 int curCount = 1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
45 char *next;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
46 char *last;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
47 int toReturn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
48
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
49 last = toSearch;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
50 next = strchr(toSearch, dl);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51
6323
70c997ce574d [gaim-migrate @ 6822]
Zach Rusin
parents: 6322
diff changeset
52 while(curCount < theindex && next != NULL) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
53 curCount++;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
54 last = next + 1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
55 next = strchr(last, dl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
56 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57
6323
70c997ce574d [gaim-migrate @ 6822]
Zach Rusin
parents: 6322
diff changeset
58 if ((curCount < theindex) || (next == NULL))
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
59 toReturn = strlen(toSearch) - (curCount - 1);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
60 else
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
61 toReturn = next - toSearch - (curCount - 1);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
62
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
63 return toReturn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
66 int
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
67 aimutil_itemcnt(char *toSearch, char dl)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
69 int curCount;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
70 char *next;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
71
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
72 curCount = 1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
73
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
74 next = strchr(toSearch, dl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
75
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
76 while(next != NULL) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
77 curCount++;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
78 next = strchr(next + 1, dl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
79 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
80
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
81 return curCount;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
84 char *
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
85 aimutil_itemindex(char *toSearch, int theindex, char dl)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
87 int curCount;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
88 char *next;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
89 char *last;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
90 char *toReturn;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
91
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
92 curCount = 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
93
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
94 last = toSearch;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
95 next = strchr(toSearch, dl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
96
6323
70c997ce574d [gaim-migrate @ 6822]
Zach Rusin
parents: 6322
diff changeset
97 while (curCount < theindex && next != NULL) {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
98 curCount++;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
99 last = next + 1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
100 next = strchr(last, dl);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101 }
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
102 next = strchr(last, dl);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
103
6323
70c997ce574d [gaim-migrate @ 6822]
Zach Rusin
parents: 6322
diff changeset
104 if (curCount < theindex) {
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
105 toReturn = g_malloc(sizeof(char));
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
106 *toReturn = '\0';
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
107 } else {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
108 if (next == NULL) {
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
109 toReturn = g_malloc((strlen(last) + 1) * sizeof(char));
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
110 strcpy(toReturn, last);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
111 } else {
17280
7c0472208173 Make all the oscar memory allocations and frees use the glib functions to avoid problems when mixing C runtimes.
Daniel Atallah <datallah@pidgin.im>
parents: 15884
diff changeset
112 toReturn = g_malloc((next - last + 1) * sizeof(char));
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
113 memcpy(toReturn, last, (next - last));
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
114 toReturn[next - last] = '\0';
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
115 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
116 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
117 return toReturn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
120 /**
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
121 * Calculate the checksum of a given icon.
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
122 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
123 guint16
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
124 aimutil_iconsum(const guint8 *buf, int buflen)
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
125 {
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 13169
diff changeset
126 guint32 sum;
4617
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
127 int i;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
128
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
129 for (i=0, sum=0; i+1<buflen; i+=2)
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
130 sum += (buf[i+1] << 8) + buf[i];
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
131 if (i < buflen)
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
132 sum += buf[i];
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
133 sum = ((sum & 0xffff0000) >> 16) + (sum & 0x0000ffff);
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
134
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
135 return sum;
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
136 }
35d860860593 [gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents: 4246
diff changeset
137
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
138 /**
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
139 * Check if the given screen name is a valid AIM screen name.
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
140 * Example: BobDole
9681
9df6d086ce97 [gaim-migrate @ 10533]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 8982
diff changeset
141 * Example: Henry_Ford@mac.com
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
142 * Example: 1KrazyKat@example.com
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
143 *
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
144 * @return TRUE if the screen name is valid, FALSE if not.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
145 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
146 static gboolean
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
147 aim_snvalid_aim(const char *sn)
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
148 {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
149 int i;
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
150
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
151 if (purple_email_is_valid(sn))
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
152 return TRUE;
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
153
18343
13d96f8a0d7f Make sure we still don't allow screen names of the form "1whatever"
Mark Doliner <markdoliner@pidgin.im>
parents: 18341
diff changeset
154 /* Normal AIM screen names can't start with a number */
13d96f8a0d7f Make sure we still don't allow screen names of the form "1whatever"
Mark Doliner <markdoliner@pidgin.im>
parents: 18341
diff changeset
155 if (isdigit(sn[0]))
13d96f8a0d7f Make sure we still don't allow screen names of the form "1whatever"
Mark Doliner <markdoliner@pidgin.im>
parents: 18341
diff changeset
156 return FALSE;
13d96f8a0d7f Make sure we still don't allow screen names of the form "1whatever"
Mark Doliner <markdoliner@pidgin.im>
parents: 18341
diff changeset
157
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
158 for (i = 0; sn[i] != '\0'; i++) {
9681
9df6d086ce97 [gaim-migrate @ 10533]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 8982
diff changeset
159 if (!isalnum(sn[i]) && (sn[i] != ' ') &&
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
160 (sn[i] != '.') &&
9681
9df6d086ce97 [gaim-migrate @ 10533]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents: 8982
diff changeset
161 (sn[i] != '_') && (sn[i] != '-'))
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
162 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
163 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
164
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
165 return TRUE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
166 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
167
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
168 /**
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
169 * Check if the given screen name is a valid ICQ screen name.
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
170 * Example: 1234567
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
171 *
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
172 * @return TRUE if the screen name is valid, FALSE if not.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
173 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
174 static gboolean
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
175 aim_snvalid_icq(const char *sn)
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
176 {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
177 int i;
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
178
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
179 for (i = 0; sn[i] != '\0'; i++) {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
180 if (!isdigit(sn[i]))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
181 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
182 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
183
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
184 return TRUE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
185 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
186
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
187 /**
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
188 * Check if the given screen name is a valid SMS screen name.
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
189 * Example: +19195551234
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
190 *
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
191 * @return TRUE if the screen name is valid, FALSE if not.
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
192 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
193 static gboolean
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
194 aim_snvalid_sms(const char *sn)
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
195 {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
196 int i;
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
197
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
198 if (sn[0] != '+')
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
199 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
200
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
201 for (i = 1; sn[i] != '\0'; i++) {
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
202 if (!isdigit(sn[i]))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
203 return FALSE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
204 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
205
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
206 return TRUE;
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
207 }
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
208
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
209 /**
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
210 * Check if the given screen name is a valid oscar screen name.
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
211 *
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
212 * @return TRUE if the screen name is valid, FALSE if not.
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
213 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
214 gboolean
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
215 aim_snvalid(const char *sn)
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
216 {
8972
9fbb6e964df8 [gaim-migrate @ 9746]
Mark Doliner <markdoliner@pidgin.im>
parents: 8885
diff changeset
217 if ((sn == NULL) || (*sn == '\0'))
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
218 return FALSE;
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
219
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
220 return aim_snvalid_icq(sn) || aim_snvalid_sms(sn) || aim_snvalid_aim(sn);
8092
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
221 }
ba92ce841814 [gaim-migrate @ 8791]
Mark Doliner <markdoliner@pidgin.im>
parents: 6323
diff changeset
222
9975
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
223 /**
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
224 * Determine if a given screen name is an ICQ screen name
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
225 * (i.e. it is composed of only numbers).
9975
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
226 *
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
227 * @param sn A valid AIM or ICQ screen name.
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
228 * @return TRUE if the screen name is an ICQ screen name. Otherwise
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
229 * FALSE is returned.
9975
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
230 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
231 gboolean
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
232 aim_sn_is_icq(const char *sn)
9975
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
233 {
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
234 return aim_snvalid_icq(sn);
9975
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
235 }
ea6d503b89cb [gaim-migrate @ 10886]
Mark Doliner <markdoliner@pidgin.im>
parents: 9681
diff changeset
236
13169
c09d2d5dba91 [gaim-migrate @ 15531]
Evan Schoenberg <evands@pidgin.im>
parents: 11253
diff changeset
237 /**
c09d2d5dba91 [gaim-migrate @ 15531]
Evan Schoenberg <evands@pidgin.im>
parents: 11253
diff changeset
238 * Determine if a given screen name is an SMS number
c09d2d5dba91 [gaim-migrate @ 15531]
Evan Schoenberg <evands@pidgin.im>
parents: 11253
diff changeset
239 * (i.e. it begins with a +).
c09d2d5dba91 [gaim-migrate @ 15531]
Evan Schoenberg <evands@pidgin.im>
parents: 11253
diff changeset
240 *
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
241 * @param sn A valid AIM or ICQ screen name.
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
242 * @return TRUE if the screen name is an SMS number. Otherwise
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
243 * FALSE is returned.
13169
c09d2d5dba91 [gaim-migrate @ 15531]
Evan Schoenberg <evands@pidgin.im>
parents: 11253
diff changeset
244 */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
245 gboolean
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
246 aim_sn_is_sms(const char *sn)
13169
c09d2d5dba91 [gaim-migrate @ 15531]
Evan Schoenberg <evands@pidgin.im>
parents: 11253
diff changeset
247 {
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
248 return (sn[0] == '+');
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
251 /**
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
252 * This takes two screen names and compares them using the rules
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
253 * on screen names for AIM/AOL. Mainly, this means case and space
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
254 * insensitivity (all case differences and spacing differences are
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
255 * ignored, with the exception that screen names can not start with
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
256 * a space).
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
257 *
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
258 * @return 0 if equal, non-0 if different
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
259 */
18341
8990ff4ec97c Allow AIM screen names of the form "1abc@example.com" In most places
Mark Doliner <markdoliner@pidgin.im>
parents: 17280
diff changeset
260 /* TODO: Do something different for email addresses. */
13607
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
261 int
3f75dc90654e [gaim-migrate @ 15992]
Mark Doliner <markdoliner@pidgin.im>
parents: 13593
diff changeset
262 aim_sncmp(const char *sn1, const char *sn2)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264
10116
054b064145a1 [gaim-migrate @ 11153]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9975
diff changeset
265 if ((sn1 == NULL) || (sn2 == NULL))
054b064145a1 [gaim-migrate @ 11153]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9975
diff changeset
266 return -1;
054b064145a1 [gaim-migrate @ 11153]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9975
diff changeset
267
5928
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
268 do {
5556
5d64702e975b [gaim-migrate @ 5957]
Mark Doliner <markdoliner@pidgin.im>
parents: 5414
diff changeset
269 while (*sn2 == ' ')
5724
43232f2d4694 [gaim-migrate @ 6146]
Mark Doliner <markdoliner@pidgin.im>
parents: 5628
diff changeset
270 sn2++;
5556
5d64702e975b [gaim-migrate @ 5957]
Mark Doliner <markdoliner@pidgin.im>
parents: 5414
diff changeset
271 while (*sn1 == ' ')
5724
43232f2d4694 [gaim-migrate @ 6146]
Mark Doliner <markdoliner@pidgin.im>
parents: 5628
diff changeset
272 sn1++;
5928
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
273 if (toupper(*sn1) != toupper(*sn2))
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
274 return 1;
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
275 } while ((*sn1 != '\0') && sn1++ && sn2++);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
276
5928
9d5ace6e5354 [gaim-migrate @ 6368]
Mark Doliner <markdoliner@pidgin.im>
parents: 5927
diff changeset
277 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278 }

mercurial