home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 367.lha / netkeys_v2.0 / dnet.h < prev    next >
Encoding:
C/C++ Source or Header  |  1990-05-02  |  6.5 KB  |  228 lines

  1.  
  2. /*
  3.  *  DNET.H
  4.  *
  5.  *  DNET (c)Copyright 1988, Matthew Dillon, All Rights Reserved.
  6.  *
  7.  */
  8.  
  9. #define DNET_H
  10.  
  11. #ifdef LATTICE
  12. #include <exec/types.h>
  13. #include <exec/nodes.h>
  14. #include <exec/lists.h>
  15. #include <exec/ports.h>
  16. #include <exec/libraries.h>
  17. #include <exec/devices.h>
  18. #include <exec/io.h>
  19. #include <exec/memory.h>
  20. #include <exec/interrupts.h>
  21. #include <intuition/intuition.h>
  22. #include <devices/console.h>
  23. #include <devices/timer.h>
  24. #include <libraries/dos.h>
  25. #include <libraries/dosextens.h>
  26. #include <libraries/filehandler.h>
  27. #include <string.h>
  28. #include <stdlib.h>
  29. #include <proto/exec.h>
  30. #include <proto/dos.h>
  31.  
  32. #define U_ARGS(a) a
  33.  
  34. #else
  35.  
  36. #define U_ARGS(a) ()    /* No support for prototypes - oh well */
  37.  
  38. #endif
  39.  
  40.  
  41. typedef unsigned char    ubyte;
  42. typedef unsigned short    uword;
  43. typedef unsigned long    ulong;
  44.  
  45. typedef struct MsgPort        PORT;
  46. typedef struct timerequest  IOT;
  47. typedef struct IOStdReq     IOR;
  48. typedef struct List        LIST;
  49. typedef struct Node        NODE;
  50. typedef struct Process        PROC;
  51. typedef struct Message        MSG;
  52.  
  53. #include "channel.h"
  54.  
  55. #ifndef MAX(a,b)
  56. #define MAX(a,b) (((a)>(b))?(a):(b))
  57. #endif
  58.  
  59. #define PKT struct _PKT
  60. #define PNODE    struct _PNODE
  61.  
  62. #define BTOC(yow)           ((ubyte *)((long)(yow) << 2))
  63. #define DNETPORTNAME        "DNET.UNIT."
  64. #define OFFSET(ptr,elem)    ((long)((char *)&(ptr)->elem - (char *)(ptr)))
  65.  
  66. #define EMPTY    0    /*  empty (sent)                    */
  67. #define READY    1    /*  data ready (not sent yet)       */
  68.  
  69. #define MAXCHAN 128    /*  Max # of channels supported     */
  70. #define SYNC    0xFF    /*  SYNC character            */
  71. #define MAXPKT    200    /*  maximum packet size         */
  72. #define MINPKT    32    /*  minimum maximum packet size
  73.                 (for priority scheme)           */
  74.  
  75. #define OVERHEAD    7    /*  for packets with data        */
  76.  
  77. PNODE {
  78.     NODE    node;
  79.     char    name[32];
  80.     ulong   seg;
  81. };
  82.  
  83. PKT {
  84.     uword   iolength;    /*  send: length of packet, recv: length of data    */
  85.     ubyte   state;    /*  EMPTY, READY     */
  86.  
  87.     ubyte   sync;    /*  THE PACKET        */
  88.     ubyte   ctl;
  89.     ubyte   cchk;
  90.     ubyte   lenh;
  91.     ubyte   lenl;
  92.     ubyte   data[MAXPKT+2];
  93. };
  94.  
  95. /*  RECEIVER STATES    */
  96. #define RS_SYNC 0        /*    Waiting for sync        */
  97. #define RS_CTL    1        /*    Waiting for command        */
  98. #define RS_CCHK 2        /*    Waiting for check byte        */
  99. #define RS_LEN1 3        /*    Waiting for MSB length byte    */
  100. #define RS_LEN2 4        /*    Waiting for LSB length byte    */
  101. #define RS_DATA 5        /*    Waiting for data & checksum    */
  102.  
  103. #define DNCMD_OPEN    32  /*    Application open        */
  104. #define DNCMD_SOPEN    33  /*    Server open            */
  105. #define DNCMD_CLOSE    34  /*    Close a channel         */
  106. #define DNCMD_EOF    35  /*    Will no longer write to channel */
  107.  
  108. #define DNCMD_WRITE    36  /*    Write data to a channel     */
  109. #define DNCMD_QUIT    37  /*    Kill the DNET server        */
  110. #define DNCMD_IOCTL    38
  111.  
  112. /*  REQUEST TYPES    */
  113. #define RTO_REQ     1   /*    Network read timeout        */
  114. #define WTO_REQ     2   /*    Network write-ack timeout    */
  115. #define RNET_REQ    3   /*    Network read data        */
  116. #define WNET_REQ    4   /*    Network write data sent     */
  117. #define PKT_REQ     5   /*    Returned packets from servers    */
  118. #define OPEN_REQ    6
  119. #define IGWNET_REQ    7
  120.  
  121. /* PACKET CONTROL BYTE */
  122. #define PKF_SEQUENCE    0xE0    /*  Sequence #            */
  123. #define PKF_DATA    0x10    /*  1-65535 bytes        */
  124. #define PKF_RESERVED    0x08    /*  reserved bit        */
  125. #define PKF_MASK    0x07    /*  command mask        */
  126.  
  127. #define PKCMD_WRITE    1    /*  A DATA packet        */
  128. #define PKCMD_CHECK    2    /*  Request ACK or NAK for win    */
  129. #define PKCMD_ACK    3    /*  ACK a window        */
  130. #define PKCMD_NAK    4    /*  NAK a window        */
  131. #define PKCMD_RESTART    5    /*  Restart            */
  132. #define PKCMD_ACKRSTART 6    /*  Restart Acknowledge     */
  133. #define PKCMD_RESERVE3    7
  134. /*  CHANNEL COMMANDS    */
  135. #define SCMD_SWITCH    0x00    /*  switch active channel #    */
  136. #define SCMD_OPEN    0x01    /*  open a channel        */
  137. #define SCMD_CLOSE    0x02    /*  close a channel        */
  138. #define SCMD_ACKCMD    0x03    /*  ack an open/close request    */
  139. #define SCMD_EOFCMD    0x04    /*  Reof or Weof        */
  140. #define SCMD_QUIT    0x05    /*  crash dnet            */
  141. #define SCMD_IOCTL    0x06    /*  ioctl            */
  142.  
  143. #define SCMD_DATA    0x08    /*  stream command, DATA    */
  144.  
  145. #define CHAN_FREE    0x01    /*  free channel        */
  146. #define CHAN_ROPEN    0x02    /*  remote open, wait port msg    */
  147. #define CHAN_LOPEN    0x03    /*  local open, wait reply    */
  148. #define CHAN_OPEN    0x04
  149. #define CHAN_CLOSE    0x05    /*  see flags            */
  150. #define CHANF_ROK    0x01    /*  NOT read eof        */
  151. #define CHANF_WOK    0x02    /*  remote will accept data    */
  152. #define CHANF_LCLOSE    0x04
  153. #define CHANF_RCLOSE    0x08
  154.  
  155. struct DChannel {
  156.     PORT    port;          /*  receive data, replies      */
  157.     PORT    *dnetport;          /* dnet's master port          */
  158.     LIST    rdylist;          /* ready to be read         */
  159.     uword   chan;          /* channel # for open channels */
  160.     ubyte   eof;          /* channel remotely closed/eof */
  161.     ubyte   filler;
  162.     int     qlen;          /* allowed write queue size    */
  163.     int     queued;          /* current # packets queued    */
  164. };
  165.  
  166. extern void  *ArbitrateNext();
  167.  
  168. #ifndef NOEXT
  169. extern IOT Rto;            /*  Read-Timeout/reset           */
  170. extern IOT Wto;            /*  Write-Timeout/retry           */
  171. extern IOR *RNet;           /*  read-request            */
  172. extern IOR *WNet;           /*  write-request           */
  173. extern PKT Pkts[9];
  174. extern PKT *Raux;           /*  next packet in           */
  175. extern PKT *RPak[4];
  176. extern PKT *WPak[4];
  177. extern PORT *DNetPort;           /*  Remote Command/Control in       */
  178. extern PORT *IOSink;           /*  Return port for ALL IO       */
  179. extern CHAN Chan[MAXCHAN];
  180. extern LIST TxList;           /*  For pending DNCMD_WRITE reqs.   */
  181. extern LIST SvList;
  182. extern ubyte Rto_act;
  183. extern ubyte Wto_act;
  184. extern uword RChan;
  185. extern uword WChan;
  186. extern uword RPStart;
  187. extern uword WPStart;
  188. extern uword WPUsed;
  189. extern uword RState;
  190. extern ubyte DDebug;
  191. extern ubyte Restart;
  192. extern ubyte DeldQuit;
  193. extern ubyte AutoHangup;
  194. extern ulong NumCon;
  195. extern ulong WTimeoutVal;
  196. extern ulong RTimeoutVal;
  197. extern long Baud;
  198. extern char *HostName;        /*     The Amiga's HostName    */
  199.  
  200. extern ubyte RestartPkt[3];
  201. extern ubyte AckPkt[8][3];
  202. extern ubyte NakPkt[8][3];
  203. extern ubyte CheckPkt[8][3];
  204. #endif
  205.  
  206. #ifdef LATTICE
  207. /* One #ifdef LATTICE is worth 1000 U_ARGS macros! */
  208. PORT *DListen(uword);
  209. void DUnListen(PORT *);
  210. PORT *DAccept(PORT *);
  211. DNAAccept(PORT *);
  212. void DPri(struct DChannel *, int);
  213. PORT *DOpen(char * /*host*/, uword /*portnum*/,
  214.         char /*txpri*/, char /*rxpri*/);
  215. int DNRead(struct DChannel *, char *, int);
  216. int DRead(struct DChannel *, char *, int);
  217. void DQueue(struct DChannel *, int);
  218. DWrite(struct DChannel *, char *, int);
  219. void DEof(struct DChannel *);
  220. void DIoctl(struct DChannel *, ubyte, uword, ubyte);
  221. int DQuit(char *);
  222. void DClose(struct DChannel *);
  223. void WaitMsg(IOR *);
  224. int WaitQueue(struct DChannel *, IOR *);
  225.  
  226. #endif
  227.  
  228.