TCP.H
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:9k
源码类别:

操作系统开发

开发平台:

DOS

  1. /*
  2.  * Waterloo TCP
  3.  *
  4.  * Copyright (c) 1990, 1991, 1992, 1993 Erick Engelke
  5.  *
  6.  * Portions copyright others, see copyright.h for details.
  7.  *
  8.  * This library is free software; you can use it or redistribute under
  9.  * the terms of the license included in LICENSE.H.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * file LICENSE.H for more details.
  15.  *
  16.  */
  17. #ifndef WTCP_VER
  18. /* handle some early dumb naming conventions */
  19. #define dbuginit()      dbug_init()
  20. /* Kernal version (major major minor minor) */
  21. #define WTCP_VER 0x0102
  22. /*
  23.  * Typedefs and constants
  24.  */
  25. #ifndef byte
  26. typedef unsigned char byte;
  27. #endif  byte
  28. #ifndef word
  29. typedef unsigned int word;
  30. #endif  word
  31. #ifndef longword
  32. typedef unsigned long longword;
  33. #endif  longword
  34. typedef struct {
  35.     byte undoc[ 4300 ];
  36. } tcp_Socket;
  37. typedef struct {
  38.     byte undoc[ 2200 ];
  39. } udp_Socket;
  40. typedef struct sockaddr {
  41.     word        s_type;
  42.     word        s_port;
  43.     longword    s_ip;
  44.     byte        s_spares[6];    /* unused in TCP realm */
  45. };
  46. #define sockaddr_in sockaddr
  47. typedef struct in_addr {
  48.     longword    s_addr;
  49. };
  50. #define MAX_COOKIES     10
  51. #define MAX_NAMESERVERS 10
  52. #define TCP_MODE_BINARY 0
  53. #define TCP_MODE_ASCII 1
  54. #define UDP_MODE_CHK 0 /*default to checksum */
  55. #define UDP_MODE_NOCHK 2
  56. #define TCP_MODE_NAGLE  0       /* Nagle algorithm */
  57. #define TCP_MODE_NONAGLE 4
  58. extern void sock_init(void);
  59. /*
  60.  *   s is the pointer to a udp or tcp socket
  61.  */
  62. extern sock_read(void  *s, byte *dp, int len );
  63. extern sock_fastread(void  *s, byte *dp, int len );
  64. extern sock_write(void  *s, byte *dp, int len);
  65. extern void sock_enqueue(void  *s, byte *dp, int len);
  66. extern sock_fastwrite(void *s, byte *dp, int len );
  67. extern sock_flush( void  *s );
  68. extern sock_flushnext( void  *s);
  69. extern sock_puts( void  *s, byte *dp );
  70. extern word sock_gets( void  *s, byte *dp, int n );
  71. extern byte sock_putc( void  *s, byte c );
  72. extern byte sock_getc( void  *s );
  73. extern word sock_dataready( void  *s );
  74. extern sock_close( void *s );
  75. extern sock_abort( void *s );
  76. extern sock_printf( void  *s, char *format, ... );
  77. extern sock_scanf( void  *s, char *format, ... );
  78. extern sock_mode( void *s, word mode );        /* see TCP_MODE_... */
  79. extern void db_write( char *msg );
  80. extern void dbug_init();
  81. extern void dbug_printf(char *,... );
  82. /*
  83.  * TCP or UDP specific stuff, must be used for open's and listens, but
  84.  * sock stuff is used for everything else
  85.  */
  86. extern int udp_open(void *s, word lport, longword ina, word port, int (*datahandler)());
  87. extern int tcp_open(void *s, word lport, longword ina, word port, int (*datahandler)());
  88. extern tcp_listen(void *s, word lport, longword ina, word port, int (*datahandler)(), word timeout);
  89. extern int tcp_established(void *s);
  90. extern char *rip( char *s );
  91. extern longword resolve( char *name);
  92. /*
  93.  * less general functions
  94.  */
  95. extern longword aton( char *text );
  96. extern int isaddr( char *text );
  97. extern tcp_cbreak( word mode );
  98. extern longword intel( longword x );
  99. extern word intel16( word x );
  100. /*
  101.  * timers
  102.  */
  103. extern void ip_timer_init( void *s , word delayseconds );
  104. extern word ip_timer_expired( void *s );
  105.         /*
  106.          * TCP/IP system variables - do not change these since they
  107.          *      are not necessarily the source variables, instead use
  108.          *      ip_Init function
  109.          */
  110. extern longword my_ip_addr;
  111. extern longword sin_mask;       /* eg.  0xfffffe00L */
  112. extern word sock_delay;
  113.         /*
  114.          * tcp_init/tcp_shutdown
  115.          *      - init/kill all tcp and lower services
  116.          *      - only call if you do not use sock_init
  117.          * (NOT RECOMMENDED)
  118.          */
  119. extern tcp_shutdown();
  120. extern tcp_Init();
  121. /*
  122.  * things you probably won't need to know about
  123.  */
  124. /*
  125.  * sock_debugdump
  126.  * - dump some socket control block parameters
  127.  * used for testing the kernal, not recommended
  128.  */
  129. extern sock_debugdump( void *s);
  130.         /*
  131.          * tcp_config - read a configuration file
  132.          *            - if special path desired, call after sock_init()
  133.          *            - null reads path from executable
  134.          * see sock_init();
  135.          */
  136. extern tcp_config( char *path );
  137.         /*
  138.          * tcp_tick - called periodically by user application in sock_wait_...
  139.          *          - returns 1 when our socket closes
  140.          */
  141. extern tcp_tick( void *s );
  142.         /*
  143.          * Retransmitter - called periodically to perform tcp retransmissions
  144.          *          - normally called from tcp_tick, you have to be pretty
  145.          *            low down to use this one
  146.          */
  147. extern tcp_Retransmitter();
  148.         /*
  149.          * tcp_set_debug_state - set 1 or reset 0 - depends on what I have done
  150.          */
  151. extern tcp_set_debug_state( word x );
  152. extern int _last_cookie;
  153. extern longword _cookie[MAX_COOKIES];
  154.         /*
  155.          * name domain constants
  156.          */
  157. extern char *def_domain;
  158. extern longword def_nameservers[ MAX_NAMESERVERS ];
  159. extern word wathndlcbrk;
  160. extern word watcbroke;
  161. /*
  162.  * sock_wait_... macros
  163.  */
  164. /*
  165.  * sock_wait_established()
  166.  * - waits then aborts if timeout on s connection
  167.  * sock_wait_input()
  168.  * - waits for received input on s
  169.  * - may not be valid input for sock_Gets... check returned length
  170.  * sock_tick()
  171.  * - do tick and jump on abort
  172.  * sock_wait_closed();
  173.  * - discards all received data
  174.  *
  175.  * jump to sock_err with contents of *statusptr set to
  176.  *  1 on closed
  177.  * -1 on timeout
  178.  *
  179.  */
  180. extern int _ip_delay0( void *s, int seconds, int (*fn)(), void *statusptr );
  181. extern int _ip_delay1( void *s, int seconds, int (*fn)(), void *statusptr );
  182. extern int _ip_delay2( void *s, int seconds, int (*fn)(), void *statusptr );
  183. extern unsigned long set_timeout( unsigned int seconds );
  184. extern unsigned long set_ttimeout( unsigned int ticks );
  185. extern int chk_timeout( unsigned long timeout );
  186. extern int tcp_tick( void *s );
  187. #define sock_wait_established( s, seconds, fn, statusptr ) 
  188.     if (_ip_delay0( s, seconds, fn, statusptr )) goto sock_err;
  189. #define sock_wait_input( s, seconds, fn , statusptr ) 
  190.     if (_ip_delay1( s, seconds, fn, statusptr )) goto sock_err;
  191. #define sock_tick( s, statusptr ) 
  192.     if ( !tcp_tick(s)) { if (statusptr) *statusptr = 1 ; goto sock_err; }
  193. #define sock_wait_closed(s, seconds, fn, statusptr )
  194.     if (_ip_delay2( s, seconds, fn, statusptr )) goto sock_err;
  195. /* user initialization file */
  196. extern void (*usr_init)();
  197. extern void outs( char far * string );
  198. extern longword aton( char * string);
  199. extern int _ping( longword host , longword countnum );
  200. extern longword _chk_ping( longword host , longword *ptr);
  201. extern void _arp_register( longword use, longword instead_of );
  202. extern void _eth_init();
  203. extern byte *_eth_formatpacket( void *eth_dest, word eth_type );
  204. extern void _eth_send( word len);
  205. extern void _eth_free( void *buf);
  206. extern byte *_eth_arrived( word *type_ptr);
  207. extern void _eth_release();
  208. /* bsd-similar stuff */
  209. extern int sock_rbsize( void *s );
  210. extern int sock_rbused( void *s );
  211. extern int sock_rbleft( void *s );
  212. extern int sock_tbsize( void *s );
  213. extern int sock_tbused( void *s );
  214. extern int sock_tbleft( void *s );
  215. extern _chk_socket( tcp_Socket *s );
  216. extern char *inet_ntoa( char *s, longword x );
  217. extern char *psocket( tcp_Socket *s );
  218. extern longword inet_addr( char *s );
  219. extern char *sockerr( tcp_Socket *s );
  220. extern char *sockstate( tcp_Socket *s );
  221. extern getpeername( tcp_Socket *s, void *dest, int *len );
  222. extern getsockname(  tcp_Socket *s, void *dest, int *len );
  223. extern longword gethostid();
  224. extern longword sethostid( longword ip );
  225. extern char *getdomainname( char *name, int length );
  226. extern char *setdomainname( char *string );
  227. extern char *gethostname( char *name, int length );
  228. extern char *sethostname( char *string );
  229. extern word ntohs( word a );
  230. extern word htons( word a );
  231. extern longword ntohl( longword x );
  232. extern longword htonl( longword x );
  233. extern void _arp_register( longword use, longword instead_of );
  234. extern int _arp_resolve( longword ina, void *ethap, int nowait );
  235. extern _survivebootp;
  236. extern int sock_established( tcp_Socket *s);
  237. extern sock_stats( tcp_Socket *s, word *days, word *inactive, word *cwindow, word *avg, word *sd );
  238. extern int addwattcpd( void (*p)() );
  239. extern int delwattcpd( void (*p)() );
  240. extern int tap_add( void *socket, void *userid );
  241. extern void sock_giveslice( void *s );
  242. extern int sock_yield( tcp_Socket *, void (*fn)( void ));
  243. #endif /* WTCP_VER */