home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / hamradio / wattcp.zip / TCP.H < prev    next >
C/C++ Source or Header  |  1992-07-10  |  9KB  |  304 lines

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