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

📄 ckctel.c

📁 C-Kermit源码。是使用串口/Modem和网络通讯的程序
💻 C
📖 第 1 页 / 共 5 页
字号:
      default:        return(0);    } /* switch (sb[0]) */#else    return(0);#endif /* NOXFER */}#endif /* IKS_OPTION *//* Initialize telnet settings - set default values for ME and U modes */inttn_set_modes() {    int opt,cmd;    /* initialize all options to refuse in both directions */    for (opt = 0; opt < NTELOPTS; opt++) {        TELOPT_ME(opt) = 0;        TELOPT_U(opt)  = 0;        TELOPT_UNANSWERED_WILL(opt) = 0;        TELOPT_UNANSWERED_DO(opt)   = 0;        TELOPT_UNANSWERED_WONT(opt) = 0;        TELOPT_UNANSWERED_DONT(opt)   = 0;        TELOPT_UNANSWERED_SB(opt)   = 0;        TELOPT_ME_MODE(opt) = TN_NG_RF;        TELOPT_U_MODE(opt) = TN_NG_RF;        TELOPT_DEF_S_ME_MODE(opt) = TN_NG_RF;        TELOPT_DEF_S_U_MODE(opt) = TN_NG_RF;        TELOPT_DEF_C_ME_MODE(opt) = TN_NG_RF;        TELOPT_DEF_C_U_MODE(opt) = TN_NG_RF;        for (cmd = 0; cmd < 4; cmd ++)          tncnts[TELOPT_INDEX(opt)][cmd] = 0;    }#ifdef IKS_OPTION    TELOPT_SB(TELOPT_KERMIT).kermit.me_start = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.u_start = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.me_req_start = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.me_req_stop = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.sop = 0;#endif /* IKS_OPTION */#ifdef CK_ENCRYPTION    TELOPT_SB(TELOPT_ENCRYPTION).encrypt.stop = 0;#endif /* CK_ENCRYPTION */#ifdef  CK_NAWS    TELOPT_SB(TELOPT_NAWS).naws.x = 0;    TELOPT_SB(TELOPT_NAWS).naws.y = 0;#endif /* CK_NAWS */#ifdef CK_SSL    TELOPT_SB(TELOPT_START_TLS).start_tls.u_follows = 0;    TELOPT_SB(TELOPT_START_TLS).start_tls.me_follows = 0;#endif /* CK_SSL */    /* Now set the ones we want to accept to the proper values */    TELOPT_DEF_S_ME_MODE(TELOPT_SGA) = TN_NG_RQ;    TELOPT_DEF_S_U_MODE(TELOPT_SGA) = TN_NG_RQ;    TELOPT_DEF_C_ME_MODE(TELOPT_SGA) = TN_NG_AC;    TELOPT_DEF_C_U_MODE(TELOPT_SGA) = TN_NG_AC;    TELOPT_DEF_S_ME_MODE(TELOPT_BINARY) = TN_NG_AC;    TELOPT_DEF_S_U_MODE(TELOPT_BINARY) = TN_NG_AC;    TELOPT_DEF_C_ME_MODE(TELOPT_BINARY) = TN_NG_AC;    TELOPT_DEF_C_U_MODE(TELOPT_BINARY) = TN_NG_AC;    TELOPT_DEF_S_ME_MODE(TELOPT_LOGOUT) = TN_NG_AC;    TELOPT_DEF_S_U_MODE(TELOPT_LOGOUT) = TN_NG_AC;    TELOPT_DEF_C_ME_MODE(TELOPT_LOGOUT) = TN_NG_AC;    TELOPT_DEF_C_U_MODE(TELOPT_LOGOUT) = TN_NG_AC;#ifdef IKS_OPTION    TELOPT_DEF_S_ME_MODE(TELOPT_KERMIT) = TN_NG_RQ;    TELOPT_DEF_S_U_MODE(TELOPT_KERMIT) = TN_NG_RQ;    TELOPT_DEF_C_ME_MODE(TELOPT_KERMIT) = TN_NG_RQ;    TELOPT_DEF_C_U_MODE(TELOPT_KERMIT) = TN_NG_RQ;#endif /* IKS_OPTION */#ifdef CK_ENCRYPTION    TELOPT_DEF_S_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ;    TELOPT_DEF_S_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ;    TELOPT_DEF_C_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ;    TELOPT_DEF_C_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RQ;#endif /* CK_ENCRYPTION */    TELOPT_DEF_S_ME_MODE(TELOPT_ECHO) = TN_NG_RQ;    TELOPT_DEF_S_U_MODE(TELOPT_TTYPE) = TN_NG_RQ;#ifdef CK_ENVIRONMENT    TELOPT_DEF_S_U_MODE(TELOPT_NEWENVIRON) = TN_NG_RQ;#endif /* CK_ENVIRONMENT */#ifdef CK_AUTHENTICATION    TELOPT_DEF_S_U_MODE(TELOPT_AUTHENTICATION) = TN_NG_RQ;#endif /* CK_AUTHENTICATION */#ifdef CK_SSL    if (ck_ssleay_is_installed()) {        TELOPT_DEF_S_U_MODE(TELOPT_START_TLS) = TN_NG_RQ;        TELOPT_DEF_C_ME_MODE(TELOPT_START_TLS) = TN_NG_AC;    }#endif /* CK_SSL */#ifdef CK_NAWS    TELOPT_DEF_S_U_MODE(TELOPT_NAWS) = TN_NG_RQ;#endif /* CK_NAWS */    TELOPT_DEF_C_U_MODE(TELOPT_ECHO) = TN_NG_AC;    TELOPT_DEF_C_ME_MODE(TELOPT_TTYPE) = TN_NG_RQ;#ifdef CK_ENVIRONMENT    TELOPT_DEF_C_ME_MODE(TELOPT_NEWENVIRON) = TN_NG_RQ;#endif /* CK_ENVIRONMENT */#ifdef CK_AUTHENTICATION    TELOPT_DEF_C_ME_MODE(TELOPT_AUTHENTICATION) = TN_NG_RQ;#endif /* CK_AUTHENTICATION */#ifdef CK_NAWS    TELOPT_DEF_C_ME_MODE(TELOPT_NAWS) = TN_NG_RQ;#endif /* CK_NAWS */#ifdef CK_SNDLOC    TELOPT_DEF_C_ME_MODE(TELOPT_SNDLOC) = TN_NG_RQ;#endif /* CK_SNDLOC */#ifdef CK_FORWARD_X    TELOPT_DEF_C_U_MODE(TELOPT_FORWARD_X) = TN_NG_RQ;#endif /* CK_FORWARD_X */    /* Set the initial values for currently known mode */    for (opt = TELOPT_FIRST; opt <= TELOPT_LAST; opt++) {        if (TELOPT_OK(opt)) {            TELOPT_ME_MODE(opt) = sstelnet ?              TELOPT_DEF_S_ME_MODE(opt) :                TELOPT_DEF_C_ME_MODE(opt);            TELOPT_U_MODE(opt) = sstelnet ?              TELOPT_DEF_S_U_MODE(opt) :                TELOPT_DEF_C_U_MODE(opt);        }    }    return(1);}/* Send Delayed Subnegotiations */VOIDtn_sdsb() {    if (TELOPT_SB(TELOPT_TTYPE).term.need_to_send) {        tn_sttyp();        TELOPT_SB(TELOPT_TTYPE).term.need_to_send = 0;    }#ifdef CK_ENVIRONMENT    if (TELOPT_SB(TELOPT_NEWENVIRON).env.need_to_send &&        TELOPT_SB(TELOPT_NEWENVIRON).env.str) {        tn_snenv((CHAR *)TELOPT_SB(TELOPT_NEWENVIRON).env.str,                 TELOPT_SB(TELOPT_NEWENVIRON).env.len);        free(TELOPT_SB(TELOPT_NEWENVIRON).env.str);        TELOPT_SB(TELOPT_NEWENVIRON).env.str=NULL;        TELOPT_SB(TELOPT_NEWENVIRON).env.len=0;        TELOPT_SB(TELOPT_NEWENVIRON).env.need_to_send = 0;    }#ifdef CK_XDISPLOC    if (TELOPT_SB(TELOPT_XDISPLOC).xdisp.need_to_send) {        tn_sxdisploc();        TELOPT_SB(TELOPT_XDISPLOC).xdisp.need_to_send = 0;    }#endif /* CK_XDISPLOC */#endif /* CK_ENVIRONMENT */#ifdef CK_NAWS    if (TELOPT_SB(TELOPT_NAWS).naws.need_to_send) {        tn_snaws();        TELOPT_SB(TELOPT_NAWS).naws.need_to_send = 0;    }#endif /* CK_NAWS */#ifdef CK_SNDLOC    if (TELOPT_SB(TELOPT_SNDLOC).sndloc.need_to_send) {        tn_sndloc();        TELOPT_SB(TELOPT_SNDLOC).sndloc.need_to_send = 0;    }#endif /* CK_SNDLOC */#ifdef CK_FORWARD_X    if (TELOPT_SB(TELOPT_FORWARD_X).forward_x.need_to_send) {        tn_sndfwdx();        TELOPT_SB(TELOPT_FORWARD_X).forward_x.need_to_send = 0;    }#endif /* CK_FORWARD_X */}inttn_reset() {    int x,opt,cmd;    tn_wait_idx = 0;                    /* Clear the tn_push() buffer */    tn_wait_tmo = TN_TIMEOUT;           /* Reset wait timer stats */    nflag = 0;    /* Reset the TELNET OPTIONS counts */    for (opt = TELOPT_FIRST; opt <= TELOPT_LAST; opt++) {        if (TELOPT_OK(opt)) {            TELOPT_ME(opt) = 0;            TELOPT_U(opt)  = 0;            TELOPT_UNANSWERED_WILL(opt) = 0;            TELOPT_UNANSWERED_DO(opt)   = 0;            TELOPT_UNANSWERED_WONT(opt) = 0;            TELOPT_UNANSWERED_DONT(opt)   = 0;            TELOPT_UNANSWERED_SB(opt)   = 0;            TELOPT_ME_MODE(opt) = sstelnet ?              TELOPT_DEF_S_ME_MODE(opt) :                TELOPT_DEF_C_ME_MODE(opt);            TELOPT_U_MODE(opt) = sstelnet ?              TELOPT_DEF_S_U_MODE(opt) :                TELOPT_DEF_C_U_MODE(opt);#ifdef DEBUG            if (deblog) {                switch (TELOPT_ME_MODE(opt)) {                  case TN_NG_RF:                    debug(F110,"tn_ini ME REFUSE ",TELOPT(opt),0);                    break;                  case TN_NG_AC:                    debug(F110,"tn_ini ME ACCEPT ",TELOPT(opt),0);                    break;                  case TN_NG_RQ:                    debug(F110,"tn_ini ME REQUEST",TELOPT(opt),0);                    break;                  case TN_NG_MU:                    debug(F110,"tn_ini ME REQUIRE",TELOPT(opt),0);                    break;                }                switch (TELOPT_U_MODE(opt)) {                  case TN_NG_RF:                    debug(F110,"tn_ini U  REFUSE ",TELOPT(opt),0);                    break;                  case TN_NG_AC:                    debug(F110,"tn_ini U  ACCEPT ",TELOPT(opt),0);                    break;                  case TN_NG_RQ:                    debug(F110,"tn_ini U  REQUEST",TELOPT(opt),0);                    break;                  case TN_NG_MU:                    debug(F110,"tn_ini U  REQUIRE",TELOPT(opt),0);                    break;                }            }#endif /* DEBUG */            for (cmd = 0; cmd < 4; cmd ++)              tncnts[TELOPT_INDEX(opt)][cmd] = 0;        }    }#ifdef CK_ENVIRONMENT    if (!tn_env_flg) {        TELOPT_ME_MODE(TELOPT_NEWENVIRON) = TN_NG_RF;        TELOPT_U_MODE(TELOPT_NEWENVIRON) = TN_NG_RF;    }#endif /* CK_ENVIRONMENT */#ifdef CK_SNDLOC    if (!tn_loc)        TELOPT_DEF_C_ME_MODE(TELOPT_SNDLOC) = TN_NG_RF;#endif /* CK_SNDLOC */#ifdef IKS_OPTION    TELOPT_SB(TELOPT_KERMIT).kermit.me_start = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.u_start = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.me_req_start = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.me_req_stop = 0;    TELOPT_SB(TELOPT_KERMIT).kermit.sop = 0;#endif /* IKS_OPTION */#ifdef CK_ENCRYPTION    TELOPT_SB(TELOPT_ENCRYPTION).encrypt.stop = 0;    TELOPT_SB(TELOPT_ENCRYPTION).encrypt.need_to_send = 0;#endif /* CK_ENCRYPTION */#ifdef  CK_NAWS    TELOPT_SB(TELOPT_NAWS).naws.need_to_send = 0;    TELOPT_SB(TELOPT_NAWS).naws.x = 0;    TELOPT_SB(TELOPT_NAWS).naws.y = 0;#endif /* CK_NAWS */    TELOPT_SB(TELOPT_TTYPE).term.need_to_send = 0;    TELOPT_SB(TELOPT_TTYPE).term.type[0] = '\0';#ifdef CK_ENVIRONMENT    TELOPT_SB(TELOPT_NEWENVIRON).env.need_to_send = 0;    if (tn_first)        TELOPT_SB(TELOPT_NEWENVIRON).env.str=NULL;    else if (TELOPT_SB(TELOPT_NEWENVIRON).env.str) {        free(TELOPT_SB(TELOPT_NEWENVIRON).env.str);        TELOPT_SB(TELOPT_NEWENVIRON).env.str=NULL;    }    TELOPT_SB(TELOPT_NEWENVIRON).env.len=0;#ifdef CK_XDISPLOC    TELOPT_SB(TELOPT_XDISPLOC).xdisp.need_to_send = 0;#endif /* CK_XDISPLOC */#endif /* CK_ENVIRONMENT */#ifdef CK_SNDLOC    TELOPT_SB(TELOPT_SNDLOC).sndloc.need_to_send = 0;#endif /* CK_SNDLOC */#ifdef CK_FORWARD_X    TELOPT_SB(TELOPT_FORWARD_X).forward_x.need_to_send = 0;    if ( TELOPT_SB(TELOPT_FORWARD_X).forward_x.listen_socket != -1 ) {    }    TELOPT_SB(TELOPT_FORWARD_X).forward_x.listen_socket = -1;    for ( x=0 ; x<MAXFWDX ; x++ ) {        TELOPT_SB(TELOPT_FORWARD_X).forward_x.channel[x].fd = -1;        TELOPT_SB(TELOPT_FORWARD_X).forward_x.channel[x].id = -1;    }#ifdef NT    TELOPT_SB(TELOPT_FORWARD_X).forward_x.thread_started = 0;#endif /* NT */#endif /* CK_FORWARD_X */#ifdef CK_SSL    if (tls_only_flag || ssl_only_flag) {        TELOPT_ME_MODE(TELOPT_START_TLS) = TN_NG_RF;        TELOPT_U_MODE(TELOPT_START_TLS) = TN_NG_RF;    }    TELOPT_SB(TELOPT_START_TLS).start_tls.u_follows = 0;    TELOPT_SB(TELOPT_START_TLS).start_tls.me_follows = 0;#endif /* CK_SSL */#ifdef CK_ENCRYPTION    if (!ck_crypt_is_installed()#ifdef CK_SSL        || tls_only_flag || ssl_only_flag#endif /* CK_SSL */        ) {        TELOPT_ME_MODE(TELOPT_ENCRYPTION) = TN_NG_RF;        TELOPT_U_MODE(TELOPT_ENCRYPTION) = TN_NG_RF;    }#endif /* CK_ENCRYPTION */    tn_first = 0;                       /* No longer the first time init */#ifdef OS2    ttnum = -1;                         /* Reset TermType negotiation */    ttnumend = 0;#endif /* OS2 */    return(0);}/* Start a telnet connection. *//* Returns -1 on error, 0 if nothing happens, 1 if init msgs sent ok */inttn_ini() {    int wait, x, opt;    debug(F101,"tn_ini ttnproto","",ttnproto);    debug(F101,"tn_ini tn_init","",tn_init);    if (ttnet != NET_TCPB)              /* Make sure connection is TCP/IP */      return(0);    if (tn_init)                        /* Have we done this already? */      return(0);                        /* Don't do it again. */    tn_reset();                         /* Reset telnet parameters */    if (ttnproto == NP_RLOGIN) {        /* Reset flags even when RLOGIN */        tn_init = 1;        return(0);    } else if (ttnproto == NP_NONE) {   /* If not talking to a telnet port, */        ttnproto = NP_TELNET;           /* pretend it's telnet anyway, */        tn_init = 1;                    /* but don't send initial options. */        debug(F100,"tn_ini skipping telnet negotiations","",0);        return(0);    } else if (ttnproto == NP_TCPRAW) { /* Raw socket requested. */        return(0);    } else if (ttnproto == NP_KERMIT) {        /* switching to Telnet protocol */        debug(F100,"tn_start switching from Kermit to Telnet","",0);        ttnproto = NP_TELNET;    }    debug(F111,"tn_start","sstelnet",sstelnet);    wait = 0;#ifdef CK_SSL    if (!TELOPT_ME(TELOPT_START_TLS) &&        TELOPT_ME_MODE(TELOPT_START_TLS) >= TN_NG_RQ) {        if (tn_sopt(WILL, TELOPT_START_TLS) < 0)          return(-1);        TELOPT_UNANSWERED_WILL(TELOPT_START_TLS) = 1;        wait = 1;    }    if (!TELOPT_U(TELOPT_START_TLS) &&        TELOPT_U_MODE(TELOPT_START_TLS) >= TN_NG_RQ) {        if (tn_sopt(DO, TELOPT_START_TLS) < 0)          return(-1);        TELOPT_UNANSWERED_DO(TELOPT_START_TLS) = 1;        wait = 1;    }#ifdef COMMENT/*  We can put off waiting for this until after we have requested AUTH.  The  next draft will specify how the WILL side is to decide between these  conflicting options.*/    if (wait) {        if (tn_wait("start_tls") < 0) {            tn_push();            return(-1);        }        wait = 0;    }#endif /* COMMENT */#endif /* CK_SSL */#ifdef CK_AUTHENTICATION

⌨️ 快捷键说明

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