1 /* This file is part of the Project Athena Zephyr Notification System.
2 * It contains source for the ZIfNotice function.
4 * Created by: Robert French
7 * $Author: warmenhoven $
9 * Copyright (c) 1987,1988 by the Massachusetts Institute of Technology.
10 * For copying and distribution information, see the file
18 static const char rcsid_ZIfNotice_c
[] = "$Id: ZIfNotice.c 2096 2001-07-31 01:00:39Z warmenhoven $";
21 Code_t
ZIfNotice(notice
, from
, predicate
, args
)
23 struct sockaddr_in
*from
;
24 int (*predicate
) __P((ZNotice_t
*, void *));
30 struct _Z_InputQ
*qptr
;
32 if ((retval
= Z_WaitForComplete()) != ZERR_NONE
)
35 qptr
= Z_GetFirstComplete();
39 if ((retval
= ZParseNotice(qptr
->packet
, qptr
->packet_len
,
40 &tmpnotice
)) != ZERR_NONE
)
42 if ((*predicate
)(&tmpnotice
, args
)) {
43 if (!(buffer
= (char *) malloc((unsigned) qptr
->packet_len
)))
45 (void) memcpy(buffer
, qptr
->packet
, qptr
->packet_len
);
48 if ((retval
= ZParseNotice(buffer
, qptr
->packet_len
,
49 notice
)) != ZERR_NONE
) {
56 qptr
= Z_GetNextComplete(qptr
);
58 if ((retval
= Z_ReadWait()) != ZERR_NONE
)
60 qptr
= Z_GetFirstComplete(); /* need to look over all of
61 the queued messages, in case
62 a fragment has been reassembled */