Mercurial > pidgin
annotate src/protocols/msn/msn.c @ 3012:08327a2f25aa
[gaim-migrate @ 3025]
Lots of people have a problem with people who were added to their MSN reverse list while they were offline, not being prompted to add them to their allow list. Jason Willis fixed that. Also added a global buddy icon animation preference by Luke Schierer.
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Wed, 06 Mar 2002 00:18:02 +0000 |
| parents | 87fff45fa36b |
| children | 47d0f8979fb1 |
| rev | line source |
|---|---|
| 2086 | 1 #include "config.h" |
| 2 | |
| 3 #include <stdlib.h> | |
| 4 #include <string.h> | |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
5 #include <errno.h> |
| 2086 | 6 #include <stdio.h> |
| 7 #include <unistd.h> | |
| 8 #include <ctype.h> | |
| 9 #include "gaim.h" | |
| 10 #include "prpl.h" | |
| 11 #include "proxy.h" | |
| 12 #include "md5.h" | |
| 13 | |
| 14 #include "pixmaps/msn_online.xpm" | |
| 15 #include "pixmaps/msn_away.xpm" | |
| 16 | |
| 17 #define MSN_BUF_LEN 8192 | |
| 18 #define MIME_HEADER "MIME-Version: 1.0\r\n" \ | |
| 19 "Content-Type: text/plain; charset=UTF-8\r\n" \ | |
|
2273
0b5c3338fa3d
[gaim-migrate @ 2283]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2265
diff
changeset
|
20 "User-Agent: Gaim/" VERSION "\r\n" \ |
| 2086 | 21 "X-MMS-IM-Format: FN=MS%20Sans%20Serif; EF=; CO=0; PF=0\r\n\r\n" |
| 22 | |
|
2541
8229710b343b
[gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
23 #define HOTMAIL_URL "http://www.hotmail.com/cgi-bin/folders" |
| 2932 | 24 #define PASSPORT_URL "http://lc1.law13.hotmail.passport.com/cgi-bin/dologin?login=" |
|
2541
8229710b343b
[gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
25 |
| 2086 | 26 #define MSN_ONLINE 1 |
| 27 #define MSN_BUSY 2 | |
| 28 #define MSN_IDLE 3 | |
| 29 #define MSN_BRB 4 | |
| 30 #define MSN_AWAY 5 | |
| 31 #define MSN_PHONE 6 | |
| 32 #define MSN_LUNCH 7 | |
| 33 #define MSN_OFFLINE 8 | |
| 34 #define MSN_HIDDEN 9 | |
| 35 | |
| 36 #define USEROPT_HOTMAIL 0 | |
| 37 | |
| 2993 | 38 #define MSN_TYPING_RECV_TIMEOUT 6 |
| 39 #define MSN_TYPING_SEND_TIMEOUT 4 | |
| 40 | |
| 2086 | 41 struct msn_data { |
| 42 int fd; | |
| 43 int trId; | |
| 44 int inpa; | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
45 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
46 char *rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
47 int rxlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
48 gboolean msg; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
49 char *msguser; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
50 int msglen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
51 |
| 2086 | 52 GSList *switches; |
| 53 GSList *fl; | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
54 GSList *permit; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
55 GSList *deny; |
| 2086 | 56 }; |
| 57 | |
| 58 struct msn_switchboard { | |
| 59 struct gaim_connection *gc; | |
| 60 struct conversation *chat; | |
| 61 int fd; | |
| 62 int inpa; | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
63 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
64 char *rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
65 int rxlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
66 gboolean msg; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
67 char *msguser; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
68 int msglen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
69 |
| 2086 | 70 char *sessid; |
| 71 char *auth; | |
| 72 int trId; | |
| 73 int total; | |
| 74 char *user; | |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
75 GSList *txqueue; |
| 2086 | 76 }; |
| 77 | |
| 78 struct msn_buddy { | |
| 79 char *user; | |
| 80 char *friend; | |
| 81 }; | |
| 82 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
83 static void msn_login_callback(gpointer, gint, GaimInputCondition); |
|
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
84 static void msn_login_xfr_connect(gpointer, gint, GaimInputCondition); |
| 2086 | 85 |
| 86 #define GET_NEXT(tmp) while (*(tmp) && !isspace(*(tmp))) \ | |
| 87 (tmp)++; \ | |
| 88 *(tmp)++ = 0; \ | |
| 89 while (*(tmp) && isspace(*(tmp))) \ | |
| 90 (tmp)++; | |
| 91 | |
| 92 static char *msn_name() | |
| 93 { | |
| 94 return "MSN"; | |
| 95 } | |
| 96 | |
| 97 static char *msn_normalize(const char *s) | |
| 98 { | |
| 99 static char buf[BUF_LEN]; | |
| 100 | |
| 101 g_return_val_if_fail(s != NULL, NULL); | |
| 102 | |
| 103 g_snprintf(buf, sizeof(buf), "%s%s", s, strchr(s, '@') ? "" : "@hotmail.com"); | |
| 104 | |
| 105 return buf; | |
| 106 } | |
| 107 | |
| 108 static int msn_write(int fd, void *data, int len) | |
| 109 { | |
|
2311
019832e79d9f
[gaim-migrate @ 2321]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2303
diff
changeset
|
110 debug_printf("MSN C: %s", data); |
| 2086 | 111 return write(fd, data, len); |
| 112 } | |
| 113 | |
| 114 static char *url_decode(const char *msg) | |
| 115 { | |
| 116 static char buf[MSN_BUF_LEN]; | |
| 117 int i, j = 0; | |
| 118 | |
| 119 bzero(buf, sizeof(buf)); | |
| 120 for (i = 0; i < strlen(msg); i++) { | |
| 121 char hex[3]; | |
| 122 if (msg[i] != '%') { | |
| 123 buf[j++] = msg[i]; | |
| 124 continue; | |
| 125 } | |
|
2093
83d8a9b7e89b
[gaim-migrate @ 2103]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
126 strncpy(hex, msg + ++i, 2); hex[2] = 0; |
|
83d8a9b7e89b
[gaim-migrate @ 2103]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
127 /* i is pointing to the start of the number */ |
|
83d8a9b7e89b
[gaim-migrate @ 2103]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
128 i++; /* now it's at the end and at the start of the for loop |
|
83d8a9b7e89b
[gaim-migrate @ 2103]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
129 will be at the next character */ |
|
83d8a9b7e89b
[gaim-migrate @ 2103]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2090
diff
changeset
|
130 buf[j++] = strtol(hex, NULL, 16); |
| 2086 | 131 } |
| 132 buf[j] = 0; | |
| 133 | |
| 134 return buf; | |
| 135 } | |
| 136 | |
|
2219
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
137 static char *url_encode(const char *msg) |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
138 { |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
139 static char buf[MSN_BUF_LEN]; |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
140 int i, j = 0; |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
141 |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
142 bzero(buf, sizeof(buf)); |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
143 for (i = 0; i < strlen(msg); i++) { |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
144 if (isalnum(msg[i])) |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
145 buf[j++] = msg[i]; |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
146 else { |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
147 sprintf(buf + j, "%%%02x", (unsigned char)msg[i]); |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
148 j += 3; |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
149 } |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
150 } |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
151 buf[j] = 0; |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
152 |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
153 return buf; |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
154 } |
|
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
155 |
| 2086 | 156 static char *handle_errcode(char *buf, gboolean show) |
| 157 { | |
| 158 int errcode; | |
| 159 static char msg[MSN_BUF_LEN]; | |
| 160 | |
| 161 buf[4] = 0; | |
| 162 errcode = atoi(buf); | |
| 163 | |
| 164 switch (errcode) { | |
| 165 case 200: | |
| 166 g_snprintf(msg, sizeof(msg), "Syntax Error (probably a Gaim bug)"); | |
| 167 break; | |
| 168 case 201: | |
| 169 g_snprintf(msg, sizeof(msg), "Invalid Parameter (probably a Gaim bug)"); | |
| 170 break; | |
| 171 case 205: | |
| 172 g_snprintf(msg, sizeof(msg), "Invalid User"); | |
| 173 break; | |
| 174 case 206: | |
| 175 g_snprintf(msg, sizeof(msg), "Fully Qualified Domain Name missing"); | |
| 176 break; | |
| 177 case 207: | |
| 178 g_snprintf(msg, sizeof(msg), "Already Login"); | |
| 179 break; | |
| 180 case 208: | |
| 181 g_snprintf(msg, sizeof(msg), "Invalid Username"); | |
| 182 break; | |
| 183 case 209: | |
| 184 g_snprintf(msg, sizeof(msg), "Invalid Friendly Name"); | |
| 185 break; | |
| 186 case 210: | |
| 187 g_snprintf(msg, sizeof(msg), "List Full"); | |
| 188 break; | |
| 189 case 215: | |
| 190 g_snprintf(msg, sizeof(msg), "Already there"); | |
| 191 break; | |
| 192 case 216: | |
| 193 g_snprintf(msg, sizeof(msg), "Not on list"); | |
| 194 break; | |
|
2842
cf0f0153e2da
[gaim-migrate @ 2855]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
195 case 217: |
|
cf0f0153e2da
[gaim-migrate @ 2855]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
196 g_snprintf(msg, sizeof(msg), "User is offline"); |
|
cf0f0153e2da
[gaim-migrate @ 2855]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2820
diff
changeset
|
197 break; |
| 2086 | 198 case 218: |
| 199 g_snprintf(msg, sizeof(msg), "Already in the mode"); | |
| 200 break; | |
| 201 case 219: | |
| 202 g_snprintf(msg, sizeof(msg), "Already in opposite list"); | |
| 203 break; | |
| 204 case 280: | |
| 205 g_snprintf(msg, sizeof(msg), "Switchboard failed"); | |
| 206 break; | |
| 207 case 281: | |
| 208 g_snprintf(msg, sizeof(msg), "Notify Transfer failed"); | |
| 209 break; | |
| 210 | |
| 211 case 300: | |
| 212 g_snprintf(msg, sizeof(msg), "Required fields missing"); | |
| 213 break; | |
| 214 case 302: | |
| 215 g_snprintf(msg, sizeof(msg), "Not logged in"); | |
| 216 break; | |
| 217 | |
| 218 case 500: | |
| 219 g_snprintf(msg, sizeof(msg), "Internal server error"); | |
| 220 break; | |
| 221 case 501: | |
| 222 g_snprintf(msg, sizeof(msg), "Database server error"); | |
| 223 break; | |
| 224 case 510: | |
| 225 g_snprintf(msg, sizeof(msg), "File operation error"); | |
| 226 break; | |
| 227 case 520: | |
| 228 g_snprintf(msg, sizeof(msg), "Memory allocation error"); | |
| 229 break; | |
| 230 | |
| 231 case 600: | |
| 232 g_snprintf(msg, sizeof(msg), "Server busy"); | |
| 233 break; | |
| 234 case 601: | |
| 235 g_snprintf(msg, sizeof(msg), "Server unavailable"); | |
| 236 break; | |
| 237 case 602: | |
| 238 g_snprintf(msg, sizeof(msg), "Peer Notification server down"); | |
| 239 break; | |
| 240 case 603: | |
| 241 g_snprintf(msg, sizeof(msg), "Database connect error"); | |
| 242 break; | |
| 243 case 604: | |
| 244 g_snprintf(msg, sizeof(msg), "Server is going down (abandon ship)"); | |
| 245 break; | |
| 246 | |
| 247 case 707: | |
| 248 g_snprintf(msg, sizeof(msg), "Error creating connection"); | |
| 249 break; | |
| 250 case 711: | |
| 251 g_snprintf(msg, sizeof(msg), "Unable to write"); | |
| 252 break; | |
| 253 case 712: | |
| 254 g_snprintf(msg, sizeof(msg), "Session overload"); | |
| 255 break; | |
| 256 case 713: | |
| 257 g_snprintf(msg, sizeof(msg), "User is too active"); | |
| 258 break; | |
| 259 case 714: | |
| 260 g_snprintf(msg, sizeof(msg), "Too many sessions"); | |
| 261 break; | |
| 262 case 715: | |
| 263 g_snprintf(msg, sizeof(msg), "Not expected"); | |
| 264 break; | |
| 265 case 717: | |
| 266 g_snprintf(msg, sizeof(msg), "Bad friend file"); | |
| 267 break; | |
| 268 | |
| 269 case 911: | |
| 270 g_snprintf(msg, sizeof(msg), "Authentication failed"); | |
| 271 break; | |
| 272 case 913: | |
| 273 g_snprintf(msg, sizeof(msg), "Not allowed when offline"); | |
| 274 break; | |
| 275 case 920: | |
| 276 g_snprintf(msg, sizeof(msg), "Not accepting new users"); | |
| 277 break; | |
| 278 | |
| 279 default: | |
| 280 g_snprintf(msg, sizeof(msg), "Unknown Error Code"); | |
| 281 break; | |
| 282 } | |
| 283 | |
| 284 if (show) | |
| 285 do_error_dialog(msg, "MSN Error"); | |
| 286 | |
| 287 return msg; | |
| 288 } | |
| 289 | |
| 290 static void handle_hotmail(struct gaim_connection *gc, char *data) | |
| 291 { | |
| 2932 | 292 char login_url[2048]; |
| 293 | |
| 294 snprintf(login_url, sizeof(login_url), "%s%s&passwd=%s", PASSPORT_URL, gc->username, gc->password); | |
| 295 | |
|
2153
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
296 if (strstr(data, "Content-Type: text/x-msmsgsinitialemailnotification;")) { |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
297 char *x = strstr(data, "Inbox-Unread:"); |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
298 if (!x) return; |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
299 x += strlen("Inbox-Unread: "); |
| 2932 | 300 connection_has_mail(gc, atoi(x), NULL, NULL, login_url); |
|
2153
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
301 } else if (strstr(data, "Content-Type: text/x-msmsgsemailnotification;")) { |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
302 char *from = strstr(data, "From:"); |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
303 char *subject = strstr(data, "Subject:"); |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
304 char *x; |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
305 if (!from || !subject) { |
| 2932 | 306 connection_has_mail(gc, 1, NULL, NULL, login_url); |
|
2153
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
307 return; |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
308 } |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
309 from += strlen("From: "); |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
310 x = strstr(from, "\r\n"); *x = 0; |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
311 subject += strlen("Subject: "); |
|
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
312 x = strstr(subject, "\r\n"); *x = 0; |
| 2932 | 313 connection_has_mail(gc, -1, from, subject, login_url); |
| 2086 | 314 } |
| 315 } | |
| 316 | |
| 317 static struct msn_switchboard *msn_find_switch(struct gaim_connection *gc, char *id) | |
| 318 { | |
| 319 struct msn_data *md = gc->proto_data; | |
| 320 GSList *m = md->switches; | |
| 321 | |
| 322 while (m) { | |
| 323 struct msn_switchboard *ms = m->data; | |
| 324 m = m->next; | |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
325 if ((ms->total <= 1) && !g_strcasecmp(ms->user, id)) |
| 2086 | 326 return ms; |
| 327 } | |
| 328 | |
| 329 return NULL; | |
| 330 } | |
| 331 | |
| 332 static struct msn_switchboard *msn_find_switch_by_id(struct gaim_connection *gc, int id) | |
| 333 { | |
| 334 struct msn_data *md = gc->proto_data; | |
| 335 GSList *m = md->switches; | |
| 336 | |
| 337 while (m) { | |
| 338 struct msn_switchboard *ms = m->data; | |
| 339 m = m->next; | |
| 340 if (ms->chat && (ms->chat->id == id)) | |
| 341 return ms; | |
| 342 } | |
| 343 | |
| 344 return NULL; | |
| 345 } | |
| 346 | |
| 347 static struct msn_switchboard *msn_find_writable_switch(struct gaim_connection *gc) | |
| 348 { | |
| 349 struct msn_data *md = gc->proto_data; | |
| 350 GSList *m = md->switches; | |
| 351 | |
| 352 while (m) { | |
| 353 struct msn_switchboard *ms = m->data; | |
| 354 m = m->next; | |
| 355 if (ms->txqueue) | |
| 356 return ms; | |
| 357 } | |
| 358 | |
| 359 return NULL; | |
| 360 } | |
| 361 | |
| 362 static void msn_kill_switch(struct msn_switchboard *ms) | |
| 363 { | |
| 364 struct gaim_connection *gc = ms->gc; | |
| 365 struct msn_data *md = gc->proto_data; | |
| 366 | |
| 367 if (ms->inpa) | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
368 gaim_input_remove(ms->inpa); |
| 2086 | 369 close(ms->fd); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
370 g_free(ms->rxqueue); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
371 if (ms->msg) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
372 g_free(ms->msguser); |
| 2086 | 373 if (ms->sessid) |
| 374 g_free(ms->sessid); | |
| 375 g_free(ms->auth); | |
| 376 if (ms->user) | |
| 377 g_free(ms->user); | |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
378 while (ms->txqueue) { |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
379 g_free(ms->txqueue->data); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
380 ms->txqueue = g_slist_remove(ms->txqueue, ms->txqueue->data); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
381 } |
| 2086 | 382 if (ms->chat) |
| 383 serv_got_chat_left(gc, ms->chat->id); | |
| 384 | |
| 385 md->switches = g_slist_remove(md->switches, ms); | |
| 386 | |
| 387 g_free(ms); | |
| 388 } | |
| 389 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
390 static int msn_process_switch(struct msn_switchboard *ms, char *buf) |
| 2086 | 391 { |
| 392 struct gaim_connection *gc = ms->gc; | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
393 char sendbuf[MSN_BUF_LEN]; |
| 2086 | 394 static int id = 0; |
| 395 | |
| 396 if (!g_strncasecmp(buf, "ACK", 3)) { | |
| 397 } else if (!g_strncasecmp(buf, "ANS", 3)) { | |
| 398 if (ms->chat) | |
| 399 add_chat_buddy(ms->chat, gc->username); | |
| 400 } else if (!g_strncasecmp(buf, "BYE", 3)) { | |
| 401 if (ms->chat) { | |
| 402 char *user, *tmp = buf; | |
| 403 GET_NEXT(tmp); | |
| 404 user = tmp; | |
|
2820
b917845dad3c
[gaim-migrate @ 2833]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2773
diff
changeset
|
405 remove_chat_buddy(ms->chat, user, NULL); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
406 } else { |
| 2086 | 407 msn_kill_switch(ms); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
408 return 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
409 } |
| 2086 | 410 } else if (!g_strncasecmp(buf, "CAL", 3)) { |
| 411 } else if (!g_strncasecmp(buf, "IRO", 3)) { | |
| 412 char *tot, *user, *tmp = buf; | |
| 413 | |
| 414 GET_NEXT(tmp); | |
| 415 GET_NEXT(tmp); | |
| 416 GET_NEXT(tmp); | |
| 417 tot = tmp; | |
| 418 GET_NEXT(tmp); | |
| 419 ms->total = atoi(tot); | |
| 420 user = tmp; | |
| 421 GET_NEXT(tmp); | |
| 422 | |
| 423 if (ms->total > 1) { | |
| 424 if (!ms->chat) | |
| 425 ms->chat = serv_got_joined_chat(gc, ++id, "MSN Chat"); | |
| 426 add_chat_buddy(ms->chat, user); | |
| 427 } | |
| 428 } else if (!g_strncasecmp(buf, "JOI", 3)) { | |
| 429 char *user, *tmp = buf; | |
| 430 GET_NEXT(tmp); | |
| 431 user = tmp; | |
| 432 GET_NEXT(tmp); | |
| 433 | |
| 434 if (ms->total == 1) { | |
| 435 ms->chat = serv_got_joined_chat(gc, ++id, "MSN Chat"); | |
| 436 add_chat_buddy(ms->chat, ms->user); | |
| 437 add_chat_buddy(ms->chat, gc->username); | |
| 438 g_free(ms->user); | |
| 439 ms->user = NULL; | |
| 440 } | |
| 441 if (ms->chat) | |
| 442 add_chat_buddy(ms->chat, user); | |
| 443 ms->total++; | |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
444 while (ms->txqueue) { |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
445 char *send = add_cr(ms->txqueue->data); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
446 char *utf8 = str_to_utf8(send); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
447 g_free(send); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
448 g_snprintf(sendbuf, sizeof(sendbuf), "MSG %d N %d\r\n%s%s", ++ms->trId, |
| 2086 | 449 strlen(MIME_HEADER) + strlen(utf8), |
| 450 MIME_HEADER, utf8); | |
| 451 g_free(utf8); | |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
452 g_free(ms->txqueue->data); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
453 ms->txqueue = g_slist_remove(ms->txqueue, ms->txqueue->data); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
454 if (msn_write(ms->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 455 msn_kill_switch(ms); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
456 return 0; |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
457 } |
| 2086 | 458 debug_printf("\n"); |
| 459 } | |
| 460 } else if (!g_strncasecmp(buf, "MSG", 3)) { | |
| 461 char *user, *tmp = buf; | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
462 int length; |
| 2086 | 463 |
| 464 GET_NEXT(tmp); | |
| 465 user = tmp; | |
| 466 | |
| 467 GET_NEXT(tmp); | |
| 468 | |
| 469 GET_NEXT(tmp); | |
| 470 length = atoi(tmp); | |
| 471 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
472 ms->msg = TRUE; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
473 ms->msguser = g_strdup(user); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
474 ms->msglen = length; |
| 2086 | 475 } else if (!g_strncasecmp(buf, "NAK", 3)) { |
| 476 do_error_dialog("A message may not have been received.", "MSN Error"); | |
| 477 } else if (!g_strncasecmp(buf, "NLN", 3)) { | |
| 478 } else if (!g_strncasecmp(buf, "OUT", 3)) { | |
| 479 if (ms->chat) | |
| 480 serv_got_chat_left(gc, ms->chat->id); | |
| 481 msn_kill_switch(ms); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
482 return 0; |
| 2086 | 483 } else if (!g_strncasecmp(buf, "USR", 3)) { |
| 484 /* good, we got USR, now we need to find out who we want to talk to */ | |
| 485 struct msn_switchboard *ms = msn_find_writable_switch(gc); | |
| 486 | |
| 487 if (!ms) | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
488 return 0; |
| 2086 | 489 |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
490 g_snprintf(sendbuf, sizeof(sendbuf), "CAL %d %s\r\n", ++ms->trId, ms->user); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
491 if (msn_write(ms->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 492 msn_kill_switch(ms); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
493 return 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
494 } |
| 2086 | 495 } else if (isdigit(*buf)) { |
| 496 handle_errcode(buf, TRUE); | |
| 497 } else { | |
| 498 debug_printf("Unhandled message!\n"); | |
| 499 } | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
500 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
501 return 1; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
502 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
503 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
504 static void msn_process_switch_msg(struct msn_switchboard *ms, char *msg) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
505 { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
506 char *content, *agent, *utf; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
507 int flags = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
508 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
509 agent = strstr(msg, "User-Agent: "); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
510 if (agent) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
511 if (!g_strncasecmp(agent, "User-Agent: Gaim", strlen("User-Agent: Gaim"))) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
512 flags |= IM_FLAG_GAIMUSER; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
513 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
514 content = strstr(msg, "Content-Type: "); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
515 if (!content) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
516 return; |
| 2993 | 517 if (!g_strncasecmp(content, "Content-Type: text/x-msmsgscontrol\r\n", |
| 518 strlen( "Content-Type: text/x-msmsgscontrol\r\n"))) { | |
| 519 if (strstr(content,"TypingUser: ")) { | |
| 520 serv_got_typing(ms->gc, ms->msguser, MSN_TYPING_RECV_TIMEOUT); | |
| 521 return; | |
| 522 } | |
| 523 } else if (!g_strncasecmp(content, "Content-Type: text/plain", | |
| 524 strlen("Content-Type: text/plain"))) { | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
525 char *skiphead; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
526 skiphead = strstr(msg, "\r\n\r\n"); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
527 if (!skiphead || !skiphead[4]) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
528 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
529 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
530 skiphead += 4; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
531 utf = utf8_to_str(skiphead); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
532 strip_linefeed(utf); |
| 2993 | 533 |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
534 if (ms->chat) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
535 serv_got_chat_in(ms->gc, ms->chat->id, ms->msguser, flags, utf, time(NULL)); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
536 else |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2842
diff
changeset
|
537 serv_got_im(ms->gc, ms->msguser, utf, flags, time(NULL), -1); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
538 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
539 g_free(utf); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
540 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
541 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
542 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
543 static void msn_switchboard_callback(gpointer data, gint source, GaimInputCondition cond) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
544 { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
545 struct msn_switchboard *ms = data; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
546 char buf[MSN_BUF_LEN]; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
547 int cont = 1; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
548 int len; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
549 |
| 2970 | 550 /* This is really stupid and I hate to put this here. */ |
| 551 if (ms->fd != source) | |
| 552 ms->fd = source; | |
| 553 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
554 len = read(ms->fd, buf, sizeof(buf)); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
555 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
556 if (len <= 0) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
557 msn_kill_switch(ms); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
558 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
559 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
560 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
561 ms->rxqueue = g_realloc(ms->rxqueue, len + ms->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
562 memcpy(ms->rxqueue + ms->rxlen, buf, len); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
563 ms->rxlen += len; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
564 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
565 while (cont) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
566 if (!ms->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
567 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
568 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
569 if (ms->msg) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
570 char *msg; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
571 if (ms->msglen > ms->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
572 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
573 msg = ms->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
574 ms->rxlen -= ms->msglen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
575 if (ms->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
576 ms->rxqueue = g_memdup(msg + ms->msglen, ms->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
577 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
578 ms->rxqueue = NULL; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
579 msg = g_realloc(msg, ms->msglen + 1); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
580 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
581 msg[ms->msglen] = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
582 ms->msglen = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
583 ms->msg = FALSE; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
584 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
585 msn_process_switch_msg(ms, msg); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
586 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
587 g_free(ms->msguser); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
588 g_free(msg); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
589 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
590 char *end = ms->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
591 int cmdlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
592 char *cmd; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
593 int i = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
594 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
595 while (i + 1 < ms->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
596 if (*end == '\r' && end[1] == '\n') |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
597 break; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
598 end++; i++; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
599 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
600 if (i + 1 == ms->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
601 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
602 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
603 cmdlen = end - ms->rxqueue + 2; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
604 cmd = ms->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
605 ms->rxlen -= cmdlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
606 if (ms->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
607 ms->rxqueue = g_memdup(cmd + cmdlen, ms->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
608 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
609 ms->rxqueue = NULL; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
610 cmd = g_realloc(cmd, cmdlen + 1); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
611 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
612 cmd[cmdlen] = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
613 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
614 debug_printf("MSN S: %s", cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
615 g_strchomp(cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
616 cont = msn_process_switch(ms, cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
617 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
618 g_free(cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
619 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
620 } |
| 2086 | 621 } |
| 622 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
623 static void msn_rng_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 624 { |
| 625 struct msn_switchboard *ms = data; | |
| 626 struct gaim_connection *gc = ms->gc; | |
| 627 struct msn_data *md; | |
| 628 char buf[MSN_BUF_LEN]; | |
| 629 | |
| 630 if (source == -1 || !g_slist_find(connections, gc)) { | |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
631 close(source); |
| 2086 | 632 g_free(ms->sessid); |
| 633 g_free(ms->auth); | |
| 634 g_free(ms); | |
| 635 return; | |
| 636 } | |
| 637 | |
| 638 md = gc->proto_data; | |
| 639 | |
| 640 if (ms->fd != source) | |
| 641 ms->fd = source; | |
| 642 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
643 g_snprintf(buf, sizeof(buf), "ANS %d %s %s %s\r\n", ++ms->trId, gc->username, ms->auth, ms->sessid); |
| 2086 | 644 if (msn_write(ms->fd, buf, strlen(buf)) < 0) { |
| 645 close(ms->fd); | |
| 646 g_free(ms->sessid); | |
| 647 g_free(ms->auth); | |
| 648 g_free(ms); | |
| 649 return; | |
| 650 } | |
| 651 | |
| 652 md->switches = g_slist_append(md->switches, ms); | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
653 ms->inpa = gaim_input_add(ms->fd, GAIM_INPUT_READ, msn_switchboard_callback, ms); |
| 2086 | 654 } |
| 655 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
656 static void msn_ss_xfr_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 657 { |
| 658 struct msn_switchboard *ms = data; | |
| 659 struct gaim_connection *gc = ms->gc; | |
| 660 char buf[MSN_BUF_LEN]; | |
| 661 | |
| 662 if (source == -1 || !g_slist_find(connections, gc)) { | |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
663 close(source); |
|
2265
2f03cfd21fc2
[gaim-migrate @ 2275]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2231
diff
changeset
|
664 if (g_slist_find(connections, gc)) { |
|
2f03cfd21fc2
[gaim-migrate @ 2275]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2231
diff
changeset
|
665 msn_kill_switch(ms); |
|
2f03cfd21fc2
[gaim-migrate @ 2275]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2231
diff
changeset
|
666 do_error_dialog(_("MSN Error"), _("Gaim was unable to send a message")); |
|
2f03cfd21fc2
[gaim-migrate @ 2275]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2231
diff
changeset
|
667 } |
| 2086 | 668 return; |
| 669 } | |
| 670 | |
| 671 if (ms->fd != source) | |
| 672 ms->fd = source; | |
| 673 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
674 g_snprintf(buf, sizeof(buf), "USR %d %s %s\r\n", ++ms->trId, gc->username, ms->auth); |
| 2086 | 675 if (msn_write(ms->fd, buf, strlen(buf)) < 0) { |
| 676 g_free(ms->auth); | |
| 677 g_free(ms); | |
| 678 return; | |
| 679 } | |
| 680 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
681 ms->inpa = gaim_input_add(ms->fd, GAIM_INPUT_READ, msn_switchboard_callback, ms); |
| 2086 | 682 } |
| 683 | |
| 684 struct msn_add_permit { | |
| 685 struct gaim_connection *gc; | |
| 686 char *user; | |
| 687 char *friend; | |
| 688 }; | |
| 689 | |
| 690 static void msn_accept_add(gpointer w, struct msn_add_permit *map) | |
| 691 { | |
| 692 struct msn_data *md = map->gc->proto_data; | |
| 693 char buf[MSN_BUF_LEN]; | |
| 694 | |
|
2773
a0fd8f91e294
[gaim-migrate @ 2786]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2758
diff
changeset
|
695 g_snprintf(buf, sizeof(buf), "ADD %d AL %s %s\r\n", ++md->trId, map->user, url_encode(map->friend)); |
| 2086 | 696 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 697 hide_login_progress(map->gc, "Write error"); | |
| 698 signoff(map->gc); | |
| 699 return; | |
| 700 } | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
701 build_allow_list(); /* er. right. we'll need to have a thing for this in CUI too */ |
|
2582
5efa8077107f
[gaim-migrate @ 2595]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2541
diff
changeset
|
702 show_got_added(map->gc, NULL, map->user, map->friend, NULL); |
| 2086 | 703 } |
| 704 | |
| 705 static void msn_cancel_add(gpointer w, struct msn_add_permit *map) | |
| 706 { | |
| 707 g_free(map->user); | |
| 708 g_free(map->friend); | |
| 709 g_free(map); | |
| 710 } | |
| 711 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
712 static int msn_process_main(struct gaim_connection *gc, char *buf) |
| 2086 | 713 { |
| 714 struct msn_data *md = gc->proto_data; | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
715 char sendbuf[MSN_BUF_LEN]; |
| 2086 | 716 |
| 717 if (!g_strncasecmp(buf, "ADD", 3)) { | |
| 718 char *list, *user, *friend, *tmp = buf; | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
719 struct msn_add_permit *ap; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
720 GSList *perm = gc->permit; |
| 2086 | 721 char msg[MSN_BUF_LEN]; |
| 722 | |
| 723 GET_NEXT(tmp); | |
| 724 GET_NEXT(tmp); | |
| 725 list = tmp; | |
| 726 | |
| 727 GET_NEXT(tmp); | |
| 728 GET_NEXT(tmp); | |
| 729 user = tmp; | |
| 730 | |
| 731 GET_NEXT(tmp); | |
| 732 friend = tmp; | |
| 733 | |
| 734 if (g_strcasecmp(list, "RL")) | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
735 return 1; |
| 2086 | 736 |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
737 while (perm) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
738 if (!g_strcasecmp(perm->data, user)) |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
739 return 1; |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
740 perm = perm->next; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
741 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
742 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
743 ap = g_new0(struct msn_add_permit, 1); |
| 2086 | 744 ap->user = g_strdup(user); |
|
2611
d324478ee203
[gaim-migrate @ 2624]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2607
diff
changeset
|
745 ap->friend = g_strdup(url_decode(friend)); |
| 2086 | 746 ap->gc = gc; |
| 747 | |
| 748 g_snprintf(msg, sizeof(msg), "The user %s (%s) wants to add you to their buddy list.", | |
| 749 ap->user, url_decode(ap->friend)); | |
| 750 | |
| 751 do_ask_dialog(msg, ap, msn_accept_add, msn_cancel_add); | |
| 752 } else if (!g_strncasecmp(buf, "BLP", 3)) { | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
753 char *type, *tmp = buf; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
754 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
755 GET_NEXT(tmp); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
756 GET_NEXT(tmp); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
757 GET_NEXT(tmp); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
758 type = tmp; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
759 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
760 if (!g_strcasecmp(type, "AL")) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
761 /* If the current setting is AL, messages |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
762 * from users who are not in BL will be delivered |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
763 * |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
764 * In other words, deny some */ |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
765 gc->permdeny = DENY_SOME; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
766 } else { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
767 /* If the current |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
768 * setting is BL, only messages from people who are in the AL will be |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
769 * delivered. |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
770 * |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
771 * In other words, permit some */ |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
772 gc->permdeny = PERMIT_SOME; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
773 } |
| 2086 | 774 } else if (!g_strncasecmp(buf, "BPR", 3)) { |
| 775 } else if (!g_strncasecmp(buf, "CHG", 3)) { | |
| 776 } else if (!g_strncasecmp(buf, "CHL", 3)) { | |
| 777 char *hash = buf; | |
| 778 char buf2[MSN_BUF_LEN]; | |
| 779 md5_state_t st; | |
| 780 md5_byte_t di[16]; | |
| 781 int i; | |
| 782 | |
| 783 GET_NEXT(hash); | |
| 784 GET_NEXT(hash); | |
| 785 | |
| 786 md5_init(&st); | |
| 787 md5_append(&st, (const md5_byte_t *)hash, strlen(hash)); | |
| 788 md5_append(&st, (const md5_byte_t *)"Q1P7W2E4J9R8U3S5", strlen("Q1P7W2E4J9R8U3S5")); | |
| 789 md5_finish(&st, di); | |
| 790 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
791 g_snprintf(sendbuf, sizeof(sendbuf), "QRY %d msmsgs@msnmsgr.com 32\r\n", ++md->trId); |
| 2086 | 792 for (i = 0; i < 16; i++) { |
| 793 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
794 strcat(sendbuf, buf2); |
| 2086 | 795 } |
| 796 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
797 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 798 hide_login_progress(gc, "Unable to write to server"); |
| 799 signoff(gc); | |
| 800 } | |
| 801 | |
| 802 debug_printf("\n"); | |
| 803 } else if (!g_strncasecmp(buf, "FLN", 3)) { | |
| 804 char *usr = buf; | |
| 805 | |
| 806 GET_NEXT(usr); | |
| 807 serv_got_update(gc, usr, 0, 0, 0, 0, 0, 0); | |
| 808 } else if (!g_strncasecmp(buf, "GTC", 3)) { | |
| 809 } else if (!g_strncasecmp(buf, "INF", 3)) { | |
| 810 } else if (!g_strncasecmp(buf, "ILN", 3)) { | |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
811 char *state, *user, *friend, *tmp = buf; |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
812 struct buddy *b; |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
813 int status = 0; |
| 2086 | 814 |
| 815 GET_NEXT(tmp); | |
| 816 | |
| 817 GET_NEXT(tmp); | |
| 818 state = tmp; | |
| 819 | |
| 820 GET_NEXT(tmp); | |
| 821 user = tmp; | |
| 822 | |
| 823 GET_NEXT(tmp); | |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
824 friend = url_decode(tmp); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
825 |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
826 if ((b = find_buddy(gc, user)) != NULL) { |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
827 if (b->proto_data) |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
828 g_free(b->proto_data); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
829 b->proto_data = g_strdup(friend); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
830 } |
| 2086 | 831 |
| 832 if (!g_strcasecmp(state, "BSY")) { | |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
833 status |= UC_UNAVAILABLE | (MSN_BUSY << 1); |
| 2086 | 834 } else if (!g_strcasecmp(state, "IDL")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
835 status |= UC_UNAVAILABLE | (MSN_IDLE << 1); |
| 2086 | 836 } else if (!g_strcasecmp(state, "BRB")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
837 status |= UC_UNAVAILABLE | (MSN_BRB << 1); |
| 2086 | 838 } else if (!g_strcasecmp(state, "AWY")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
839 status |= UC_UNAVAILABLE | (MSN_AWAY << 1); |
| 2086 | 840 } else if (!g_strcasecmp(state, "PHN")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
841 status |= UC_UNAVAILABLE | (MSN_PHONE << 1); |
| 2086 | 842 } else if (!g_strcasecmp(state, "LUN")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
843 status |= UC_UNAVAILABLE | (MSN_LUNCH << 1); |
| 2086 | 844 } |
| 845 | |
| 846 serv_got_update(gc, user, 1, 0, 0, 0, status, 0); | |
| 847 } else if (!g_strncasecmp(buf, "LST", 3)) { | |
| 848 char *which, *who, *friend, *tmp = buf; | |
| 3012 | 849 struct msn_add_permit *ap; /* for any as yet undealt with buddies who've added you to their buddy list when you were off-line. How dare they! */ |
| 850 GSList *perm = gc->permit; /* current permit list */ | |
| 851 char msg[MSN_BUF_LEN]; | |
| 852 int new = 1; | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
853 int pos, tot; |
| 2086 | 854 |
| 855 GET_NEXT(tmp); | |
| 856 GET_NEXT(tmp); | |
| 857 which = tmp; | |
| 858 | |
| 859 GET_NEXT(tmp); | |
| 860 GET_NEXT(tmp); | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
861 pos = strtol(tmp, NULL, 10); |
| 2086 | 862 GET_NEXT(tmp); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
863 tot = strtol(tmp, NULL, 10); |
| 2086 | 864 GET_NEXT(tmp); |
| 865 who = tmp; | |
| 866 | |
| 867 GET_NEXT(tmp); | |
| 868 friend = url_decode(tmp); | |
| 869 | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
870 if (!g_strcasecmp(which, "FL") && pos) { |
| 2086 | 871 struct msn_buddy *b = g_new0(struct msn_buddy, 1); |
| 872 b->user = g_strdup(who); | |
| 873 b->friend = g_strdup(friend); | |
| 874 md->fl = g_slist_append(md->fl, b); | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
875 } else if (!g_strcasecmp(which, "AL") && pos) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
876 gc->permit = g_slist_append(gc->permit, g_strdup(who)); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
877 } else if (!g_strcasecmp(which, "BL") && pos) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
878 gc->deny = g_slist_append(gc->deny, g_strdup(who)); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
879 } else if (!g_strcasecmp(which, "RL")) { |
| 3012 | 880 while(perm) { |
| 881 if(!g_strcasecmp(perm->data, who)) | |
| 882 new = 0; | |
| 883 perm = perm->next; | |
| 884 } | |
| 885 | |
| 886 if(new) { | |
| 887 debug_printf("Unresolved MSN RL entry"); | |
| 888 ap = g_new0(struct msn_add_permit, 1); | |
| 889 ap->user = g_strdup(who); | |
| 890 ap->friend = g_strdup(friend); | |
| 891 ap->gc = gc; | |
| 892 | |
| 893 g_snprintf(msg, sizeof(msg), "The user %s (%s) wants to add you to their buddy list",ap->user, url_decode(ap->friend)); | |
| 894 do_ask_dialog(msg, ap, msn_accept_add, msn_cancel_add); | |
| 895 } | |
| 896 | |
| 897 if (pos != tot) | |
| 898 return 1; /* this isn't the last one in the RL, so return. */ | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
899 |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
900 g_snprintf(sendbuf, sizeof(sendbuf), "CHG %d NLN\r\n", ++md->trId); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
901 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
902 hide_login_progress(gc, "Unable to write"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
903 signoff(gc); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
904 return 0; |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
905 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
906 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
907 account_online(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
908 serv_finish_login(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
909 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
910 md->permit = g_slist_copy(gc->permit); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
911 md->deny = g_slist_copy(gc->deny); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
912 |
| 2086 | 913 if (bud_list_cache_exists(gc)) |
|
2382
569ae9f2bb89
[gaim-migrate @ 2395]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2311
diff
changeset
|
914 do_import(gc, NULL); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
915 else { |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
916 g_snprintf(sendbuf, sizeof(sendbuf), "BLP %d AL\r\n", ++md->trId); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
917 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
918 hide_login_progress(gc, "Unable to write"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
919 signoff(gc); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
920 return 0; |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
921 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
922 } |
| 2086 | 923 while (md->fl) { |
| 924 struct msn_buddy *mb = md->fl->data; | |
| 925 struct buddy *b; | |
| 926 md->fl = g_slist_remove(md->fl, mb); | |
| 927 if (!(b = find_buddy(gc, mb->user))) | |
| 928 add_buddy(gc, "Buddies", mb->user, mb->friend); | |
| 929 else if (!g_strcasecmp(b->name, b->show)) { | |
| 930 g_snprintf(b->show, sizeof(b->show), "%s", mb->friend); | |
| 931 handle_buddy_rename(b, b->name); | |
| 932 } | |
| 933 g_free(mb->user); | |
| 934 g_free(mb->friend); | |
| 935 g_free(mb); | |
| 936 } | |
| 937 } | |
| 938 } else if (!g_strncasecmp(buf, "MSG", 3)) { | |
| 939 char *user, *tmp = buf; | |
| 940 int length; | |
| 941 | |
| 942 GET_NEXT(tmp); | |
| 943 user = tmp; | |
| 944 | |
| 945 GET_NEXT(tmp); | |
| 946 | |
| 947 GET_NEXT(tmp); | |
| 948 length = atoi(tmp); | |
| 949 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
950 md->msg = TRUE; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
951 md->msguser = g_strdup(user); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
952 md->msglen = length; |
| 2086 | 953 } else if (!g_strncasecmp(buf, "NLN", 3)) { |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
954 char *state, *user, *friend, *tmp = buf; |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
955 struct buddy *b; |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
956 int status = 0; |
| 2086 | 957 |
| 958 GET_NEXT(tmp); | |
| 959 state = tmp; | |
| 960 | |
| 961 GET_NEXT(tmp); | |
| 962 user = tmp; | |
| 963 | |
| 964 GET_NEXT(tmp); | |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
965 friend = url_decode(tmp); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
966 |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
967 if ((b = find_buddy(gc, user)) != NULL) { |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
968 if (b->proto_data) |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
969 g_free(b->proto_data); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
970 b->proto_data = g_strdup(friend); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
971 } |
| 2086 | 972 |
| 973 if (!g_strcasecmp(state, "BSY")) { | |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
974 status |= UC_UNAVAILABLE | (MSN_BUSY << 1); |
| 2086 | 975 } else if (!g_strcasecmp(state, "IDL")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
976 status |= UC_UNAVAILABLE | (MSN_IDLE << 1); |
| 2086 | 977 } else if (!g_strcasecmp(state, "BRB")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
978 status |= UC_UNAVAILABLE | (MSN_BRB << 1); |
| 2086 | 979 } else if (!g_strcasecmp(state, "AWY")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
980 status |= UC_UNAVAILABLE | (MSN_AWAY << 1); |
| 2086 | 981 } else if (!g_strcasecmp(state, "PHN")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
982 status |= UC_UNAVAILABLE | (MSN_PHONE << 1); |
| 2086 | 983 } else if (!g_strcasecmp(state, "LUN")) { |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
984 status |= UC_UNAVAILABLE | (MSN_LUNCH << 1); |
| 2086 | 985 } |
| 986 | |
| 987 serv_got_update(gc, user, 1, 0, 0, 0, status, 0); | |
| 988 } else if (!g_strncasecmp(buf, "OUT", 3)) { | |
| 2887 | 989 char *tmp = buf; |
| 990 | |
| 991 GET_NEXT(tmp); | |
| 992 if (!g_strncasecmp(tmp, "OTH", 3)) { | |
|
2889
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
993 hide_login_progress(gc, _("You have been disconnected. You have " |
|
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
994 "signed on from another location.")); |
|
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
995 signoff(gc); |
|
fccda160c078
[gaim-migrate @ 2902]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2888
diff
changeset
|
996 return 0; |
| 2887 | 997 } |
| 2086 | 998 } else if (!g_strncasecmp(buf, "PRP", 3)) { |
|
2541
8229710b343b
[gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
999 } else if (!g_strncasecmp(buf, "QNG", 3)) { |
| 2086 | 1000 } else if (!g_strncasecmp(buf, "QRY", 3)) { |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1001 } else if (!g_strncasecmp(buf, "REA", 3)) { |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1002 char *friend, *tmp = buf; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1003 |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1004 GET_NEXT(tmp); |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1005 GET_NEXT(tmp); |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1006 GET_NEXT(tmp); |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1007 GET_NEXT(tmp); |
|
2219
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
1008 friend = url_decode(tmp); |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1009 |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1010 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); |
| 2086 | 1011 } else if (!g_strncasecmp(buf, "REM", 3)) { |
| 1012 } else if (!g_strncasecmp(buf, "RNG", 3)) { | |
| 1013 struct msn_switchboard *ms; | |
| 1014 char *sessid, *ssaddr, *auth, *user; | |
| 1015 int port, i = 0; | |
| 1016 char *tmp = buf; | |
| 1017 | |
| 1018 GET_NEXT(tmp); | |
| 1019 sessid = tmp; | |
| 1020 | |
| 1021 GET_NEXT(tmp); | |
| 1022 ssaddr = tmp; | |
| 1023 | |
| 1024 GET_NEXT(tmp); | |
| 1025 | |
| 1026 GET_NEXT(tmp); | |
| 1027 auth = tmp; | |
| 1028 | |
| 1029 GET_NEXT(tmp); | |
| 1030 user = tmp; | |
| 1031 GET_NEXT(tmp); | |
| 1032 | |
| 1033 while (ssaddr[i] && ssaddr[i] != ':') i++; | |
| 1034 if (ssaddr[i] == ':') { | |
| 1035 char *x = &ssaddr[i + 1]; | |
| 1036 ssaddr[i] = 0; | |
| 1037 port = atoi(x); | |
| 1038 } else | |
| 1039 port = 1863; | |
| 1040 | |
| 1041 ms = g_new0(struct msn_switchboard, 1); | |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1042 ms->fd = proxy_connect(ssaddr, port, msn_rng_connect, ms); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1043 if (ms->fd < 0) { |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1044 g_free(ms); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1045 return 1; |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1046 } |
| 2086 | 1047 ms->user = g_strdup(user); |
| 1048 ms->sessid = g_strdup(sessid); | |
| 1049 ms->auth = g_strdup(auth); | |
| 1050 ms->gc = gc; | |
| 1051 } else if (!g_strncasecmp(buf, "SYN", 3)) { | |
| 1052 } else if (!g_strncasecmp(buf, "USR", 3)) { | |
| 1053 } else if (!g_strncasecmp(buf, "XFR", 3)) { | |
| 1054 char *host = strstr(buf, "SB"); | |
| 1055 int port; | |
| 1056 int i = 0; | |
| 1057 gboolean switchboard = TRUE; | |
| 1058 char *tmp; | |
| 1059 | |
| 1060 if (!host) { | |
| 1061 host = strstr(buf, "NS"); | |
| 1062 if (!host) { | |
| 1063 hide_login_progress(gc, "Got invalid XFR\n"); | |
| 1064 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1065 return 0; |
| 2086 | 1066 } |
| 1067 switchboard = FALSE; | |
| 1068 } | |
| 1069 | |
| 1070 GET_NEXT(host); | |
| 1071 while (host[i] && host[i] != ':') i++; | |
| 1072 if (host[i] == ':') { | |
| 1073 tmp = &host[i + 1]; | |
| 1074 host[i] = 0; | |
| 1075 while (isdigit(*tmp)) tmp++; | |
| 1076 *tmp++ = 0; | |
| 1077 port = atoi(&host[i + 1]); | |
| 1078 } else { | |
| 1079 port = 1863; | |
| 1080 tmp = host; | |
| 1081 GET_NEXT(tmp); | |
| 1082 } | |
| 1083 | |
| 1084 if (switchboard) { | |
| 1085 struct msn_switchboard *ms = msn_find_writable_switch(gc); | |
| 1086 if (!ms) | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1087 return 1; |
| 2086 | 1088 |
| 1089 GET_NEXT(tmp); | |
| 1090 | |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1091 ms->fd = proxy_connect(host, port, msn_ss_xfr_connect, ms); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1092 if (ms->fd < 0) { |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1093 msn_kill_switch(ms); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1094 return 1; |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1095 } |
| 2086 | 1096 ms->auth = g_strdup(tmp); |
| 1097 } else { | |
| 1098 close(md->fd); | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1099 gaim_input_remove(md->inpa); |
| 2086 | 1100 md->inpa = 0; |
| 1101 md->fd = proxy_connect(host, port, msn_login_xfr_connect, gc); | |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1102 if (md->fd < 0) { |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1103 hide_login_progress(gc, "Error transfering"); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1104 signoff(gc); |
|
2740
68ad186943e0
[gaim-migrate @ 2753]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2739
diff
changeset
|
1105 return 0; |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1106 } |
| 2086 | 1107 } |
| 1108 } else if (isdigit(*buf)) { | |
| 1109 handle_errcode(buf, TRUE); | |
| 1110 } else { | |
| 1111 debug_printf("Unhandled message!\n"); | |
| 1112 } | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1113 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1114 return 1; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1115 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1116 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1117 static void msn_process_main_msg(struct gaim_connection *gc, char *msg) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1118 { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1119 struct msn_data *md = gc->proto_data; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1120 char *skiphead, *utf; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1121 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1122 if (!g_strcasecmp(md->msguser, "hotmail")) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1123 handle_hotmail(gc, msg); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1124 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1125 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1126 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1127 skiphead = strstr(msg, "\r\n\r\n"); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1128 if (!skiphead || !skiphead[4]) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1129 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1130 skiphead += 4; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1131 utf = utf8_to_str(skiphead); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1132 strip_linefeed(utf); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1133 |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2842
diff
changeset
|
1134 serv_got_im(gc, md->msguser, utf, 0, time(NULL), -1); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1135 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1136 g_free(utf); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1137 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1138 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1139 static void msn_callback(gpointer data, gint source, GaimInputCondition cond) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1140 { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1141 struct gaim_connection *gc = data; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1142 struct msn_data *md = gc->proto_data; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1143 char buf[MSN_BUF_LEN]; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1144 int cont = 1; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1145 int len; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1146 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1147 len = read(md->fd, buf, sizeof(buf)); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1148 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1149 if (len <= 0) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1150 hide_login_progress(gc, "Error reading from server"); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1151 signoff(gc); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1152 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1153 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1154 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1155 md->rxqueue = g_realloc(md->rxqueue, len + md->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1156 memcpy(md->rxqueue + md->rxlen, buf, len); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1157 md->rxlen += len; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1158 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1159 while (cont) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1160 if (!md->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1161 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1162 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1163 if (md->msg) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1164 char *msg; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1165 if (md->msglen > md->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1166 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1167 msg = md->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1168 md->rxlen -= md->msglen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1169 if (md->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1170 md->rxqueue = g_memdup(msg + md->msglen, md->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1171 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1172 md->rxqueue = NULL; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1173 msg = g_realloc(msg, md->msglen + 1); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1174 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1175 msg[md->msglen] = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1176 md->msglen = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1177 md->msg = FALSE; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1178 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1179 msn_process_main_msg(gc, msg); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1180 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1181 g_free(md->msguser); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1182 g_free(msg); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1183 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1184 char *end = md->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1185 int cmdlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1186 char *cmd; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1187 int i = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1188 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1189 while (i + 1 < md->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1190 if (*end == '\r' && end[1] == '\n') |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1191 break; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1192 end++; i++; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1193 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1194 if (i + 1 == md->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1195 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1196 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1197 cmdlen = end - md->rxqueue + 2; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1198 cmd = md->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1199 md->rxlen -= cmdlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1200 if (md->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1201 md->rxqueue = g_memdup(cmd + cmdlen, md->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1202 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1203 md->rxqueue = NULL; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1204 cmd = g_realloc(cmd, cmdlen + 1); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1205 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1206 cmd[cmdlen] = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1207 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1208 debug_printf("MSN S: %s", cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1209 g_strchomp(cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1210 cont = msn_process_main(gc, cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1211 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1212 g_free(cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1213 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1214 } |
| 2086 | 1215 } |
| 1216 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1217 static void msn_login_xfr_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 1218 { |
| 1219 struct gaim_connection *gc = data; | |
| 1220 struct msn_data *md; | |
| 1221 char buf[MSN_BUF_LEN]; | |
| 1222 | |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1223 if (!g_slist_find(connections, gc)) { |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1224 close(source); |
| 2086 | 1225 return; |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1226 } |
| 2086 | 1227 |
| 1228 md = gc->proto_data; | |
| 1229 | |
| 1230 if (md->fd != source) | |
| 1231 md->fd = source; | |
| 1232 | |
| 1233 if (md->fd == -1) { | |
| 1234 hide_login_progress(gc, "Unable to connect to Notification Server"); | |
| 1235 signoff(gc); | |
| 1236 return; | |
| 1237 } | |
| 1238 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1239 g_snprintf(buf, sizeof(buf), "VER %d MSNP5\r\n", ++md->trId); |
| 2086 | 1240 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1241 hide_login_progress(gc, "Unable to talk to Notification Server"); | |
| 1242 signoff(gc); | |
| 1243 return; | |
| 1244 } | |
| 1245 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1246 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_login_callback, gc); |
| 2086 | 1247 } |
| 1248 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1249 static int msn_process_login(struct gaim_connection *gc, char *buf) |
| 2086 | 1250 { |
| 1251 struct msn_data *md = gc->proto_data; | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1252 char sendbuf[MSN_BUF_LEN]; |
| 2086 | 1253 |
| 1254 if (!g_strncasecmp(buf, "VER", 3)) { | |
|
2226
2a09a177ed5f
[gaim-migrate @ 2236]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2219
diff
changeset
|
1255 /* we got VER, check to see that MSNP5 is in the list, then send INF */ |
|
2a09a177ed5f
[gaim-migrate @ 2236]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2219
diff
changeset
|
1256 if (!strstr(buf, "MSNP5")) { |
| 2086 | 1257 hide_login_progress(gc, "Protocol not supported"); |
| 1258 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1259 return 0; |
| 2086 | 1260 } |
| 1261 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1262 g_snprintf(sendbuf, sizeof(sendbuf), "INF %d\r\n", ++md->trId); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1263 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 1264 hide_login_progress(gc, "Unable to request INF\n"); |
| 1265 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1266 return 0; |
| 2086 | 1267 } |
| 1268 } else if (!g_strncasecmp(buf, "INF", 3)) { | |
| 1269 /* check to make sure we can use md5 */ | |
| 1270 if (!strstr(buf, "MD5")) { | |
| 1271 hide_login_progress(gc, "Unable to login using MD5"); | |
| 1272 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1273 return 0; |
| 2086 | 1274 } |
| 1275 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1276 g_snprintf(sendbuf, sizeof(sendbuf), "USR %d MD5 I %s\r\n", ++md->trId, gc->username); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1277 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 1278 hide_login_progress(gc, "Unable to send USR\n"); |
| 1279 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1280 return 0; |
| 2086 | 1281 } |
| 1282 | |
| 1283 set_login_progress(gc, 3, "Requesting to send password"); | |
| 1284 } else if (!g_strncasecmp(buf, "USR", 3)) { | |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1285 char *resp, *friend, *tmp = buf; |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1286 |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1287 GET_NEXT(tmp); |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1288 GET_NEXT(tmp); |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1289 resp = tmp; |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1290 GET_NEXT(tmp); |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1291 GET_NEXT(tmp); |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1292 friend = tmp; |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1293 GET_NEXT(tmp); |
|
2219
20a4d5da0b95
[gaim-migrate @ 2229]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2213
diff
changeset
|
1294 friend = url_decode(friend); |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1295 |
| 2086 | 1296 /* so here, we're either getting the challenge or the OK */ |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1297 if (!g_strcasecmp(resp, "OK")) { |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1298 g_snprintf(gc->displayname, sizeof(gc->displayname), "%s", friend); |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1299 |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1300 g_snprintf(sendbuf, sizeof(sendbuf), "SYN %d 0\r\n", ++md->trId); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1301 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 1302 hide_login_progress(gc, "Unable to write"); |
| 1303 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1304 return 0; |
| 2086 | 1305 } |
| 1306 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1307 gaim_input_remove(md->inpa); |
|
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1308 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_callback, gc); |
|
2739
7aeedbf29a96
[gaim-migrate @ 2752]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2738
diff
changeset
|
1309 return 0; |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1310 } else if (!g_strcasecmp(resp, "MD5")) { |
| 2086 | 1311 char buf2[MSN_BUF_LEN]; |
| 1312 md5_state_t st; | |
| 1313 md5_byte_t di[16]; | |
| 1314 int i; | |
| 1315 | |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1316 g_snprintf(buf2, sizeof(buf2), "%s%s", friend, gc->password); |
| 2086 | 1317 |
| 1318 md5_init(&st); | |
| 1319 md5_append(&st, (const md5_byte_t *)buf2, strlen(buf2)); | |
| 1320 md5_finish(&st, di); | |
| 1321 | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1322 g_snprintf(sendbuf, sizeof(sendbuf), "USR %d MD5 S ", ++md->trId); |
| 2086 | 1323 for (i = 0; i < 16; i++) { |
| 1324 g_snprintf(buf2, sizeof(buf2), "%02x", di[i]); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1325 strcat(sendbuf, buf2); |
| 2086 | 1326 } |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1327 strcat(sendbuf, "\n"); |
| 2086 | 1328 |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1329 if (msn_write(md->fd, sendbuf, strlen(sendbuf)) < 0) { |
| 2086 | 1330 hide_login_progress(gc, "Unable to send password"); |
| 1331 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1332 return 0; |
| 2086 | 1333 } |
| 1334 | |
| 1335 set_login_progress(gc, 4, "Password sent"); | |
| 1336 } | |
| 1337 } else if (!g_strncasecmp(buf, "XFR", 3)) { | |
| 1338 char *host = strstr(buf, "NS"); | |
| 1339 int port; | |
| 1340 int i = 0; | |
| 1341 | |
| 1342 if (!host) { | |
| 1343 hide_login_progress(gc, "Got invalid XFR\n"); | |
| 1344 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1345 return 0; |
| 2086 | 1346 } |
| 1347 | |
| 1348 GET_NEXT(host); | |
| 1349 while (host[i] && host[i] != ':') i++; | |
| 1350 if (host[i] == ':') { | |
| 1351 char *x = &host[i + 1]; | |
| 1352 host[i] = 0; | |
| 1353 port = atoi(x); | |
| 1354 } else | |
| 1355 port = 1863; | |
| 1356 | |
| 1357 close(md->fd); | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1358 gaim_input_remove(md->inpa); |
| 2086 | 1359 md->inpa = 0; |
| 1360 md->fd = 0; | |
| 1361 md->fd = proxy_connect(host, port, msn_login_xfr_connect, gc); | |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1362 if (md->fd < 0) { |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1363 hide_login_progress(gc, "Unable to transfer"); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1364 signoff(gc); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1365 } |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1366 return 0; |
| 2086 | 1367 } else { |
| 1368 if (isdigit(*buf)) | |
| 1369 hide_login_progress(gc, handle_errcode(buf, FALSE)); | |
| 1370 else | |
| 1371 hide_login_progress(gc, "Unable to parse message"); | |
| 1372 signoff(gc); | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1373 return 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1374 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1375 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1376 return 1; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1377 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1378 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1379 static void msn_login_callback(gpointer data, gint source, GaimInputCondition cond) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1380 { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1381 struct gaim_connection *gc = data; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1382 struct msn_data *md = gc->proto_data; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1383 char buf[MSN_BUF_LEN]; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1384 int cont = 1; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1385 int len; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1386 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1387 len = read(md->fd, buf, sizeof(buf)); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1388 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1389 if (len <= 0) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1390 hide_login_progress(gc, "Error reading from server"); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1391 signoff(gc); |
| 2086 | 1392 return; |
| 1393 } | |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1394 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1395 md->rxqueue = g_realloc(md->rxqueue, len + md->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1396 memcpy(md->rxqueue + md->rxlen, buf, len); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1397 md->rxlen += len; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1398 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1399 while (cont) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1400 char *end = md->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1401 int cmdlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1402 char *cmd; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1403 int i = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1404 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1405 if (!md->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1406 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1407 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1408 while (i + 1 < md->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1409 if (*end == '\r' && end[1] == '\n') |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1410 break; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1411 end++; i++; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1412 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1413 if (i + 1 == md->rxlen) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1414 return; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1415 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1416 cmdlen = end - md->rxqueue + 2; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1417 cmd = md->rxqueue; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1418 md->rxlen -= cmdlen; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1419 if (md->rxlen) { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1420 md->rxqueue = g_memdup(cmd + cmdlen, md->rxlen); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1421 } else { |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1422 md->rxqueue = NULL; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1423 cmd = g_realloc(cmd, cmdlen + 1); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1424 } |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1425 cmd[cmdlen] = 0; |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1426 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1427 debug_printf("MSN S: %s", cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1428 g_strchomp(cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1429 cont = msn_process_login(gc, cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1430 |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1431 g_free(cmd); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1432 } |
| 2086 | 1433 } |
| 1434 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1435 static void msn_login_connect(gpointer data, gint source, GaimInputCondition cond) |
| 2086 | 1436 { |
| 1437 struct gaim_connection *gc = data; | |
| 1438 struct msn_data *md; | |
| 1439 char buf[1024]; | |
| 1440 | |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1441 if (!g_slist_find(connections, gc)) { |
|
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1442 close(source); |
| 2086 | 1443 return; |
|
2210
3a6fd1e8f00a
[gaim-migrate @ 2220]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2170
diff
changeset
|
1444 } |
| 2086 | 1445 |
| 1446 md = gc->proto_data; | |
| 1447 | |
| 1448 if (md->fd != source) | |
| 1449 md->fd = source; | |
| 1450 | |
| 1451 if (md->fd == -1) { | |
| 1452 hide_login_progress(gc, "Unable to connect"); | |
| 1453 signoff(gc); | |
| 1454 return; | |
| 1455 } | |
| 1456 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1457 g_snprintf(buf, sizeof(buf), "VER %d MSNP5\r\n", ++md->trId); |
| 2086 | 1458 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1459 hide_login_progress(gc, "Unable to write to server"); | |
| 1460 signoff(gc); | |
| 1461 return; | |
| 1462 } | |
| 1463 | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1464 md->inpa = gaim_input_add(md->fd, GAIM_INPUT_READ, msn_login_callback, gc); |
| 2086 | 1465 set_login_progress(gc, 2, "Synching with server"); |
| 1466 } | |
| 1467 | |
| 1468 static void msn_login(struct aim_user *user) | |
| 1469 { | |
| 1470 struct gaim_connection *gc = new_gaim_conn(user); | |
| 1471 struct msn_data *md = gc->proto_data = g_new0(struct msn_data, 1); | |
| 1472 | |
| 1473 set_login_progress(gc, 1, "Connecting"); | |
| 1474 | |
| 1475 g_snprintf(gc->username, sizeof(gc->username), "%s", msn_normalize(gc->username)); | |
| 1476 | |
| 1477 md->fd = proxy_connect("messenger.hotmail.com", 1863, msn_login_connect, gc); | |
|
2688
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1478 if (md->fd < 0) { |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1479 hide_login_progress(gc, "Unable to connect"); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1480 signoff(gc); |
|
98b1ac8ddea3
[gaim-migrate @ 2701]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2681
diff
changeset
|
1481 } |
| 2086 | 1482 } |
| 1483 | |
| 1484 static void msn_close(struct gaim_connection *gc) | |
| 1485 { | |
| 1486 struct msn_data *md = gc->proto_data; | |
| 1487 close(md->fd); | |
| 1488 if (md->inpa) | |
|
2090
b66aca8e8dce
[gaim-migrate @ 2100]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
1489 gaim_input_remove(md->inpa); |
|
2738
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1490 g_free(md->rxqueue); |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1491 if (md->msg) |
|
01f0497fe6c8
[gaim-migrate @ 2751]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2688
diff
changeset
|
1492 g_free(md->msguser); |
| 2086 | 1493 while (md->switches) |
| 1494 msn_kill_switch(md->switches->data); | |
| 1495 while (md->fl) { | |
| 1496 struct msn_buddy *tmp = md->fl->data; | |
| 1497 md->fl = g_slist_remove(md->fl, tmp); | |
| 1498 g_free(tmp->user); | |
| 1499 g_free(tmp->friend); | |
| 1500 g_free(tmp); | |
| 1501 } | |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1502 g_slist_free(md->permit); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1503 g_slist_free(md->deny); |
| 2086 | 1504 g_free(md); |
| 1505 } | |
| 1506 | |
| 3001 | 1507 static int msn_send_typing(struct gaim_connection *gc, char *who, int typing) { |
| 2993 | 1508 struct msn_switchboard *ms = msn_find_switch(gc, who); |
| 1509 char header[MSN_BUF_LEN] = "MIME-Version: 1.0\r\n" | |
| 1510 "Content-Type: text/x-msmsgscontrol\r\n" | |
| 1511 "User-Agent: Gaim/" VERSION "\r\n" | |
| 1512 "TypingUser: "; | |
| 1513 char buf [MSN_BUF_LEN]; | |
| 3001 | 1514 if (!ms || !typing) |
| 1515 return 0; | |
| 2993 | 1516 g_snprintf(buf, sizeof(buf), "MSG %d N %d\r\n%s%s\r\n\r\n\r\n", |
| 1517 ++ms->trId, | |
| 1518 strlen(header) + strlen("\r\n\r\n\r\n") + strlen(gc->username), | |
| 1519 header, gc->username); | |
| 1520 if (msn_write(ms->fd, buf, strlen(buf)) < 0) | |
| 1521 msn_kill_switch(ms); | |
| 1522 return MSN_TYPING_SEND_TIMEOUT; | |
| 1523 } | |
| 1524 | |
|
2231
8c4ff1a368bd
[gaim-migrate @ 2241]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2230
diff
changeset
|
1525 static int msn_send_im(struct gaim_connection *gc, char *who, char *message, int flags) |
| 2086 | 1526 { |
| 1527 struct msn_data *md = gc->proto_data; | |
| 1528 struct msn_switchboard *ms = msn_find_switch(gc, who); | |
| 1529 char buf[MSN_BUF_LEN]; | |
| 1530 | |
| 1531 if (ms) { | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1532 char *utf8, *send; |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1533 |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1534 if (ms->txqueue) { |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1535 debug_printf("appending to queue\n"); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1536 ms->txqueue = g_slist_append(ms->txqueue, g_strdup(message)); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1537 return 1; |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1538 } |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1539 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1540 send = add_cr(message); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1541 utf8 = str_to_utf8(send); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1542 g_free(send); |
| 2086 | 1543 g_snprintf(buf, sizeof(buf), "MSG %d N %d\r\n%s%s", ++ms->trId, |
| 1544 strlen(MIME_HEADER) + strlen(utf8), | |
| 1545 MIME_HEADER, utf8); | |
| 1546 g_free(utf8); | |
| 1547 if (msn_write(ms->fd, buf, strlen(buf)) < 0) | |
| 1548 msn_kill_switch(ms); | |
| 1549 debug_printf("\n"); | |
| 1550 } else if (strcmp(who, gc->username)) { | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1551 g_snprintf(buf, MSN_BUF_LEN, "XFR %d SB\r\n", ++md->trId); |
| 2086 | 1552 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1553 hide_login_progress(gc, "Write error"); | |
| 1554 signoff(gc); | |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1555 return 1; |
| 2086 | 1556 } |
| 1557 | |
| 1558 ms = g_new0(struct msn_switchboard, 1); | |
| 1559 md->switches = g_slist_append(md->switches, ms); | |
| 1560 ms->user = g_strdup(who); | |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1561 ms->txqueue = g_slist_append(ms->txqueue, g_strdup(message)); |
| 2086 | 1562 ms->gc = gc; |
| 1563 ms->fd = -1; | |
| 1564 } else | |
| 1565 /* in msn you can't send messages to yourself, so we'll fake like we received it ;) */ | |
|
2856
b1e300a85678
[gaim-migrate @ 2869]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2842
diff
changeset
|
1566 serv_got_im(gc, who, message, flags | IM_FLAG_GAIMUSER, time(NULL), -1); |
|
2303
f5bf315e6104
[gaim-migrate @ 2313]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2273
diff
changeset
|
1567 return 1; |
| 2086 | 1568 } |
| 1569 | |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1570 static int msn_chat_send(struct gaim_connection *gc, int id, char *message) |
| 2086 | 1571 { |
| 1572 struct msn_switchboard *ms = msn_find_switch_by_id(gc, id); | |
| 1573 char buf[MSN_BUF_LEN]; | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1574 char *utf8, *send; |
| 2086 | 1575 |
| 1576 if (!ms) | |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1577 return -EINVAL; |
| 2086 | 1578 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1579 send = add_cr(message); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1580 utf8 = str_to_utf8(send); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1581 g_free(send); |
| 2086 | 1582 g_snprintf(buf, sizeof(buf), "MSG %d N %d\r\n%s%s", ++ms->trId, |
|
2870
50547c3729fa
[gaim-migrate @ 2883]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2856
diff
changeset
|
1583 strlen(MIME_HEADER) + strlen(utf8), |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1584 MIME_HEADER, utf8); |
|
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1585 g_free(utf8); |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1586 if (msn_write(ms->fd, buf, strlen(buf)) < 0) { |
| 2086 | 1587 msn_kill_switch(ms); |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1588 return 0; |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1589 } |
| 2086 | 1590 debug_printf("\n"); |
| 1591 serv_got_chat_in(gc, id, gc->username, 0, message, time(NULL)); | |
|
2167
edf8c5a70e5b
[gaim-migrate @ 2177]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2162
diff
changeset
|
1592 return 0; |
| 2086 | 1593 } |
| 1594 | |
| 1595 static void msn_chat_invite(struct gaim_connection *gc, int id, char *msg, char *who) | |
| 1596 { | |
| 1597 struct msn_switchboard *ms = msn_find_switch_by_id(gc, id); | |
| 1598 char buf[MSN_BUF_LEN]; | |
| 1599 | |
| 1600 if (!ms) | |
| 1601 return; | |
| 1602 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1603 g_snprintf(buf, sizeof(buf), "CAL %d %s\r\n", ++ms->trId, who); |
| 2086 | 1604 if (msn_write(ms->fd, buf, strlen(buf)) < 0) |
| 1605 msn_kill_switch(ms); | |
| 1606 } | |
| 1607 | |
| 1608 static void msn_chat_leave(struct gaim_connection *gc, int id) | |
| 1609 { | |
| 1610 struct msn_switchboard *ms = msn_find_switch_by_id(gc, id); | |
| 1611 char buf[MSN_BUF_LEN]; | |
| 1612 | |
| 1613 if (!ms) | |
| 1614 return; | |
| 1615 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1616 g_snprintf(buf, sizeof(buf), "OUT\r\n"); |
| 2086 | 1617 if (msn_write(ms->fd, buf, strlen(buf)) < 0) |
| 1618 msn_kill_switch(ms); | |
| 1619 } | |
| 1620 | |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
1621 static GList *msn_away_states(struct gaim_connection *gc) |
| 2086 | 1622 { |
| 1623 GList *m = NULL; | |
| 1624 | |
| 1625 m = g_list_append(m, "Available"); | |
| 1626 m = g_list_append(m, "Away From Computer"); | |
| 1627 m = g_list_append(m, "Be Right Back"); | |
| 1628 m = g_list_append(m, "Busy"); | |
| 1629 m = g_list_append(m, "On The Phone"); | |
| 1630 m = g_list_append(m, "Out To Lunch"); | |
|
2152
f631cfc8e824
[gaim-migrate @ 2162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
1631 m = g_list_append(m, "Hidden"); |
| 2086 | 1632 |
| 1633 return m; | |
| 1634 } | |
| 1635 | |
| 1636 static void msn_set_away(struct gaim_connection *gc, char *state, char *msg) | |
| 1637 { | |
| 1638 struct msn_data *md = gc->proto_data; | |
| 1639 char buf[MSN_BUF_LEN]; | |
| 1640 char *away; | |
| 1641 | |
| 1642 gc->away = NULL; | |
| 1643 | |
| 1644 if (msg) { | |
| 1645 gc->away = ""; | |
| 1646 away = "AWY"; | |
| 1647 } else if (state) { | |
| 1648 gc->away = ""; | |
| 1649 | |
| 1650 if (!strcmp(state, "Away From Computer")) | |
| 1651 away = "AWY"; | |
| 1652 else if (!strcmp(state, "Be Right Back")) | |
| 1653 away = "BRB"; | |
| 1654 else if (!strcmp(state, "Busy")) | |
| 1655 away = "BSY"; | |
| 1656 else if (!strcmp(state, "On The Phone")) | |
| 1657 away = "PHN"; | |
| 1658 else if (!strcmp(state, "Out To Lunch")) | |
| 1659 away = "LUN"; | |
|
2152
f631cfc8e824
[gaim-migrate @ 2162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
1660 else if (!strcmp(state, "Hidden")) |
|
f631cfc8e824
[gaim-migrate @ 2162]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2123
diff
changeset
|
1661 away = "HDN"; |
| 2086 | 1662 else { |
| 1663 gc->away = NULL; | |
| 1664 away = "NLN"; | |
| 1665 } | |
| 1666 } else if (gc->is_idle) | |
| 1667 away = "IDL"; | |
| 1668 else | |
| 1669 away = "NLN"; | |
| 1670 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1671 g_snprintf(buf, sizeof(buf), "CHG %d %s\r\n", ++md->trId, away); |
| 2086 | 1672 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1673 hide_login_progress(gc, "Write error"); | |
| 1674 signoff(gc); | |
| 1675 return; | |
| 1676 } | |
| 1677 } | |
| 1678 | |
| 1679 static void msn_set_idle(struct gaim_connection *gc, int idle) | |
| 1680 { | |
| 1681 struct msn_data *md = gc->proto_data; | |
| 1682 char buf[MSN_BUF_LEN]; | |
| 1683 | |
| 1684 if (gc->away) | |
| 1685 return; | |
| 1686 if (idle) | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1687 g_snprintf(buf, sizeof(buf), "CHG %d IDL\r\n", ++md->trId); |
| 2086 | 1688 else |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1689 g_snprintf(buf, sizeof(buf), "CHG %d NLN\r\n", ++md->trId); |
| 2086 | 1690 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1691 hide_login_progress(gc, "Write error"); | |
| 1692 signoff(gc); | |
| 1693 return; | |
| 1694 } | |
| 1695 } | |
| 1696 | |
| 1697 static char **msn_list_icon(int uc) | |
| 1698 { | |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
1699 if (uc == 0) |
| 2086 | 1700 return msn_online_xpm; |
| 1701 | |
| 1702 return msn_away_xpm; | |
| 1703 } | |
| 1704 | |
| 1705 static char *msn_get_away_text(int s) | |
| 1706 { | |
| 1707 switch (s) { | |
| 1708 case MSN_BUSY : | |
| 1709 return "Busy"; | |
| 1710 case MSN_BRB : | |
| 1711 return "Be right back"; | |
| 1712 case MSN_AWAY : | |
| 1713 return "Away from the computer"; | |
| 1714 case MSN_PHONE : | |
| 1715 return "On the phone"; | |
| 1716 case MSN_LUNCH : | |
| 1717 return "Out to lunch"; | |
| 1718 case MSN_IDLE : | |
| 1719 return "Idle"; | |
| 1720 default: | |
| 1721 return "Available"; | |
| 1722 } | |
| 1723 } | |
| 1724 | |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1725 static void msn_reset_friend(struct gaim_connection *gc, char *who) |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1726 { |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1727 struct buddy *b = find_buddy(gc, who); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1728 if (!b || !b->proto_data) |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1729 return; |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1730 g_snprintf(b->show, sizeof(b->show), "%s", (char *)b->proto_data); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1731 handle_buddy_rename(b, b->name); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1732 } |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1733 |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1734 static GList *msn_buddy_menu(struct gaim_connection *gc, char *who) |
| 2086 | 1735 { |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1736 GList *m = NULL; |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1737 struct proto_buddy_menu *pbm; |
| 2086 | 1738 struct buddy *b = find_buddy(gc, who); |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1739 static char buf[MSN_BUF_LEN]; |
| 2086 | 1740 |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1741 pbm = g_new0(struct proto_buddy_menu, 1); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1742 pbm->label = "Reset friendly name"; |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1743 pbm->callback = msn_reset_friend; |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1744 pbm->gc = gc; |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1745 m = g_list_append(m, pbm); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
1746 |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
1747 if (!b || !(b->uc >> 1)) |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1748 return m; |
| 2086 | 1749 |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1750 pbm = g_new0(struct proto_buddy_menu, 1); |
|
2501
227cc42ffa6e
[gaim-migrate @ 2514]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2494
diff
changeset
|
1751 g_snprintf(buf, sizeof(buf), "Status: %s", msn_get_away_text(b->uc >> 1)); |
|
2170
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1752 pbm->label = buf; |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1753 pbm->callback = NULL; |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1754 pbm->gc = gc; |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1755 m = g_list_append(m, pbm); |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1756 |
|
c24595d3c364
[gaim-migrate @ 2180]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2169
diff
changeset
|
1757 return m; |
| 2086 | 1758 } |
| 1759 | |
|
2588
a3117e29317d
[gaim-migrate @ 2601]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2582
diff
changeset
|
1760 static void msn_add_buddy(struct gaim_connection *gc, char *name) |
| 2086 | 1761 { |
| 1762 struct msn_data *md = gc->proto_data; | |
|
2588
a3117e29317d
[gaim-migrate @ 2601]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2582
diff
changeset
|
1763 char *who = msn_normalize(name); |
| 2086 | 1764 char buf[MSN_BUF_LEN]; |
| 1765 GSList *l = md->fl; | |
| 1766 | |
|
2600
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1767 if (who[0] == '@') |
|
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1768 /* how did this happen? */ |
|
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1769 return; |
|
8aade06646b5
[gaim-migrate @ 2613]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2597
diff
changeset
|
1770 |
| 2953 | 1771 if (strchr(who, ' ')) |
| 2952 | 1772 /* This is a broken blist entry. */ |
| 1773 return; | |
| 1774 | |
| 2086 | 1775 while (l) { |
| 1776 struct msn_buddy *b = l->data; | |
| 1777 if (!g_strcasecmp(who, b->user)) | |
| 1778 break; | |
| 1779 l = l->next; | |
| 1780 } | |
| 1781 if (l) | |
| 1782 return; | |
| 1783 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1784 g_snprintf(buf, sizeof(buf), "ADD %d FL %s %s\r\n", ++md->trId, who, who); |
| 2086 | 1785 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1786 hide_login_progress(gc, "Write error"); | |
| 1787 signoff(gc); | |
| 1788 return; | |
| 1789 } | |
| 1790 } | |
| 1791 | |
|
2681
37d80035e77f
[gaim-migrate @ 2694]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2665
diff
changeset
|
1792 static void msn_rem_buddy(struct gaim_connection *gc, char *who, char *group) |
| 2086 | 1793 { |
| 1794 struct msn_data *md = gc->proto_data; | |
| 1795 char buf[MSN_BUF_LEN]; | |
| 1796 | |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1797 g_snprintf(buf, sizeof(buf), "REM %d FL %s\r\n", ++md->trId, who); |
| 2086 | 1798 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
| 1799 hide_login_progress(gc, "Write error"); | |
| 1800 signoff(gc); | |
| 1801 return; | |
| 1802 } | |
| 1803 } | |
| 1804 | |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1805 static void msn_act_id(gpointer data, char *entry) |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1806 { |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1807 struct gaim_connection *gc = data; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1808 struct msn_data *md = gc->proto_data; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1809 char buf[MSN_BUF_LEN]; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1810 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1811 g_snprintf(buf, sizeof(buf), "REA %d %s %s\r\n", ++md->trId, gc->username, url_encode(entry)); |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1812 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1813 hide_login_progress(gc, "Write error"); |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1814 signoff(gc); |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1815 return; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1816 } |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1817 } |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1818 |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1819 static void msn_do_action(struct gaim_connection *gc, char *act) |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1820 { |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1821 if (!strcmp(act, "Set Friendly Name")) { |
|
2541
8229710b343b
[gaim-migrate @ 2554]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2501
diff
changeset
|
1822 do_prompt_dialog("Set Friendly Name:", gc->displayname, gc, msn_act_id, NULL); |
|
2758
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1823 } else if (!strcmp(act, "Reset All Friendly Names")) { |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1824 GSList *g = gc->groups; |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1825 while (g) { |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1826 GSList *m = ((struct group *)g->data)->members; |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1827 while (m) { |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1828 struct buddy *b = m->data; |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1829 if (b->present) |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1830 msn_reset_friend(gc, b->name); |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1831 m = m->next; |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1832 } |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1833 g = g->next; |
|
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1834 } |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1835 } |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1836 } |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1837 |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1838 static GList *msn_actions() |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1839 { |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1840 GList *m = NULL; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1841 |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1842 m = g_list_append(m, "Set Friendly Name"); |
|
2758
269fb9005d13
[gaim-migrate @ 2771]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2747
diff
changeset
|
1843 m = g_list_append(m, "Reset All Friendly Names"); |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1844 |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1845 return m; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1846 } |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
1847 |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1848 static void msn_convo_closed(struct gaim_connection *gc, char *who) |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1849 { |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1850 struct msn_switchboard *ms = msn_find_switch(gc, who); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1851 |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1852 if (ms) |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1853 msn_kill_switch(ms); |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1854 } |
|
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
1855 |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1856 static void msn_keepalive(struct gaim_connection *gc) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1857 { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1858 struct msn_data *md = gc->proto_data; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1859 char buf[MSN_BUF_LEN]; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1860 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1861 g_snprintf(buf, sizeof(buf), "PNG\r\n"); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1862 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1863 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1864 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1865 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1866 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1867 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1868 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1869 static void msn_set_permit_deny(struct gaim_connection *gc) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1870 { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1871 struct msn_data *md = gc->proto_data; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1872 char buf[MSN_BUF_LEN]; |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1873 GSList *s, *t = NULL; |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1874 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1875 if (gc->permdeny == PERMIT_ALL || gc->permdeny == DENY_SOME) |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1876 g_snprintf(buf, sizeof(buf), "BLP %d AL\r\n", ++md->trId); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1877 else |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1878 g_snprintf(buf, sizeof(buf), "BLP %d BL\r\n", ++md->trId); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1879 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1880 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1881 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1882 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1883 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1884 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1885 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1886 /* this is safe because we'll always come here after we've gotten the list off the server, |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1887 * and data is never removed. So if the lengths are equal we don't know about anyone locally |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1888 * and so there's no sense in going through them all. */ |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1889 if (g_slist_length(gc->permit) == g_slist_length(md->permit)) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1890 g_slist_free(md->permit); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1891 md->permit = NULL; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1892 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1893 if (g_slist_length(gc->deny) == g_slist_length(md->deny)) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1894 g_slist_free(md->deny); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1895 md->deny = NULL; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1896 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1897 if (!md->permit && !md->deny) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1898 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1899 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1900 s = g_slist_nth(gc->permit, g_slist_length(md->permit)); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1901 while (s) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1902 char *who = s->data; |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1903 s = s->next; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1904 if (!strchr(who, '@')) { |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1905 t = g_slist_append(t, who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1906 continue; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1907 } |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1908 g_snprintf(buf, sizeof(buf), "ADD %d AL %s %s\r\n", ++md->trId, who, who); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1909 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1910 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1911 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1912 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1913 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1914 } |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1915 while (t) { |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1916 char *who = t->data; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1917 gc->permit = g_slist_remove(gc->permit, who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1918 g_free(who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1919 t = t->next; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1920 } |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1921 if (t) |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1922 g_slist_free(t); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1923 t = NULL; |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1924 g_slist_free(md->permit); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1925 md->permit = NULL; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1926 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1927 s = g_slist_nth(gc->deny, g_slist_length(md->deny)); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1928 while (s) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1929 char *who = s->data; |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1930 s = s->next; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1931 if (!strchr(who, '@')) { |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1932 t = g_slist_append(t, who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1933 continue; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1934 } |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1935 g_snprintf(buf, sizeof(buf), "ADD %d AL %s %s\r\n", ++md->trId, who, who); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1936 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1937 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1938 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1939 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1940 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1941 } |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1942 while (t) { |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1943 char *who = t->data; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1944 gc->deny = g_slist_remove(gc->deny, who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1945 g_free(who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1946 t = t->next; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1947 } |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1948 if (t) |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1949 g_slist_free(t); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1950 g_slist_free(md->deny); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1951 md->deny = NULL; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1952 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1953 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1954 static void msn_add_permit(struct gaim_connection *gc, char *who) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1955 { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1956 struct msn_data *md = gc->proto_data; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1957 char buf[MSN_BUF_LEN]; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1958 |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1959 if (!strchr(who, '@')) { |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1960 do_error_dialog(_("Invalid name"), _("MSN Error")); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1961 gc->permit = g_slist_remove(gc->permit, who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1962 g_free(who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1963 return; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1964 } |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1965 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1966 g_snprintf(buf, sizeof(buf), "ADD %d AL %s %s\r\n", ++md->trId, who, who); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1967 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1968 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1969 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1970 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1971 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1972 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1973 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1974 static void msn_rem_permit(struct gaim_connection *gc, char *who) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1975 { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1976 struct msn_data *md = gc->proto_data; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1977 char buf[MSN_BUF_LEN]; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1978 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1979 g_snprintf(buf, sizeof(buf), "REM %d AL %s\r\n", ++md->trId, who); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1980 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1981 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1982 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1983 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1984 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1985 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1986 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1987 static void msn_add_deny(struct gaim_connection *gc, char *who) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1988 { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1989 struct msn_data *md = gc->proto_data; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1990 char buf[MSN_BUF_LEN]; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
1991 |
|
2665
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1992 if (!strchr(who, '@')) { |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1993 do_error_dialog(_("Invalid name"), _("MSN Error")); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1994 gc->deny = g_slist_remove(gc->deny, who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1995 g_free(who); |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1996 return; |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1997 } |
|
b0478af51be0
[gaim-migrate @ 2678]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2611
diff
changeset
|
1998 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
1999 g_snprintf(buf, sizeof(buf), "ADD %d BL %s %s\r\n", ++md->trId, who, who); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2000 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2001 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2002 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2003 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2004 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2005 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2006 |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2007 static void msn_rem_deny(struct gaim_connection *gc, char *who) |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2008 { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2009 struct msn_data *md = gc->proto_data; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2010 char buf[MSN_BUF_LEN]; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2011 |
|
2603
24664768a739
[gaim-migrate @ 2616]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2600
diff
changeset
|
2012 g_snprintf(buf, sizeof(buf), "REM %d BL %s\r\n", ++md->trId, who); |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2013 if (msn_write(md->fd, buf, strlen(buf)) < 0) { |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2014 hide_login_progress(gc, "Write error"); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2015 signoff(gc); |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2016 return; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2017 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2018 } |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2019 |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2020 static void msn_buddy_free(struct buddy *b) |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2021 { |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2022 if (b->proto_data) |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2023 g_free(b->proto_data); |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2024 } |
|
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2025 |
| 2086 | 2026 static struct prpl *my_protocol = NULL; |
| 2027 | |
| 2028 void msn_init(struct prpl *ret) | |
| 2029 { | |
| 2030 ret->protocol = PROTO_MSN; | |
|
2153
0befa2d2e540
[gaim-migrate @ 2163]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2152
diff
changeset
|
2031 ret->options = OPT_PROTO_MAIL_CHECK; |
| 2086 | 2032 ret->name = msn_name; |
| 2033 ret->list_icon = msn_list_icon; | |
| 2034 ret->buddy_menu = msn_buddy_menu; | |
| 2035 ret->login = msn_login; | |
| 2036 ret->close = msn_close; | |
| 2037 ret->send_im = msn_send_im; | |
| 2993 | 2038 ret->send_typing = msn_send_typing; |
| 2086 | 2039 ret->away_states = msn_away_states; |
| 2040 ret->set_away = msn_set_away; | |
| 2041 ret->set_idle = msn_set_idle; | |
| 2042 ret->add_buddy = msn_add_buddy; | |
| 2043 ret->remove_buddy = msn_rem_buddy; | |
| 2044 ret->chat_send = msn_chat_send; | |
| 2045 ret->chat_invite = msn_chat_invite; | |
| 2046 ret->chat_leave = msn_chat_leave; | |
| 2047 ret->normalize = msn_normalize; | |
|
2213
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
2048 ret->do_action = msn_do_action; |
|
a226ebf4be47
[gaim-migrate @ 2223]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2210
diff
changeset
|
2049 ret->actions = msn_actions; |
|
2591
b771cbe7e161
[gaim-migrate @ 2604]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2588
diff
changeset
|
2050 ret->convo_closed = msn_convo_closed; |
|
2597
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2051 ret->keepalive = msn_keepalive; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2052 ret->set_permit_deny = msn_set_permit_deny; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2053 ret->add_permit = msn_add_permit; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2054 ret->rem_permit = msn_rem_permit; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2055 ret->add_deny = msn_add_deny; |
|
2ced57c58653
[gaim-migrate @ 2610]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2591
diff
changeset
|
2056 ret->rem_deny = msn_rem_deny; |
|
2607
e0d4a23aac89
[gaim-migrate @ 2620]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2603
diff
changeset
|
2057 ret->buddy_free = msn_buddy_free; |
| 2086 | 2058 |
| 2059 my_protocol = ret; | |
| 2060 } | |
| 2061 | |
| 2062 #ifndef STATIC | |
| 2063 | |
| 2064 char *gaim_plugin_init(GModule *handle) | |
| 2065 { | |
| 2066 load_protocol(msn_init, sizeof(struct prpl)); | |
| 2067 return NULL; | |
| 2068 } | |
| 2069 | |
| 2070 void gaim_plugin_remove() | |
| 2071 { | |
| 2072 struct prpl *p = find_prpl(PROTO_MSN); | |
| 2073 if (p == my_protocol) | |
| 2074 unload_protocol(p); | |
| 2075 } | |
| 2076 | |
| 2077 char *name() | |
| 2078 { | |
| 2079 return "MSN"; | |
| 2080 } | |
| 2081 | |
| 2082 char *description() | |
| 2083 { | |
|
2162
a464da684307
[gaim-migrate @ 2172]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2153
diff
changeset
|
2084 return PRPL_DESC("MSN"); |
| 2086 | 2085 } |
| 2086 | |
| 2087 #endif |
