summaryrefslogtreecommitdiff
path: root/lib/ZSendPkt.c
diff options
context:
space:
mode:
authorGravatar Robert S. French <rfrench@mit.edu>1988-05-13 11:17:53 +0000
committerGravatar Robert S. French <rfrench@mit.edu>1988-05-13 11:17:53 +0000
commitc2f23a613d62c634d50ad20a89ea43a190275ad9 (patch)
tree3cf158987e76fa95f58efd413f56c805a50e57c0 /lib/ZSendPkt.c
parentdbf1fa5e5e554a43e66bb247039dae1be1bb7202 (diff)
Update for protocol 0.2 / cleanup / Kerberos fixes
Diffstat (limited to 'lib/ZSendPkt.c')
-rw-r--r--lib/ZSendPkt.c82
1 files changed, 41 insertions, 41 deletions
diff --git a/lib/ZSendPkt.c b/lib/ZSendPkt.c
index be918a6..e37c1b7 100644
--- a/lib/ZSendPkt.c
+++ b/lib/ZSendPkt.c
@@ -21,51 +21,51 @@ static char rcsid_ZSendPacket_c[] = "$Header$";
#include <zephyr/zephyr_internal.h>
#include <sys/socket.h>
-Code_t ZSendPacket(packet,len)
- ZPacket_t packet;
- int len;
+Code_t ZSendPacket(packet, len, waitforack)
+ char *packet;
+ int len;
+ int waitforack;
{
- Code_t retval;
- struct sockaddr_in dest;
- struct timeval tv;
- int i;
- fd_set t1,t2,t3;
- ZPacket_t ackpack;
- ZNotice_t notice;
+ Code_t retval;
+ struct sockaddr_in dest;
+ struct timeval tv;
+ int i;
+ fd_set t1, t2, t3;
+ char *ackpacket;
+ ZNotice_t notice, acknotice;
- if (!packet || len < 0 || len > Z_MAXPKTLEN)
- return (ZERR_ILLVAL);
+ if (!packet || len < 0 || len > Z_MAXPKTLEN)
+ return (ZERR_ILLVAL);
- if (ZGetFD() < 0)
- if ((retval = ZOpenPort((u_short *)0)) != ZERR_NONE)
- return (retval);
+ if (ZGetFD() < 0)
+ if ((retval = ZOpenPort((u_short *)0)) != ZERR_NONE)
+ return (retval);
- if ((retval = ZParseNotice(packet,len,&notice)) != ZERR_NONE)
- return (retval);
-
- dest = ZGetDestAddr();
+ dest = ZGetDestAddr();
- if (sendto(ZGetFD(),packet,len,0,&dest,sizeof(dest)) < 0)
- return (errno);
+ if (sendto(ZGetFD(), packet, len, 0, &dest, sizeof(dest)) < 0)
+ return (errno);
- if (notice.z_kind == UNSAFE || notice.z_kind == HMACK ||
- notice.z_kind == SERVACK || notice.z_kind == CLIENTACK ||
- notice.z_kind == HMCTL || __Zephyr_server || __HM_set)
- return (ZERR_NONE);
-
- tv.tv_sec = 0;
- tv.tv_usec = 500000;
-
- for (i=0;i<HM_TIMEOUT*2;i++) {
- if (select(0,&t1,&t2,&t3,&tv) < 0)
- return (errno);
- retval = ZCheckIfNotice(ackpack,sizeof ackpack,&notice,
- NULL,ZCompareUIDPred,
- (char *)&notice.z_uid);
- if (retval == ZERR_NONE)
- return (ZERR_NONE);
- if (retval != ZERR_NONOTICE)
- return (retval);
- }
- return (ZERR_HMDEAD);
+ if (!waitforack)
+ return (ZERR_NONE);
+
+ if ((retval = ZParseNotice(packet, len, &notice)) != ZERR_NONE)
+ return (retval);
+
+ tv.tv_sec = 0;
+ tv.tv_usec = 500000;
+
+ /* XXX */
+ for (i=0;i<HM_TIMEOUT*2;i++) {
+ if (select(0, &t1, &t2, &t3, &tv) < 0)
+ return (errno);
+ retval = ZCheckIfNotice(ackpack, sizeof(ackpack), &acknotice,
+ NULL, ZCompareUIDPred,
+ (char *)&notice.z_uid);
+ if (retval == ZERR_NONE)
+ return (ZERR_NONE);
+ if (retval != ZERR_NONOTICE)
+ return (retval);
+ }
+ return (ZERR_HMDEAD);
}