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

操作系统开发

开发平台:

DOS

  1. #ifndef net_h
  2. #define net_h
  3. /*
  4.  * eTCP - TCP implementation
  5.  * Copyright (c) 1990, 1999 Erick Engelke
  6.  *
  7.  */
  8. #ifndef byte
  9. typedef unsigned char byte;
  10. #endif
  11. #ifndef word
  12. typedef unsigned int word;
  13. #endif
  14. #ifndef longword
  15. typedef unsigned long longword;
  16. #endif
  17. #if !defined(__TURBOC__) && !defined(__BORLANDC__) && !defined(__DJGPP__)
  18. #error Must have a compiler explicitly defined ... likely #define __DJGPP__
  19. #endif
  20. typedef struct {
  21. #if defined(__TURBOC__)||defined(__BORLANDC__)
  22.     byte undoc[ 4300 ];
  23. #elif defined(__DJGPP__)
  24.     byte undoc[ 4500 ];
  25. #endif
  26. } tcp_Socket;
  27. typedef struct {
  28.     byte undoc[ 2200 ];
  29. } udp_Socket;
  30. typedef struct sockaddr {
  31.     word        s_type;
  32.     word        s_port;
  33.     longword    s_ip;
  34.     byte        s_spares[6];    /* unused in TCP realm */
  35. } sockaddr;
  36. #define sockaddr_in sockaddr
  37. typedef struct in_addr {
  38.     longword    s_addr;
  39. } in_addr;
  40. #define MAX_COOKIES     10
  41. #define MAX_NAMESERVERS 10
  42. #define TCP_MODE_BINARY 0
  43. #define TCP_MODE_ASCII 1
  44. #define UDP_MODE_CHK 0 /*default to checksum */
  45. #define UDP_MODE_NOCHK 2
  46. #define TCP_MODE_NAGLE  0       /* Nagle algorithm */
  47. #define TCP_MODE_NONAGLE 4
  48. /*
  49.  * less general functions
  50.  */
  51. extern longword aton( char *text );
  52. extern int isaddr( char *text );
  53. extern int tcp_cbreak( word mode );
  54. extern longword intel( longword x );
  55. extern word intel16( word x );
  56. #ifdef __DJGPP__
  57. #define usr_init      _w32_usr_init
  58. #define usr_post_init _w32_usr_post_init
  59. #define rip           _w32_rip
  60. #endif
  61. extern void (*usr_init)();
  62. extern void (*usr_post_init)(void);
  63. /*
  64.  * timers
  65.  */
  66. extern void ip_timer_init( void *s , word delayseconds );
  67. extern word ip_timer_expired( void *s );
  68.         /*
  69.          * TCP/IP system variables - do not change these since they
  70.          *      are not necessarily the source variables, instead use
  71.          *      ip_Init function
  72.          */
  73. extern longword my_ip_addr;
  74. extern longword sin_mask;       /* eg.  0xfffffe00L */
  75. extern word sock_delay;
  76. extern int _last_cookie;
  77. extern longword _cookie[MAX_COOKIES];
  78.         /*
  79.          * name domain constants
  80.          */
  81. extern char *def_domain;
  82. extern longword def_nameservers[ MAX_NAMESERVERS ];
  83. extern word wathndlcbrk;
  84. extern word watcbroke;
  85. extern unsigned long set_timeout( unsigned int seconds );
  86. extern unsigned long set_ttimeout( unsigned int ticks );
  87. extern int chk_timeout( unsigned long timeout );
  88. extern void outs( char * string );
  89. extern longword aton( char * string);
  90. extern void _arp_register( longword use, longword instead_of );
  91. /* bsd-similar stuff */
  92. extern int sock_rbsize( void *s );
  93. extern int sock_rbused( void *s );
  94. extern int sock_rbleft( void *s );
  95. extern int sock_tbsize( void *s );
  96. extern int sock_tbused( void *s );
  97. extern int sock_tbleft( void *s );
  98. extern int _chk_socket( tcp_Socket *s );
  99. extern char *inet_ntoa( char *s, longword x );
  100. extern char *psocket( tcp_Socket *s );
  101. extern longword inet_addr( char *s );
  102. extern char *sockerr( tcp_Socket *s );
  103. extern char *sockstate( tcp_Socket *s );
  104. extern int getpeername( tcp_Socket *s, void *dest, int *len );
  105. extern int getsockname(  tcp_Socket *s, void *dest, int *len );
  106. extern longword gethostid( void );
  107. extern longword sethostid( longword ip );
  108. extern char *getdomainname( char *name, int length );
  109. extern char *setdomainname( char *string );
  110. #if defined(__TURBOC__)||defined(__BORLANDC__)
  111. extern char *gethostname( char *name, int length );
  112. #endif
  113. extern char *sethostname( char *string );
  114. extern word ntohs( word a );
  115. extern word htons( word a );
  116. extern longword ntohl( longword x );
  117. extern longword htonl( longword x );
  118. extern void _arp_register( longword use, longword instead_of );
  119. extern int _arp_resolve( longword ina, void *ethap, int nowait );
  120. extern int _survivebootp;
  121. extern int sock_established( tcp_Socket *s);
  122. extern int sock_stats( tcp_Socket *s, word *days, word *inactive, word *cwindow, word *avg, word *sd );
  123. extern int addwattcpd( void (*p)() );
  124. extern int delwattcpd( void (*p)() );
  125. extern int tap_add( void *socket, void *userid );
  126. extern void sock_giveslice( void *s );
  127. #if !defined(ERTOS_NET_CORE)
  128. extern void rt_sock_init( void );
  129. #define sock_init() rt_sock_init()
  130. extern int rt_sock_fastread(void  *s, byte *dp, int len );
  131. #define sock_fastread( s, dp, len ) rt_sock_fastread( s, dp, len )
  132. extern int rt_sock_fastwrite( void *s, byte *dp, int len );
  133. #define sock_fastwrite( s, dp, len ) rt_sock_fastwrite( s, dp, len )
  134. extern int rt_sock_read(void  *s, byte *dp, int len );
  135. #define sock_read( s, dp, len )     rt_sock_read( s, dp, len )
  136. extern int rt_sock_write(void  *s, byte *dp, int len );
  137. #define sock_write( s, dp, len )    rt_sock_write( s, dp, len )
  138. extern void rt_sock_enqueue(void  *s, byte *dp, int len);
  139. #define sock_enqueue( s, dp, len )  rt_sock_enqueue( s, dp, len )
  140. extern int rt_sock_flush( void  *s );
  141. #define sock_flush( s )             rt_sock_flush( s )
  142. extern int rt_sock_flushnext( void  *s);
  143. #define sock_flushnext( s )         rt_sock_flushnext( s )
  144. extern int rt_sock_puts( void  *s, byte *dp );
  145. #define sock_puts( s , dp )         rt_sock_puts( s, dp )
  146. extern word rt_sock_gets( void  *s, byte *dp, int n );
  147. #define sock_gets( s , dp, n)       rt_sock_gets( s, dp, n )
  148. extern byte rt_sock_putc( void  *s, byte c );
  149. #define sock_putc( s, c )           rt_sock_putc( s, c )
  150. extern byte rt_sock_getc( void  *s );
  151. #define sock_getc( s )              rt_sock_getc( s )
  152. extern word rt_sock_dataready( void  *s );
  153. #define sock_dataready( s )         rt_sock_dataready( s )
  154. extern word rt_sock_close( void *s );
  155. #define sock_close( s )             rt_sock_close( s )
  156. extern int rt_sock_abort( void *s );
  157. #define sock_abort( s )             rt_sock_abort( s )
  158. //extern sock_printf( void  *s, char *format, ... );
  159. //extern sock_scanf( void  *s, char *format, ... );
  160. extern int rt_sock_mode( void *s, word mode );
  161. #define sock_mode( s, mode )        rt_sock_mode( s, mode )
  162. /*
  163.  * TCP or UDP specific stuff, must be used for open's and listens, but
  164.  * sock stuff is used for everything else
  165.  */
  166. extern int rt_udp_open(void *s, word lport, longword ina, word port, int (*datahandler)());
  167. #define udp_open( s, l, i, p, d )   rt_udp_open( s, l, i, p, d )
  168. extern int rt_tcp_open(void *s, word lport, longword ina, word port, int (*datahandler)());
  169. #define tcp_open( s, l, i, p, d )   rt_tcp_open( s, l, i, p, d )
  170. extern int rt_tcp_listen(void *s, word lport, longword ina, word port, int (*datahandler)(), word timeout);
  171. #define tcp_listen( s, l, i, p, d, t ) rt_tcp_listen( s, l, i, p, d, t );
  172. extern int rt_tcp_established(void *s);
  173. #define tcp_established( s )        rt_tcp_established( s )
  174. extern longword rt_resolve( char *name);
  175. #define resolve( name )             rt_resolve( name )
  176. extern int rt_reverse_addr_lookup( longword ip, char *name );
  177. #define reverse_addr_lookup( ip, name ) rt_reverse_addr_lookup( ip, name )
  178. extern int rt_tcp_tick( void *s );
  179. #define tcp_tick( s )               rt_tcp_tick( s )
  180. /*
  181.  * recv routines -- pcrecv.c
  182.  */
  183. extern int rt_sock_recv_init( void *s, void *space, word len );
  184. #define sock_recv_init( s, space, len ) rt_sock_recv_init( s, space, len )
  185. extern int rt_sock_recv_from( void *s, long *hisip, word *hisport, char *buffer, int len, word flags );
  186. #define sock_recv_from( s, hi, hp, b, l, f ) rt_sock_recv_from( s, hi, hp, b, l, f )
  187. extern int rt_sock_recv( void *s, char *buffer, int len, word flags );
  188. #define sock_recv( s, b, l, f ) rt_sock_recv( s, b, l, f )
  189. /*
  190.  * sock_wait_... macros
  191.  */
  192. /*
  193.  * sock_wait_established()
  194.  * - waits then aborts if timeout on s connection
  195.  * sock_wait_input()
  196.  * - waits for received input on s
  197.  * - may not be valid input for sock_Gets... check returned length
  198.  * sock_tick()
  199.  * - do tick and jump on abort
  200.  * sock_wait_closed();
  201.  * - discards all received data
  202.  *
  203.  * jump to sock_err with contents of *statusptr set to
  204.  *  1 on closed
  205.  * -1 on timeout
  206.  *
  207.  */
  208. extern int _rt_ip_delay0( void *s, int seconds, int (*fn)(), void *statusptr );
  209. extern int _rt_ip_delay1( void *s, int seconds, int (*fn)(), void *statusptr );
  210. extern int _rt_ip_delay2( void *s, int seconds, int (*fn)(), void *statusptr );
  211. #define sock_wait_established( s, seconds, fn, statusptr ) 
  212.     if (_rt_ip_delay0( s, seconds, fn, statusptr )) goto sock_err;
  213. #define sock_wait_input( s, seconds, fn , statusptr ) 
  214.     if (_rt_ip_delay1( s, seconds, fn, statusptr )) goto sock_err;
  215. #define sock_tick( s, statusptr ) 
  216.     if ( !rt_tcp_tick(s)) { if (statusptr) *statusptr = 1 ; goto sock_err; }
  217. #define sock_wait_closed(s, seconds, fn, statusptr )
  218.     if (_rt_ip_delay2( s, seconds, fn, statusptr )) goto sock_err;
  219. extern int _rt_ping( longword host, longword countnum, byte ttl, byte tos, longword *theid );
  220. #define _ping( host, countnum, ttl, tos, theid)      _rt_ping( host, countnum, ttl, tos, theid )
  221. extern longword _rt_chk_ping( longword host , longword *ptr);
  222. #define _chk_ping( host, ptr )      _rt_chk_ping( host, ptr )
  223. extern char *rip( char *s );
  224. #endif // ERTOS_NET_CORE
  225. #endif