/* * DNET.H * * DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved. * */ #include #include #include #include #include #include #include #include #include #include #include #include #include "/version.h" #define DNET_H #define DMNWOFF 4 /* Deemu offset to NewWindow structure */ #define ARGS(foo) foo typedef struct IORequest IOR; typedef struct IOStdReq IOSTD; typedef struct IOExtSer IOSER; typedef struct IOStdReq IOCON; typedef struct timerequest IOT; typedef struct Window WIN; typedef struct NewWindow NW; typedef struct RastPort RP; typedef struct Task TASK; typedef struct Process PROC; typedef struct MsgPort PORT; typedef struct Node NODE; typedef struct MinNode MNODE; typedef struct List LIST; typedef struct MinList MLIST; typedef struct Message MSG; typedef unsigned char ubyte; typedef unsigned short uword; typedef unsigned long ulong; #include "/dnet/channel.h" #ifndef MAX(a,b) #define MAX(a,b) (((a)>(b))?(a):(b)) #endif #define CFGFILE "s:dnet.config" #define PKT struct _PKT #define CTLPKT struct _CTLPKT #define PNODE struct _PNODE #define IOMSG struct _IOMSG #define DNETPORTNAME "DNET.UNIT." #define OFFSET(ptr,elem) ((long)((char *)&(ptr)->elem - (char *)(ptr))) #define EMPTY 0 /* empty (sent) */ #define READY 1 /* data ready (not sent yet) */ #define MAXCHAN 128 /* Max # of channels supported */ #define SYNC 0x5B /* SYNC character */ #define MAXPKT 200 /* maximum packet size */ #define MINPKT 32 /* minimum maximum packet size (for priority scheme) */ #define MAXPACKET ((MAXPKT * 8 + 5) / 6 + 64) #define OVERHEAD 7 /* for packets with data */ PNODE { NODE node; char name[32]; ulong seg; }; CTLPKT { uword buflen; /* send: length of packet, recv: length of data */ ubyte state; /* EMPTY, READY */ ubyte sync; /* THE PACKET */ ubyte ctl; ubyte cchk; }; PKT { uword buflen; /* send: length of packet, recv: length of data */ ubyte state; /* EMPTY, READY */ ubyte sync; /* THE PACKET */ ubyte ctl; ubyte cchk; ubyte lenh; ubyte lenl; ubyte dchkh; ubyte dchkl; ubyte data[MAXPACKET]; }; /* * Used by the IoCtl() support routines. */ IOMSG { MSG Msg; TASK *ReplyTask; ulong Cmd; ulong Arg1; ulong Arg2; ulong Res; }; #ifdef NOTDEF /* RECEIVER STATES */ #define RS_SYNC 0 /* Waiting for sync */ #define RS_CTL 1 /* Waiting for command */ #define RS_CCHK 2 /* Waiting for check byte */ #define RS_LEN1 3 /* Waiting for MSB length byte */ #define RS_LEN2 4 /* Waiting for LSB length byte */ #define RS_DATA 5 /* Waiting for data & checksum */ #endif #define DNCMD_OPEN 32 /* Application open */ #define DNCMD_SOPEN 33 /* Server open */ #define DNCMD_CLOSE 34 /* Close a channel */ #define DNCMD_EOF 35 /* Will no longer write to channel */ #define DNCMD_WRITE 36 /* Write data to a channel */ #define DNCMD_QUIT 37 /* Kill the DNET server */ #define DNCMD_IOCTL 38 #define DNCMD_EXEC 39 /* server asks driver to Execute() something */ #define DNCMD_INFO 64 /* Ascii status message */ /* REQUEST TYPES */ #define RTO_REQ 1 /* Network read timeout */ #define WTO_REQ 2 /* Network write-ack timeout */ #define RNET_REQ 3 /* Network read data */ #define WNET_REQ 4 /* Network write data sent */ #define PKT_REQ 5 /* Returned packets from servers */ #define OPEN_REQ 6 #define IGWNET_REQ 7 #define CTO_REQ 8 #define CNET_REQ 9 /* PACKET CONTROL BYTE */ #define PKF_SEQUENCE 0x07 /* Sequence # */ #define PKF_MASK 0x78 /* command mask */ #define PKCMD_RESTART 0x20 /* Restart */ #define PKCMD_ACKRSTART 0x28 /* Restart Acknowledge */ #define PKCMD_WRITE6 0x30 /* A DATA packet 6 bit enc */ #define PKCMD_WRITE 0x38 /* A DATA packet */ #define PKCMD_CHECK 0x40 /* Request ACK or NAK for win */ #define PKCMD_ACK 0x48 /* ACK a window */ #define PKCMD_NAK 0x50 /* NAK a window */ #define PKCMD_WRITE7 0x58 /* compressed 7 bit in 8 bit pkt */ /* 0x60-0x7F reserved */ /* CHANNEL COMMANDS */ #define SCMD_SWITCH 0x00 /* switch active channel # */ #define SCMD_OPEN 0x01 /* open a channel */ #define SCMD_CLOSE 0x02 /* close a channel */ #define SCMD_ACKCMD 0x03 /* ack an open/close request */ #define SCMD_EOFCMD 0x04 /* Reof or Weof */ #define SCMD_QUIT 0x05 /* crash dnet */ #define SCMD_IOCTL 0x06 /* ioctl */ #define SCMD_DATA 0x08 /* stream command, DATA */ #define CHAN_FREE 0x01 /* free channel */ #define CHAN_ROPEN 0x02 /* remote open, wait port msg */ #define CHAN_LOPEN 0x03 /* local open, wait reply */ #define CHAN_OPEN 0x04 #define CHAN_CLOSE 0x05 /* see flags */ #define CHANF_ROK 0x01 /* NOT read eof */ #define CHANF_WOK 0x02 /* remote will accept data */ #define CHANF_LCLOSE 0x04 #define CHANF_RCLOSE 0x08 extern void *ArbitrateNext(); extern long IoHandler(); #ifndef NOEXT extern IOT Rto; /* Read-Timeout/reset */ extern IOT Wto; /* Write-Timeout/retry */ extern IOT Cto; extern PKT Pkts[9]; extern PKT *Raux; /* next packet in */ extern PKT *RPak[4]; extern PKT *WPak[4]; extern PORT *DNetPort; /* Remote Command/Control in */ extern PORT *IOSink; /* Return port for ALL IO */ #ifdef NOTDEF extern PORT *IPCPort; /* IPC comm port */ #endif extern CHAN Chan[MAXCHAN]; extern LIST TxList; /* For pending DNCMD_WRITE reqs. */ extern ubyte Rto_act; extern ubyte Wto_act; extern ubyte Cto_act; extern ubyte Cd; extern uword RChan; extern uword WChan; extern uword RPStart; extern uword WPStart; extern uword WPUsed; extern uword RState; extern uword Protocol; extern short DDebug; extern short PDebug; extern ubyte Restart; extern ubyte OnLine; extern ubyte Quit; extern ubyte Mode7; /* 7 bit line */ extern short AutoHangup; extern short DialOut; extern short AutoAnswer; extern short Master8; extern short NetworkNum; extern short Getty; extern ulong NumCon; extern ulong WTimeoutVal; extern ulong RTimeoutVal; extern long Baud; extern long TOBaud; extern char *HostName; /* The Amiga's HostName */ extern long DResBase; extern char PortName[]; extern short Deemu[]; extern long BytesOut, PacketsOut, PacketsResent; extern long BytesIn , PacketsIn , PacketsNakd; extern long GarbageIn; extern long Packets6In, Packets7In, Packets8In; extern long Packets6Out, Packets7Out, Packets8Out; #ifdef NOTDEF extern void do_rto ARGS((IOT *)); extern void do_wto ARGS((IOT *)); extern void do_rnet ARGS((ubyte *, long)); extern void do_wnet ARGS((void)); extern void do_wupdate ARGS((void)); extern void dumpcheck ARGS((ubyte *)); extern void do_cmd ARGS((uword, ubyte *, int)); extern void do_rupdate ARGS((void)); extern void do_reccmd ARGS((int, ubyte *, int)); extern void replywindow ARGS((int)); /* Prototypes for functions defined in sernet.c */ extern void NetOpen ARGS((PORT *, char *, int, int *)); extern void NetClose ARGS((void)); extern void NetClWrite ARGS((IOSER *)); extern void NetWrite ARGS((void *, int, int)); extern void NetBreak ARGS((void)); extern int NetReady ARGS((void)); extern int SetBaudRate ARGS((int)); extern void DropDTR ARGS((void)); extern void NetStartRead ARGS((long)); extern IOSER *NetAbortRead ARGS((void)); extern struct IOExtSer *NetReadReady ARGS((void)); extern int NetReadReturned ARGS((int, ubyte **)); extern void NetWaitWrite ARGS((void)); extern void SaveState ARGS((void)); extern void RestoreState ARGS((void)); extern void NetRecvOff ARGS((void)); extern void NetRecvOn ARGS((void)); extern void NetSerialOff ARGS((void)); extern void NetSerialOn ARGS((void)); /* Prototypes for functions defined in time.c */ extern void do_cto ARGS((IOT *)); extern void ResetIdle ARGS((void)); extern void ResetConnect ARGS((void)); extern void LessConnect ARGS((int)); extern void SetConnectAlert ARGS((int, char *)); extern void SetIdleAlert ARGS((int, char *)); extern int GetIdle ARGS((void)); extern int GetConnect ARGS((void)); /* extern int doipcmsg ARGS((char *, char *, short)); */ /* Prototypes for functions defined in dnet.c */ void do_netreset ARGS((void)); /* Prototypes for functions defined in ipc.c */ /* extern int handle_ipc ARGS((void)); extern void do_online ARGS((void)); extern void do_offline ARGS((void)); extern void do_disconnect ARGS((void)); extern void do_quit ARGS((void)); extern void do_stat ARGS((int, char **, int *)); extern void do_state ARGS((void)); extern int AllocAppend ARGS((char **, int *, char *, int)); extern void do_recvon ARGS((void)); extern void do_recvoff ARGS((void)); extern void do_serialon ARGS((void)); extern void do_serialoff ARGS((void)); extern void do_baud ARGS((char **)); extern void do_getidle ARGS((char **, char **, int *)); extern void do_getconnect ARGS((char **, char **, int *)); */ /* Prototypes for functions defined in subs.c */ extern void WriteStream ARGS((int, void *, int, uword)); extern void WritePort ARGS((PORT *, int, void *, int, int, int)); extern int alloc_channel ARGS((void)); extern int GetNext ARGS((struct Node *)); extern int chkbuf ARGS((ubyte *, uword)); extern void TimerOpen ARGS((struct timerequest *, struct MsgPort *)); extern void TimerClose ARGS((struct timerequest *)); extern void InitServers ARGS((void)); extern void RunServer ARGS((uword)); extern void DeleteServers ARGS((void)); extern void dneterror ARGS((char *)); extern void fixsignal ARGS((PORT *)); extern void SetTimeouts ARGS((int)); /* Prototypes for functions defined in window.c */ extern void do_dnetwindow ARGS((int)); extern void setparity ARGS((int,int,int)); extern void addparity ARGS((ubyte *, int)); extern void OpenConsole ARGS((WIN *, IOCON **, IOCON **)); extern void CloseConsole ARGS((IOCON *, IOCON *)); extern void InitDeemuNW ARGS((short *, NW *)); extern void LoadConnectList ARGS((void)); extern void UnLoadConnectList ARGS((void)); extern int CheckConnect ARGS((int, char *, int)); #endif #endif