libpurple/protocols/zephyr/ZhmStat.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 15435
4b933b06d75e
child 16238
33bf2fd32108
child 18068
b6554e3c8224
child 20478
46933dc62880
child 31294
73607ab89c6f
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

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