home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / WATTCP / UNZIPPED / WNWATTCP / SRC / PCBSD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-08-06  |  3.8 KB  |  184 lines

  1. #include <copyright.h>
  2. #include <stdio.h>
  3. #include <wattcp.h>
  4. #include <stdlib.h>    /* itoa */
  5. #include <string.h>
  6. #include <elib.h>
  7.  
  8. /*
  9.  * PCBSD - provide some typical BSD UNIX functionality
  10.  * Erick Engelke, Feb 22, 1991
  11.  */
  12.  
  13. /*
  14.  * chk_socket - determine whether a real socket or not
  15.  *
  16.  */
  17. _chk_socket( tcp_Socket *s )
  18. {
  19.     if ( s->ip_type == TCP_PROTO ) {
  20.     if ( s->state <= tcp_StateCLOSED)    /* skips invalid data */
  21.         return( 2 );
  22.     }
  23.     if ( s->ip_type == UDP_PROTO ) return( 1 );
  24.     return( 0 );
  25. }
  26.  
  27. char *inet_ntoa( char *s, longword x )
  28. {
  29.  
  30.     itoa( x >> 24, s, 10 );
  31.     strcat( s, ".");
  32.     itoa( (x >> 16) & 0xff, strchr( s, 0), 10);
  33.     strcat( s, ".");
  34.     itoa( (x >> 8) & 0xff, strchr( s, 0), 10);
  35.     strcat( s, ".");
  36.     itoa( (x) & 0xff, strchr( s, 0), 10);
  37.     return( s );
  38. }
  39. char *psocket( tcp_Socket *s )
  40. {
  41.     static char buffer[30];
  42.  
  43.     buffer[0] = '[';
  44.     inet_ntoa( &buffer[1], s->hisaddr);
  45.     strcat(buffer, ":" );
  46.     itoa( s->hisport, strchr(buffer, 0), 10 );
  47.     strcat(buffer, "]" );
  48.  
  49.     return buffer;
  50. }
  51.  
  52. longword inet_addr( char *s )
  53. {
  54.     if ( isaddr( s ))
  55.         return( aton( s ));
  56.     else
  57.         return( 0 );
  58. }
  59.  
  60. char *sockerr( tcp_Socket *s )
  61. {
  62.     if ( strlen( s->err_msg ) < 80 )
  63.         return( s->err_msg );
  64. }
  65.  
  66. static char *sock_states[] = {
  67.     "Listen","SynSent","SynRec","Established","FinWt1","FinWt2","ClosWt","LastAck"
  68.     "TmWt","Closed"};
  69.  
  70. char *sockstate( tcp_Socket *s )
  71. {
  72.     switch ( _chk_socket( s )) {
  73.        case  1 : return( "UDP Socket" );
  74.        case  2 : return( sock_states[ s->state ] );
  75.        default : return( "Not an active socket");
  76.     }
  77. }
  78.  
  79. getpeername( tcp_Socket *s, void *dest, int *len )
  80. {
  81.     struct sockaddr temp;
  82.     int ltemp;
  83.  
  84.     memset( &temp, 0, sizeof( struct sockaddr ));
  85.     temp.s_ip = s->hisaddr;
  86.     temp.s_port = s->hisport;
  87.  
  88.     if (!s->hisaddr || !s->hisport || ! _chk_socket( s )) {
  89.     if (len) *len = 0;
  90.     return( -1 );
  91.     }
  92.  
  93.     /* how much do we move */
  94.     ltemp = (len) ? *len : sizeof( struct sockaddr );
  95.     if (ltemp > sizeof( struct sockaddr)) ltemp = sizeof( struct sockaddr );
  96.     qmove( &temp, dest, ltemp );
  97.  
  98.     if (len) *len = ltemp;
  99.     return( 0 );
  100. }
  101.  
  102. getsockname(  tcp_Socket *s, void *dest, int *len )
  103. {
  104.     struct sockaddr temp;
  105.     int ltemp;
  106.  
  107.     memset( &temp, 0, sizeof( struct sockaddr ));
  108.     temp.s_ip = my_ip_addr;
  109.     temp.s_port = s->myport;
  110.  
  111.     if (!s->hisaddr || !s->hisport || ! _chk_socket( s )) {
  112.     if (len) *len = 0;
  113.     return( -1 );
  114.     }
  115.  
  116.     /* how much do we move */
  117.     ltemp = (len) ? *len : sizeof( struct sockaddr );
  118.     if (ltemp > sizeof( struct sockaddr)) ltemp = sizeof( struct sockaddr );
  119.     qmove( &temp, dest, ltemp );
  120.  
  121.     if (len) *len = ltemp;
  122.     return( 0 );
  123. }
  124.  
  125. longword gethostid()
  126. {
  127.     return( my_ip_addr );
  128. }
  129.  
  130. longword sethostid( longword ip )
  131. {
  132.     return( my_ip_addr = ip );
  133. }
  134.  
  135. char *getdomainname( char *name, int length )
  136. {
  137.     if ( length ) {
  138.     if ( length < strlen( def_domain ))
  139.         *name = 0;
  140.     else
  141.         strcpy( name, def_domain );
  142.     return( name );
  143.     }
  144.     return( ( def_domain && *def_domain ) ? def_domain : NULL );
  145. }
  146.  
  147. char *setdomainname( char *string )
  148. {
  149.     return( def_domain = string );
  150. }
  151.  
  152. char *gethostname( char *name, int len )
  153. {
  154.     if ( len ) {
  155.     if (len < strlen( _hostname ))
  156.         *name = 0;
  157.     else
  158.         strcpy( name, _hostname );
  159.     return( name );
  160.     }
  161.     return( ( _hostname && *_hostname ) ?  _hostname  : NULL );
  162. }
  163. char *sethostname( char *name )
  164. {
  165.     return( _hostname = name );
  166. }
  167. word ntohs( word a )
  168. {
  169.     return( intel16(a) );
  170. }
  171. word htons( word a )
  172. {
  173.     return( intel16(a) );
  174. }
  175. longword ntohl( longword x )
  176. {
  177.     return( intel( x ));
  178. }
  179. longword htonl( longword x )
  180. {
  181.     return( intel( x ));
  182. }
  183.  
  184.