libpurple/protocols/zephyr/ZInit.c

Mon, 22 Aug 2022 21:40:04 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Mon, 22 Aug 2022 21:40:04 -0500
branch
gtk4
changeset 41567
517ac516af27
parent 40643
1c9bdf8d3e85
permissions
-rw-r--r--

Inline pidgin_make_scrollable

We need to change it for GTK4, and there are few enough that it can be inlined. Eventually, that code might be a `.ui` anyway.

Testing Done:
Compile only.

Reviewed at https://reviews.imfreedom.org/r/1615/

2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /* This file is part of the Project Athena Zephyr Notification System.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 * It contains source for the ZInitialize function.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 * Created by: Robert French
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 * Copyright (c) 1987, 1991 by the Massachusetts Institute of Technology.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 * For copying and distribution information, see the file
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 15435
diff changeset
8 * "mit-copyright.h".
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10
10867
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
11 #ifdef ZEPHYR_USES_KERBEROS
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
12 #ifdef WIN32
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
13
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
14 #else
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
15 #include <krb_err.h>
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
16 #endif
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
17 #endif
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
18
8792
b0645c9dc276 [gaim-migrate @ 9554]
Christian Hammond <chipx86@chipx86.com>
parents: 2419
diff changeset
19 #include "internal.h"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20
10867
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
21 #ifdef WIN32
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
22 #include <winsock2.h>
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
23 #else
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 #include <sys/socket.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 #endif
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26
10867
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
27
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
28 #ifndef INADDR_NONE
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
29 #define INADDR_NONE 0xffffffff
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
30 #endif
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
31
40166
811f82db29dd zephyr: Modernize K&R function prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40165
diff changeset
32 Code_t
811f82db29dd zephyr: Modernize K&R function prototypes.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 40165
diff changeset
33 ZInitialize(void)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 {
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
35 struct servent *hmserv;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
36 GResolver *resolver = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
37 GList *hosts = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
38 guint32 servaddr;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
39 guint16 port;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
40 Code_t code;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
41 ZNotice_t notice;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 #ifdef ZEPHYR_USES_KERBEROS
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
43 gchar *krealm = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
44 gint krbval;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
45 gchar d1[ANAME_SZ], d2[INST_SZ];
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 #endif
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
48 g_clear_object(&__HM_addr);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
50 hmserv = (struct servent *)getservbyname(HM_SVCNAME, "udp");
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
51 port = hmserv ? hmserv->s_port : HM_SVC_FALLBACK;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
53 /* Set up local loopback address for HostManager */
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
54 __HM_addr = g_inet_socket_address_new_from_string("127.0.0.1", port);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55
40628
4266008a7791 Use a GQueue for zephyr plus related cleanup
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40624
diff changeset
56 /* Initialize the input queue */
4266008a7791 Use a GQueue for zephyr plus related cleanup
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40624
diff changeset
57 g_queue_init(&Z_input_queue);
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 15435
diff changeset
58
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
59 /* If there is no zhm, the code will fall back to something which might
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
60 * not be "right", but this is is ok, since none of the servers call
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
61 * krb_rd_req. */
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
62
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
63 servaddr = INADDR_NONE;
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
64 if ((code = ZOpenPort(NULL)) != ZERR_NONE) {
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
65 return code;
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
66 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
67
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
68 if ((code = ZhmStat(&notice)) != ZERR_NONE) {
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
69 return code;
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
70 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
71
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
72 ZClosePort();
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
73
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
74 /* the first field, which is NUL-terminated, is the server name.
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
75 If this code ever support a multiplexing zhm, this will have to
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
76 be made smarter, and probably per-message */
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
77
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 #ifdef ZEPHYR_USES_KERBEROS
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
79 krealm = krb_realmofhost(notice.z_message);
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
80 #endif
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
81 resolver = g_resolver_get_default();
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
82 hosts = g_resolver_lookup_by_name(resolver, notice.z_message, NULL, NULL);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
83 while (hosts) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
84 GInetAddress *host_addr = hosts->data;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
85 if (g_inet_address_get_family(host_addr) == G_SOCKET_FAMILY_IPV4) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
86 memcpy(&servaddr, g_inet_address_to_bytes(host_addr),
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
87 sizeof(servaddr));
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
88 g_list_free_full(hosts, g_object_unref);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
89 hosts = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
90 break;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
91 }
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
92 g_object_unref(host_addr);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
93 hosts = g_list_delete_link(hosts, hosts);
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
94 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
95
40624
6f7bbd42d36c Delete a bunch of unused zephyr stuff
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40166
diff changeset
96 ZFreeNotice(&notice);
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
97
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
98 #ifdef ZEPHYR_USES_KERBEROS
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
99 if (krealm) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
100 g_strlcpy(__Zephyr_realm, krealm, REALM_SZ);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
101 } else if ((krb_get_tf_fullname(TKT_FILE, d1, d2, __Zephyr_realm) !=
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
102 KSUCCESS) &&
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
103 ((krbval = krb_get_lrealm(__Zephyr_realm, 1)) != KSUCCESS)) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
104 g_object_unref(resolver);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
105 return krbval;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
106 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
107 #else
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
108 g_strlcpy(__Zephyr_realm, "local-realm", REALM_SZ);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109 #endif
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
110
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
111 __My_addr = INADDR_NONE;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
112 if (servaddr != INADDR_NONE) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
113 /* Try to get the local interface address by connecting a UDP
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
114 * socket to the server address and getting the local address.
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
115 * Some broken operating systems (e.g. Solaris 2.0-2.5) yield
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
116 * INADDR_ANY (zero), so we have to check for that. */
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
117 GSocket *s = g_socket_new(G_SOCKET_FAMILY_IPV4, G_SOCKET_TYPE_DATAGRAM,
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
118 G_SOCKET_PROTOCOL_DEFAULT, NULL);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
119 if (s != NULL) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
120 GSocketAddress *remote_addr = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
121 GInetAddress *inet_addr = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
122
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
123 inet_addr = g_inet_address_new_from_bytes((const guint8 *)&servaddr,
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
124 G_SOCKET_FAMILY_IPV4);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
125 remote_addr =
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
126 g_inet_socket_address_new(inet_addr, HM_SRV_SVC_FALLBACK);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
127 g_object_unref(inet_addr);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
128
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
129 if (g_socket_connect(s, remote_addr, NULL, NULL)) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
130 GSocketAddress *local_addr =
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
131 g_socket_get_local_address(s, NULL);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
132 if (local_addr) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
133 inet_addr = g_inet_socket_address_get_address(
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
134 G_INET_SOCKET_ADDRESS(local_addr));
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
135 if (inet_addr) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
136 memcpy(&__My_addr, g_inet_address_to_bytes(inet_addr),
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
137 sizeof(__My_addr));
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
138 g_object_unref(inet_addr);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
139 }
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
140 g_object_unref(local_addr);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
141 }
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
142 }
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
143 g_object_unref(remote_addr);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
144 g_object_unref(s);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
145 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
146 }
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
147 if (__My_addr == INADDR_NONE) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
148 /* We couldn't figure out the local interface address by the
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
149 * above method. Try by resolving the local hostname. (This
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
150 * is a pretty broken thing to do, and unfortunately what we
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
151 * always do on server machines.) */
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
152 const gchar *hostname = g_get_host_name();
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
153 hosts = g_resolver_lookup_by_name(resolver, hostname, NULL, NULL);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
154 while (hosts) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
155 GInetAddress *host_addr = hosts->data;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
156 if (g_inet_address_get_family(host_addr) == G_SOCKET_FAMILY_IPV4) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
157 memcpy(&servaddr, g_inet_address_to_bytes(host_addr),
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
158 sizeof(servaddr));
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
159 g_list_free_full(hosts, g_object_unref);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
160 hosts = NULL;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
161 break;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
162 }
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
163 g_object_unref(host_addr);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
164 hosts = g_list_delete_link(hosts, hosts);
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
165 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
166 }
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
167 /* If the above methods failed, zero out __My_addr so things will sort
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
168 * of kind of work. */
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
169 if (__My_addr == INADDR_NONE) {
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
170 __My_addr = 0;
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
171 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
172
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
173 g_object_unref(resolver);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174
40643
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
175 /* Get the sender so we can cache it */
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
176 ZGetSender();
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
177
1c9bdf8d3e85 Convert zephyr to gio
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40628
diff changeset
178 return ZERR_NONE;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179 }
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents: 2086
diff changeset
180

mercurial