annotate src/protocols/gg/libgg.c @ 9265:6a1f2c444ee7

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