annotate src/protocols/gg/libgg.c @ 11157:f068eaabe332

[gaim-migrate @ 13242] Patch submitted to gaim-devel... "Marcin Owsiany sent you a draft advisory regarding multiple libgadu vulnerabilities. "Fortunately" gaim contains an extremely old version of libgadu and is affected only by memory alignment bug, which cannot be exploited on x86. No other critical vulnerabilities are known in gaim's version of libgadu. You'll find the patch in attachment. Regards, Wojtek Kaniewski ekg/libgadu maintainer" committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Mon, 25 Jul 2005 21:20:14 +0000
parents 64895571248f
children ff4884029708
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1 /*
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
2 * (C) Copyright 2001 Wojtek Kaniewski <wojtekka@irc.pl>,
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
3 * Robert J. Woźny <speedy@ziew.org>
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
4 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
5 * This program is free software; you can redistribute it and/or modify
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
6 * it under the terms of the GNU General Public License Version 2 as
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
7 * published by the Free Software Foundation.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
8 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
12 * GNU General Public License for more details.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
13 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
15 * along with this program; if not, write to the Free Software
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
17 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
18
4016
ad31c79c18b7 [gaim-migrate @ 4216]
Luke Schierer <lschiere@pidgin.im>
parents: 3800
diff changeset
19 #include <sys/types.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
20 #ifndef _WIN32
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
21 #include <sys/socket.h>
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
22 #include <netinet/in.h>
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
23 #include <arpa/inet.h>
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
24 #include <sys/ioctl.h>
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
25 #include <sys/wait.h>
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
26 #include <netdb.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
27 #include <pwd.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
28 #else
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
29 #include <fcntl.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
30 #endif
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
31
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
32 #include <stdio.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
33 #include <stdlib.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
34 #include <unistd.h>
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
35 #include <stdio.h>
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
36 #include <sys/time.h>
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
37 #include <errno.h>
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
38 #ifndef _AIX
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
39 # include <string.h>
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
40 #endif
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
41 #include <stdarg.h>
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
42 #include <time.h>
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
43 #ifdef sun
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
44 #include <sys/filio.h>
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
45 #endif
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
46 #include <glib.h>
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
47 #if G_BYTE_ORDER == G_BIG_ENDIAN
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
48 # define WORDS_BIGENDIAN 1
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
49 #endif
9265
6a1f2c444ee7 [gaim-migrate @ 10064]
Ethan Blanton <elb@pidgin.im>
parents: 8775
diff changeset
50 #include "internal.h"
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
51 #include "libgg.h"
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
52
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
53 #include "proxy.h"
5872
059d95c67cda [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5681
diff changeset
54 #include "debug.h"
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
55
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3630
diff changeset
56 #ifdef _WIN32
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3630
diff changeset
57 #include "win32dep.h"
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3630
diff changeset
58 #endif
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3630
diff changeset
59
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
60 int gg_debug_level = (GG_DEBUG_NET | GG_DEBUG_TRAFFIC | GG_DEBUG_DUMP | GG_DEBUG_FUNCTION | GG_DEBUG_MISC);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
61 int gg_http_use_proxy = 0;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
62 int gg_http_proxy_port = 0;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
63 char *gg_http_proxy_host = NULL;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
64
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
65 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
66 * fix32() // funkcja wewnętrzna
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
67 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
68 * dla maszyn big-endianowych zamienia kolejność bajtów w ,,long''ach.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
69 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
70 static inline unsigned long fix32(unsigned long x)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
71 {
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
72 #ifndef WORDS_BIGENDIAN
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
73 return x;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
74 #else
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
75 return (unsigned long)
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
76 (((x & (unsigned long) 0x000000ffU) << 24) |
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
77 ((x & (unsigned long) 0x0000ff00U) << 8) |
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
78 ((x & (unsigned long) 0x00ff0000U) >> 8) |
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
79 ((x & (unsigned long) 0xff000000U) >> 24));
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
80 #endif
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
81 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
82
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
83 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
84 * fix16() // funkcja wewnętrzna
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
85 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
86 * dla maszyn big-endianowych zamienia kolejność bajtów w ,,short''ach.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
87 */
4298
cddb50734169 [gaim-migrate @ 4552]
Sean Egan <seanegan@gmail.com>
parents: 4016
diff changeset
88
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
89 static inline unsigned short fix16(unsigned short x)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
90 {
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
91 #ifndef WORDS_BIGENDIAN
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
92 return x;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
93 #else
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
94 return (unsigned short)
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
95 (((x & (unsigned short) 0x00ffU) << 8) |
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
96 ((x & (unsigned short) 0xff00U) >> 8));
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
97 #endif
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
98 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
99
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
100 #ifndef _WIN32
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
101 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
102 * gg_resolve() // funkcja wewnętrzna
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
103 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
104 * tworzy pipe'y, forkuje się i w drugim procesie zaczyna resolvować
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
105 * podanego hosta. zapisuje w sesji deskryptor pipe'u. jeśli coś tam
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
106 * będzie gotowego, znaczy, że można wczytać ,,struct in_addr''. jeśli
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
107 * nie znajdzie, zwraca INADDR_NONE.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
108 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
109 * - fd - wskaźnik gdzie wrzucić deskryptor,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
110 * - pid - gdzie wrzucić pid dzieciaka,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
111 * - hostname - nazwa hosta do zresolvowania.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
112 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
113 * zwraca 0 jeśli udało się odpalić proces lub -1 w przypadku błędu.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
114 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
115 int gg_resolve(int *fd, int *pid, char *hostname)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
116 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
117 int pipes[2], res;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
118 struct in_addr a;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
119
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
120 gg_debug(GG_DEBUG_FUNCTION, "** gg_resolve(..., \"%s\");\n", hostname);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
121
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
122 if (!fd | !pid) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
123 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
124 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
125 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
126
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
127 if (pipe(pipes) == -1)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
128 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
129
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
130 if ((res = fork()) == -1)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
131 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
132
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
133 if (!res) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
134 if ((a.s_addr = inet_addr(hostname)) == INADDR_NONE) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
135 struct hostent *he;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
136
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
137 if (!(he = gethostbyname(hostname)))
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
138 a.s_addr = INADDR_NONE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
139 else
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
140 memcpy((char*) &a, he->h_addr, sizeof(a));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
141 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
142
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
143 write(pipes[1], &a, sizeof(a));
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
144
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
145 exit(0);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
146 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
147
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
148 close(pipes[1]);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
149
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
150 *fd = pipes[0];
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
151 *pid = res;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
152
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
153 return 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
154 }
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
155 #endif /*!_WIN32*/
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
156
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
157 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
158 * gg_recv_packet() // funkcja wewnętrzna
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
159 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
160 * odbiera jeden pakiet gg i zwraca wskaźnik do niego. pamięć po nim
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
161 * wypadałoby uwolnić.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
162 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
163 * - sock - połączony socket.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
164 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
165 * jeśli wystąpił błąd, zwraca NULL. reszta w errno.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
166 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
167 static void *gg_recv_packet(struct gg_session *sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
168 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
169 struct gg_header h;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
170 char *buf = NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
171 int ret = 0, offset, size = 0;
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
172 int sizeh = sizeof(struct gg_header);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
173
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
174 gg_debug(GG_DEBUG_FUNCTION, "** gg_recv_packet(...);\n");
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
175
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
176 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
177 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
178 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
179 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
180
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
181 if (sess->recv_left < 1) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
182 while (ret != sizeh) {
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
183 ret = read(sess->fd, &h, sizeh);
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
184 gg_debug(GG_DEBUG_MISC, "-- header recv(..., %d) = %d\n", sizeh, ret);
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
185 if (ret < sizeh) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
186 if (errno != EINTR) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
187 gg_debug(GG_DEBUG_MISC, "-- errno = %d (%s)\n", errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
188 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
189 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
190 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
191 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
192
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
193 h.type = fix32(h.type);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
194 h.length = fix32(h.length);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
195 } else {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
196 memcpy(&h, sess->recv_buf, sizeh);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
197 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
198
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
199 /* jakieś sensowne limity na rozmiar pakietu */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
200 if (h.length < 0 || h.length > 65535) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
201 gg_debug(GG_DEBUG_MISC, "-- invalid packet length (%d)\n", h.length);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
202 errno = ERANGE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
203 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
204 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
205
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
206 if (sess->recv_left > 0) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
207 gg_debug(GG_DEBUG_MISC, "-- resuming last gg_recv_packet()\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
208 size = sess->recv_left;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
209 offset = sess->recv_done;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
210 buf = sess->recv_buf;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
211 } else {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
212 if (!(buf = malloc(sizeh + h.length + 1))) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
213 gg_debug(GG_DEBUG_MISC, "-- not enough memory\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
214 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
215 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
216
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
217 memcpy(buf, &h, sizeh);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
218
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
219 offset = 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
220 size = h.length;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
221 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
222
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
223 while (size > 0) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
224 ret = read(sess->fd, buf + sizeh + offset, size);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
225 gg_debug(GG_DEBUG_MISC, "-- body recv(..., %d) = %d\n", size, ret);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
226 if (ret > -1 && ret <= size) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
227 offset += ret;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
228 size -= ret;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
229 } else if (ret == -1) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
230 gg_debug(GG_DEBUG_MISC, "-- errno = %d (%s)\n", errno, strerror(errno));
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
231 if (errno == EAGAIN) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
232 gg_debug(GG_DEBUG_MISC, "-- %d bytes received, %d left\n", offset, size);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
233 sess->recv_buf = buf;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
234 sess->recv_left = size;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
235 sess->recv_done = offset;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
236 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
237 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
238 if (errno != EINTR) {
6063
5239a3b4ab33 [gaim-migrate @ 6513]
Nathan Walp <nwalp@pidgin.im>
parents: 5872
diff changeset
239 /* errno = EINVAL; */
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
240 free(buf);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
241 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
242 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
243 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
244 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
245
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
246 sess->recv_left = 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
247
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
248 if ((gg_debug_level & GG_DEBUG_DUMP)) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
249 int i;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
250
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
251 gg_debug(GG_DEBUG_DUMP, ">> received packet (type=%.2x):", h.type);
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
252 for (i = 0; i < sizeh + h.length; i++)
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
253 gg_debug(GG_DEBUG_DUMP, " %.2x", (unsigned char) buf[i]);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
254 gg_debug(GG_DEBUG_DUMP, "\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
255 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
256
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
257 return buf;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
258 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
259
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
260 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
261 * gg_send_packet() // funkcja wewnętrzna
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
262 *
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
263 * konstruuje pakiet i wysyła go do serwera.
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
264 *
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
265 * - sock - deskryptor gniazda
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
266 * - type - typ pakietu
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
267 * - payload_1 - pierwsza część pakietu
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
268 * - payload_length_1 - długość pierwszej części
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
269 * - payload_2 - druga część pakietu
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
270 * - payload_length_2 - długość drugiej części
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
271 * - ... - kolejne części pakietu i ich długości
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
272 * - NULL - końcowym parametr (konieczny!)
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
273 *
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
274 * jeśli się powiodło, zwraca 0, w przypadku błędu -1. jeśli errno == ENOMEM,
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
275 * zabrakło pamięci. inaczej był błąd przy wysyłaniu pakietu. dla errno == 0
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
276 * nie wysłano całego pakietu.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
277 */
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
278 int gg_send_packet(struct gg_session *sess, int type, ...)
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
279 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
280 struct gg_header *h;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
281 char *tmp;
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
282 int tmp_length;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
283 void *payload;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
284 int payload_length;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
285 va_list ap;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
286 int res;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
287
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
288 gg_debug(GG_DEBUG_FUNCTION, "** gg_send_packet(%p, 0x%.2x, ...)\n", sess, type);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
289
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
290 tmp_length = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
291
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
292 if (!(tmp = malloc(sizeof(struct gg_header)))) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
293 gg_debug(GG_DEBUG_MISC, "// gg_send_packet() not enough memory for packet header\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
294 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
295 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
296
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
297 h = (struct gg_header*) tmp;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
298 h->type = fix32(type);
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
299 h->length = fix32(0);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
300
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
301 va_start(ap, type);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
302
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
303 payload = va_arg(ap, void *);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
304
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
305 while (payload) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
306 char *tmp2;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
307
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
308 payload_length = va_arg(ap, int);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
309
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
310 if (payload_length < 0)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
311 gg_debug(GG_DEBUG_MISC, "// gg_send_packet() invalid payload length (%d)\n", payload_length);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
312
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
313 if (!(tmp2 = realloc(tmp, sizeof(struct gg_header) + tmp_length + payload_length))) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
314 gg_debug(GG_DEBUG_MISC, "// gg_send_packet() not enough memory for payload\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
315 free(tmp);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
316 va_end(ap);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
317 return -1;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
318 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
319
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
320 tmp = tmp2;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
321
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
322 memcpy(tmp + sizeof(struct gg_header) + tmp_length, payload, payload_length);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
323 tmp_length += payload_length;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
324
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
325 payload = va_arg(ap, void *);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
326 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
327
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
328 va_end(ap);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
329
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
330 h = (struct gg_header*) tmp;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
331 h->length = fix32(tmp_length);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
332
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
333 if ((gg_debug_level & GG_DEBUG_DUMP)) {
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
334 unsigned int i;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
335
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
336 gg_debug(GG_DEBUG_DUMP, "// gg_send_packet(0x%.2x)", fix32(h->type));
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
337 for (i = 0; i < sizeof(struct gg_header) + fix32(h->length); i++)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
338 gg_debug(GG_DEBUG_DUMP, " %.2x", (unsigned char) tmp[i]);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
339 gg_debug(GG_DEBUG_DUMP, "\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
340 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
341
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
342 tmp_length += sizeof(struct gg_header);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
343
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
344 if ((res = gg_write(sess, tmp, tmp_length)) < tmp_length) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
345 gg_debug(GG_DEBUG_MISC, "// gg_send_packet() write() failed. res = %d, errno = %d (%s)\n", res, errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
346 free(tmp);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
347 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
348 }
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
349
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
350 free(tmp);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
351 return 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
352 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
353
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
354 /*
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
355 * gg_write() // funkcja pomocnicza
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
356 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
357 * zapisuje do gniazda określoną ilość bajtów. bierze pod uwagę, czy mamy
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
358 * połączenie zwykłe czy TLS.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
359 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
360 * - sess - sesja,
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
361 * - buf - bufor,
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
362 * - length - ilość bajtów,
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
363 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
364 * takie same wartości jak write().
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
365 */
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
366 int gg_write(struct gg_session *sess, const char *buf, int length)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
367 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
368 int res;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
369
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
370 #ifdef __GG_LIBGADU_HAVE_OPENSSL
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
371 if (sess->ssl) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
372 int err;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
373
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
374 res = SSL_write(sess->ssl, buf, length);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
375
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
376 if (res < 0) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
377 err = SSL_get_error(sess->ssl, res);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
378
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
379 if (err == SSL_ERROR_WANT_WRITE)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
380 errno = EAGAIN;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
381
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
382 return -1;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
383 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
384 } else
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
385 #endif
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
386 res = write(sess->fd, buf, length);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
387
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
388 return res;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
389 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
390
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
391
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
392 #ifndef _WIN32
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
393 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
394 * gg_login()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
395 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
396 * rozpoczyna procedurę łączenia się z serwerem. resztę obsłguje się przez
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
397 * gg_watch_event.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
398 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
399 * - uin - numerek usera,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
400 * - password - jego hasełko,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
401 * - async - ma być asynchronicznie?
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
402 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
403 * UWAGA! program musi obsłużyć SIGCHLD, jeśli łączy się asynchronicznie,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
404 * żeby zrobić pogrzeb zmarłemu procesowi resolvera.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
405 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
406 * w przypadku błędu zwraca NULL, jeśli idzie dobrze (async) albo poszło
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
407 * dobrze (sync), zwróci wskaźnik do zaalokowanej struktury `gg_session'.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
408 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
409 struct gg_session *gg_login(uin_t uin, char *password, int async)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
410 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
411 struct gg_session *sess;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
412 char *hostname;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
413 int port;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
414
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
415 gg_debug(GG_DEBUG_FUNCTION, "** gg_login(%u, \"...\", %d);\n", uin, async);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
416
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
417 if (!(sess = malloc(sizeof(*sess))))
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
418 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
419
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
420 sess->uin = uin;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
421 if (!(sess->password = strdup(password))) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
422 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
423 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
424 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
425 sess->state = GG_STATE_RESOLVING;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
426 sess->check = GG_CHECK_READ;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
427 sess->async = async;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
428 sess->seq = 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
429 sess->recv_left = 0;
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
430 sess->last_pong = 0;
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
431 sess->server_ip = 0;
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
432 sess->initial_status = 0;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
433 sess->type = GG_SESSION_GG;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
434
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
435 if (gg_http_use_proxy) {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
436 hostname = gg_http_proxy_host;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
437 port = gg_http_proxy_port;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
438 } else {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
439 hostname = GG_APPMSG_HOST;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
440 port = GG_APPMSG_PORT;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
441 };
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
442
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
443 if (async) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
444 if (gg_resolve(&sess->fd, &sess->pid, hostname)) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
445 gg_debug(GG_DEBUG_MISC, "-- resolving failed\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
446 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
447 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
448 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
449 } else {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
450 struct in_addr a;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
451
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
452 if ((a.s_addr = inet_addr(hostname)) == INADDR_NONE) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
453 struct hostent *he;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
454
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
455 if (!(he = gethostbyname(hostname))) {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
456 gg_debug(GG_DEBUG_MISC, "-- host %s not found\n", hostname);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
457 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
458 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
459 } else
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
460 memcpy((char*) &a, he->h_addr, sizeof(a));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
461 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
462
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
463 if (!(sess->fd = gg_connect(&a, port, 0)) == -1) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
464 gg_debug(GG_DEBUG_MISC, "-- connection failed\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
465 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
466 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
467 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
468
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
469 sess->state = GG_STATE_CONNECTING;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
470
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
471 while (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
472 struct gg_event *e;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
473
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
474 if (!(e = gg_watch_fd(sess))) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
475 gg_debug(GG_DEBUG_MISC, "-- some nasty error in gg_watch_fd()\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
476 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
477 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
478 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
479
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
480 if (e->type == GG_EVENT_CONN_FAILED) {
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
481 errno = EACCES;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
482 gg_debug(GG_DEBUG_MISC, "-- could not login\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
483 gg_free_event(e);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
484 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
485 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
486 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
487
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
488 gg_free_event(e);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
489 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
490 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
491
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
492 return sess;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
493 }
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
494 #endif /*!_WIN32*/
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
495
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
496 /*
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
497 * gg_login_hash() // funkcja wewnętrzna
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
498 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
499 * liczy hash z hasła i danego seeda.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
500 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
501 * - password - hasło do hashowania
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
502 * - seed - wartość podana przez serwer
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
503 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
504 * hash.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
505 */
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
506 unsigned int gg_login_hash(const unsigned char *password, unsigned int seed)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
507 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
508 unsigned int x, y, z;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
509
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
510 y = seed;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
511
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
512 for (x = 0; *password; password++) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
513 x = (x & 0xffffff00) | *password;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
514 y ^= x;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
515 y += x;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
516 x <<= 8;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
517 y ^= x;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
518 x <<= 8;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
519 y -= x;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
520 x <<= 8;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
521 y ^= x;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
522
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
523 z = y & 0x1F;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
524 y = (y << z) | (y >> (32 - z));
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
525 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
526
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
527 return y;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
528 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
529
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
530 /*
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
531 * gg_free_session()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
532 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
533 * zwalnia pamięć zajmowaną przez opis sesji.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
534 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
535 * - sess - opis sesji.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
536 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
537 * nie zwraca niczego, bo i po co?
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
538 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
539 void gg_free_session(struct gg_session *sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
540 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
541 if (!sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
542 return;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
543
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
544 free(sess->password);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
545 free(sess);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
546 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
547
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
548 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
549 * gg_change_status()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
550 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
551 * zmienia status użytkownika. przydatne do /away i /busy oraz /quit.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
552 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
553 * - sess - opis sesji,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
554 * - status - nowy status użytkownika.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
555 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
556 * jeśli wysłał pakiet zwraca 0, jeśli nie udało się, zwraca -1.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
557 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
558 int gg_change_status(struct gg_session *sess, int status)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
559 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
560 struct gg_new_status p;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
561
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
562 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
563 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
564 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
565 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
566
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
567 if (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
568 errno = ENOTCONN;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
569 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
570 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
571
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
572 gg_debug(GG_DEBUG_FUNCTION, "** gg_change_status(..., %d);\n", status);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
573
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
574 p.status = fix32(status);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
575
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
576 return gg_send_packet(sess, GG_NEW_STATUS, &p, sizeof(p), NULL, 0);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
577 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
578
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
579 /*
9415
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
580 * gg_change_status_descr()
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
581 *
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
582 * zmienia status uøytkownika na opisowy.
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
583 *
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
584 * - sess - opis sesji
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
585 * - status - nowy status uøytkownika
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
586 * - descr - opis statusu
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
587 *
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
588 * 0, -1.
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
589 */
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
590 int gg_change_status_descr(struct gg_session *sess, int status, const char *descr)
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
591 {
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
592 struct gg_new_status p;
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
593
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
594 gg_debug(GG_DEBUG_FUNCTION, "** gg_change_status_descr(%p, %d, \"%s\");\n", sess, status, descr);
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
595
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
596 if (!sess || !descr) {
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
597 errno = EFAULT;
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
598 return -1;
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
599 }
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
600
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
601 if (sess->state != GG_STATE_CONNECTED) {
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
602 errno = ENOTCONN;
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
603 return -1;
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
604 }
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
605
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
606 p.status = fix32(status);
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
607
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
608 return gg_send_packet(sess, GG_NEW_STATUS, &p, sizeof(p), descr, (strlen(descr) > GG_STATUS_DESCR_MAXSIZE) ? GG_STATUS_DESCR_MAXSIZE : strlen(descr), NULL);
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
609 }
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
610
1c4092217e4a [gaim-migrate @ 10230]
Luke Schierer <lschiere@pidgin.im>
parents: 9265
diff changeset
611 /*
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
612 * gg_logoff()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
613 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
614 * wylogowuje użytkownika i zamyka połączenie.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
615 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
616 * - sock - deskryptor socketu.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
617 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
618 * nie zwraca błędów. skoro się żegnamy, to olewamy wszystko.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
619 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
620 void gg_logoff(struct gg_session *sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
621 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
622 if (!sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
623 return;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
624
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
625 gg_debug(GG_DEBUG_FUNCTION, "** gg_logoff(...);\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
626
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
627 if (sess->state == GG_STATE_CONNECTED)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
628 gg_change_status(sess, GG_STATUS_NOT_AVAIL);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
629
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
630 if (sess->fd) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
631 shutdown(sess->fd, 2);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
632 close(sess->fd);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
633 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
634 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
635
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
636 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
637 * gg_send_message()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
638 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
639 * wysyła wiadomość do innego użytkownika. zwraca losowy numer
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
640 * sekwencyjny, który można zignorować albo wykorzystać do potwierdzenia.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
641 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
642 * - sess - opis sesji
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
643 * - msgclass - rodzaj wiadomości
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
644 * - recipient - numer adresata
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
645 * - message - treść wiadomości
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
646 *
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
647 * numer sekwencyjny wiadomości lub -1 w przypadku błędu.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
648 */
10344
5976491e07a7 [gaim-migrate @ 11554]
Mark Doliner <mark@kingant.net>
parents: 9863
diff changeset
649 int gg_send_message(struct gg_session *sess, int msgclass, uin_t recipient, const char *message)
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
650 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
651 gg_debug(GG_DEBUG_FUNCTION, "** gg_send_message(%p, %d, %u, %p)\n", sess, msgclass, recipient, message);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
652
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
653 return gg_send_message_richtext(sess, msgclass, recipient, message, NULL, 0);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
654 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
655
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
656 /*
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
657 * gg_send_message_richtext()
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
658 *
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
659 * wysyła kolorową wiadomość do innego użytkownika. zwraca losowy numer
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
660 * sekwencyjny, który można zignorować albo wykorzystać do potwierdzenia.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
661 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
662 * - sess - opis sesji
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
663 * - msgclass - rodzaj wiadomości
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
664 * - recipient - numer adresata
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
665 * - message - treść wiadomości
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
666 * - format - informacje o formatowaniu
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
667 * - formatlen - długość informacji o formatowaniu
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
668 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
669 * numer sekwencyjny wiadomości lub -1 w przypadku błędu.
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
670 */
10344
5976491e07a7 [gaim-migrate @ 11554]
Mark Doliner <mark@kingant.net>
parents: 9863
diff changeset
671 int gg_send_message_richtext(struct gg_session *sess, int msgclass, uin_t recipient, const char *message, const unsigned char *format, int formatlen)
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
672 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
673 struct gg_send_msg s;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
674
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
675 gg_debug(GG_DEBUG_FUNCTION, "** gg_send_message_richtext(%p, %d, %u, %p, %p, %d);\n", sess, msgclass, recipient, message, format, formatlen);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
676
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
677 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
678 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
679 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
680 }
9863
0e3a84f18467 [gaim-migrate @ 10742]
Mark Doliner <mark@kingant.net>
parents: 9713
diff changeset
681
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
682 if (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
683 errno = ENOTCONN;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
684 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
685 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
686
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
687 s.recipient = fix32(recipient);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
688 if (!sess->seq)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
689 sess->seq = 0x01740000 | (rand() & 0xffff);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
690 s.seq = fix32(sess->seq);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
691 s.msgclass = fix32(msgclass);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
692 sess->seq += (rand() % 0x300) + 0x300;
9863
0e3a84f18467 [gaim-migrate @ 10742]
Mark Doliner <mark@kingant.net>
parents: 9713
diff changeset
693
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
694 if (gg_send_packet(sess, GG_SEND_MSG, &s, sizeof(s), message, strlen(message) + 1, format, formatlen, NULL) == -1)
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
695 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
696
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
697 return fix32(s.seq);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
698 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
699
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
700 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
701 * gg_ping()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
702 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
703 * wysyła do serwera pakiet typu yeah-i'm-still-alive.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
704 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
705 * - sess - zgadnij.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
706 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
707 * jeśli nie powiodło się wysłanie pakietu, zwraca -1. otherwise 0.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
708 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
709 int gg_ping(struct gg_session *sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
710 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
711 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
712 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
713 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
714 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
715
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
716 if (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
717 errno = ENOTCONN;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
718 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
719 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
720
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
721 gg_debug(GG_DEBUG_FUNCTION, "** gg_ping(...);\n");
9863
0e3a84f18467 [gaim-migrate @ 10742]
Mark Doliner <mark@kingant.net>
parents: 9713
diff changeset
722
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
723 return gg_send_packet(sess, GG_PING, NULL);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
724 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
725
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
726 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
727 * gg_free_event()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
728 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
729 * zwalnia pamięć zajmowaną przez informację o zdarzeniu
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
730 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
731 * - event - wskaźnik do informacji o zdarzeniu
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
732 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
733 * nie ma czego zwracać.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
734 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
735 void gg_free_event(struct gg_event *e)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
736 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
737 if (!e)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
738 return;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
739 if (e->type == GG_EVENT_MSG)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
740 free(e->event.msg.message);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
741 if (e->type == GG_EVENT_NOTIFY)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
742 free(e->event.notify);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
743 free(e);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
744 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
745
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
746 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
747 * gg_notify()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
748 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
749 * wysyła serwerowi listę ludków, za którymi tęsknimy.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
750 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
751 * - sess - identyfikator sesji,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
752 * - userlist - wskaźnik do tablicy numerów,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
753 * - count - ilość numerków.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
754 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
755 * jeśli udało się, zwraca 0. jeśli błąd, dostajemy -1.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
756 */
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
757 int gg_notify(struct gg_session *sess, uin_t *userlist, int count)
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
758 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
759 struct gg_notify *n;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
760 uin_t *u;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
761 int i, res = 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
762
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
763 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
764 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
765 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
766 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
767
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
768 if (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
769 errno = ENOTCONN;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
770 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
771 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
772
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
773 gg_debug(GG_DEBUG_FUNCTION, "** gg_notify(..., %d);\n", count);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
774
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
775 if (!userlist || !count)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
776 return 0;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
777
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
778 if (!(n = (struct gg_notify*) malloc(sizeof(*n) * count)))
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
779 return -1;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
780
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
781 for (u = userlist, i = 0; i < count; u++, i++) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
782 n[i].uin = fix32(*u);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
783 n[i].dunno1 = 3;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
784 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
785
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
786 if (gg_send_packet(sess, GG_NOTIFY, n, sizeof(*n) * count, NULL, 0) == -1)
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
787 res = -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
788
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
789 free(n);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
790
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
791 return res;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
792 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
793
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
794 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
795 * gg_add_notify()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
796 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
797 * dodaje w locie do listy ukochanych dany numerek.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
798 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
799 * - sess - identyfikator sesji,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
800 * - uin - numerek ukochanej.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
801 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
802 * jeśli udało się wysłać, daje 0. inaczej -1.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
803 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
804 int gg_add_notify(struct gg_session *sess, uin_t uin)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
805 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
806 struct gg_add_remove a;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
807
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
808 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
809 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
810 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
811 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
812
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
813 if (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
814 errno = ENOTCONN;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
815 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
816 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
817
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
818 gg_debug(GG_DEBUG_FUNCTION, "** gg_add_notify(..., %u);\n", uin);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
819
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
820 a.uin = fix32(uin);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
821 a.dunno1 = 3;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
822
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
823 return gg_send_packet(sess, GG_ADD_NOTIFY, &a, sizeof(a), NULL);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
824 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
825
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
826 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
827 * gg_remove_notify()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
828 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
829 * w locie usuwa z listy zainteresowanych.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
830 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
831 * - sess - id sesji,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
832 * - uin - numerek.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
833 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
834 * zwraca -1 jeśli był błąd, 0 jeśli się udało wysłać pakiet.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
835 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
836 int gg_remove_notify(struct gg_session *sess, uin_t uin)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
837 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
838 struct gg_add_remove a;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
839
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
840 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
841 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
842 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
843 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
844
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
845 if (sess->state != GG_STATE_CONNECTED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
846 errno = ENOTCONN;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
847 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
848 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
849
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
850 gg_debug(GG_DEBUG_FUNCTION, "** gg_remove_notify(..., %u);\n", uin);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
851
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
852 a.uin = fix32(uin);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
853 a.dunno1 = 3;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
854
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
855 return gg_send_packet(sess, GG_REMOVE_NOTIFY, &a, sizeof(a), NULL, 0);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
856 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
857
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
858 /*
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
859 * gg_userlist_request()
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
860 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
861 * wysyła żądanie/zapytanie listy kontaktów na serwerze.
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
862 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
863 * - sess - opis sesji
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
864 * - type - rodzaj zapytania/żądania
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
865 * - request - treść zapytania/żądania (może być NULL)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
866 *
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
867 * 0, -1
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
868 */
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
869 int gg_userlist_request(struct gg_session *sess, char type, const char *request)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
870 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
871 int len;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
872
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
873 if (!sess) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
874 errno = EINVAL;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
875 return -1;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
876 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
877
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
878 if (!request) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
879 sess->userlist_blocks = 1;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
880 return gg_send_packet(sess, GG_USERLIST_REQUEST, &type, sizeof(type), NULL);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
881 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
882
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
883 len = strlen(request);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
884
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
885 sess->userlist_blocks = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
886
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
887 while (len > 2047) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
888 sess->userlist_blocks++;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
889
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
890 if (gg_send_packet(sess, GG_USERLIST_REQUEST, &type, sizeof(type), request, 2047, NULL) == -1)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
891 return -1;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
892
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
893 if (type == GG_USERLIST_PUT)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
894 type = GG_USERLIST_PUT_MORE;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
895
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
896 request += 2047;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
897 len -= 2047;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
898 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
899
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
900 sess->userlist_blocks++;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
901
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
902 return gg_send_packet(sess, GG_USERLIST_REQUEST, &type, sizeof(type), request, len, NULL);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
903 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
904
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
905 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
906 * gg_watch_fd_connected() // funkcja wewnętrzna
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
907 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
908 * patrzy na socketa, odbiera pakiet i wypełnia strukturę zdarzenia.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
909 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
910 * - sock - lalala, trudno zgadnąć.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
911 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
912 * jeśli błąd -1, jeśli dobrze 0.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
913 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
914 static int gg_watch_fd_connected(struct gg_session *sess, struct gg_event *e)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
915 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
916 struct gg_header *h;
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
917 char *p;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
918
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
919 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
920 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
921 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
922 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
923
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
924 gg_debug(GG_DEBUG_FUNCTION, "** gg_watch_fd_connected(...);\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
925
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
926 if (!(h = gg_recv_packet(sess))) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
927 gg_debug(GG_DEBUG_MISC, "-- gg_recv_packet failed. errno = %d (%d)\n", errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
928 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
929 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
930
6247
9860b81548d8 [gaim-migrate @ 6741]
Mark Doliner <mark@kingant.net>
parents: 6063
diff changeset
931 p = (void *)h + sizeof(struct gg_header);
9863
0e3a84f18467 [gaim-migrate @ 10742]
Mark Doliner <mark@kingant.net>
parents: 9713
diff changeset
932
0e3a84f18467 [gaim-migrate @ 10742]
Mark Doliner <mark@kingant.net>
parents: 9713
diff changeset
933
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
934 switch (h->type) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
935 case GG_RECV_MSG:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
936 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
937 struct gg_recv_msg *r = (void *)p;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
938
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
939 gg_debug(GG_DEBUG_MISC, "-- received a message\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
940
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
941 if (h->length >= sizeof(*r)) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
942 e->type = GG_EVENT_MSG;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
943 e->event.msg.msgclass = fix32(r->msgclass);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
944 e->event.msg.sender = fix32(r->sender);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
945 e->event.msg.message = strdup((char*) r + sizeof(*r));
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
946 e->event.msg.time = fix32(r->time);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
947 }
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
948 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
949 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
950 case GG_NOTIFY_REPLY:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
951 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
952 struct gg_notify_reply *n = (void *)p;
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
953 int count, i;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
954
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
955 gg_debug(GG_DEBUG_MISC, "-- received a notify reply\n");
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
956
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
957 e->type = GG_EVENT_NOTIFY;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
958 if (!(e->event.notify = (void*) malloc(h->length + 2 * sizeof(*n)))) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
959 gg_debug(GG_DEBUG_MISC, "-- not enough memory\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
960 free(h);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
961 return -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
962 }
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
963 count = h->length / sizeof(*n);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
964 memcpy(e->event.notify, p, h->length);
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
965 e->event.notify[count].uin = 0;
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
966 for (i = 0; i < count; i++) {
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
967 e->event.notify[i].uin = fix32(e->event.notify[i].uin);
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
968 e->event.notify[i].status = fix32(e->event.notify[i].status);
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
969 }
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
970 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
971 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
972
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
973 case GG_NOTIFY_REPLY60:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
974 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
975 struct gg_notify_reply60 *n = (void*) p;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
976 unsigned int length = h->length, i = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
977
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
978 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() received a notify reply\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
979
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
980 e->type = GG_EVENT_NOTIFY60;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
981 e->event.notify60 = malloc(sizeof(*e->event.notify60));
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
982
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
983 if (!e->event.notify60) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
984 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() not enough memory for notify data\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
985 goto fail;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
986 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
987
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
988 e->event.notify60[0].uin = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
989
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
990 while (length >= sizeof(struct gg_notify_reply60)) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
991 uin_t uin = fix32(n->uin);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
992 char *tmp;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
993
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
994 e->event.notify60[i].uin = uin & 0x00ffffff;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
995 e->event.notify60[i].status = n->status;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
996 e->event.notify60[i].remote_ip = n->remote_ip;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
997 e->event.notify60[i].remote_port = fix16(n->remote_port);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
998 e->event.notify60[i].version = n->version;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
999 e->event.notify60[i].image_size = n->image_size;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1000 e->event.notify60[i].descr = NULL;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1001 e->event.notify60[i].time = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1002
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1003 if (GG_S_D(n->status)) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1004 unsigned char descr_len = *((char*) n + sizeof(struct gg_notify_reply60));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1005
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1006 if (descr_len < length) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1007 if (!(e->event.notify60[i].descr = malloc(descr_len + 1))) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1008 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() not enough memory for notify data\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1009 goto fail;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1010 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1011
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1012 memcpy(e->event.notify60[i].descr, (char*) n + sizeof(struct gg_notify_reply60) + 1, descr_len);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1013 e->event.notify60[i].descr[descr_len] = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1014
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1015 /* XXX czas */
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1016 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1017
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1018 length -= sizeof(struct gg_notify_reply60) + descr_len + 1;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1019 n = (void*) ((char*) n + sizeof(struct gg_notify_reply60) + descr_len + 1);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1020 } else {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1021 length -= sizeof(struct gg_notify_reply60);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1022 n = (void*) ((char*) n + sizeof(struct gg_notify_reply60));
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1023 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1024
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1025 if (!(tmp = realloc(e->event.notify60, (i + 2) * sizeof(*e->event.notify60)))) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1026 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() not enough memory for notify data\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1027 free(e->event.notify60);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1028 goto fail;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1029 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1030
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1031 e->event.notify60 = (void*) tmp;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1032 e->event.notify60[++i].uin = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1033 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1034
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1035 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1036 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1037
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1038 case GG_STATUS:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1039 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1040 struct gg_status *s = (void *)p;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1041
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1042 gg_debug(GG_DEBUG_MISC, "-- received a status change\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1043
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1044 if (h->length >= sizeof(*s)) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1045 e->type = GG_EVENT_STATUS;
10648
78720741ae3d [gaim-migrate @ 12166]
Stu Tomlinson <stu@nosnilmot.com>
parents: 10388
diff changeset
1046 memcpy(&e->event.status, p, sizeof(*s));
2399
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
1047 e->event.status.uin = fix32(e->event.status.uin);
b2926d21f067 [gaim-migrate @ 2412]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2393
diff changeset
1048 e->event.status.status = fix32(e->event.status.status);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1049 }
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1050 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1051 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1052
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1053 case GG_STATUS60:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1054 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1055 struct gg_status60 *s = (void*) p;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1056 uint32_t uin;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1057
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1058 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() received a status change\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1059
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1060 if (h->length < sizeof(*s))
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1061 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1062
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1063 uin = fix32(s->uin);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1064
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1065 e->type = GG_EVENT_STATUS60;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1066 e->event.status60.uin = uin & 0x00ffffff;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1067 e->event.status60.status = s->status;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1068 e->event.status60.remote_ip = s->remote_ip;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1069 e->event.status60.remote_port = fix16(s->remote_port);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1070 e->event.status60.version = s->version;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1071 e->event.status60.image_size = s->image_size;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1072 e->event.status60.descr = NULL;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1073 e->event.status60.time = 0;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1074
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1075 if (uin & 0x40000000)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1076 e->event.status60.version |= GG_HAS_AUDIO_MASK;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1077
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1078 if (h->length > sizeof(*s)) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1079 int len = h->length - sizeof(*s);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1080 char *buf = malloc(len + 1);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1081
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1082 if (buf) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1083 memcpy(buf, (char*) p + sizeof(*s), len);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1084 buf[len] = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1085 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1086
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1087 e->event.status60.descr = buf;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1088
11157
f068eaabe332 [gaim-migrate @ 13242]
Richard Laager <rlaager@wiktel.com>
parents: 11105
diff changeset
1089 if (len > 4 && p[h->length - 5] == 0) {
f068eaabe332 [gaim-migrate @ 13242]
Richard Laager <rlaager@wiktel.com>
parents: 11105
diff changeset
1090 uint32_t t;
f068eaabe332 [gaim-migrate @ 13242]
Richard Laager <rlaager@wiktel.com>
parents: 11105
diff changeset
1091 memcpy(&t, p + h->length - 4, sizeof(uint32_t));
f068eaabe332 [gaim-migrate @ 13242]
Richard Laager <rlaager@wiktel.com>
parents: 11105
diff changeset
1092 e->event.status60.time = t;
f068eaabe332 [gaim-migrate @ 13242]
Richard Laager <rlaager@wiktel.com>
parents: 11105
diff changeset
1093 }
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1094 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1095
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1096 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1097 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1098
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1099 case GG_SEND_MSG_ACK:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1100 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1101 struct gg_send_msg_ack *s = (void *)p;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1102
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1103 gg_debug(GG_DEBUG_MISC, "-- received a message ack\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1104
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1105 if (h->length >= sizeof(*s)) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1106 e->type = GG_EVENT_ACK;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1107 e->event.ack.status = fix32(s->status);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1108 e->event.ack.recipient = fix32(s->recipient);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1109 e->event.ack.seq = fix32(s->seq);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1110 }
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1111 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1112 }
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1113
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1114 case GG_PONG:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1115 {
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1116 gg_debug(GG_DEBUG_MISC, "-- received a pong\n");
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1117 sess->last_pong = time(NULL);
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1118 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1119 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1120
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1121 case GG_USERLIST_REPLY:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1122 {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1123 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() received userlist reply\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1124
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1125 if (h->length < 1)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1126 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1127
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1128 /* jeśli odpowiedź na eksport, wywołaj zdarzenie tylko
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1129 * gdy otrzymano wszystkie odpowiedzi */
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1130 if (p[0] == GG_USERLIST_PUT_REPLY || p[0] == GG_USERLIST_PUT_MORE_REPLY) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1131 if (--sess->userlist_blocks)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1132 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1133
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1134 p[0] = GG_USERLIST_PUT_REPLY;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1135 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1136
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1137 if (h->length > 1) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1138 char *tmp;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1139 int len = (sess->userlist_reply) ? strlen(sess->userlist_reply) : 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1140
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1141 gg_debug(GG_DEBUG_MISC, "userlist_reply=%p, len=%d\n", sess->userlist_reply, len);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1142
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1143 if (!(tmp = realloc(sess->userlist_reply, len + h->length))) {
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1144 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() not enough memory for userlist reply\n");
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1145 free(sess->userlist_reply);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1146 sess->userlist_reply = NULL;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1147 goto fail;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1148 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1149
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1150 sess->userlist_reply = tmp;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1151 sess->userlist_reply[len + h->length - 1] = 0;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1152 memcpy(sess->userlist_reply + len, p + 1, h->length - 1);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1153 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1154
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1155 if (p[0] == GG_USERLIST_GET_MORE_REPLY)
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1156 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1157
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1158 e->type = GG_EVENT_USERLIST;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1159 e->event.userlist.type = p[0];
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1160 e->event.userlist.reply = sess->userlist_reply;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1161 sess->userlist_reply = NULL;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1162
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1163 break;
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1164 }
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1165
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1166 default:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1167 gg_debug(GG_DEBUG_MISC, "// gg_watch_fd_connected() received unknown packet 0x%.2x\n", h->type);
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1168 }
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1169
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1170 free(h);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1171
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1172 return 0;
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1173
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1174 fail:
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1175 free(h);
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1176 return -1;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1177 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1178
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1179 /*
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1180 * gg_watch_fd()
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1181 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1182 * funkcja wywoływana, gdy coś się stanie na obserwowanym deskryptorze.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1183 * zwraca klientowi informację o tym, co się dzieje.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1184 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1185 * - sess - identyfikator sesji.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1186 *
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1187 * zwraca wskaźnik do struktury gg_event, którą trzeba zwolnić później
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1188 * za pomocą gg_free_event(). jesli rodzaj zdarzenia jest równy
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1189 * GG_EVENT_NONE, należy je olać kompletnie. jeśli zwróciło NULL,
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1190 * stało się coś niedobrego -- albo brakło pamięci albo zerwało
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1191 * połączenie albo coś takiego.
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1192 */
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1193 struct gg_event *gg_watch_fd(struct gg_session *sess)
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1194 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1195 struct gg_event *e;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1196 int res = 0;
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1197 #ifndef _WIN32
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1198 int port;
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1199 #endif
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1200
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1201 if (!sess) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1202 errno = EFAULT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1203 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1204 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1205
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1206 gg_debug(GG_DEBUG_FUNCTION, "** gg_watch_fd(...);\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1207
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1208 if (!(e = (void*) malloc(sizeof(*e)))) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1209 gg_debug(GG_DEBUG_MISC, "-- not enough memory\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1210 return NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1211 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1212
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1213 e->type = GG_EVENT_NONE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1214
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1215 switch (sess->state) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1216 #ifndef _WIN32
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1217 /* Apparantly we will never be in this state as long as we are
5681
46d7ad0dfa26 [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 4298
diff changeset
1218 using gaim_proxy_connect instead of gg_login - Herman */
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1219 case GG_STATE_RESOLVING:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1220 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1221 struct in_addr a;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1222
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1223 gg_debug(GG_DEBUG_MISC, "== GG_STATE_RESOLVING\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1224
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1225 if (read(sess->fd, &a, sizeof(a)) < sizeof(a) || a.s_addr == INADDR_NONE) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1226 gg_debug(GG_DEBUG_MISC, "-- resolving failed\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1227
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1228 errno = ENOENT;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1229 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1230 e->event.failure = GG_FAILURE_RESOLVING;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1231 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1232
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1233 close(sess->fd);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1234
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1235 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1236 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1237
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1238 sess->server_ip = a.s_addr;
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1239
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1240 close(sess->fd);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1241
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1242 waitpid(sess->pid, NULL, 0);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1243
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1244 gg_debug(GG_DEBUG_MISC, "-- resolved, now connecting\n");
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1245
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1246 if (gg_http_use_proxy) {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1247 port = gg_http_proxy_port;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1248 } else {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1249 port = GG_APPMSG_PORT;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1250 };
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1251
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1252 if ((sess->fd = gg_connect(&a, port, sess->async)) == -1) {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1253 struct in_addr *addr = (struct in_addr*) &sess->server_ip;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1254
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1255 gg_debug(GG_DEBUG_MISC, "-- connection failed, trying direct connection\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1256
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1257 if ((sess->fd = gg_connect(addr, GG_DEFAULT_PORT, sess->async)) == -1) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1258 gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n");
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1259 if ((sess->fd = gg_connect(&a, GG_HTTPS_PORT, sess->async)) == -1) {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1260 gg_debug(GG_DEBUG_MISC, "-- connect() failed. errno = %d (%s)\n", errno, strerror(errno));
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1261
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1262 e->type = GG_EVENT_CONN_FAILED;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1263 e->event.failure = GG_FAILURE_CONNECTING;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1264 sess->state = GG_STATE_IDLE;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1265 break;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1266 }
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1267 }
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1268 sess->state = GG_STATE_CONNECTING_GG;
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1269 sess->check = GG_CHECK_WRITE;
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1270 } else {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1271 sess->state = GG_STATE_CONNECTING;
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1272 sess->check = GG_CHECK_WRITE;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1273 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1274
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1275 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1276 }
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1277 #endif /* !_WIN32 */
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1278 case GG_STATE_CONNECTING:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1279 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1280 char buf[1024];
6063
5239a3b4ab33 [gaim-migrate @ 6513]
Nathan Walp <nwalp@pidgin.im>
parents: 5872
diff changeset
1281 unsigned int res, res_size = sizeof(res);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1282
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1283 gg_debug(GG_DEBUG_MISC, "== GG_STATE_CONNECTING\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1284
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3630
diff changeset
1285 if (sess->async && (getsockopt(sess->fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res)) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1286 #if 0
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1287 struct in_addr *addr = (struct in_addr*) &sess->server_ip;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1288 gg_debug(GG_DEBUG_MISC, "-- http connection failed, errno = %d (%s), trying direct connection\n", res, strerror(res));
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1289 if ((sess->fd = gg_connect(addr, GG_DEFAULT_PORT, sess->async)) == -1) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1290 gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n");
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1291 if ((sess->fd = gg_connect(addr, GG_HTTPS_PORT, sess->async)) == -1) {
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1292 gg_debug(GG_DEBUG_MISC, "-- connect() failed. errno = %d (%s)\n", errno, strerror(errno));
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1293
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1294 e->type = GG_EVENT_CONN_FAILED;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1295 e->event.failure = GG_FAILURE_CONNECTING;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1296 sess->state = GG_STATE_IDLE;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1297 break;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1298 }
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1299 }
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1300
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1301 sess->state = GG_STATE_CONNECTING_GG;
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1302 sess->check = GG_CHECK_WRITE;
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1303 #else
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1304 gg_debug(GG_DEBUG_MISC, "-- http connection failed, errno = %d\n", res);
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1305 e->type = GG_EVENT_CONN_FAILED;
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1306 e->event.failure = GG_FAILURE_CONNECTING;
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1307 sess->state = GG_STATE_IDLE;
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1308 #endif
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1309 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1310 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1311
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1312 gg_debug(GG_DEBUG_MISC, "-- http connection succeded, sending query\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1313
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1314 if (gg_http_use_proxy) {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1315 g_snprintf(buf, sizeof(buf) - 1,
9663
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1316 "GET http://" GG_APPMSG_HOST "/appsvc/appmsg2.asp?fmnumber=%lu&version=%s&lastmsg=0 HTTP/1.0\r\n"
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1317 "Host: " GG_APPMSG_HOST "\r\n"
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1318 "User-Agent: " GG_HTTP_USERAGENT "\r\n"
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1319 "Pragma: no-cache\r\n"
9663
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1320 "\r\n", sess->uin, gg_urlencode(GG_DEFAULT_CLIENT_VERSION));
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1321 } else {
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1322 g_snprintf(buf, sizeof(buf) - 1,
9663
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1323 "GET /appsvc/appmsg2.asp?fmnumber=%lu&version=%s&lastmsg=0 HTTP/1.0\r\n"
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1324 "Host: " GG_APPMSG_HOST "\r\n"
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1325 "User-Agent: " GG_HTTP_USERAGENT "\r\n"
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1326 "Pragma: no-cache\r\n"
9663
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1327 "\r\n", sess->uin, gg_urlencode(GG_DEFAULT_CLIENT_VERSION));
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1328 };
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1329
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1330 gg_debug(GG_DEBUG_MISC, "=> -----BEGIN-HTTP-QUERY-----\n%s\n=> -----END-HTTP-QUERY-----\n", buf);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1331 if (write(sess->fd, buf, strlen(buf)) < strlen(buf)) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1332 gg_debug(GG_DEBUG_MISC, "-- sending query failed\n");
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1333 errno = EIO;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1334 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1335 e->event.failure = GG_FAILURE_WRITING;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1336 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1337 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1338 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1339
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1340 sess->state = GG_STATE_READING_DATA;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1341 sess->check = GG_CHECK_READ;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1342
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1343 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1344 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1345
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1346 case GG_STATE_READING_DATA:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1347 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1348 char buf[1024], *tmp, *host;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1349 int port = GG_DEFAULT_PORT;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1350 struct in_addr a;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1351
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1352 gg_debug(GG_DEBUG_MISC, "== GG_STATE_READING_DATA\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1353
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1354 gg_read_line(sess->fd, buf, sizeof(buf) - 1);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1355 gg_chomp(buf);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1356
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1357 gg_debug(GG_DEBUG_TRAFFIC, "-- got http response (%s)\n", buf);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1358 if (strncmp(buf, "HTTP/1.", 7) || strncmp(buf + 9, "200", 3)) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1359 gg_debug(GG_DEBUG_MISC, "-- but that's not what we've expected\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1360
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1361 errno = EINVAL;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1362 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1363 e->event.failure = GG_FAILURE_INVALID;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1364 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1365 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1366 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1367
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1368 while (strcmp(buf, "\r\n") && strcmp(buf, ""))
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1369 gg_read_line(sess->fd, buf, sizeof(buf) - 1);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1370
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1371 gg_read_line(sess->fd, buf, sizeof(buf) - 1);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1372 gg_chomp(buf);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1373
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1374 close(sess->fd);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1375
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1376 gg_debug(GG_DEBUG_TRAFFIC, "-- received http data (%s)\n", buf);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1377
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1378 /* analizujemy otrzymane dane. */
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1379 tmp = buf;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1380
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1381 while (*tmp && *tmp != ' ')
9663
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1382 tmp++;
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1383 while (*tmp && *tmp == ' ')
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1384 tmp++;
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1385 host = tmp;
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1386 while (*tmp && *tmp != ' ')
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1387 tmp++;
318d14658f95 [gaim-migrate @ 10513]
Luke Schierer <lschiere@pidgin.im>
parents: 9415
diff changeset
1388 *tmp = 0;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1389
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1390 if ((tmp = strchr(host, ':'))) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1391 *tmp = 0;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1392 port = atoi(tmp+1);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1393 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1394
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1395 a.s_addr = inet_addr(host);
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1396 sess->server_ip = a.s_addr;
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1397
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1398 #if 0
5681
46d7ad0dfa26 [gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents: 4298
diff changeset
1399 /* We need to watch this non-blocking socket so lets use gaim_proxy_connect
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1400 in gg.c - Herman */
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1401 if((sess->fd = gg_connect(&a, port, sess->assync)) == -1) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1402 gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n");
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1403 if ((sess->fd = gg_connect(&a, GG_HTTPS_PORT, sess->async)) == -1) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1404 gg_debug(GG_DEBUG_MISC, "-- connection failed, errno = %d (%s)\n", errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1405
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1406 e->type = GG_EVENT_CONN_FAILED;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1407 e->event.failure = GG_FAILURE_CONNECTING;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1408 sess->state = GG_STATE_IDLE;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1409 break;
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1410 }
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1411 }
3630
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1412 #else
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1413 sess->port = port;
9682c0e022c6 [gaim-migrate @ 3753]
Rob Flynn <gaim@robflynn.com>
parents: 2846
diff changeset
1414 #endif
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1415 sess->state = GG_STATE_CONNECTING_GG;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1416 sess->check = GG_CHECK_WRITE;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1417
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1418 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1419 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1420
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1421 case GG_STATE_CONNECTING_GG:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1422 {
6063
5239a3b4ab33 [gaim-migrate @ 6513]
Nathan Walp <nwalp@pidgin.im>
parents: 5872
diff changeset
1423 unsigned int res, res_size = sizeof(res);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1424
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1425 gg_debug(GG_DEBUG_MISC, "== GG_STATE_CONNECTING_GG\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1426
3717
988485669631 [gaim-migrate @ 3850]
Herman Bloggs <hermanator12002@yahoo.com>
parents: 3630
diff changeset
1427 if (sess->async && (getsockopt(sess->fd, SOL_SOCKET, SO_ERROR, &res, &res_size) || res)) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1428 struct in_addr *addr = (struct in_addr*) &sess->server_ip;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1429
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1430 gg_debug(GG_DEBUG_MISC, "-- connection failed, trying https connection\n");
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1431 if ((sess->fd = gg_connect(addr, GG_HTTPS_PORT, sess->async)) == -1) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1432 gg_debug(GG_DEBUG_MISC, "-- connection failed, errno = %d (%s)\n", errno, strerror(errno));
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1433
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1434 e->type = GG_EVENT_CONN_FAILED;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1435 e->event.failure = GG_FAILURE_CONNECTING;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1436 sess->state = GG_STATE_IDLE;
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1437 break;
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1438 }
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1439 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1440
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1441 gg_debug(GG_DEBUG_MISC, "-- connected\n");
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1442
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1443 sess->state = GG_STATE_READING_KEY;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1444 sess->check = GG_CHECK_READ;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1445
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1446 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1447 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1448
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1449 case GG_STATE_READING_KEY:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1450 {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1451 struct gg_header *h;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1452 struct gg_welcome *w;
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1453 struct gg_login60 l;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1454 unsigned int hash;
10388
088633feb846 [gaim-migrate @ 11615]
Nathan Walp <nwalp@pidgin.im>
parents: 10344
diff changeset
1455 unsigned char *password = sess->password;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1456
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1457 gg_debug(GG_DEBUG_MISC, "== GG_STATE_READING_KEY\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1458
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1459 if (!(h = gg_recv_packet(sess))) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1460 gg_debug(GG_DEBUG_MISC, "-- gg_recv_packet() failed. errno = %d (%s)\n", errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1461 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1462 e->event.failure = GG_FAILURE_READING;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1463 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1464 close(sess->fd);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1465 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1466 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1467
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1468 if (h->type != GG_WELCOME) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1469 gg_debug(GG_DEBUG_MISC, "-- invalid packet received\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1470
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1471 free(h);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1472 close(sess->fd);
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1473 errno = EINVAL;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1474 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1475 e->event.failure = GG_FAILURE_INVALID;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1476 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1477 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1478 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1479
6247
9860b81548d8 [gaim-migrate @ 6741]
Mark Doliner <mark@kingant.net>
parents: 6063
diff changeset
1480 w = (struct gg_welcome *)((void *)h + sizeof(struct gg_header));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1481 w->key = fix32(w->key);
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1482
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1483 hash = gg_login_hash(password, w->key);
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1484
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1485 gg_debug(GG_DEBUG_DUMP, "%%%% klucz serwera %.4x, hash hasła %.8x\n", w->key, hash);
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1486
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1487 free(h);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1488
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1489 free(sess->password);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1490 sess->password = NULL;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1491
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1492 l.uin = fix32(sess->uin);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1493 l.hash = fix32(hash);
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1494 l.status = fix32(sess->initial_status ? sess->initial_status : GG_STATUS_AVAIL);
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1495 l.version = fix32(0x20);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1496 l.local_ip = 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1497 l.local_port = 0;
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1498
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1499 gg_debug(GG_DEBUG_TRAFFIC, "-- sending GG_LOGIN packet\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1500
8775
ce90b119b103 [gaim-migrate @ 9537]
Luke Schierer <lschiere@pidgin.im>
parents: 6247
diff changeset
1501 if (gg_send_packet(sess, GG_LOGIN60, &l, sizeof(l), NULL, 0) == -1) {
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1502 gg_debug(GG_DEBUG_TRAFFIC, "-- oops, failed. errno = %d (%s)\n", errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1503
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1504 close(sess->fd);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1505 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1506 e->event.failure = GG_FAILURE_WRITING;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1507 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1508 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1509 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1510
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1511 sess->state = GG_STATE_READING_REPLY;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1512
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1513 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1514 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1515
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1516 case GG_STATE_READING_REPLY:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1517 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1518 struct gg_header *h;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1519
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1520 gg_debug(GG_DEBUG_MISC, "== GG_STATE_READING_REPLY\n");
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1521
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1522 if (!(h = gg_recv_packet(sess))) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1523 gg_debug(GG_DEBUG_MISC, "-- recv_packet failed\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1524 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1525 e->event.failure = GG_FAILURE_READING;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1526 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1527 close(sess->fd);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1528 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1529 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1530
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1531 if (h->type == GG_LOGIN_OK) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1532 gg_debug(GG_DEBUG_MISC, "-- login succeded\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1533 e->type = GG_EVENT_CONN_SUCCESS;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1534 sess->state = GG_STATE_CONNECTED;
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1535 free(h);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1536 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1537 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1538
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1539 if (h->type == GG_LOGIN_FAILED) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1540 gg_debug(GG_DEBUG_MISC, "-- login failed\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1541 e->event.failure = GG_FAILURE_PASSWORD;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1542 errno = EACCES;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1543 } else {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1544 gg_debug(GG_DEBUG_MISC, "-- invalid packet\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1545 e->event.failure = GG_FAILURE_INVALID;
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1546 errno = EINVAL;
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1547 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1548
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1549 e->type = GG_EVENT_CONN_FAILED;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1550 sess->state = GG_STATE_IDLE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1551 close(sess->fd);
2792
9123abd0db92 [gaim-migrate @ 2805]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2595
diff changeset
1552 free(h);
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1553
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1554 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1555 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1556
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1557 case GG_STATE_CONNECTED:
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1558 {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1559 gg_debug(GG_DEBUG_MISC, "== GG_STATE_CONNECTED\n");
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1560
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1561 if ((res = gg_watch_fd_connected(sess, e)) == -1) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1562
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1563 gg_debug(GG_DEBUG_MISC, "-- watch_fd_connected failed. errno = %d (%s)\n", errno, strerror(errno));
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1564
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1565 if (errno == EAGAIN) {
2393
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1566 e->type = GG_EVENT_NONE;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1567 res = 0;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1568 } else
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1569 res = -1;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1570 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1571 break;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1572 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1573 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1574
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1575 if (res == -1) {
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1576 free(e);
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1577 e = NULL;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1578 }
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1579
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1580 return e;
a7ecfd3f7714 [gaim-migrate @ 2406]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
diff changeset
1581 }
2846
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1582
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1583 /*
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1584 * Local variables:
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1585 * c-indentation-style: k&r
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1586 * c-basic-offset: 8
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1587 * indent-tabs-mode: notnil
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1588 * End:
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1589 *
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1590 * vim: shiftwidth=8:
4b3f17ca66bf [gaim-migrate @ 2859]
Eric Warmenhoven <eric@warmenhoven.org>
parents: 2792
diff changeset
1591 */