5 ****************************************************************************
6 * Copyright IBM Corporation 1988, 1989 - All Rights Reserved *
8 * Permission to use, copy, modify, and distribute this software and its *
9 * documentation for any purpose and without fee is hereby granted, *
10 * provided that the above copyright notice appear in all copies and *
11 * that both that copyright notice and this permission notice appear in *
12 * supporting documentation, and that the name of IBM not be used in *
13 * advertising or publicity pertaining to distribution of the software *
14 * without specific, written prior permission. *
16 * IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL *
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL IBM *
18 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY *
19 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER *
20 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING *
21 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
22 ****************************************************************************
25 /* rx_stream.h: the stream I/O layer for RX */
27 This file is now obsolete
.
37 #include <sys/types.h>
42 /* Write descriptor */
44 char *freePtr
; /* Pointer to bytes in first packet */
45 int nFree
; /* Number of bytes free in first
47 struct rx_call
*call
; /* The call this stream is attached to */
48 struct rx_queue wq
; /* Currently allocated packets for
50 int packetSize
; /* Data size used in each packet */
55 struct rx_packet
*packet
; /* The current packet */
56 char *nextByte
; /* Pointer to bytes in current packet */
57 int nLeft
; /* Number of bytes free in current
59 struct rx_call
*call
; /* The call this stream is attached to */
60 struct rx_queue rq
; /* Currently allocated packets for
62 struct rx_queue freeTheseQ
; /* These packets should be freed on
63 * the next operation */
66 /* Composite stream descriptor */
69 struct rx_stream_rd rd
;
70 struct rx_stream_wd wd
;
75 void rx_stream_InitWrite();
76 void rx_stream_InitRead();
77 void rx_stream_FinishWrite();
78 void rx_stream_FinishRead();
80 int rx_stream_Write();
81 int rx_stream_AllocIov();
83 /* Write nbytes of data to the write stream. Returns the number of bytes written */
84 /* If it returns 0, the call status should be checked with rx_Error. */
85 #define rx_stream_Write(iod, buf, nbytes) \
86 (iod)->sd.wd.nFree > (nbytes) ? \
87 (buf) && memcpy((iod)->sd.wd.freePtr, (buf), (nbytes)), \
88 (iod)->sd.wd.nFree -= (nbytes), \
89 (iod)->sd.wd.freePtr += (nbytes), (nbytes) \
90 : rx_stream_WriteProc((iod), (buf), (nbytes))
93 /* Read nbytes of data from the read stream. Returns the number of bytes read */
94 /* If it returns less than requested, the call status should be checked with rx_Error */
95 #define rx_stream_Read(iod, buf, nbytes) \
96 (iod)->sd.rd.nLeft > (nbytes) ? \
97 memcpy((buf), (iod)->sd.rd.nextByte, (nbytes)), \
98 (iod)->sd.rd.nLeft -= (nbytes), (iod)->sd.rd.nextByte += (nbytes), (nbytes) \
99 : rx_stream_ReadProc((iod), (buf), (nbytes))
101 #endif /* _RX_STREAM_ End of rx_stream.h */