home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / hamradio / wattcp.zip / TCPTALK.C < prev    next >
Text File  |  1991-05-29  |  4KB  |  189 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <conio.h>
  4. #include <tcp.h>
  5.  
  6. #define TALK_PORT 23
  7.  
  8.  
  9. init()
  10. {
  11.     puts("\7\7");
  12.     textbackground( MAGENTA );
  13.     textcolor( WHITE );
  14.     clrscr();
  15.     cputs("  messages:");
  16.     gotoxy(1,24);
  17.     cputs("  current line:");
  18.  
  19.     window( 2,2,79,23);
  20.     textbackground( DARKGRAY );
  21.     clrscr();
  22.     window( 1,24,80,25 );
  23.     clrscr();
  24.     gotoxy( 1,2);
  25. }
  26.  
  27. add_msg( char *source, char *msg )
  28. {
  29.     window( 2,2,79,23);
  30.     gotoxy( 1, 1 );
  31.     delline();
  32.     gotoxy( 1, 21 );
  33.     cprintf( "%8.8s : %s", source, msg );
  34.     window( 1,24,80,25 );
  35.     gotoxy( 1, 2 );
  36. }
  37. main(int argc, char *argv[])
  38. {
  39.     longword remoteip;
  40.     char *host;
  41.     char dummyuser[ 80 ], dummyruser[80], dummyhost[80];
  42.  
  43.     char buffer[ 80 ], rbuffer[80], ch;
  44.     word position;
  45.     word sendit, status, who_closed = 0;
  46.  
  47.     tcp_Socket s, s2;
  48.     char *user, *remoteuser;
  49.  
  50.     sock_init();
  51.  
  52.     clrscr();
  53.     cputs("TCPTALK : (experimental version)\n\n\r");
  54.  
  55.     user = "me";    /* default */
  56.  
  57.     if (argc < 2) {
  58.     cputs("TCPTALK  [remote_user_id@]remote_host  [my_user_id]");
  59.     cputs("\n\r\nWaiting for an incomming call\n\r\n");
  60.     cprintf("(My address is [%s]\n\r", inet_ntoa( buffer, gethostid()));
  61.     tcp_listen( &s, TALK_PORT, 0, 0, NULL, 0 );
  62.     sock_mode( &s, TCP_MODE_ASCII );
  63.     sock_wait_established( &s, 0, NULL, &status);
  64.     cprintf("Connection established\r");
  65.     sock_wait_input( &s, sock_delay, NULL, &status );
  66.     sock_gets( &s, dummyhost, sizeof( dummyhost ));
  67.     sock_wait_input( &s, sock_delay, NULL, &status );
  68.     sock_gets( &s, remoteuser = dummyruser, sizeof( dummyruser ));
  69.     sock_puts( &s, "ok" );
  70.     sound( 1000 );
  71.     cputs("\n\rPress any to go to TALK session.\n\r");
  72.     getch();
  73.     nosound();
  74.     sock_puts( &s, "<answerring your call>" );
  75.         init();
  76.     } else {
  77.     remoteuser = "other";
  78.     if ( host = strchr( argv[1], '@')) {
  79.         *host++ = 0;
  80.         remoteuser = argv[1];
  81.     } else
  82.         host = argv[1];
  83.  
  84.     if (!( remoteip = resolve( host ))) {
  85.         textcolor( RED );
  86.         cprintf("\n\rUnable to resolve '%s'\n\r", host );
  87.         exit( 3 );
  88.     }
  89.  
  90.     if ( argc < 3 ) {
  91.         cputs("Userid to assume:");
  92.         user = gets( dummyuser );
  93.         puts("\n\r");
  94.     } else
  95.         cprintf("Using '%s' as local userid\n\r", user);
  96.  
  97.     if ( !tcp_open( &s, 0, remoteip, TALK_PORT, NULL )) {
  98.         cputs("Unable to open connection.");
  99.         exit( 1 );
  100.     }
  101.     sock_mode( &s, TCP_MODE_ASCII );
  102.     sock_wait_established( &s, sock_delay,NULL, &status);
  103.     sock_puts( &s, inet_ntoa(buffer,gethostid()));
  104.     sock_puts( &s, user );
  105.     sock_wait_input( &s, sock_delay, NULL, &status );
  106.  
  107.     sock_gets( &s, buffer, sizeof( buffer ));
  108.     if ( stricmp( buffer, "ok" )) {
  109.         sock_close( &s );
  110.         cputs("Remote side did not wish to connect");
  111.         cprintf("MSG: %s\n", buffer);
  112.         sock_wait_closed( &s, sock_delay, NULL, &status );
  113.         exit( 1 );
  114.     }
  115.     init();
  116.     add_msg( remoteuser, "< remote user has not answerred yet, waiting...>");
  117.     sock_wait_input( &s, 0, NULL, &status );
  118.     }
  119.  
  120.     /* we are connected */
  121.  
  122.     add_msg( remoteuser, "connected");
  123.     *buffer = position = sendit = 0;
  124.  
  125.     while ( tcp_tick( &s ) ) {
  126.     /*
  127.      *
  128.      */
  129.     if (kbhit()) {
  130.         if ((ch = getch()) == 27) {
  131.         sock_close( &s );
  132.         who_closed = 1;
  133.         break;
  134.         }
  135.         switch (ch) {
  136.            case '\r' : sendit = 1;
  137.                break;
  138.            case '\b' : buffer[ --position ] = 0;
  139.                delline();
  140.                cputs( buffer );
  141.                break;
  142.            case '\t' : ch = ' ';
  143.            default   : buffer[ position++ ] = ch;
  144.                buffer[ position ] = 0;
  145.                if (position > 64 );
  146.                gotoxy( 1,2);
  147.                clreol();
  148.                cputs(buffer );
  149.         }
  150.         if (sendit) {
  151.         sock_puts( &s, buffer );
  152.         add_msg( user , buffer);
  153.         delline();
  154.         sendit = 0;
  155.         position = *buffer = 0;
  156.         }
  157.     }
  158.  
  159.     if (sock_dataready( &s )) {
  160.         sock_gets( &s, rbuffer, sizeof( rbuffer ));
  161.         add_msg( remoteuser, rbuffer );
  162.     }
  163.     }
  164.  
  165.  
  166.     delline();
  167.     textcolor( RED );
  168.     if ( who_closed == 1 ) {
  169.     cputs(" *** YOU CLOSED CONNECTION *** ");
  170.     sock_wait_closed(&s, sock_delay, NULL, &status);
  171.     } else
  172.     cputs(" *** OTHER PERSON CLOSED CONNECTION *** ");
  173.  
  174.     sleep( 1 );
  175.     while (kbhit()) getch();
  176.     getch();
  177.  
  178.     exit( 0 );
  179.  
  180. sock_err:
  181.     switch ( status ) {
  182.        case 1 : cputs("Connection closed");
  183.         break;
  184.        case -1: cputs("REMOTE HOST CLOSED CONNECTION");
  185.         break;
  186.     }
  187.     exit( 0 );
  188. }
  189.