src/protocols/zephyr/ZhmStat.c

Fri, 21 May 2004 14:33:32 +0000

author
Stu Tomlinson <nosnilmot@pidgin.im>
date
Fri, 21 May 2004 14:33:32 +0000
changeset 8999
dd434cfec86a
parent 8792
b0645c9dc276
child 10867
b39f9b646d6c
permissions
-rw-r--r--

[gaim-migrate @ 9774]
" This patch renames the existing received-*-msg signals
to receiving-*msg to fit the naming of other signals
where a pointer to the message is passed (writing,
sending, displaying)

It adds new received-*-msg signals which are emitted
after the receiving signals, in line with the other
conversation signals (wrote, sent, displayed)

This is necessary to allow plugins which depend on the
final received message to work alongside plugins which
may modify the message.

One known example of this is festival-gaim alongside
gaim-encryption - festival-gaim would try to "speak"
the encrypted text:
http://sf.net/tracker/?func=detail&aid=943216&group_id=89763&atid=591320

I've tested this with gaim-encryption and festival-gaim
(locally modified so gaim-encryption uses the receiving
signal and festival uses the received signal)

All in-tree users of received-*-msg are updated to use
receiving-*-msg if they do modify the message, the
conversation-signals documentation is updated, the
signals-test.c & signal-test.tcl plugins are also updated." --Stu Tomlinson

committer: Luke Schierer <lschiere@pidgin.im>

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

mercurial