xref: /csrg-svn/usr.bin/uucp/nio.c (revision 17142)
1 #ifdef lint
2 static char sccsid[] = "@(#)nio.c	5.1 (BERKELEY) 08/31/84";
3 #endif
4 
5 #include "uucp.h"
6 #include <sys/param.h>
7 
8 extern unsigned short ntohs(), htons();
9 
nturnon()10 nturnon()
11 {
12 	return(0);
13 }
14 
nturnoff()15 nturnoff()
16 {
17 	return(0);
18 }
19 
nwrmsg(type,str,fn)20 nwrmsg(type, str, fn)
21 char type;
22 register char *str;
23 {
24 	char bufr[BUFSIZ];
25 	register char *cp = bufr;
26 	unsigned short nlen;
27 	int len;
28 
29 	for (*cp++ = type; *cp = *str++; cp++)
30 		;
31 	if (cp[-1] == '\n')
32 		*--cp = (char)0;
33 	len = (cp - bufr) + 1;
34 	nlen = htons(len);
35 	if (write(fn, &nlen, sizeof nlen) != sizeof nlen ||
36 	    write(fn, bufr, len) != len)
37 		return(FAIL);
38 	return(0);
39 }
40 
nrdmsg(str,fn)41 nrdmsg(str, fn)
42 char *str;
43 {
44 	int count, cc;
45 	unsigned short ncount;
46 
47 	if ((cc = read(fn, &ncount, sizeof ncount)) != sizeof ncount) {
48 		DEBUG(7, "nrdmsg bad byte count read (%d)\n", cc);
49 		return(FAIL);
50 	}
51 	count = ntohs(ncount);
52 	DEBUG(7, "nrdmsg expecting %d bytes, got ", count);
53 	if ((cc = read(fn, str, count)) != count) {
54 		DEBUG(7, "%d\n", cc);
55 		return(FAIL);
56 	}
57 	DEBUG(7, "them%c", '\n');
58 	return(0);
59 }
60 
61 /* call ultouch every TC calls to either grdblk or gwrblk -- rti!trt */
62 #define	TC	60
63 static	int tc = TC;
64 
nwrdata(fp1,fn)65 nwrdata(fp1, fn)
66 FILE *fp1;
67 {
68 	int len, cc;
69 	unsigned short nlen;
70 	char bufr[BUFSIZ], msg[64];
71 	extern long time();
72 	long bytes = 0L, secs = time((long *)0);
73 
74 	while ((len = fread(bufr, sizeof(char), BUFSIZ, fp1)) > 0) {
75 		/* call ultouch occasionally -- rti!trt */
76 		if (--tc < 0) {
77 			tc = TC;
78 			ultouch();
79 		}
80 		DEBUG(7, "nwrdata writing %d bytes, ", len);
81 		nlen = htons((unsigned short)len);
82 		if ((cc = write(fn, &nlen, sizeof nlen)) != sizeof nlen) {
83 			DEBUG(7, "bad byte count write (%d)\n", cc);
84 			return(FAIL);
85 		}
86 		if ((cc = write(fn, bufr, len)) != len) {
87 			DEBUG(7, "wrote %d\n", cc);
88 			return(FAIL);
89 		}
90 		DEBUG(7, "succeeded%c", '\n');
91 		bytes += len;
92 	}
93 	nlen = 0;
94 	DEBUG(7, "nwrdata writing eof marker, ", 0);
95 	if ((cc = write(fn, &nlen, sizeof nlen)) != sizeof nlen) {
96 		DEBUG(7, "bad byte count write (%d)\n", cc);
97 		return(FAIL);
98 	}
99 	DEBUG(7, "succeeded%c", '\n');
100 	secs = time((long *)0) - secs;
101 	sprintf(msg, "sent data %ld bytes %ld secs", bytes, secs);
102 	DEBUG(1, "%s\n", msg);
103 	syslog(msg);
104 	sysacct(bytes, secs);
105 	return(0);
106 }
107 
nrddata(fn,fp2)108 nrddata(fn, fp2)
109 FILE *fp2;
110 {
111 	int len, cc;
112 	unsigned short nlen;
113 	char bufr[BUFSIZ], msg[64];
114 	extern long time();
115 	long bytes = 0L, secs = time((long *)0);
116 
117 	for (;;) {
118 		/* call ultouch occasionally -- rti!trt */
119 		if (--tc < 0 ) {
120 			tc = TC;
121 			ultouch();
122 		}
123 		if ((cc = read(fn, &nlen, sizeof nlen)) != sizeof nlen) {
124 			DEBUG(7, "nrddata bad byte count read (%d)\n", cc);
125 			return(FAIL);
126 		}
127 		len = ntohs(nlen);
128 		if (len == 0)
129 			break;
130 		DEBUG(7, "nrddata expecting %d bytes, got ", len);
131 		if ((cc = read(fn, bufr, len)) != len ||
132 		    fwrite(bufr, sizeof(char), len, fp2) != len) {
133 			DEBUG(7, "%d\n", cc);
134 			return(FAIL);
135 		}
136 		DEBUG(7, "them%c", '\n');
137 		bytes += len;
138 	}
139 	secs = time((long *)0) - secs;
140 	sprintf(msg, "received data %ld bytes %ld secs", bytes, secs);
141 	DEBUG(1, "%s\n", msg);
142 	syslog(msg);
143 	sysacct(bytes, secs);
144 	return(0);
145 }
146