libgaim/protocols/zephyr/ZhmStat.c

Sat, 28 Oct 2006 20:04:03 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Sat, 28 Oct 2006 20:04:03 +0000
changeset 14899
c65f0b4fb351
parent 14254
77edc7a6191a
child 20470
77693555855f
permissions
-rw-r--r--

[gaim-migrate @ 17606]
Add a "handle" parameter to gaim_proxy_connect(). It seemed like
people thought this was a good idea. You can still cancel
each gaim_proxy_connect() individually, if needed. I passed in
NULL for the handle in most places. It might be better to pass
in the gc in more places, but these changes do no harm, and they
should help some Yahoo! things, and I wanted to get the API change in.

2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
1 /* This file is part of the Project Athena Zephyr Notification System.
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
2 * It contains the ZhmStat() function.
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
3 *
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
4 * Created by: Marc Horowitz
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
5 *
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
6 * Copyright (c) 1996 by the Massachusetts Institute of Technology.
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
7 * For copying and distribution information, see the file
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
8 * "mit-copyright.h".
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
9 */
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
10
8792
b0645c9dc276 [gaim-migrate @ 9554]
Christian Hammond <chipx86@chipx86.com>
parents: 2419
diff changeset
11 #include "internal.h"
10867
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
12
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
13 #ifdef WIN32
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
14 #include <winsock2.h>
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
15 #else
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
16 #include <sys/socket.h>
10867
b39f9b646d6c [gaim-migrate @ 12553]
Arun Tharuvai <aatharuv@mit.edu>
parents: 8792
diff changeset
17 #endif
2419
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
18
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
19 #ifndef INADDR_LOOPBACK
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
20 #define INADDR_LOOPBACK 0x7f000001
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
21 #endif
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
22
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
23 Code_t ZhmStat(hostaddr, notice)
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
24 struct in_addr *hostaddr;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
25 ZNotice_t *notice;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
26 {
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
27 struct servent *sp;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
28 struct sockaddr_in sin;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
29 ZNotice_t req;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
30 Code_t code;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
31 struct timeval tv;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
32 fd_set readers;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
33
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
34 (void) memset((char *)&sin, 0, sizeof(struct sockaddr_in));
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
35
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
36 sp = getservbyname(HM_SVCNAME, "udp");
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
37
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
38 sin.sin_port = (sp) ? sp->s_port : HM_SVC_FALLBACK;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
39 sin.sin_family = AF_INET;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
40
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
41 if (hostaddr)
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
42 sin.sin_addr = *hostaddr;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
43 else
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
44 sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
45
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
46 (void) memset((char *)&req, 0, sizeof(req));
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
47 req.z_kind = STAT;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
48 req.z_port = 0;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
49 req.z_class = HM_STAT_CLASS;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
50 req.z_class_inst = HM_STAT_CLIENT;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
51 req.z_opcode = HM_GIMMESTATS;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
52 req.z_sender = "";
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
53 req.z_recipient = "";
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
54 req.z_default_format = "";
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
55 req.z_message_len = 0;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
56
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
57 if ((code = ZSetDestAddr(&sin)) != ZERR_NONE)
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
58 return(code);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
59
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
60 if ((code = ZSendNotice(&req, ZNOAUTH)) != ZERR_NONE)
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
61 return(code);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
62
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
63 /* Wait up to ten seconds for a response. */
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
64 FD_ZERO(&readers);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
65 FD_SET(ZGetFD(), &readers);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
66 tv.tv_sec = 10;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
67 tv.tv_usec = 0;
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
68 code = select(ZGetFD() + 1, &readers, NULL, NULL, &tv);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
69 if (code < 0 && errno != EINTR)
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
70 return(errno);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
71 if (code == 0 || (code < 0 && errno == EINTR) || ZPending() == 0)
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
72 return(ZERR_HMDEAD);
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
73
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
74 return(ZReceiveNotice(notice, (struct sockaddr_in *) 0));
beb509dd2935 [gaim-migrate @ 2432]
Salvatore Valente
parents:
diff changeset
75 }

mercurial