annotate src/protocols/msn/page.c @ 8808:bbd8cdaf0ad5

[gaim-migrate @ 9570] A massive patch by shx to reorganize MSN some more and add command processor support. This allows us to do cool things like produce more detailed error messages. For example, the Invalid Username dialog now shows the username of the invalid user. I modified the aforementioned dialog so it'll look a little nicer looking, and also mention the account this happened on. It also removes the user from your blist, as there's no point to keeping the user on there. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 25 Apr 2004 22:02:06 +0000
parents 1e211dde3cae
children 9e5a709c30a8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file page.c Paging functions
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 * gaim
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
8475
06f57183e29f [gaim-migrate @ 9208]
Christian Hammond <chipx86@chipx86.com>
parents: 7468
diff changeset
6 * Copyright (C) 2003-2004 Christian Hammond <chipx86@gnupdate.org>
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 5370
diff changeset
7 *
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 */
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 #include "msn.h"
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 #include "page.h"
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 #define GET_NEXT(tmp) \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
26 while (*(tmp) && *(tmp) != ' ' && *(tmp) != '\r') \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27 (tmp)++; \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 if (*(tmp) != '\0') *(tmp)++ = '\0'; \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29 if (*(tmp) == '\n') *(tmp)++; \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30 while (*(tmp) && *(tmp) == ' ') \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31 (tmp)++
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
32
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33 #define GET_NEXT_LINE(tmp) \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 while (*(tmp) && *(tmp) != '\r') \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 (tmp)++; \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 if (*(tmp) != '\0') *(tmp)++ = '\0'; \
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37 if (*(tmp) == '\n') *(tmp)++
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 /*
7468
4ab8ec97576c [gaim-migrate @ 8081]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
40 * <TEXT xml:space="preserve" enc="utf-8"> == 39
4ab8ec97576c [gaim-migrate @ 8081]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
41 * </TEXT> == 7
4ab8ec97576c [gaim-migrate @ 8081]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
42 * ----
4ab8ec97576c [gaim-migrate @ 8081]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
43 * 46
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 */
7468
4ab8ec97576c [gaim-migrate @ 8081]
Christian Hammond <chipx86@chipx86.com>
parents: 7386
diff changeset
45 #define MSN_PAGE_BASE_SIZE 46
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
46
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 MsnPage *
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48 msn_page_new(void)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 {
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 MsnPage *page;
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 page = g_new0(MsnPage, 1);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54 page->size = MSN_PAGE_BASE_SIZE;
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56 return page;
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 void
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60 msn_page_destroy(MsnPage *page)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
61 {
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
62 g_return_if_fail(page != NULL);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 if (page->body != NULL)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 g_free(page->body);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 if (page->from_location != NULL)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 g_free(page->from_location);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70 if (page->from_phone != NULL)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 g_free(page->from_phone);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 g_free(page);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76 char *
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
77 msn_page_gen_payload(const MsnPage *page, size_t *ret_size)
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78 {
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
79 char *str;
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
80
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81 g_return_val_if_fail(page != NULL, NULL);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
83 str =
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
84 g_strdup_printf("<TEXT xml:space=\"preserve\" enc=\"utf-8\">%s</TEXT>",
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
85 msn_page_get_body(page));
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
87 if (page->size != strlen(str))
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
88 {
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
89 gaim_debug(GAIM_DEBUG_ERROR, "msn",
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
90 "Outgoing page size (%d) and string length (%d) "
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
91 "do not match!\n", page->size, strlen(str));
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
94 if (ret_size != NULL)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
95 *ret_size = page->size - 1;
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 return str;
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 void
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101 msn_page_set_body(MsnPage *page, const char *body)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102 {
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103 g_return_if_fail(page != NULL);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104 g_return_if_fail(body != NULL);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
105
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
106 if (page->body != NULL)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
107 {
5370
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
108 page->size -= strlen(page->body);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
109 g_free(page->body);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
112 page->body = g_strdup(body);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
114 page->size += strlen(body);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
115 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
116
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
117 const char *
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
118 msn_page_get_body(const MsnPage *page)
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
119 {
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
120 g_return_val_if_fail(page != NULL, NULL);
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
122 return page->body;
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123 }
058230cccebb [gaim-migrate @ 5746]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
124