diff options
-rw-r--r-- | lib/ZSendPkt.c | 82 |
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,¬ice)) != 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,¬ice, - NULL,ZCompareUIDPred, - (char *)¬ice.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, ¬ice)) != 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 *)¬ice.z_uid); + if (retval == ZERR_NONE) + return (ZERR_NONE); + if (retval != ZERR_NONOTICE) + return (retval); + } + return (ZERR_HMDEAD); } |