Mercurial > pidgin.yaz
annotate libpurple/protocols/gg/win32-resolver.c @ 32764:ef01f180114b
Gadu-Gadu: synchronize internal libgadu with upstream. Refs #343
author | tomkiewicz@cpw.pidgin.im |
---|---|
date | Tue, 18 Oct 2011 00:55:59 +0000 |
parents | 326591e64aaa |
children |
rev | line source |
---|---|
32763
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
1 /** |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
2 * @file win32-resolver.c |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
3 * |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
4 * purple |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
5 * |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
6 * This program is free software; you can redistribute it and/or modify |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
9 * (at your option) any later version. |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
10 * |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
11 * This program is distributed in the hope that it will be useful, |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
14 * GNU General Public License for more details. |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
15 * |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
16 * You should have received a copy of the GNU General Public License |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
17 * along with this program; if not, write to the Free Software |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
19 */ |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
20 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
21 #include "win32-resolver.h" |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
22 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
23 #include <errno.h> |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
24 #include <resolver.h> |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
25 #include "debug.h" |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
26 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
27 #ifndef _WIN32 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
28 #error "win32thread resolver is not supported on current platform" |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
29 #endif |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
30 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
31 /** |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
32 * Deal with the fact that you can't select() on a win32 file fd. |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
33 * This makes it practically impossible to tie into purple's event loop. |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
34 * |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
35 * -This is thanks to Tor Lillqvist. |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
36 */ |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
37 static int ggp_resolver_win32thread_socket_pipe(int *fds) |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
38 { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
39 SOCKET temp, socket1 = -1, socket2 = -1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
40 struct sockaddr_in saddr; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
41 int len; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
42 u_long arg; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
43 fd_set read_set, write_set; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
44 struct timeval tv; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
45 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
46 purple_debug_misc("gg", "ggp_resolver_win32thread_socket_pipe(&%d)\n", |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
47 *fds); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
48 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
49 temp = socket(AF_INET, SOCK_STREAM, 0); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
50 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
51 if (temp == INVALID_SOCKET) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
52 goto out0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
53 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
54 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
55 arg = 1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
56 if (ioctlsocket(temp, FIONBIO, &arg) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
57 goto out0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
58 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
59 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
60 memset(&saddr, 0, sizeof(saddr)); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
61 saddr.sin_family = AF_INET; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
62 saddr.sin_port = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
63 saddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
64 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
65 if (bind(temp, (struct sockaddr *)&saddr, sizeof (saddr))) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
66 goto out0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
67 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
68 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
69 if (listen(temp, 1) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
70 goto out0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
71 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
72 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
73 len = sizeof(saddr); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
74 if (getsockname(temp, (struct sockaddr *)&saddr, &len)) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
75 goto out0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
76 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
77 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
78 socket1 = socket(AF_INET, SOCK_STREAM, 0); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
79 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
80 if (socket1 == INVALID_SOCKET) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
81 goto out0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
82 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
83 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
84 arg = 1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
85 if (ioctlsocket(socket1, FIONBIO, &arg) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
86 goto out1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
87 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
88 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
89 if (connect(socket1, (struct sockaddr *)&saddr, len) != SOCKET_ERROR || |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
90 WSAGetLastError() != WSAEWOULDBLOCK) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
91 goto out1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
92 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
93 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
94 FD_ZERO(&read_set); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
95 FD_SET(temp, &read_set); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
96 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
97 tv.tv_sec = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
98 tv.tv_usec = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
99 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
100 if (select(0, &read_set, NULL, NULL, NULL) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
101 goto out1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
102 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
103 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
104 if (!FD_ISSET(temp, &read_set)) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
105 goto out1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
106 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
107 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
108 socket2 = accept(temp, (struct sockaddr *) &saddr, &len); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
109 if (socket2 == INVALID_SOCKET) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
110 goto out1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
111 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
112 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
113 FD_ZERO(&write_set); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
114 FD_SET(socket1, &write_set); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
115 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
116 tv.tv_sec = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
117 tv.tv_usec = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
118 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
119 if (select(0, NULL, &write_set, NULL, NULL) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
120 goto out2; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
121 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
122 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
123 if (!FD_ISSET(socket1, &write_set)) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
124 goto out2; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
125 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
126 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
127 arg = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
128 if (ioctlsocket(socket1, FIONBIO, &arg) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
129 goto out2; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
130 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
131 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
132 arg = 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
133 if (ioctlsocket(socket2, FIONBIO, &arg) == SOCKET_ERROR) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
134 goto out2; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
135 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
136 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
137 fds[0] = socket1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
138 fds[1] = socket2; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
139 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
140 closesocket (temp); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
141 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
142 return 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
143 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
144 out2: |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
145 closesocket (socket2); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
146 out1: |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
147 closesocket (socket1); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
148 out0: |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
149 closesocket (temp); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
150 errno = EIO; /* XXX */ |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
151 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
152 return -1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
153 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
154 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
155 struct ggp_resolver_win32thread_data { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
156 char *hostname; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
157 int fd; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
158 }; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
159 |
32764
ef01f180114b
Gadu-Gadu: synchronize internal libgadu with upstream. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
32763
diff
changeset
|
160 /** |
ef01f180114b
Gadu-Gadu: synchronize internal libgadu with upstream. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
32763
diff
changeset
|
161 * Copy-paste from gg_resolver_run(). |
ef01f180114b
Gadu-Gadu: synchronize internal libgadu with upstream. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
32763
diff
changeset
|
162 */ |
32763
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
163 static DWORD WINAPI ggp_resolver_win32thread_thread(LPVOID arg) |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
164 { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
165 struct ggp_resolver_win32thread_data *data = arg; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
166 struct in_addr addr_ip[2], *addr_list; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
167 int addr_count; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
168 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
169 purple_debug_info("gg", "ggp_resolver_win32thread_thread() host: %s, " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
170 "fd: %i called\n", data->hostname, data->fd); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
171 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
172 if ((addr_ip[0].s_addr = inet_addr(data->hostname)) == INADDR_NONE) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
173 if (gg_gethostbyname_real(data->hostname, &addr_list, |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
174 &addr_count, 0) == -1) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
175 addr_list = addr_ip; |
32764
ef01f180114b
Gadu-Gadu: synchronize internal libgadu with upstream. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
32763
diff
changeset
|
176 /* addr_ip[0] już zawiera INADDR_NONE */ |
32763
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
177 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
178 } else { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
179 addr_list = addr_ip; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
180 addr_ip[1].s_addr = INADDR_NONE; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
181 addr_count = 1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
182 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
183 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
184 purple_debug_misc("gg", "ggp_resolver_win32thread_thread() " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
185 "count = %d\n", addr_count); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
186 |
32764
ef01f180114b
Gadu-Gadu: synchronize internal libgadu with upstream. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
32763
diff
changeset
|
187 write(data->fd, addr_list, (addr_count + 1) * sizeof(struct in_addr)); |
32763
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
188 close(data->fd); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
189 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
190 free(data->hostname); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
191 data->hostname = NULL; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
192 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
193 free(data); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
194 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
195 if (addr_list != addr_ip) |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
196 free(addr_list); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
197 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
198 purple_debug_misc("gg", "ggp_resolver_win32thread_thread() done\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
199 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
200 return 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
201 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
202 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
203 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
204 int ggp_resolver_win32thread_start(int *fd, void **private_data, |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
205 const char *hostname) |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
206 { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
207 struct ggp_resolver_win32thread_data *data = NULL; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
208 HANDLE h; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
209 DWORD dwTId; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
210 int pipes[2], new_errno; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
211 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
212 purple_debug_info("gg", "ggp_resolver_win32thread_start(%p, %p, " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
213 "\"%s\");\n", fd, private_data, hostname); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
214 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
215 if (!private_data || !fd || !hostname) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
216 purple_debug_error("gg", "ggp_resolver_win32thread_start() " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
217 "invalid arguments\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
218 errno = EFAULT; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
219 return -1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
220 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
221 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
222 purple_debug_misc("gg", "ggp_resolver_win32thread_start() creating " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
223 "pipes...\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
224 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
225 if (ggp_resolver_win32thread_socket_pipe(pipes) == -1) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
226 purple_debug_error("gg", "ggp_resolver_win32thread_start() " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
227 "unable to create pipes (errno=%d, %s)\n", |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
228 errno, strerror(errno)); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
229 return -1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
230 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
231 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
232 if (!(data = malloc(sizeof(*data)))) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
233 purple_debug_error("gg", "ggp_resolver_win32thread_start() out " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
234 "of memory\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
235 new_errno = errno; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
236 goto cleanup; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
237 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
238 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
239 data->hostname = NULL; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
240 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
241 if (!(data->hostname = strdup(hostname))) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
242 purple_debug_error("gg", "ggp_resolver_win32thread_start() out " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
243 "of memory\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
244 new_errno = errno; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
245 goto cleanup; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
246 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
247 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
248 data->fd = pipes[1]; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
249 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
250 purple_debug_misc("gg", "ggp_resolver_win32thread_start() creating " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
251 "thread...\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
252 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
253 h = CreateThread(NULL, 0, ggp_resolver_win32thread_thread, data, 0, |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
254 &dwTId); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
255 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
256 if (h == NULL) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
257 purple_debug_error("gg", "ggp_resolver_win32thread_start() " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
258 "unable to create thread\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
259 new_errno = errno; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
260 goto cleanup; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
261 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
262 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
263 *private_data = h; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
264 *fd = pipes[0]; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
265 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
266 purple_debug_misc("gg", "ggp_resolver_win32thread_start() done\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
267 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
268 return 0; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
269 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
270 cleanup: |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
271 if (data) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
272 free(data->hostname); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
273 free(data); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
274 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
275 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
276 close(pipes[0]); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
277 close(pipes[1]); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
278 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
279 errno = new_errno; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
280 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
281 return -1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
282 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
283 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
284 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
285 void ggp_resolver_win32thread_cleanup(void **private_data, int force) |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
286 { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
287 struct ggp_resolver_win32thread_data *data; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
288 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
289 purple_debug_info("gg", "ggp_resolver_win32thread_cleanup() force: %i " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
290 "called\n", force); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
291 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
292 if (private_data == NULL || *private_data == NULL) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
293 purple_debug_error("gg", "ggp_resolver_win32thread_cleanup() " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
294 "private_data: NULL\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
295 return; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
296 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
297 return; /* XXX */ |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
298 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
299 data = (struct ggp_resolver_win32thread_data*) *private_data; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
300 purple_debug_misc("gg", "ggp_resolver_win32thread_cleanup() data: " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
301 "%s called\n", data->hostname); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
302 *private_data = NULL; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
303 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
304 if (force) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
305 purple_debug_misc("gg", "ggp_resolver_win32thread_cleanup() " |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
306 "force called\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
307 //pthread_cancel(data->thread); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
308 //pthread_join(data->thread, NULL); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
309 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
310 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
311 free(data->hostname); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
312 data->hostname = NULL; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
313 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
314 if (data->fd != -1) { |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
315 close(data->fd); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
316 data->fd = -1; |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
317 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
318 purple_debug_info("gg", "ggp_resolver_win32thread_cleanup() done\n"); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
319 free(data); |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
320 } |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
321 |
326591e64aaa
Gadu-Gadu: move our win32 resolver out of libgadu sources. Refs #343
tomkiewicz@cpw.pidgin.im
parents:
diff
changeset
|
322 /* vim: set ts=8 sts=0 sw=8 noet: */ |