tip.c
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:2k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. /* "Dumb terminal" session command for serial lines
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  *
  4.  * Feb '91 Bill Simpson
  5.  * rlsd control and improved dialer
  6.  */
  7. #include "global.h"
  8. #include "mbuf.h"
  9. #include "proc.h"
  10. #include "iface.h"
  11. #ifndef UNIX
  12. #include "n8250.h"
  13. #endif
  14. #include "asy.h"
  15. #include "tty.h"
  16. #include "session.h"
  17. #include "socket.h"
  18. #include "commands.h"
  19. #include "devparam.h"
  20. static void tip_out(int i,void *n1,void *n2);
  21. /* Execute user telnet command */
  22. int
  23. dotip(argc,argv,p)
  24. int argc;
  25. char *argv[];
  26. void *p;
  27. {
  28. struct session *sp;
  29. char *ifn;
  30. int c;
  31. FILE *asy;
  32. if((asy = asyopen(argv[1],"r+b")) == NULL){
  33. printf("Can't open %sn",argv[1]);
  34. return 1;
  35. }
  36. setvbuf(asy,NULL,_IONBF,0);
  37. /* Allocate a session descriptor */
  38. if((sp = newsession(Cmdline,TIP,1)) == NULL){
  39. printf("Too many sessionsn");
  40. return 1;
  41. }
  42. /* Put tty into raw mode */
  43. sp->ttystate.echo = 0;
  44. sp->ttystate.edit = 0;
  45. fmode(stdin,STREAM_BINARY);
  46. fmode(stdout,STREAM_BINARY);
  47. /* Now fork into two paths, one rx, one tx */
  48. ifn = malloc(strlen(argv[1]) + 10);
  49. sprintf(ifn,"%s tip out",argv[1]);
  50. sp->proc1 = newproc(ifn,256,tip_out,0,asy,NULL,0);
  51. free( ifn );
  52. ifn = malloc(strlen(argv[1]) + 10);
  53. sprintf(ifn,"%s tip in",argv[1]);
  54. chname( Curproc, ifn );
  55. free( ifn );
  56. while((c = fgetc(asy)) != EOF){
  57. putchar(c);
  58. if(sp->record != NULL)
  59. putc(c,sp->record);
  60. }
  61. fflush(stdout);
  62. killproc(sp->proc1);
  63. sp->proc1 = NULL;
  64. fclose(asy);
  65. keywait(NULL,1);
  66. freesession(sp);
  67. return 0;
  68. }
  69. /* Output process, DTE version */
  70. static void
  71. tip_out(i,n1,n2)
  72. int i;
  73. void *n1,*n2;
  74. {
  75. int c;
  76. FILE *asy = (FILE *)n1;
  77. while((c = getchar()) != EOF){
  78. fputc(c,asy);
  79. }
  80. }