libpurple/protocols/gg/lib/events.c

Thu, 13 Feb 2014 18:29:10 +0100

author
Tomasz Wasilczyk <twasilczyk@pidgin.im>
date
Thu, 13 Feb 2014 18:29:10 +0100
changeset 35557
e83a87761544
parent 35369
7e15c82f7d71
child 35620
fb20cfee648a
permissions
-rw-r--r--

Gadu-Gadu: update internal libgadu to 1.12.0-rc2

35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1 /* $Id$ */
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
2
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
3 /*
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
4 * (C) Copyright 2001-2006 Wojtek Kaniewski <wojtekka@irc.pl>
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
5 * Robert J. Woźny <speedy@ziew.org>
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
6 * Arkadiusz Miśkiewicz <arekm@pld-linux.org>
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
7 * Adam Wysocki <gophi@ekg.chmurka.net>
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
8 *
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
10 * it under the terms of the GNU Lesser General Public License Version
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
11 * 2.1 as published by the Free Software Foundation.
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
12 *
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
16 * GNU Lesser General Public License for more details.
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
17 *
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
19 * License along with this program; if not, write to the Free Software
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
21 * USA.
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
22 */
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
23
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
24 /**
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
25 * \file events.c
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
26 *
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
27 * \brief Obsługa zdarzeń
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
28 *
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
29 * \todo Poprawna obsługa gg_proxy_http_only
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
30 */
29106
51c7b2177e42 Fix all the remaining files for which internal.h doesn't end up being the first include.
Paul Aurich <darkrain42@pidgin.im>
parents: 19859
diff changeset
31
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
32 #include "strman.h"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
33 #include "network.h"
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
34
31826
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
35 #include "libgadu.h"
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
36 #include "protocol.h"
33285
32cbdbf016bd Gadu-Gadu: synchronize internal libgadu with upstream - part 4. Adds -Wall -Wextra -Werror switches. Refs #343
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32688
diff changeset
37 #include "internal.h"
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
38 #include "encoding.h"
33285
32cbdbf016bd Gadu-Gadu: synchronize internal libgadu with upstream - part 4. Adds -Wall -Wextra -Werror switches. Refs #343
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 32688
diff changeset
39 #include "debug.h"
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
40 #include "session.h"
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
41 #include "resolver.h"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
42 #include "config.h"
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
43
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
44 #include <errno.h>
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
45 #include <string.h>
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
46 #include <stdlib.h>
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
47 #include <time.h>
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
48 #include <ctype.h>
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
49 #ifdef GG_CONFIG_HAVE_GNUTLS
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
50 # include <gnutls/gnutls.h>
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
51 # include <gnutls/x509.h>
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
52 #endif
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
53 #ifdef GG_CONFIG_HAVE_OPENSSL
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
54 # include <openssl/err.h>
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
55 # include <openssl/x509.h>
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
56 # include <openssl/rand.h>
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
57 #endif
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
58
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
59 /**
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
60 * Zwalnia pamięć zajmowaną przez informację o zdarzeniu.
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
61 *
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
62 * Funkcję należy wywoływać za każdym razem gdy funkcja biblioteki zwróci
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
63 * strukturę \c gg_event.
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
64 *
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
65 * \param e Struktura zdarzenia
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
66 *
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
67 * \ingroup events
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
68 */
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
69 void gg_event_free(struct gg_event *e)
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
70 {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
71 gg_debug(GG_DEBUG_FUNCTION, "** gg_event_free(%p);\n", e);
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
72
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
73 if (!e)
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
74 return;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
75
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
76 switch (e->type) {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
77 case GG_EVENT_MSG:
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
78 case GG_EVENT_MULTILOGON_MSG:
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
79 free(e->event.msg.message);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
80 free(e->event.msg.formats);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
81 free(e->event.msg.recipients);
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
82 free(e->event.msg.xhtml_message);
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
83 break;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
84
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
85 case GG_EVENT_NOTIFY:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
86 free(e->event.notify);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
87 break;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
88
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
89 case GG_EVENT_NOTIFY60:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
90 {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
91 int i;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
92
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
93 for (i = 0; e->event.notify60[i].uin; i++)
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
94 free(e->event.notify60[i].descr);
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
95
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
96 free(e->event.notify60);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
97
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
98 break;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
99 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
100
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
101 case GG_EVENT_STATUS60:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
102 free(e->event.status60.descr);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
103 break;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
104
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
105 case GG_EVENT_STATUS:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
106 free(e->event.status.descr);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
107 break;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
108
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
109 case GG_EVENT_NOTIFY_DESCR:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
110 free(e->event.notify_descr.notify);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
111 free(e->event.notify_descr.descr);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
112 break;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
113
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
114 case GG_EVENT_DCC_VOICE_DATA:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
115 free(e->event.dcc_voice_data.data);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
116 break;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
117
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
118 case GG_EVENT_PUBDIR50_SEARCH_REPLY:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
119 case GG_EVENT_PUBDIR50_READ:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
120 case GG_EVENT_PUBDIR50_WRITE:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
121 gg_pubdir50_free(e->event.pubdir50);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
122 break;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
123
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
124 case GG_EVENT_USERLIST:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
125 free(e->event.userlist.reply);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
126 break;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
127
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
128 case GG_EVENT_IMAGE_REPLY:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
129 free(e->event.image_reply.filename);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
130 free(e->event.image_reply.image);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
131 break;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
132
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
133 case GG_EVENT_XML_EVENT:
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
134 free(e->event.xml_event.data);
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
135 break;
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
136
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
137 case GG_EVENT_JSON_EVENT:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
138 free(e->event.json_event.data);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
139 free(e->event.json_event.type);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
140 break;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
141
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
142 case GG_EVENT_USER_DATA:
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
143 {
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
144 unsigned int i, j;
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
145
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
146 for (i = 0; i < e->event.user_data.user_count; i++) {
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
147 for (j = 0; j < e->event.user_data.users[i].attr_count; j++) {
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
148 free(e->event.user_data.users[i].attrs[j].key);
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
149 free(e->event.user_data.users[i].attrs[j].value);
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
150 }
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
151
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
152 free(e->event.user_data.users[i].attrs);
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
153 }
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
154
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
155 free(e->event.user_data.users);
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
156
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
157 break;
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
158 }
31826
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
159
31609
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
160 case GG_EVENT_MULTILOGON_INFO:
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
161 {
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
162 int i;
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
163
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
164 for (i = 0; i < e->event.multilogon_info.count; i++)
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
165 free(e->event.multilogon_info.sessions[i].name);
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
166
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
167 free(e->event.multilogon_info.sessions);
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
168
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
169 break;
d67fbc90b28a matekm and kkszysiu collaborated on this patch to update our internal libgadu
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 31294
diff changeset
170 }
31826
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
171
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
172 case GG_EVENT_USERLIST100_REPLY:
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
173 free(e->event.userlist100_reply.reply);
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
174 break;
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
175
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
176 case GG_EVENT_IMTOKEN:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
177 free(e->event.imtoken.imtoken);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
178 break;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
179
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
180 case GG_EVENT_CHAT_INFO:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
181 free(e->event.chat_info.participants);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
182 break;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
183 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
184
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
185 free(e);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
186 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
187
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
188 /** \cond internal */
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
189
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
190 /**
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
191 * \internal Usuwa obrazek z kolejki do wysłania.
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
192 *
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
193 * \param s Struktura sesji
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
194 * \param q Struktura obrazka
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
195 * \param freeq Flaga zwolnienia elementu kolejki
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
196 *
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
197 * \return 0 jeśli się powiodło, -1 jeśli wystąpił błąd
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
198 */
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
199 int gg_image_queue_remove(struct gg_session *s, struct gg_image_queue *q, int freeq)
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
200 {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
201 if (!s || !q) {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
202 errno = EFAULT;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
203 return -1;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
204 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
205
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
206 if (s->images == q)
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
207 s->images = q->next;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
208 else {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
209 struct gg_image_queue *qq;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
210
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
211 for (qq = s->images; qq; qq = qq->next) {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
212 if (qq->next == q) {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
213 qq->next = q->next;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
214 break;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
215 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
216 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
217 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
218
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
219 if (freeq) {
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
220 free(q->image);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
221 free(q->filename);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
222 free(q);
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
223 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
224
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
225 return 0;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
226 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
227
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
228 /** \endcond */
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
229
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
230 /**
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
231 * \internal Inicjalizuje struktury SSL.
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
232 *
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
233 * \param gs Struktura sesji
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
234 *
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
235 * \return 0 jeśli się powiodło, -1 jeśli wystąpił błąd
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
236 */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
237 int gg_session_init_ssl(struct gg_session *gs)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
238 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
239 #ifdef GG_CONFIG_HAVE_GNUTLS
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
240 gg_session_gnutls_t *tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
241
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
242 tmp = (gg_session_gnutls_t*) gs->ssl;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
243
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
244 if (tmp == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
245 tmp = malloc(sizeof(gg_session_gnutls_t));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
246
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
247 if (tmp == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
248 gg_debug(GG_DEBUG_MISC, "// gg_session_connect() out of memory for GnuTLS session\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
249 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
250 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
251
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
252 memset(tmp, 0, sizeof(gg_session_gnutls_t));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
253
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
254 gs->ssl = tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
255
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
256 gnutls_global_init();
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
257 gnutls_certificate_allocate_credentials(&tmp->xcred);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
258 #ifdef GG_CONFIG_SSL_SYSTEM_TRUST
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
259 #ifdef HAVE_GNUTLS_CERTIFICATE_SET_X509_SYSTEM_TRUST
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
260 gnutls_certificate_set_x509_system_trust(tmp->xcred);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
261 #else
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
262 gnutls_certificate_set_x509_trust_file(tmp->xcred, GG_CONFIG_GNUTLS_SYSTEM_TRUST_STORE, GNUTLS_X509_FMT_PEM);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
263 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
264 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
265 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
266 gnutls_deinit(tmp->session);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
267 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
268
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
269 gnutls_init(&tmp->session, GNUTLS_CLIENT);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
270 gnutls_set_default_priority(tmp->session);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
271 gnutls_credentials_set(tmp->session, GNUTLS_CRD_CERTIFICATE, tmp->xcred);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
272 gnutls_transport_set_ptr(tmp->session, (gnutls_transport_ptr_t) (long) gs->fd);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
273 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
274
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
275 #ifdef GG_CONFIG_HAVE_OPENSSL
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
276 char buf[1024];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
277
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
278 OpenSSL_add_ssl_algorithms();
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
279
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
280 if (!RAND_status()) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
281 char rdata[1024];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
282 struct {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
283 time_t time;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
284 void *ptr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
285 } rstruct;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
286
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
287 time(&rstruct.time);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
288 rstruct.ptr = (void *) &rstruct;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
289
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
290 RAND_seed((void *) rdata, sizeof(rdata));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
291 RAND_seed((void *) &rstruct, sizeof(rstruct));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
292 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
293
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
294 if (gs->ssl_ctx == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
295 gs->ssl_ctx = SSL_CTX_new(SSLv3_client_method());
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
296
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
297 if (gs->ssl_ctx == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
298 ERR_error_string_n(ERR_get_error(), buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
299 gg_debug(GG_DEBUG_MISC, "// gg_session_connect() SSL_CTX_new() failed: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
300 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
301 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
302
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
303 SSL_CTX_set_verify(gs->ssl_ctx, SSL_VERIFY_NONE, NULL);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
304 #ifdef GG_CONFIG_SSL_SYSTEM_TRUST
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
305 SSL_CTX_set_default_verify_paths(gs->ssl_ctx);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
306 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
307 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
308
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
309 if (gs->ssl != NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
310 SSL_free(gs->ssl);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
311
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
312 gs->ssl = SSL_new(gs->ssl_ctx);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
313
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
314 if (gs->ssl == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
315 ERR_error_string_n(ERR_get_error(), buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
316 gg_debug(GG_DEBUG_MISC, "// gg_session_connect() SSL_new() failed: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
317 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
318 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
319
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
320 SSL_set_fd(gs->ssl, gs->fd);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
321 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
322
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
323 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
324 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
325
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
326 /**
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
327 * \internal Funkcja próbuje wysłać dane zakolejkowane do wysyłki.
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
328 *
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
329 * \param sess Struktura sesji
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
330 *
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
331 * \return 0 jeśli się powiodło, -1 jeśli wystąpił błąd
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
332 */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
333 static int gg_send_queued_data(struct gg_session *sess)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
334 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
335 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
336
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
337 if (sess->send_buf == NULL || sess->send_left == 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
338 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
339
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
340 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() sending %d bytes of queued data\n", sess->send_left);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
341
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
342 res = send(sess->fd, sess->send_buf, sess->send_left, 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
343
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
344 if (res == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
345 if (errno == EAGAIN || errno == EINTR) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
346 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() non-critical send error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
347
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
348 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
349 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
350
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
351 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() send() failed (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
352
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
353 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
354 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
355
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
356 if (res == sess->send_left) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
357 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() sent all queued data\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
358 free(sess->send_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
359 sess->send_buf = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
360 sess->send_left = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
361 } else if (res > 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
362 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() sent %d bytes of queued data, %d bytes left\n", res, sess->send_left - res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
363
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
364 memmove(sess->send_buf, sess->send_buf + res, sess->send_left - res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
365 sess->send_left -= res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
366 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
367
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
368 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
369 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
370
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
371 /**
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
372 * \internal Sprawdza wynik połączenia asynchronicznego.
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
373 * \param gs Struktura sesji
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
374 * \param res_ptr Wskaźnik na kod błędu
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
375 * \return 0 jeśli się powiodło, -1 jeśli wystąpił błąd
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
376 */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
377 static int gg_async_connect_failed(struct gg_session *gs, int *res_ptr)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
378 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
379 int res = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
380 socklen_t res_size = sizeof(res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
381
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
382 if (!gs->async)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
383 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
384
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
385 if (gs->timeout == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
386 *res_ptr = ETIMEDOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
387 return 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
388 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
389
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
390 if (getsockopt(gs->fd, SOL_SOCKET, SO_ERROR, &res, &res_size) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
391 *res_ptr = errno;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
392 return 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
393 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
394
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
395 if (res != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
396 *res_ptr = res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
397 return 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
398 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
399
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
400 *res_ptr = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
401
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
402 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
403 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
404
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
405 typedef enum
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
406 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
407 GG_ACTION_WAIT,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
408 GG_ACTION_NEXT,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
409 GG_ACTION_FAIL
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
410 } gg_action_t;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
411
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
412 typedef gg_action_t (*gg_state_handler_t)(struct gg_session *gs, struct gg_event *ge, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
413
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
414 typedef struct
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
415 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
416 enum gg_state_t state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
417 gg_state_handler_t handler;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
418 enum gg_state_t next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
419 enum gg_state_t alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
420 enum gg_state_t alt2_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
421 } gg_state_transition_t;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
422
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
423 /* zwraca:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
424 * -1 w przypadku błędu
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
425 * 0 jeżeli nie ma ustawionego specjalnego managera gniazdek
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
426 * 1 w przypadku powodzenia
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
427 */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
428 static int gg_handle_resolve_custom(struct gg_session *sess, enum gg_state_t next_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
429 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
430 struct gg_session_private *p = sess->private_data;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
431 int is_tls = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
432 int port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
433
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
434 if (p->socket_manager_type == GG_SOCKET_MANAGER_TYPE_INTERNAL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
435 return 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
436
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
437 if (p->socket_manager.connect_cb == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
438 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
439 "// gg_handle_resolve_custom() socket_manager.connect "
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
440 "callback is empty\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
441 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
442 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
443
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
444 if (p->socket_handle != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
445 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
446 "// gg_handle_resolve_custom() socket_handle is not "
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
447 "NULL\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
448 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
449 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
450
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
451 port = sess->connect_port[sess->connect_index];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
452 if (next_state == GG_STATE_SEND_HUB)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
453 port = GG_APPMSG_PORT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
454
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
455 if (sess->ssl_flag != GG_SSL_DISABLED &&
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
456 next_state == GG_STATE_READING_KEY)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
457 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
458 /* XXX: w tej chwili nie ma możliwości łączenia się do HUBa po
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
459 * SSL, ale może będzie w przyszłości */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
460 is_tls = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
461 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
462
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
463 if (is_tls && p->socket_manager_type == GG_SOCKET_MANAGER_TYPE_TCP) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
464 is_tls = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
465 next_state = GG_STATE_TLS_NEGOTIATION;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
466 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
467
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
468 if (port <= 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
469 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
470 "// gg_handle_resolve_custom() port <= 0\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
471 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
472 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
473
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
474 p->socket_failure = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
475 p->socket_next_state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
476 p->socket_handle = p->socket_manager.connect_cb(
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
477 p->socket_manager.cb_data, sess->resolver_host, port, is_tls,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
478 sess->async, sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
479
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
480 if (p->socket_failure != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
481 if (p->socket_handle != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
482 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_WARNING,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
483 "// gg_handle_resolve_custom() handle should be"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
484 " empty on error\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
485 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
486 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
487 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
488
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
489 if (p->socket_handle == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
490 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
491 "// gg_handle_resolve_custom() returned empty "
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
492 "handle\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
493 return -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
494 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
495
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
496 return 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
497 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
498
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
499 static gg_action_t gg_handle_resolve_sync(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
500 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
501 struct in_addr addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
502 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
503
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
504 res = gg_handle_resolve_custom(sess, alt_state);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
505 if (res == 1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
506 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
507 else if (res == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
508 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
509
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
510 addr.s_addr = inet_addr(sess->resolver_host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
511
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
512 if (addr.s_addr == INADDR_NONE) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
513 struct in_addr *addr_list = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
514 unsigned int addr_count;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
515
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
516 if (gg_gethostbyname_real(sess->resolver_host, &addr_list, &addr_count, 0) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
517 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() host %s not found\n", sess->resolver_host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
518 e->event.failure = GG_FAILURE_RESOLVING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
519 free(addr_list);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
520 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
521 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
522
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
523 sess->resolver_result = addr_list;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
524 sess->resolver_count = addr_count;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
525 sess->resolver_index = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
526 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
527 sess->resolver_result = malloc(sizeof(struct in_addr));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
528
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
529 if (sess->resolver_result == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
530 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of memory\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
531 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
532 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
533
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
534 sess->resolver_result[0].s_addr = addr.s_addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
535 sess->resolver_count = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
536 sess->resolver_index = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
537 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
538
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
539 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
540
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
541 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
542 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
543
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
544 static gg_action_t gg_handle_resolve_async(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
545 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
546 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
547
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
548 res = gg_handle_resolve_custom(sess, alt_state);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
549 if (res == 1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
550 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
551 else if (res == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
552 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
553
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
554 if (sess->resolver_start(&sess->fd, &sess->resolver, sess->resolver_host) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
555 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() resolving failed (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
556 e->event.failure = GG_FAILURE_RESOLVING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
557 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
558 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
559
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
560 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
561 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
562 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
563
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
564 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
565 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
566
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
567 static gg_action_t gg_handle_resolving(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
568 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
569 char buf[256];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
570 int count = -1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
571 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
572 unsigned int i;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
573
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
574 res = gg_resolver_recv(sess->fd, buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
575
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
576 if (res == -1 && (errno == EAGAIN || errno == EINTR)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
577 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() non-critical error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
578 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
579 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
580
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
581 sess->resolver_cleanup(&sess->resolver, 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
582
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
583 if (res == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
584 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() read error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
585 e->event.failure = GG_FAILURE_RESOLVING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
586 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
587 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
588
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
589 if (res > 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
590 char *tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
591
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
592 tmp = realloc(sess->recv_buf, sess->recv_done + res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
593
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
594 if (tmp == NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
595 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
596
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
597 sess->recv_buf = tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
598 memcpy(sess->recv_buf + sess->recv_done, buf, res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
599 sess->recv_done += res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
600 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
601
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
602 /* Sprawdź, czy mamy listę zakończoną INADDR_NONE */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
603
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
604 for (i = 0; i < sess->recv_done / sizeof(struct in_addr); i++) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
605 if (((struct in_addr*) sess->recv_buf)[i].s_addr == INADDR_NONE) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
606 count = i;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
607 break;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
608 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
609 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
610
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
611 /* Nie znaleziono hosta */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
612
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
613 if (count == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
614 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() host not found\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
615 e->event.failure = GG_FAILURE_RESOLVING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
616 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
617 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
618
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
619 /* Nie mamy pełnej listy, ale połączenie zerwane */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
620
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
621 if (res == 0 && count == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
622 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection broken\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
623 e->event.failure = GG_FAILURE_RESOLVING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
624 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
625 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
626
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
627 /* Nie mamy pełnej listy, normalna sytuacja */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
628
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
629 if (count == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
630 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
631
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
632 #ifndef GG_DEBUG_DISABLE
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
633 if ((gg_debug_level & GG_DEBUG_DUMP) && (count > 0)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
634 char *list;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
635 size_t len;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
636
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
637 len = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
638
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
639 for (i = 0; i < (unsigned int) count; i++) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
640 if (i > 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
641 len += 2;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
642
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
643 len += strlen(inet_ntoa(((struct in_addr*) sess->recv_buf)[i]));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
644 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
645
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
646 list = malloc(len + 1);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
647
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
648 if (list == NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
649 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
650
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
651 list[0] = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
652
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
653 for (i = 0; i < (unsigned int) count; i++) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
654 if (i > 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
655 strcat(list, ", ");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
656
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
657 strcat(list, inet_ntoa(((struct in_addr*) sess->recv_buf)[i]));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
658 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
659
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
660 gg_debug_session(sess, GG_DEBUG_DUMP, "// gg_watch_fd() resolved: %s\n", list);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
661
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
662 free(list);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
663 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
664 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
665
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
666 gg_close(sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
667
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
668 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
669 sess->resolver_result = (struct in_addr*) sess->recv_buf;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
670 sess->resolver_count = count;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
671 sess->resolver_index = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
672 sess->recv_buf = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
673 sess->recv_done = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
674
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
675 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
676 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
677
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
678 static gg_action_t gg_handle_connect(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
679 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
680 struct in_addr addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
681 int port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
682
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
683 if (sess->resolver_index >= sess->resolver_count) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
684 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of addresses to connect to\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
685 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
686 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
687 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
688
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
689 addr = sess->resolver_result[sess->resolver_index];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
690
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
691 if (sess->state == GG_STATE_CONNECT_HUB) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
692 port = GG_APPMSG_PORT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
693 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
694 sess->proxy_addr = addr.s_addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
695 port = sess->proxy_port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
696 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
697
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
698 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connecting to %s:%d\n", inet_ntoa(addr), port);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
699
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
700 sess->fd = gg_connect(&addr, port, sess->async);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
701
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
702 if (sess->fd == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
703 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection failed (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
704 sess->resolver_index++;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
705 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
706 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
707
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
708 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
709 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
710 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
711 sess->soft_timeout = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
712
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
713 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
714 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
715
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
716 static gg_action_t gg_handle_connecting(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
717 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
718 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
719
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
720 sess->soft_timeout = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
721
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
722 if (gg_async_connect_failed(sess, &res)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
723 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection failed (errno=%d, %s)\n", res, strerror(res));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
724 gg_close(sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
725 sess->resolver_index++;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
726 sess->state = alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
727 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
728 /* Z proxy zwykle łączymy się dwa razy, więc nie zwalniamy
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
729 * adresów IP po pierwszym połączeniu. */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
730 if (sess->state != GG_STATE_CONNECTING_PROXY_HUB) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
731 free(sess->resolver_result);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
732 sess->resolver_result = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
733 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
734
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
735 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
736 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
737
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
738 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
739 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
740
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
741 static gg_action_t gg_handle_connect_gg(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
742 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
743 struct in_addr addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
744 uint16_t port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
745
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
746 gg_debug_session(sess, GG_DEBUG_MISC, "resolver_index=%d, connect_index=%d, connect_port={%d,%d}\n", sess->resolver_index, sess->connect_index, sess->connect_port[0], sess->connect_port[1]);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
747
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
748 if ((unsigned int) sess->connect_index >= sizeof(sess->connect_port) / sizeof(sess->connect_port[0]) || sess->connect_port[sess->connect_index] == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
749 sess->connect_index = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
750 sess->resolver_index++;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
751 if (sess->resolver_index >= sess->resolver_count) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
752 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of addresses to connect to\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
753 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
754 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
755 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
756 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
757
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
758 addr = sess->resolver_result[sess->resolver_index];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
759 port = sess->connect_port[sess->connect_index];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
760
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
761 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connecting to %s:%d\n", inet_ntoa(addr), port);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
762
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
763 sess->server_addr = addr.s_addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
764 sess->fd = gg_connect(&addr, port, sess->async);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
765
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
766 if (sess->fd == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
767 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection failed (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
768 sess->connect_index++;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
769 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
770 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
771
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
772 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
773 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
774 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
775 sess->soft_timeout = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
776
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
777 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
778 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
779
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
780 static gg_action_t gg_handle_connecting_gg(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
781 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
782 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
783
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
784 sess->soft_timeout = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
785
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
786 /* jeśli wystąpił błąd podczas łączenia się... */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
787 if (gg_async_connect_failed(sess, &res)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
788 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection failed (errno=%d, %s)\n", res, strerror(res));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
789 gg_close(sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
790 sess->connect_index++;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
791 sess->state = alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
792 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
793 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
794
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
795 free(sess->resolver_result);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
796 sess->resolver_result = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
797
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
798 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connected\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
799
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
800 if (sess->ssl_flag != GG_SSL_DISABLED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
801 if (gg_session_init_ssl(sess) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
802 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
803 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
804 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
805
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
806 sess->state = alt2_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
807 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
808 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
809
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
810 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
811 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
812 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
813 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
814 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
815
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
816 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
817 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
818 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
819
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
820 static gg_action_t gg_handle_send_hub(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
821 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
822 char *req, *client, *auth;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
823 const char *host;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
824 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
825 int proxy;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
826 size_t req_len;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
827
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
828 if (sess->client_version != NULL && isdigit(sess->client_version[0]))
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
829 client = gg_urlencode(sess->client_version);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
830 else if (sess->protocol_version <= GG_PROTOCOL_VERSION_100)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
831 client = gg_urlencode(GG_DEFAULT_CLIENT_VERSION_100);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
832 else /* sess->protocol_version >= GG_PROTOCOL_VERSION_110 */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
833 client = gg_urlencode(GG_DEFAULT_CLIENT_VERSION_110);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
834
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
835 if (client == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
836 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of memory for client version\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
837 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
838 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
839
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
840 if (sess->proxy_addr && sess->proxy_port) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
841 host = "http://" GG_APPMSG_HOST;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
842 proxy = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
843 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
844 host = "";
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
845 proxy = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
846 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
847
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
848 auth = gg_proxy_auth();
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
849
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
850 if (sess->ssl_flag != GG_SSL_DISABLED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
851 req = gg_saprintf
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
852 ("GET %s/appsvc/appmsg_ver10.asp?fmnumber=%u&fmt=2&lastmsg=%d&version=%s&age=2&gender=1 HTTP/1.0\r\n"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
853 "Connection: close\r\n"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
854 "Host: " GG_APPMSG_HOST "\r\n"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
855 "%s"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
856 "\r\n", host, sess->uin, sess->last_sysmsg, client, (auth) ? auth : "");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
857 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
858 req = gg_saprintf
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
859 ("GET %s/appsvc/appmsg_ver8.asp?fmnumber=%u&fmt=2&lastmsg=%d&version=%s HTTP/1.0\r\n"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
860 "Host: " GG_APPMSG_HOST "\r\n"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
861 "%s"
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
862 "\r\n", host, sess->uin, sess->last_sysmsg, client, (auth) ? auth : "");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
863 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
864
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
865 if (req == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
866 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of memory\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
867 e->event.failure = GG_FAILURE_PROXY;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
868 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
869 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
870
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
871 req_len = strlen(req);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
872
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
873 free(auth);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
874 free(client);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
875
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
876 gg_debug_session(sess, GG_DEBUG_TRAFFIC, "// sending http query:\n%s", req);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
877
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
878 res = send(sess->fd, req, req_len, 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
879
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
880 free(req);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
881
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
882 if (res == -1 && errno != EINTR && errno != EAGAIN) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
883 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() sending query failed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
884 e->event.failure = (!proxy) ? GG_FAILURE_HUB : GG_FAILURE_PROXY;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
885 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
886 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
887
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
888 if ((size_t) res < req_len) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
889 sess->state = alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
890 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
891 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
892 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
893 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
894 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
895 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
896 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
897
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
898 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
899 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
900
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
901 static gg_action_t gg_handle_sending_hub_proxy(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
902 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
903 if (gg_send_queued_data(sess) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
904 e->event.failure = GG_FAILURE_WRITING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
905 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
906 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
907
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
908 if (sess->send_left > 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
909 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
910
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
911 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
912 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
913 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
914
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
915 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
916 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
917
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
918 static gg_action_t gg_handle_reading_hub_proxy(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
919 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
920 char buf[1024], *tmp, host[128];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
921 int port = GG_DEFAULT_PORT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
922 int reply;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
923 const char *body;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
924 struct in_addr addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
925 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
926 char **host_white;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
927 char *host_white_default[] = GG_DEFAULT_HOST_WHITE_LIST;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
928
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
929 res = recv(sess->fd, buf, sizeof(buf), 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
930
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
931 if (res == -1 && (errno == EAGAIN || errno == EINTR)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
932 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() non-critical recv error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
933 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
934 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
935
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
936 if (res == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
937 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() recv error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
938 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
939 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
940 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
941
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
942 if (res != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
943 tmp = realloc(sess->recv_buf, sess->recv_done + res + 1);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
944
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
945 if (tmp == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
946 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() not enough memory for http reply\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
947 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
948 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
949
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
950 sess->recv_buf = tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
951 memcpy(sess->recv_buf + sess->recv_done, buf, res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
952 sess->recv_done += res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
953 sess->recv_buf[sess->recv_done] = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
954 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
955
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
956 if (res == 0 && sess->recv_buf == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
957 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection closed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
958 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
959 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
960 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
961
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
962 if (res != 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
963 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
964
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
965 gg_debug_session(sess, GG_DEBUG_TRAFFIC, "// received http reply:\n%s", sess->recv_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
966
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
967 res = sscanf(sess->recv_buf, "HTTP/1.%*d %3d ", &reply);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
968
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
969 /* sprawdzamy, czy wszystko w porządku. */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
970 if (res != 1 || reply != 200) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
971 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() invalid http reply, connection failed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
972 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
973 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
974 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
975
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
976 /* szukamy początku treści */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
977 body = strstr(sess->recv_buf, "\r\n\r\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
978
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
979 if (body == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
980 body = strstr(sess->recv_buf, "\n\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
981
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
982 if (body == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
983 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() can't find body\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
984 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
985 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
986 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
987 body += 2;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
988 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
989 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
990 body += 4;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
991 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
992
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
993 // 17591 0 91.197.13.71:8074 91.197.13.71
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
994 res = sscanf(body, "%d %*d %128s", &reply, host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
995
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
996 if (res != 2) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
997 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() invalid hub reply, connection failed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
998 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
999 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1000 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1001
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1002 gg_debug_session(sess, GG_DEBUG_MISC, "reply=%d, host=\"%s\"\n", reply, host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1003
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1004 /* jeśli pierwsza liczba w linii nie jest równa zeru,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1005 * oznacza to, że mamy wiadomość systemową. */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1006 if (reply != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1007 tmp = strchr(body, '\n');
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1008
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1009 if (tmp != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1010 e->type = GG_EVENT_MSG;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1011 e->event.msg.msgclass = reply;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1012 e->event.msg.sender = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1013 e->event.msg.message = (unsigned char*) strdup(tmp + 1);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1014
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1015 if (e->event.msg.message == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1016 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() not enough memory for system message\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1017 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1018 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1019 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1020 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1021
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1022 gg_close(sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1023
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1024 tmp = strchr(host, ':');
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1025
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1026 if (tmp != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1027 *tmp = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1028 port = atoi(tmp + 1);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1029 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1030
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1031 if (strcmp(host, "notoperating") == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1032 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() service unavailable\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1033 e->event.failure = GG_FAILURE_UNAVAILABLE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1034 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1035 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1036
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1037 addr.s_addr = inet_addr(host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1038 if (addr.s_addr == INADDR_NONE)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1039 addr.s_addr = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1040 sess->server_addr = addr.s_addr;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1041
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1042 free(sess->recv_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1043 sess->recv_buf = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1044 sess->recv_done = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1045
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1046 if (sess->state != GG_STATE_READING_PROXY_HUB) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1047 if (sess->port == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1048 sess->connect_port[0] = port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1049 sess->connect_port[1] = (port != GG_HTTPS_PORT) ? GG_HTTPS_PORT : 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1050 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1051 sess->connect_port[0] = sess->port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1052 sess->connect_port[1] = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1053 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1054 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1055 sess->connect_port[0] = (sess->port == 0) ? GG_HTTPS_PORT : sess->port;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1056 sess->connect_port[1] = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1057 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1058
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1059 free(sess->connect_host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1060 sess->connect_host = strdup(host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1061
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1062 if (sess->connect_host == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1063 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() not enough memory\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1064 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1065 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1066
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1067 host_white = sess->private_data->host_white_list;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1068 if (!host_white)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1069 host_white = host_white_default;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1070
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1071 if (sess->ssl_flag == GG_SSL_REQUIRED && host_white[0] != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1072 int host_ok = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1073 char **it;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1074 int host_len;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1075
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1076 host_len = strlen(sess->connect_host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1077
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1078 for (it = host_white; *it != NULL; it++) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1079 const char *white = *it;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1080 int white_len, dom_offset;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1081
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1082 white_len = strlen(white);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1083 if (white_len > host_len)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1084 continue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1085
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1086 dom_offset = host_len - white_len;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1087 if (strncasecmp(sess->connect_host + dom_offset, white,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1088 white_len) != 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1089 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1090 continue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1091 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1092
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1093 if (white_len < host_len) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1094 if (sess->connect_host[dom_offset - 1] != '.')
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1095 continue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1096 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1097
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1098 host_ok = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1099 break;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1100 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1101
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1102 if (!host_ok) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1103 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR,
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1104 "// gg_watch_fd() the HUB server returned "
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1105 "a host that is not trusted (%s)\n",
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1106 sess->connect_host);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1107 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1108 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1109 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1110 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1111
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1112 if (sess->state == GG_STATE_READING_HUB)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1113 sess->resolver_host = sess->connect_host;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1114
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1115 /* Jeśli łączymy się przez proxy, zacznijmy od początku listy */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1116 sess->resolver_index = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1117
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1118 sess->state = (sess->async) ? next_state : alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1119
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1120 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1121 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1122
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1123 static gg_action_t gg_handle_send_proxy_gg(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1124 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1125 char *req, *auth;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1126 size_t req_len;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1127 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1128
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1129 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() %s\n", gg_debug_state(sess->state));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1130
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1131 if (sess->connect_index > 1 || sess->connect_port[sess->connect_index] == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1132 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of connection candidates\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1133 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1134 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1135 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1136
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1137 auth = gg_proxy_auth();
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1138
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1139 req = gg_saprintf("CONNECT %s:%d HTTP/1.0\r\n%s\r\n", sess->connect_host, sess->connect_port[sess->connect_index], (auth) ? auth : "");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1140
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1141 free(auth);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1142
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1143 sess->connect_index++;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1144
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1145 if (req == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1146 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() out of memory\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1147 e->event.failure = GG_FAILURE_PROXY;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1148 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1149 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1150
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1151 req_len = strlen(req);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1152
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1153 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() proxy request:\n%s", req);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1154
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1155 res = send(sess->fd, req, req_len, 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1156
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1157 free(req);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1158
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1159 if (res == -1 && errno != EINTR && errno != EAGAIN) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1160 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() sending query failed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1161 e->event.failure = GG_FAILURE_PROXY;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1162 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1163 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1164
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1165 if ((size_t) res < req_len) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1166 sess->state = alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1167 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1168 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1169 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1170 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1171 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1172 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1173 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1174
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1175 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1176 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1177
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1178 static gg_action_t gg_handle_tls_negotiation(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1179 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1180 int valid_hostname = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1181
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1182 #ifdef GG_CONFIG_HAVE_GNUTLS
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1183 unsigned int status;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1184 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1185
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1186 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() GG_STATE_TLS_NEGOTIATION\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1187
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1188 for (;;) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1189 res = gnutls_handshake(GG_SESSION_GNUTLS(sess));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1190
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1191 if (res == GNUTLS_E_AGAIN) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1192 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() TLS handshake GNUTLS_E_AGAIN\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1193
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1194 if (gnutls_record_get_direction(GG_SESSION_GNUTLS(sess)) == 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1195 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1196 else
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1197 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1198 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1199 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1200 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1201
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1202 if (res == GNUTLS_E_INTERRUPTED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1203 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() TLS handshake GNUTLS_E_INTERRUPTED\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1204 continue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1205 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1206
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1207 if (res != GNUTLS_E_SUCCESS) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1208 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() TLS handshake error: %d, %s\n", res, gnutls_strerror(res));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1209 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1210 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1211 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1212
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1213 break;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1214 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1215
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1216 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() TLS negotiation succeded:\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1217 gg_debug_session(sess, GG_DEBUG_MISC, "// cipher: VERS-%s:%s:%s:%s:COMP-%s\n",
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1218 gnutls_protocol_get_name(gnutls_protocol_get_version(GG_SESSION_GNUTLS(sess))),
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1219 gnutls_cipher_get_name(gnutls_cipher_get(GG_SESSION_GNUTLS(sess))),
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1220 gnutls_kx_get_name(gnutls_kx_get(GG_SESSION_GNUTLS(sess))),
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1221 gnutls_mac_get_name(gnutls_mac_get(GG_SESSION_GNUTLS(sess))),
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1222 gnutls_compression_get_name(gnutls_compression_get(GG_SESSION_GNUTLS(sess))));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1223
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1224 if (gnutls_certificate_type_get(GG_SESSION_GNUTLS(sess)) == GNUTLS_CRT_X509) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1225 unsigned int peer_count;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1226 const gnutls_datum_t *peers;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1227 gnutls_x509_crt_t cert;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1228
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1229 if (gnutls_x509_crt_init(&cert) == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1230 peers = gnutls_certificate_get_peers(GG_SESSION_GNUTLS(sess), &peer_count);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1231
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1232 if (peers != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1233 char buf[256];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1234 size_t size;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1235
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1236 if (gnutls_x509_crt_import(cert, &peers[0], GNUTLS_X509_FMT_DER) == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1237 size = sizeof(buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1238 gnutls_x509_crt_get_dn(cert, buf, &size);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1239 gg_debug_session(sess, GG_DEBUG_MISC, "// cert subject: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1240 size = sizeof(buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1241 gnutls_x509_crt_get_issuer_dn(cert, buf, &size);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1242 gg_debug_session(sess, GG_DEBUG_MISC, "// cert issuer: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1243
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1244 if (gnutls_x509_crt_check_hostname(cert, sess->connect_host) != 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1245 valid_hostname = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1246 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1247 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1248
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1249 gnutls_x509_crt_deinit(cert);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1250 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1251 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1252
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1253 res = gnutls_certificate_verify_peers2(GG_SESSION_GNUTLS(sess), &status);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1254
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1255 if (res != 0 || status != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1256 gg_debug_session(sess, GG_DEBUG_MISC, "//   WARNING! unable to verify peer certificate: 0x%x, %d, %s\n", status, res, gnutls_strerror(res));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1257
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1258 if (sess->ssl_flag == GG_SSL_REQUIRED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1259 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1260 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1261 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1262 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1263 gg_debug_session(sess, GG_DEBUG_MISC, "// verified peer certificate\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1264 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1265
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1266
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1267 #elif defined GG_CONFIG_HAVE_OPENSSL
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1268
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1269 X509 *peer;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1270 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1271
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1272 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() %s\n", gg_debug_state(sess->state));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1273
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1274 res = SSL_connect(GG_SESSION_OPENSSL(sess));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1275
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1276 if (res <= 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1277 int err;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1278
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1279 err = SSL_get_error(GG_SESSION_OPENSSL(sess), res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1280
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1281 if (res == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1282 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() disconnected during TLS negotiation\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1283 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1284 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1285 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1286
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1287 if (err == SSL_ERROR_WANT_READ) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1288 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() SSL_connect() wants to read\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1289
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1290 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1291 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1292 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1293 } else if (err == SSL_ERROR_WANT_WRITE) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1294 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() SSL_connect() wants to write\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1295
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1296 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1297 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1298 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1299 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1300 char buf[256];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1301
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1302 ERR_error_string_n(ERR_get_error(), buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1303
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1304 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() SSL_connect() bailed out: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1305
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1306 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1307 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1308 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1309 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1310
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1311 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() TLS negotiation succeded:\n// cipher: %s\n", SSL_get_cipher_name(GG_SESSION_OPENSSL(sess)));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1312
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1313 peer = SSL_get_peer_certificate(GG_SESSION_OPENSSL(sess));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1314
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1315 if (peer == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1316 gg_debug_session(sess, GG_DEBUG_MISC, "// WARNING! unable to get peer certificate!\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1317
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1318 if (sess->ssl_flag == GG_SSL_REQUIRED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1319 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1320 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1321 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1322 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1323 char buf[256];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1324 long res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1325
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1326 X509_NAME_oneline(X509_get_subject_name(peer), buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1327 gg_debug_session(sess, GG_DEBUG_MISC, "// cert subject: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1328
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1329 X509_NAME_oneline(X509_get_issuer_name(peer), buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1330 gg_debug_session(sess, GG_DEBUG_MISC, "// cert issuer: %s\n", buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1331
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1332 res = SSL_get_verify_result(GG_SESSION_OPENSSL(sess));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1333
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1334 if (res != X509_V_OK) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1335 gg_debug_session(sess, GG_DEBUG_MISC, "//   WARNING! unable to verify peer certificate! res=%ld\n", res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1336
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1337 if (sess->ssl_flag == GG_SSL_REQUIRED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1338 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1339 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1340 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1341 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1342 gg_debug_session(sess, GG_DEBUG_MISC, "// verified peer certificate\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1343 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1344
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1345 if (X509_NAME_get_text_by_NID(X509_get_subject_name(peer), NID_commonName, buf, sizeof(buf)) == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1346 buf[0] = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1347
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1348 /* Obsługa certyfikatów z wieloznacznikiem */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1349 if (strchr(buf, '*') == buf && strchr(buf + 1, '*') == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1350 char *tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1351
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1352 tmp = strchr(sess->connect_host, '.');
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1353
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1354 if (tmp != NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1355 valid_hostname = (strcasecmp(tmp, buf + 1) == 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1356 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1357 valid_hostname = (strcasecmp(sess->connect_host, buf) == 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1358 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1359 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1360
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1361 #else
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1362
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1363 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() no SSL support\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1364 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1365 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1366
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1367 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1368
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1369 if (!valid_hostname) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1370 gg_debug_session(sess, GG_DEBUG_MISC, "//   WARNING! unable to verify hostname\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1371
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1372 if (sess->ssl_flag == GG_SSL_REQUIRED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1373 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1374 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1375 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1376 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1377
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1378 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1379 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1380 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1381
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1382 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1383 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1384
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1385 static gg_action_t gg_handle_reading_proxy_gg(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1386 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1387 char buf[256];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1388 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1389 int reply;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1390 char *body;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1391
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1392 res = recv(sess->fd, buf, sizeof(buf), 0);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1393
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1394 gg_debug_session(sess, GG_DEBUG_MISC, "recv() = %d\n", res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1395
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1396 if (res == -1 && (errno == EAGAIN || errno == EINTR)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1397 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() non-critical recv error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1398 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1399 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1400
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1401 if (res == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1402 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() recv error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1403 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1404 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1405 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1406
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1407 if (res != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1408 char *tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1409
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1410 tmp = realloc(sess->recv_buf, sess->recv_done + res + 1);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1411
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1412 if (tmp == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1413 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() not enough memory for http reply\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1414 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1415 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1416
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1417 sess->recv_buf = tmp;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1418 memcpy(sess->recv_buf + sess->recv_done, buf, res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1419 sess->recv_done += res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1420 sess->recv_buf[sess->recv_done] = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1421 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1422
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1423 if (res == 0 && sess->recv_buf == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1424 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection closed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1425 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1426 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1427 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1428
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1429 /* szukamy początku treści */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1430 body = strstr(sess->recv_buf, "\r\n\r\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1431
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1432 if (body == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1433 body = strstr(sess->recv_buf, "\n\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1434
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1435 if (body == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1436 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() can't find body\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1437 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1438 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1439 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1440 body += 2;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1441 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1442 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1443 body += 4;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1444 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1445
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1446 if (res != 0 && body == NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1447 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1448
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1449 gg_debug_session(sess, GG_DEBUG_TRAFFIC, "// received proxy reply:\n%s\n", sess->recv_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1450
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1451 res = sscanf(sess->recv_buf, "HTTP/1.%*d %3d ", &reply);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1452
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1453 gg_debug_session(sess, GG_DEBUG_MISC, "res = %d, reply = %d\n", res, reply);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1454
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1455 /* sprawdzamy, czy wszystko w porządku. */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1456 if (res != 1 || reply != 200) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1457 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() invalid http reply, connection failed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1458 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1459 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1460 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1461
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1462 if (body == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1463 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() can't find body\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1464 e->event.failure = GG_FAILURE_CONNECTING;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1465 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1466 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1467
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1468 gg_debug_session(sess, GG_DEBUG_MISC, "// found body!\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1469
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1470 if (sess->ssl_flag != GG_SSL_DISABLED) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1471 if (gg_session_init_ssl(sess) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1472 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1473 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1474 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1475
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1476 /* Teoretycznie SSL jest inicjowany przez klienta, więc serwer
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1477 * nie powinien niczego wysłać. */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1478 if (sess->recv_buf + sess->recv_done > body) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1479 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() unexpected SSL data\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1480 e->event.failure = GG_FAILURE_TLS;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1481 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1482 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1483
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1484 free(sess->recv_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1485 sess->recv_buf = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1486 sess->recv_done = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1487
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1488 sess->state = alt_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1489 sess->check = GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1490 sess->timeout = GG_DEFAULT_TIMEOUT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1491
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1492 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1493 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1494
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1495 sess->state = next_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1496 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1497 sess->timeout = GG_DEFAULT_TIMEOUT; /* Pierwszy pakiet musi przyjść */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1498
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1499 // Jeśli zbuforowaliśmy za dużo, przeanalizuj
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1500
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1501 if (sess->recv_buf + sess->recv_done > body) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1502 sess->recv_done = sess->recv_done - (body - sess->recv_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1503 memmove(sess->recv_buf, body, sess->recv_done);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1504 sess->state = alt2_state;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1505 return GG_ACTION_NEXT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1506 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1507 free(sess->recv_buf);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1508 sess->recv_buf = NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1509 sess->recv_done = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1510 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1511
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1512 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1513 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1514
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1515 static gg_action_t gg_handle_connected(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1516 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1517 #if 0
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1518 char buf[1024];
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1519 int res;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1520
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1521 if (gg_send_queued_data(sess) == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1522 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1523
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1524 res = gg_read(sess, buf, sizeof(buf));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1525
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1526 if (res == -1 && (errno == EAGAIN || errno == EINTR)) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1527 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() non-critical read error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1528 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1529 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1530
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1531 if (res == -1 || res == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1532 if (res == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1533 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() read error (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1534 else
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1535 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection closed\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1536
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1537 if (sess->state == GG_STATE_DISCONNECTING && res == 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1538 e->type = GG_EVENT_DISCONNECT_ACK;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1539 } else if (sess->state == GG_STATE_READING_KEY) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1540 e->event.failure = GG_FAILURE_INVALID;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1541 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1542 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1543
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1544 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1545 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1546
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1547 gg_debug_dump(sess, GG_DEBUG_DUMP, buf, res);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1548
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1549 if (gg_session_handle_data(sess, buf, res, e) == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1550 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1551
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1552 if (sess->send_buf != NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1553 sess->check |= GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1554
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1555 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1556 #else
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1557 struct gg_header *gh;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1558
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1559 if (gg_send_queued_data(sess) == -1)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1560 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1561
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1562 gh = gg_recv_packet(sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1563
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1564 if (gh == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1565 if (sess->state == GG_STATE_DISCONNECTING) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1566 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() connection broken expectedly\n");
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1567 e->type = GG_EVENT_DISCONNECT_ACK;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1568 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1569 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1570
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1571 if (errno != EAGAIN) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1572 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() gg_recv_packet failed (errno=%d, %s)\n", errno, strerror(errno));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1573 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1574 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1575 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1576 if (gg_session_handle_packet(sess, gh->type, (const char *) gh + sizeof(struct gg_header), gh->length, e) == -1) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1577 free(gh);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1578 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1579 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1580
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1581 free(gh);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1582 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1583
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1584 sess->check = GG_CHECK_READ;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1585
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1586 if (sess->send_buf != NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1587 sess->check |= GG_CHECK_WRITE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1588
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1589 return GG_ACTION_WAIT;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1590 #endif
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1591 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1592
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1593 static gg_action_t gg_handle_error(struct gg_session *sess, struct gg_event *e, enum gg_state_t next_state, enum gg_state_t alt_state, enum gg_state_t alt2_state)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1594 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1595 struct gg_session_private *p = sess->private_data;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1596
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1597 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR, "// gg_handle_error() failure=%d\n", p->socket_failure);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1598
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1599 e->event.failure = p->socket_failure;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1600
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1601 return GG_ACTION_FAIL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1602 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1603
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1604 static const gg_state_transition_t handlers[] =
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1605 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1606 { GG_STATE_RESOLVE_HUB_SYNC, gg_handle_resolve_sync, GG_STATE_CONNECT_HUB, GG_STATE_SEND_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1607 { GG_STATE_RESOLVE_GG_SYNC, gg_handle_resolve_sync, GG_STATE_CONNECT_GG, GG_STATE_READING_KEY, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1608 { GG_STATE_RESOLVE_PROXY_HUB_SYNC, gg_handle_resolve_sync, GG_STATE_CONNECT_PROXY_HUB, GG_STATE_SEND_PROXY_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1609 { GG_STATE_RESOLVE_PROXY_GG_SYNC, gg_handle_resolve_sync, GG_STATE_CONNECT_PROXY_GG, GG_STATE_SEND_PROXY_GG, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1610
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1611 { GG_STATE_RESOLVE_HUB_ASYNC, gg_handle_resolve_async, GG_STATE_RESOLVING_HUB, GG_STATE_SEND_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1612 { GG_STATE_RESOLVE_GG_ASYNC, gg_handle_resolve_async, GG_STATE_RESOLVING_GG, GG_STATE_READING_KEY, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1613 { GG_STATE_RESOLVE_PROXY_HUB_ASYNC, gg_handle_resolve_async, GG_STATE_RESOLVING_PROXY_HUB, GG_STATE_SEND_PROXY_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1614 { GG_STATE_RESOLVE_PROXY_GG_ASYNC, gg_handle_resolve_async, GG_STATE_RESOLVING_PROXY_GG, GG_STATE_SEND_PROXY_GG, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1615
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1616 { GG_STATE_RESOLVING_HUB, gg_handle_resolving, GG_STATE_CONNECT_HUB, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1617 { GG_STATE_RESOLVING_GG, gg_handle_resolving, GG_STATE_CONNECT_GG, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1618 { GG_STATE_RESOLVING_PROXY_HUB, gg_handle_resolving, GG_STATE_CONNECT_PROXY_HUB, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1619 { GG_STATE_RESOLVING_PROXY_GG, gg_handle_resolving, GG_STATE_CONNECT_PROXY_GG, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1620
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1621 { GG_STATE_CONNECT_HUB, gg_handle_connect, GG_STATE_CONNECTING_HUB, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1622 { GG_STATE_CONNECT_PROXY_HUB, gg_handle_connect, GG_STATE_CONNECTING_PROXY_HUB, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1623 { GG_STATE_CONNECT_PROXY_GG, gg_handle_connect, GG_STATE_CONNECTING_PROXY_GG, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1624
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1625 { GG_STATE_CONNECT_GG, gg_handle_connect_gg, GG_STATE_CONNECTING_GG, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1626
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1627 { GG_STATE_CONNECTING_HUB, gg_handle_connecting, GG_STATE_SEND_HUB, GG_STATE_CONNECT_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1628 { GG_STATE_CONNECTING_PROXY_HUB, gg_handle_connecting, GG_STATE_SEND_PROXY_HUB, GG_STATE_CONNECT_PROXY_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1629 { GG_STATE_CONNECTING_PROXY_GG, gg_handle_connecting, GG_STATE_SEND_PROXY_GG, GG_STATE_CONNECT_PROXY_GG, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1630
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1631 { GG_STATE_CONNECTING_GG, gg_handle_connecting_gg, GG_STATE_READING_KEY, GG_STATE_CONNECT_GG, GG_STATE_TLS_NEGOTIATION },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1632
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1633 { GG_STATE_SEND_HUB, gg_handle_send_hub, GG_STATE_READING_HUB, GG_STATE_SENDING_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1634 { GG_STATE_SEND_PROXY_HUB, gg_handle_send_hub, GG_STATE_READING_PROXY_HUB, GG_STATE_SENDING_PROXY_HUB, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1635
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1636 { GG_STATE_SEND_PROXY_GG, gg_handle_send_proxy_gg, GG_STATE_READING_PROXY_GG, GG_STATE_SENDING_PROXY_GG, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1637
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1638 { GG_STATE_SENDING_HUB, gg_handle_sending_hub_proxy, GG_STATE_READING_HUB, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1639 { GG_STATE_SENDING_PROXY_HUB, gg_handle_sending_hub_proxy, GG_STATE_READING_PROXY_HUB, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1640 { GG_STATE_SENDING_PROXY_GG, gg_handle_sending_hub_proxy, GG_STATE_READING_PROXY_GG, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1641
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1642 { GG_STATE_READING_HUB, gg_handle_reading_hub_proxy, GG_STATE_RESOLVE_GG_ASYNC, GG_STATE_RESOLVE_GG_SYNC, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1643 { GG_STATE_READING_PROXY_HUB, gg_handle_reading_hub_proxy, GG_STATE_CONNECT_PROXY_GG, GG_STATE_CONNECT_PROXY_GG, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1644
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1645 { GG_STATE_READING_PROXY_GG, gg_handle_reading_proxy_gg, GG_STATE_READING_KEY, GG_STATE_TLS_NEGOTIATION, GG_STATE_READING_KEY },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1646
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1647 { GG_STATE_TLS_NEGOTIATION, gg_handle_tls_negotiation, GG_STATE_READING_KEY, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1648
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1649 { GG_STATE_READING_KEY, gg_handle_connected, 0, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1650 { GG_STATE_READING_REPLY, gg_handle_connected, 0, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1651 { GG_STATE_CONNECTED, gg_handle_connected, 0, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1652 { GG_STATE_DISCONNECTING, gg_handle_connected, 0, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1653 { GG_STATE_ERROR, gg_handle_error, 0, 0, 0 },
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1654 };
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1655
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1656 struct gg_event *gg_eventqueue_add(struct gg_session *sess)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1657 {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1658 struct gg_event *ge;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1659 gg_eventqueue_t *queue_el, *it;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1660
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1661 queue_el = gg_new0(sizeof(gg_eventqueue_t));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1662 ge = gg_new0(sizeof(struct gg_event));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1663
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1664 if (queue_el == NULL || ge == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1665 free(queue_el);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1666 free(ge);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1667 return NULL;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1668 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1669
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1670 ge->type = GG_EVENT_NONE;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1671
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1672 queue_el->event = ge;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1673 if (sess->private_data->event_queue == NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1674 sess->private_data->event_queue = queue_el;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1675 else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1676 it = sess->private_data->event_queue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1677 while (it->next != NULL)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1678 it = it->next;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1679 it->next = queue_el;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1680 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1681
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1682 return ge;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1683 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1684
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1685 /**
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1686 * Funkcja wywoływana po zaobserwowaniu zmian na deskryptorze sesji.
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1687 *
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1688 * Funkcja zwraca strukturę zdarzenia \c gg_event. Jeśli rodzaj zdarzenia
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1689 * to \c GG_EVENT_NONE, nie wydarzyło się jeszcze nic wartego odnotowania.
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1690 * Strukturę zdarzenia należy zwolnić funkcja \c gg_event_free().
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1691 *
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1692 * \param sess Struktura sesji
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1693 *
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1694 * \return Struktura zdarzenia lub \c NULL jeśli wystąpił błąd
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1695 *
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1696 * \ingroup events
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1697 */
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1698 struct gg_event *gg_watch_fd(struct gg_session *sess)
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1699 {
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1700 struct gg_event *ge;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1701 struct gg_session_private *priv;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1702
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1703 gg_debug_session(sess, GG_DEBUG_FUNCTION, "** gg_watch_fd(%p);\n", sess);
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1704
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1705 if (sess == NULL) {
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1706 errno = EFAULT;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1707 return NULL;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1708 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1709
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1710 priv = sess->private_data;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1711
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1712 if (priv->event_queue != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1713 gg_eventqueue_t *next;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1714
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1715 ge = priv->event_queue->event;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1716 next = priv->event_queue->next;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1717 free(priv->event_queue);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1718 priv->event_queue = next;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1719
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1720 if (next == NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1721 sess->check = priv->check_after_queue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1722 sess->fd = priv->fd_after_queue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1723 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1724 return ge;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1725 }
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1726
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1727 ge = malloc(sizeof(struct gg_event));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1728
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1729 if (ge == NULL) {
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1730 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() not enough memory for event data\n");
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1731 return NULL;
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1732 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1733
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1734 memset(ge, 0, sizeof(struct gg_event));
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1735
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1736 ge->type = GG_EVENT_NONE;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1737
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1738 for (;;) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1739 unsigned int i, found = 0;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1740 gg_action_t res;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1741
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1742 res = GG_ACTION_FAIL;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1743
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1744 for (i = 0; i < sizeof(handlers) / sizeof(handlers[0]); i++) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1745 if (handlers[i].state == (enum gg_state_t) sess->state) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1746 gg_debug_session(sess, GG_DEBUG_MISC, "// gg_watch_fd() %s\n", gg_debug_state(sess->state));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1747 res = (*handlers[i].handler)(sess, ge, handlers[i].next_state, handlers[i].alt_state, handlers[i].alt2_state);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1748 found = 1;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1749 break;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1750 }
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1751 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1752
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1753 if (!found) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1754 gg_debug_session(sess, GG_DEBUG_MISC | GG_DEBUG_ERROR, "// gg_watch_fd() invalid state %s\n", gg_debug_state(sess->state));
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1755 ge->event.failure = GG_FAILURE_INTERNAL;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1756 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1757
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1758 if (!sess->async && ge->type == GG_EVENT_NONE && res == GG_ACTION_WAIT)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1759 res = GG_ACTION_NEXT;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1760
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1761 switch (res) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1762 case GG_ACTION_WAIT:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1763 if (priv->event_queue != NULL) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1764 priv->fd_after_queue = sess->fd;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1765 priv->check_after_queue = sess->check;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1766 /* wymuszamy ponowne wywołanie gg_watch_fd */
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1767 sess->fd = gg_get_dummy_fd(sess);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1768 if (sess->fd < 0)
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1769 sess->fd = priv->fd_after_queue;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1770 sess->check = GG_CHECK_READ | GG_CHECK_WRITE;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1771 }
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1772 return ge;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1773
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1774 case GG_ACTION_NEXT:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1775 continue;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1776
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1777 case GG_ACTION_FAIL:
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1778 sess->state = GG_STATE_IDLE;
29751
438f88ecc11e Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 29106
diff changeset
1779
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1780 gg_close(sess);
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1781
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1782 if (ge->event.failure != 0) {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1783 ge->type = GG_EVENT_CONN_FAILED;
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1784 } else {
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1785 free(ge);
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1786 ge = NULL;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1787 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1788
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1789 return ge;
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1790
35557
e83a87761544 Gadu-Gadu: update internal libgadu to 1.12.0-rc2
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents: 35369
diff changeset
1791 /* Celowo nie ma default */
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1792 }
31826
0f6ab56fbf9d Update libgadu to 0.11.0 plus local changes; thanks to Tomasz Wasilczyk.
Ethan Blanton <elb@pidgin.im>
parents: 31609
diff changeset
1793 }
11360
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1794 }
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1795
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1796 /*
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1797 * Local variables:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1798 * c-indentation-style: k&r
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1799 * c-basic-offset: 8
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1800 * indent-tabs-mode: notnil
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1801 * End:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1802 *
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1803 * vim: shiftwidth=8:
b77fd5a8959a [gaim-migrate @ 13582]
Bartosz Oler <bartosz@pidgin.im>
parents:
diff changeset
1804 */

mercurial