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