home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 3 / hamradioversion3.0examsandprograms1992.iso / misc / 9q920411 / usock.h < prev    next >
C/C++ Source or Header  |  1992-04-09  |  4KB  |  145 lines

  1. #ifndef    _USOCK_H
  2. #define    _USOCK_H
  3.  
  4. #ifndef    _MBUF_H
  5. #include "mbuf.h"
  6. #endif
  7.  
  8. #ifndef    _LZW_H
  9. #include "lzw.h"
  10. #endif
  11.  
  12. #ifndef _PROC_H
  13. #include "proc.h"
  14. #endif
  15.  
  16. #ifndef _TCP_H
  17. #include "tcp.h"
  18. #endif
  19.  
  20. #ifndef _UDP_H
  21. #include "udp.h"
  22. #endif
  23.  
  24. #ifndef _IP_H
  25. #include "ip.h"
  26. #endif
  27.  
  28. #ifndef _NETROM_H
  29. #include "netrom.h"
  30. #endif
  31.  
  32. #ifndef _SOCKADDR_H
  33. #include "sockaddr.h"
  34. #endif
  35.  
  36. struct loc {
  37.     struct usock *peer;
  38.     struct mbuf *q;
  39.     int hiwat;        /* Flow control point */
  40.     int flags;
  41. #define    LOC_SHUTDOWN    1
  42. };
  43. #define    NULLLOC    (struct loc *)0
  44. #define    LOCDFLOW    5    /* dgram socket flow-control point, packets */
  45. #define    LOCSFLOW    2048    /* stream socket flow control point, bytes */
  46. #define    SOBUF        256    /* Size of buffer for usputc()/usprintf() */
  47. #define    SOCKBASE    128    /* Start of socket indexes */
  48.  
  49. union sp {
  50.         struct sockaddr *sa;
  51.         struct sockaddr_in *in;
  52.         struct sockaddr_ax *ax;
  53.         struct sockaddr_nr *nr;
  54.         char *p;
  55. };
  56. struct socklink {
  57.     int type;        /* Socket type */
  58.     int (*socket) __ARGS((struct usock *,int));
  59.     int (*bind) __ARGS((struct usock *));
  60.     int (*listen) __ARGS((struct usock *,int));
  61.     int (*connect) __ARGS((struct usock *));
  62.     int accept;
  63.     int (*recv) __ARGS((struct usock *,struct mbuf **,char *,int *));
  64.     int (*send) __ARGS((struct usock *,struct mbuf *,char *to));
  65.     int (*qlen) __ARGS((struct usock *,int));
  66.     int (*kick) __ARGS((struct usock *));
  67.     int (*shut) __ARGS((struct usock *,int));
  68.     int (*close) __ARGS((struct usock *));
  69.     int (*check) __ARGS((char *,int));
  70.     char **error;
  71.     char *(*state) __ARGS((struct usock *));
  72.     int (*status) __ARGS((struct usock *));
  73. };
  74. extern struct socklink Socklink[];
  75. union cb {
  76.     struct tcb *tcb;
  77.     struct ax25_cb *ax25;
  78.     struct udp_cb *udp;
  79.     struct raw_ip *rip;
  80.     struct raw_nr *rnr;
  81.     struct nr4cb *nr4;
  82.     struct loc *local;
  83.     char *p;
  84. };
  85. /* User sockets */
  86. struct usock {
  87.     struct proc *owner;
  88.     int refcnt;
  89.     char noblock;
  90.     char type;
  91. #define    NOTUSED            0
  92. #define    TYPE_TCP        1
  93. #define    TYPE_UDP        2
  94. #define    TYPE_AX25I        3
  95. #define    TYPE_AX25UI        4
  96. #define TYPE_RAW        5
  97. #define TYPE_NETROML3        6
  98. #define TYPE_NETROML4        7
  99. #define    TYPE_LOCAL_STREAM    8
  100. #define    TYPE_LOCAL_DGRAM    9
  101.     struct socklink *sp;
  102.     int rdysock;
  103.     union cb cb;
  104.     char *name;
  105.     int namelen;
  106.     char *peername;
  107.     int peernamelen;
  108.     char errcodes[4];    /* Protocol-specific error codes */
  109.     struct mbuf *obuf;    /* Output buffer */
  110.     struct mbuf *ibuf;    /* Input buffer */
  111.     char eol[3];        /* Text mode end-of-line sequence, if any */
  112.     char tos;        /* Internet type-of-service */
  113.     int flag;        /* Mode flags, defined in socket.h */
  114.     int flush;        /* Character to trigger flush, if any */
  115.     struct lzw *zout;    /* Pointer to compression structure */
  116.     struct lzw *zin;
  117. };
  118. #define    NULLUSOCK    ((struct usock *)0)
  119.  
  120. extern char *(*Psock[]) __ARGS((struct sockaddr *));
  121. extern char Badsocket[];
  122. extern char *Socktypes[];
  123. extern struct usock *Usock;
  124. extern int Nusock;
  125. extern int16 Lport;
  126.  
  127. struct usock *itop __ARGS((int s));
  128. void st_garbage __ARGS((int red));
  129.  
  130. /* In locsocket.c: */
  131. int so_los __ARGS((struct usock *up,int protocol));
  132. int so_lod __ARGS((struct usock *up,int protocol));
  133. int so_lo_recv __ARGS((struct usock *up,struct mbuf **bpp,char *from,
  134.     int *fromlen));
  135. int so_los_send __ARGS((struct usock *up,struct mbuf *bp,char *to));
  136. int so_lod_send __ARGS((struct usock *up,struct mbuf *bp,char *to));
  137. int so_lod_qlen __ARGS((struct usock *up,int rtx));
  138. int so_los_qlen __ARGS((struct usock *up,int rtx));
  139. int so_loc_shut __ARGS((struct usock *up,int how));
  140. int so_loc_close __ARGS((struct usock *up));
  141. char *lopsocket __ARGS((struct sockaddr *p));
  142. int so_loc_stat __ARGS((struct usock *up));
  143.  
  144. #endif /* _USOCK_H */
  145.