Xinu7/src/serve11/sys/fserver.c

/* fserver.c - fserver */

#include <conf.h>
#include <kernel.h>
#include <network.h>
#include <serve11.h>

/*------------------------------------------------------------------------
 *  fserver  -  provide (limited) file server for the network
 *------------------------------------------------------------------------
 */
PROCESS fserver()
{
	struct	fpacket *fptr;
	int	devid, size, maxpacket;
	char	*msg;

	maxpacket = FPPLEN;

	if ( (devid=open(INTERNET, ANYFPORT, URFILE)) == SYSERR) {
		kprintf("\nRemote File Serve - cannot open.\n");
		return(SYSERR);
		}
	if ((msg = (char *) getmem(maxpacket)) == SYSERR) {
		panic("fserver: out of memory");
		return(SYSERR);
		}
	while ( TRUE ) {
		if ((size = read(devid, msg, maxpacket)) == SYSERR) {
			continue;
			} 
		fptr = (struct fpacket *) ((struct xgram *)msg)->xg_data;
		if (net2hs(fptr->fp_h.f_op) < 0) {
			continue;
			} 
		fptr->fp_h.f_op = hs2net(FS_ERROR);

		if (write(devid, msg, size) == SYSERR) {
               		panic("fserver -- cannot write");
               		}
		}
}