home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / PPPBCKP / SRC / SRC15B77.ZIP / TCP.H < prev    next >
C/C++ Source or Header  |  1997-11-21  |  9KB  |  288 lines

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