socks5api.h
上传用户:sddyfurun
上传日期:2007-01-04
资源大小:525k
文件大小:5k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /* Copyright (c) 1995,1996,1997 NEC Corporation.  All rights reserved.       */
  2. /*                                                                           */
  3. /* The redistribution, use and modification in source or binary forms of     */
  4. /* this software is subject to the conditions set forth in the copyright     */
  5. /* document ("Copyright") included with this distribution.                   */
  6. /*
  7.  * $Id: socks5api.h,v 1.25.4.3 1998/11/04 00:03:20 steve Exp $
  8.  */
  9. #ifndef __SOCKS5API_H_
  10. #define __SOCKS5API_H_
  11. #ifndef P
  12. #ifdef __STDC__
  13. #define P(x) x
  14. #else
  15. #define P(x) ()
  16. #endif
  17. #endif
  18. #define S5_SERVER_NUM    16
  19. #define S5_ERRMSG_SIZE   128
  20. #define S5_ENTRY_SIZE    128
  21. #define S5_NAME_SIZE     64
  22. #define S5_OPTION_SIZE  256
  23. #define S5_APPNAME_SIZE  64
  24. #define S5_USERNAME_SIZE 128
  25. #define S5_HOSTNAME_SIZE 128
  26. #define S5_FILENAME_SIZE 256
  27. /*
  28. #define S5_ENTRY_SIZE    256
  29. #define S5_NAME_SIZE     256
  30. #define S5_APPNAME_SIZE  256
  31. #define S5_USERNAME_SIZE 256
  32. #define S5_HOSTNAME_SIZE 256
  33. #define S5_FILENAME_SIZE 1024
  34. */
  35. #define S5InvalidIOHandle -1
  36. typedef int S5IOHandle;
  37. struct sockaddr_name {
  38.     unsigned short sn_family;
  39.     unsigned short sn_port;
  40.     char sn_name[255];
  41. };
  42. #define AF_S5NAME 0xff
  43. union tagS5NetAddr {
  44.     struct sockaddr      sa;
  45.     struct sockaddr_in   sin;
  46.     struct sockaddr_name sn;
  47. #ifdef HAVE_NETINET6_IN6_H
  48.     struct sockaddr_in6  sin6;
  49. #endif
  50. };
  51. typedef union tagS5NetAddr S5NetAddr;
  52. struct tagS5Packet {
  53.     char *data;
  54.     int len, off;
  55.     int oob;
  56. };
  57. typedef struct tagS5Packet S5Packet;
  58. struct tagS5AuthInfo {
  59.     void *context;
  60.     int (*encode) P((S5Packet *, S5Packet *, int, void *));
  61.     int (*check)  P((S5Packet *, void *));
  62.     int (*clean)  P((void *));
  63. };
  64. typedef struct tagS5AuthInfo S5AuthInfo;
  65. struct tagS5IOInfo {
  66.     S5Packet ibuf, obuf;
  67.     S5AuthInfo auth;
  68.     S5IOHandle fd;
  69. };
  70. typedef struct tagS5IOInfo S5IOInfo;
  71. struct tagS5LinkInfo {
  72.     char srcName[S5_HOSTNAME_SIZE];
  73.     char dstName[S5_HOSTNAME_SIZE];
  74.     char retName[S5_HOSTNAME_SIZE];
  75.     char sckName[S5_HOSTNAME_SIZE];
  76.     char srcUser[S5_USERNAME_SIZE];
  77. #ifdef USERPROXYFIX
  78.     char logUser[S5_USERNAME_SIZE];
  79. #define S5RESV_USERNAMEPROXY_BIT 0
  80. #endif
  81.     char dstServ[S5_APPNAME_SIZE];
  82.     unsigned char nextVersion;
  83.     unsigned char peerVersion;
  84.     unsigned char peerCommand;
  85.     unsigned char nextReserved;
  86.     unsigned char peerReserved;
  87.     unsigned char peerFlags;
  88.     unsigned char peerAuth;
  89.     u_short clientPort;
  90.     
  91.     S5NetAddr srcAddr; /* source address                                    */
  92.     S5NetAddr dstAddr; /* destination address                               */
  93.     S5NetAddr retAddr; /* returned or real destination address              */
  94.     S5NetAddr bndAddr; /* source connection's inteface                      */
  95.     S5NetAddr intAddr; /* destination connection's interface                */
  96.     S5NetAddr sckAddr; /* Next step on the chain...                         */
  97.     int inbc;          /* How many bytes have come in on this link          */
  98.     int outbc;         /* How many bytes have gone out on this link         */
  99.     S5NetAddr altSckAddrs[S5_SERVER_NUM]; /* Alternative next steps in the chain...       */
  100.     int nAltSckAddrs;                     /* # of Alternative next steps in the chain...  */
  101. };
  102. typedef struct tagS5LinkInfo S5LinkInfo;
  103. struct tagS5CommandInfo{
  104.     void *option;
  105.     int (*sendpkt) P((S5Packet *, S5LinkInfo *, void *, int *));
  106.     int (*recvpkt) P((S5Packet *, S5LinkInfo *, void *, int *));
  107.     int (*clean)   P((S5LinkInfo *, void *));
  108. };
  109. typedef struct tagS5CommandInfo S5CommandInfo;
  110. struct tagS5FilterInfo { 
  111.     void *option; 
  112.     int (*filter) P((S5Packet *, S5Packet *, S5LinkInfo *, void *,int *, int *)); 
  113.     int (*clean)  P((void *)); 
  114. };
  115. typedef struct tagS5FilterInfo S5FilterInfo;  
  116. #define S5_DIRECTION_IN      1
  117. #define S5_DIRECTION_OUT     2
  118. #define S5_DIRECTION_ANY     3
  119. #define S5_ACTION_READ       1
  120. #define S5_ACTION_MORE_READ  2
  121. #define S5_ACTION_WRITE      3
  122. #define S5_ACTION_MORE_WRITE 4
  123. #define S5_ACTION_CLOSE      5
  124. #define S5_AUTH_CLIENT       1
  125. #define S5_AUTH_SERVER       2
  126. #define S5_AUTH_BOTH         3
  127. #define S5_ENCODE            0
  128. #define S5_DECODE            1
  129. #define S5_SOCKS4      SOCKS4_VERSION
  130. #define S5_SOCKS5      SOCKS5_VERSION
  131. #ifdef FOR_CLIENT
  132. #define APIPREFIX(x) S5C ## x
  133. #else
  134. #define APIPREFIX(x) S5S ## x
  135. #endif
  136. #define CLOSESOCKET            REAL(close)
  137. #define RECVSOCKET(f, b, l, o) ((o)?REAL(recv)(f, b, l, o):REAL(read)(f, b, l))
  138. #define SENDSOCKET(f, b, l, o) ((o)?REAL(send)(f, b, l, o):REAL(write)(f, b, l))
  139. #define IOCTLSOCKET            ioctl
  140. #define READFILE               REAL(read)
  141. #define WRITEFILE              REAL(write)
  142. #define SOCKETERROR(x)         x
  143. #define GETERRNO()             errno
  144. #define SETERRNO(x)            (errno =  (x))
  145. #define SETSOCKETERROR(x)      (errno =  (x))
  146. #define ISSOCKETERROR(x)       (errno == (x))
  147. #endif