Mercurial > pidgin.yaz
annotate src/protocols/zephyr/ZSendPkt.c @ 6160:7416a43dc786
[gaim-migrate @ 6635]
Hold it.. Nobody said anything about _three_ books. Oh that stinkin' wise
man. He was so busy filling me full of his secret little workds and his
phrases and his BALONEY that he never said anything about this...
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Wed, 16 Jul 2003 22:43:27 +0000 |
parents | 7ba69b8e0de5 |
children | 08ce2a94d9c7 |
rev | line source |
---|---|
2086 | 1 /* This file is part of the Project Athena Zephyr Notification System. |
2 * It contains source for the ZSendPacket function. | |
3 * | |
4 * Created by: Robert French | |
5 * | |
6 * $Source$ | |
7 * $Author: warmenhoven $ | |
8 * | |
9 * Copyright (c) 1987,1991 by the Massachusetts Institute of Technology. | |
10 * For copying and distribution information, see the file | |
11 * "mit-copyright.h". | |
12 */ | |
13 /* $Header$ */ | |
14 | |
15 #ifndef lint | |
16 static char rcsid_ZSendPacket_c[] = | |
17 "$Zephyr: /mit/zephyr/src/lib/RCS/ZSendPacket.c,v 1.29 91/03/21 11:57:08 raeburn Exp $"; | |
18 #endif | |
19 | |
20 #include <internal.h> | |
21 #include <sys/socket.h> | |
22 | |
2419
7ba69b8e0de5
[gaim-migrate @ 2432]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
23 static int wait_for_hmack(); |
2086 | 24 |
25 Code_t ZSendPacket(packet, len, waitforack) | |
26 char *packet; | |
27 int len; | |
28 int waitforack; | |
29 { | |
30 Code_t retval; | |
31 struct sockaddr_in dest; | |
32 ZNotice_t notice, acknotice; | |
33 | |
34 if (!packet || len < 0) | |
35 return (ZERR_ILLVAL); | |
36 | |
37 if (len > Z_MAXPKTLEN) | |
38 return (ZERR_PKTLEN); | |
39 | |
40 if (ZGetFD() < 0) | |
41 if ((retval = ZOpenPort((u_short *)0)) != ZERR_NONE) | |
42 return (retval); | |
43 | |
44 dest = ZGetDestAddr(); | |
45 | |
46 if (sendto(ZGetFD(), packet, len, 0, (struct sockaddr *)&dest, | |
47 sizeof(dest)) < 0) | |
48 return (errno); | |
49 | |
50 if (!waitforack) | |
51 return (ZERR_NONE); | |
52 | |
53 if ((retval = ZParseNotice(packet, len, ¬ice)) != ZERR_NONE) | |
54 return (retval); | |
55 | |
2419
7ba69b8e0de5
[gaim-migrate @ 2432]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
56 retval = Z_WaitForNotice (&acknotice, wait_for_hmack, ¬ice.z_uid, |
2086 | 57 HM_TIMEOUT); |
58 if (retval == ETIMEDOUT) | |
59 return ZERR_HMDEAD; | |
60 if (retval == ZERR_NONE) | |
61 ZFreeNotice (&acknotice); | |
62 return retval; | |
63 } | |
64 | |
2419
7ba69b8e0de5
[gaim-migrate @ 2432]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
65 static int wait_for_hmack(notice, uid) |
2086 | 66 ZNotice_t *notice; |
67 ZUnique_Id_t *uid; | |
68 { | |
2419
7ba69b8e0de5
[gaim-migrate @ 2432]
Eric Warmenhoven <eric@warmenhoven.org>
parents:
2086
diff
changeset
|
69 return (notice->z_kind == HMACK && ZCompareUID(¬ice->z_uid, uid)); |
2086 | 70 } |