/* This file is part of the Project Athena Zephyr Notification System. * It contains source for the ZSendPacket function. * * Created by: Robert French * * $Source$ * $Author$ * * Copyright (c) 1987 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file * "mit-copyright.h". */ /* $Header$ */ #ifndef lint static char rcsid_ZSendPacket_c[] = "$Header$"; #endif lint #include #include #include Code_t ZSendPacket(packet, len, waitforack) char *packet; int len; int waitforack; { int wait_for_hmack(); Code_t retval; struct sockaddr_in dest; struct timeval tv; int i; ZNotice_t notice, acknotice; if (!packet || len < 0) return (ZERR_ILLVAL); if (len > Z_MAXPKTLEN) return (ZERR_PKTLEN); if (ZGetFD() < 0) if ((retval = ZOpenPort((u_short *)0)) != ZERR_NONE) return (retval); dest = ZGetDestAddr(); if (sendto(ZGetFD(), packet, len, 0, (struct sockaddr *)&dest, sizeof(dest)) < 0) return (errno); if (!waitforack) return (ZERR_NONE); if ((retval = ZParseNotice(packet, len, ¬ice)) != ZERR_NONE) return (retval); tv.tv_sec = 0; tv.tv_usec = 500000; for (i=0;iz_kind == HMACK && ZCompareUID(¬ice->z_uid, uid)); }