This is ablap.c in view mode; [Download] [Up]
/* * $Author: cck $ $Date: 88/03/29 12:39:40 $ * $Header: ablap.c,v 1.2 88/03/29 12:39:40 cck Rel $ * $Revision: 1.2 $ */ /* * ablap.c - Link Access Protocol * * As of CAP 5.0, this module has been dropped. It is included for * reference. It never really made sense with DDP encapsulation anyway * * AppleTalk package for UNIX (4.2 BSD). * * Copyright (c) 1986 by The Trustees of Columbia University in the * City of New York. * * * Edit History: * * June 19, 1986 Schilit Created. * July 2, 1986 Schilit Most is not yet implemented * July 5, 1986 CCKim Most will never be implemented * March 1988 CCKim DUMP IT! * */ #include <stdio.h> #include <sys/types.h> #include <sys/uio.h> #include <netat/appletalk.h> /* * lapp - table of LAP protocol handlers. * */ struct { ProcPtr pproc; /* LAP protocol handler */ } lapp[lapMaxProto]; /* number of protocols */ typedef struct { LAP lap; char data[lapMaxData]; } ABpkt; /* for lap_read */ ABpkt rdpkt; /* * OSErr LAPOpenProtocol(int type, ProcPtr proto) * * LAPOpenProtocol adds the LAP protocol type specified in "type" * to the protocol table. If you provide a pointer to a protocol * handler in "proto" then each frame with a LAP protocol type of * "type" will be sent to that handler. * * If "proto" is NILPROC then the default handler will be used for * receiving frames with a LAP protocol type of "type." In this * case you must call LAPRead to provide the default protocol handler * with buffer for storing the data. If however you have written your * own protocol handler and "proto" points to it, your protocol handler * will be responsible for receiving the frame and it is not necessary * to call LAPRead. * */ OSErr LAPOpenProtocol(type,proto) int type; ProcPtr proto; { int defLAPProto(); if (type < 0 || type > 127) { /* type in range? */ fprintf(stderr,"LAPOpenProtocol: type (%d) not in range 1..127\n",type); exit(1); } lapp[type].pproc = (proto == NILPROC) ? defLAPProto : proto; return(noErr); } /* * OSErr LAPCloseProtocol(int type) * * LAPCloseProtocol removes the protocol specified by "type" from * the LAP protocol handler table. * */ OSErr LAPCloseProtocol(type) int type; { if (type < 2 || type > 127) { /* type in range? */ fprintf(stderr,"LAPCloseProtocol: type (%d) not in range 3..127\n",type); exit(1); } lapp[type].pproc = NILPROC; /* no more handler */ } /* * OSErr LAPRead(abRecPtr abr,int async) * * LAPRead receives a frame from another node. * */ OSErr LAPRead(abr,async) abRecPtr abr; int async; { fprintf(stderr,"LAPRead NYI\n"); } OSErr LAPRdCancel(abr) abRecPtr abr; { fprintf(stderr,"LAPRead NYI\n"); } /* * OSErr LAPWrite(abRecPtr abr) * * LAPWrite send a frame to another node. Currently this does * not work because of the limitations in the kinetics bridge * box. * */ OSErr LAPWrite(abr) abRecPtr abr; { fprintf(stderr,"LAPWrite NYI\n"); } /* * lap_read(int fd) * * Read the data off the net and dispatch to the appropriate * protocol handler. * */ lap_read(fd) int fd; { struct iovec iov[2]; int lpt,len; iov[0].iov_base = (caddr_t) &rdpkt.lap; iov[0].iov_len = lapSize; iov[1].iov_base = (caddr_t) rdpkt.data; iov[1].iov_len = lapMaxData; if ((len = abread(fd,&iov[0],2)) < 0) /* do the read */ return(len); /* failed, return now... */ lpt = rdpkt.lap.type; /* get the protocol type */ if (lpt < 1 || lpt > 127) return(-1); /* ugh... */ if (lapp[lpt].pproc == NILPROC) /* any protocol handler? */ return(-1); /* no, ugh again */ return((*lapp[lpt].pproc)(rdpkt.data,len-lapSize)); /* call handler */ } /* * defLAPProto(int fd) * * defLAPProto is not used. * */ defLAPProto(fd) int fd; { fprintf(stderr,"defLAPProto NYI %d\n",fd); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.