⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ckctel.c

📁 C-Kermit源码。是使用串口/Modem和网络通讯的程序
💻 C
📖 第 1 页 / 共 5 页
字号:
    if (tn_init)                /* tn_ini() might be called recursively */      return(0);    if (!TELOPT_ME(TELOPT_AUTHENTICATION) &&        TELOPT_ME_MODE(TELOPT_AUTHENTICATION) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_AUTHENTICATION) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_AUTHENTICATION) = 1;        wait = 1;    }    if (!TELOPT_U(TELOPT_AUTHENTICATION) &&        TELOPT_U_MODE(TELOPT_AUTHENTICATION) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_AUTHENTICATION) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_AUTHENTICATION) = 1;        wait = 1;    }#ifdef CK_ENCRYPTION    if (TELOPT_U_MODE(TELOPT_AUTHENTICATION) == TN_NG_RF &&         TELOPT_ME_MODE(TELOPT_AUTHENTICATION) == TN_NG_RF) {        TELOPT_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RF;        TELOPT_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RF;    }#endif /* CK_ENCRYPTION */#endif /* CK_AUTHENTICATION */#ifdef CK_NAWS    if (!sstelnet) {        /* Console terminal screen rows and columns */#ifdef OS2        debug(F101,              "tn_ini tt_rows 1",              "",              VscrnGetHeight(VTERM)-(tt_status?1:0)              );        debug(F101,"tn_ini tt_cols 1","",VscrnGetWidth(VTERM));        /* Not known yet */        if (VscrnGetWidth(VTERM) < 0 ||            VscrnGetHeight(VTERM)-(tt_status?1:0) < 0) {            ttgwsiz();                  /* Try to find out */        }        debug(F101,              "tn_ini tt_rows 2",              "",              VscrnGetHeight(VTERM)-(tt_status?1:0)              );        debug(F101,"tn_ini tt_cols 2","",VscrnGetWidth(VTERM));        /* Now do we know? */        if (VscrnGetWidth(VTERM) > 0 &&            VscrnGetHeight(VTERM)-(tt_status?1:0) > 0) {            if (!TELOPT_ME(TELOPT_NAWS) &&                TELOPT_ME_MODE(TELOPT_NAWS) >= TN_NG_RQ) {                if (tn_sopt(WILL, TELOPT_NAWS) < 0)                  return(-1);                TELOPT_UNANSWERED_WILL(TELOPT_NAWS) = 1;                wait = 1;            }        }#else /* OS2 */        debug(F101,"tn_ini tt_rows 1","",tt_rows);        debug(F101,"tn_ini tt_cols 1","",tt_cols);        if (tt_rows < 0 || tt_cols < 0) { /* Not known yet */            ttgwsiz();                  /* Try to find out */        }        debug(F101,"tn_ini tt_rows 2","",tt_rows);        debug(F101,"tn_ini tt_cols 2","",tt_cols);        if (tt_rows > 0 && tt_cols > 0) { /* Now do we know? */            if (!TELOPT_ME(TELOPT_NAWS) &&                TELOPT_ME_MODE(TELOPT_NAWS) >= TN_NG_RQ) {                if (tn_sopt(WILL, TELOPT_NAWS) < 0)                  return(-1);                TELOPT_UNANSWERED_WILL(TELOPT_NAWS) = 1;                wait = 1;            }        }#endif /* OS2 */    } else {        if (!TELOPT_U(TELOPT_NAWS) &&            TELOPT_U_MODE(TELOPT_NAWS) >= TN_NG_RQ) {            if (tn_sopt(DO, TELOPT_NAWS) < 0)              return(-1);            TELOPT_UNANSWERED_DO(TELOPT_NAWS) = 1;            wait = 1;        }    }#endif /* CK_NAWS */    if (!TELOPT_ME(TELOPT_SGA) &&        TELOPT_ME_MODE(TELOPT_SGA) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_SGA) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_SGA) = 1;        wait = 1;    }    if (!TELOPT_U(TELOPT_SGA) &&        TELOPT_U_MODE(TELOPT_SGA) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_SGA) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_SGA) = 1;        wait = 1;    }    if (!tn_duplex) {        if (!TELOPT_U(TELOPT_ECHO) &&            TELOPT_U_MODE(TELOPT_ECHO) >= TN_NG_RQ) {            if (tn_sopt(DO, TELOPT_ECHO) < 0)              return(-1);            TELOPT_UNANSWERED_DO(TELOPT_ECHO) = 1;            wait = 1;        }    }    if (!TELOPT_ME(TELOPT_ECHO) &&        TELOPT_ME_MODE(TELOPT_ECHO) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_ECHO) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_ECHO) = 1;        wait = 1;    }    debug(F100,"tn_ini about to send WILL TTYPE if requested","",0);/*  Talking to TELNET port, so send WILL TERMINAL TYPE and DO SGA.  Also send WILL NAWS if we know our screen dimensions.*/    if (!TELOPT_ME(TELOPT_TTYPE) &&        TELOPT_ME_MODE(TELOPT_TTYPE) >= TN_NG_RQ) {        if ((x = tn_sopt(WILL,TELOPT_TTYPE)) < 0) {            debug(F101,"tn_ini tn_sopt WILL TTYPE failed","",x);            return(-1);        }        TELOPT_UNANSWERED_WILL(TELOPT_TTYPE) = 1;        wait = 1;        debug(F100,"tn_ini sent WILL TTYPE ok","",0);    }    if (!TELOPT_U(TELOPT_TTYPE) &&        TELOPT_U_MODE(TELOPT_TTYPE) >= TN_NG_RQ) {        if ((x = tn_sopt(DO,TELOPT_TTYPE)) < 0) {            debug(F101,"tn_ini tn_sopt DO TTYPE failed","",x);            return(-1);        }        TELOPT_UNANSWERED_DO(TELOPT_TTYPE) = 1;        wait = 1;        debug(F100,"tn_ini sent DO TTYPE ok","",0);    }    if (!TELOPT_ME(TELOPT_BINARY) &&        TELOPT_ME_MODE(TELOPT_BINARY) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_BINARY) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_BINARY) = 1;        wait = 1;    }    if (!TELOPT_U(TELOPT_BINARY) &&        TELOPT_U_MODE(TELOPT_BINARY) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_BINARY) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_BINARY) = 1;        wait = 1;    }#ifdef CK_SNDLOC    if (tn_loc) {        if (!TELOPT_ME(TELOPT_SNDLOC) &&            TELOPT_ME_MODE(TELOPT_SNDLOC) >= TN_NG_RQ) {            if (tn_sopt(WILL, TELOPT_SNDLOC) < 0)              return(-1);            TELOPT_UNANSWERED_WILL(TELOPT_SNDLOC) = 1;            wait = 1;        }    }#endif /* CK_SNDLOC */#ifdef CK_ENVIRONMENT#ifdef CK_XDISPLOC    if (!TELOPT_ME(TELOPT_XDISPLOC) &&         TELOPT_ME_MODE(TELOPT_XDISPLOC) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_XDISPLOC) < 0)            return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_XDISPLOC) = 1;        wait = 1;    }#endif /* CK_XDISPLOC */    /* Will send terminal environment. */    if (!TELOPT_ME(TELOPT_NEWENVIRON) &&        TELOPT_ME_MODE(TELOPT_NEWENVIRON) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_NEWENVIRON) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_NEWENVIRON) = 1;        wait = 1;    }    if (!TELOPT_U(TELOPT_NEWENVIRON) &&        TELOPT_U_MODE(TELOPT_NEWENVIRON) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_NEWENVIRON) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_NEWENVIRON) = 1;        wait = 1;    }#endif /* CK_ENVIRONMENT */    /* Take care of any other telnet options that require handling. */    for (opt = TELOPT_FIRST; opt <= TELOPT_LAST; opt++) {        switch (opt) {          case TELOPT_AUTHENTICATION:          case TELOPT_ENCRYPTION:          case TELOPT_TTYPE:          case TELOPT_NAWS:          case TELOPT_BINARY:          case TELOPT_NEWENVIRON:          case TELOPT_SNDLOC:          case TELOPT_XDISPLOC:          case TELOPT_SGA:          case TELOPT_ECHO:          case TELOPT_KERMIT:          case TELOPT_START_TLS:            break;          default:            if (TELOPT_OK(opt)) {                if (!TELOPT_ME(opt) &&                    TELOPT_ME_MODE(opt) >= TN_NG_RQ) {                    if (tn_sopt(WILL, opt) < 0)                      return(-1);                    TELOPT_UNANSWERED_WILL(opt) = 1;                    wait = 1;                }                if (!TELOPT_U(opt) &&                    TELOPT_U_MODE(opt) >= TN_NG_RQ) {                    if (tn_sopt(DO, opt) < 0)                      return(-1);                    TELOPT_UNANSWERED_DO(opt) = 1;                    wait = 1;                }            }        }    }    if (wait) {        if (tn_wait("pre-encrypt") < 0) {            tn_push();            return(-1);        }        wait = 0;    }#ifdef CK_ENCRYPTION    if (tn_init)                /* tn_ini() may be called recursively */      return(0);    if (!TELOPT_ME(TELOPT_ENCRYPTION) &&        TELOPT_ME_MODE(TELOPT_ENCRYPTION) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_ENCRYPTION) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_ENCRYPTION) = 1;        wait = 1;    }    if (!TELOPT_U(TELOPT_ENCRYPTION) &&        TELOPT_U_MODE(TELOPT_ENCRYPTION) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_ENCRYPTION) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_ENCRYPTION) = 1;        wait = 1;    }    /* If we are going to encrypt, we want to do it before we send any more */    /* data, especially the terminal type and environment variables.        */    if (wait) {        if (tn_wait("post-encrypt") < 0) {            tn_push();            return(-1);        }        wait = 0;    }#endif /* CK_ENCRYPTION */    tn_sdsb();    if (tn_init)                   /* tn_ini() may be called recursively */        return(0);#ifdef IKS_OPTION    /* Kermit Server negotiation must go last */    /* Send U before ME */    if (!TELOPT_U(TELOPT_KERMIT) &&        TELOPT_U_MODE(TELOPT_KERMIT) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_KERMIT) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_KERMIT) = 1;        wait = 1;    }    if (!TELOPT_ME(TELOPT_KERMIT) &&        TELOPT_ME_MODE(TELOPT_KERMIT) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_KERMIT) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_KERMIT) = 1;        wait = 1;    }#endif /* IKS_OPTION */    if (wait) {        if (tn_wait("end of telnet negotiations") < 0) {            tn_push();            return(-1);        }        wait = 0;    }    tn_sdsb();                          /* Send delayed subnegotiations */    tn_push();    tn_init = 1;                        /* Remember successful completion. */    /* Don't send anything else! */    debug(F101,"tn_ini duplex","",duplex);    debug(F101,"tn_ini done, tn_init","",tn_init);    return(1);}VOIDtn_debug(s) char *s; {#ifdef OS2    void cwrite(unsigned short);    char *p = s;    _PROTOTYP (void os2bold, (void));#endif /* OS2 */    if (!(tn_deb || debses))      return;    debug(F111,"tn_debug",s,what);#ifdef OS2    if ( what == W_COMMAND ) {        extern unsigned char colorcmd;        colorcmd ^= 0x8 ;        printf("%s\r\n",s);        colorcmd ^= 0x8 ;    }    if (!scrninitialized[VTERM]) {        USHORT x,y;        checkscreenmode();        GetCurPos(&y, &x);        SaveCmdMode(x+1,y+1);        scrninit();        RestoreCmdMode();    }    os2bold();                          /* Toggle boldness */    while (*p)      cwrite((CHAR) *p++);              /* Go boldly ... */    os2bold();                          /* Toggle boldness back */    if (debses) {        debses = 0;        cwrite((CHAR) '\015');        cwrite((CHAR) '\012');        debses = 1;    } else {        cwrite((CHAR) '\015');        cwrite((CHAR) '\012');    }#else    if (what != W_CONNECT && what != W_COMMAND)      return;                           /* CONNECT/command must be active */    conoll(s);#endif /* OS2 */}/*  Process in-band Telnet negotiation characters from the remote host.  Call with the telnet IAC character and the current duplex setting  (0 = remote echo, 1 = local echo), and a pointer to a function to call  to read more characters.  Returns:    6 if DO LOGOUT was received and accepted    5 if the Kermit start of packet character has changed    4 if state of remote Internet Kermit Service has changed    3 if a quoted IAC was received    2 if local echo must be changed to remote    1 if remote echo must be changed to local    0 if nothing happens or no action necessary   -1 on failure (= internal or i/o error)*/#ifdef IKS_OPTIONinttn_siks(cmd) int cmd; {         /* TELNET SEND IKS SUB */#ifndef NOXFER    CHAR buf[8];    extern CHAR mystch;                 /* Outgoing Start of Packet Char */    int n,m;    if (ttnet != NET_TCPB) return(0);   /* Must be TCP/IP */    if (ttnproto != NP_TELNET) return(0); /* Must be telnet protocol */    if (cmd < KERMIT_START || cmd > KERMIT_RESP_STOP) /* Illegal subcommand */      return(-1);#ifdef CK_SSL    if (TELOPT_SB(TELOPT_START_TLS).start_tls.me_follows) {        return(0);    }#endif /* CK_SSL */    if (cmd == KERMIT_START || cmd == KERMIT_RESP_START) {        TELOPT_SB(TELOPT_KERMIT).kermit.me_start = 1;    } else if (cmd == KERMIT_STOP || cmd == KERMIT_RESP_STOP) {        TELOPT_SB(TELOPT_KERMIT).kermit.me_start = 0;    } else if (cmd == KERMIT_REQ_STOP)      TELOPT_SB(TELOPT_KERMIT).kermit.me_req_stop = 1;    else if (cmd == KERMIT_REQ_START)      TELOPT_SB(TELOPT_KERMIT).kermit.me_req_start = 1;    if (cmd == KERMIT_SOP) {        buf[0] = (CHAR) IAC;        buf[1] = (CHAR) SB;        b

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -