home *** CD-ROM | disk | FTP | other *** search
/ Super Net 1 / SUPERNET_1.iso / PC / OTROS / MSDOS / WATTCP / MSWATTCP.ZIP / SRC / PCBSD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-16  |  3.7 KB  |  182 lines

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