telnet.java

来自「apache推出的net包」· Java 代码 · 共 1,334 行 · 第 1/3 页

JAVA
1,334 行
字号
            }            /* TERMINAL-TYPE option (end)*/        /* open TelnetOptionHandler functionality (start)*/        }        /* open TelnetOptionHandler functionality (end)*/        if (_willResponse[option] > 0)        {            --_willResponse[option];            if (_willResponse[option] > 0 && _stateIsWill(option))            {                --_willResponse[option];            }        }        if (_willResponse[option] == 0)        {            if (_requestedWont(option))            {                switch (option)                {                default:                    break;                }                if (acceptNewState)                {                    _setWantWill(option);                    _sendWill(option);                }                else                {                    ++_willResponse[option];                    _sendWont(option);                }            }            else            {                // Other end has acknowledged option.                switch (option)                {                default:                    break;                }            }        }        _setWill(option);    }    /***     * Processes a DONT request.     * <p>     * @throws IOException - Exception in I/O.     * <p>     * @param option - option code to be set.     ***/    void _processDont(int option) throws IOException    {        if (debugoptions)        {            System.err.println("RECEIVED DONT: "                + TelnetOption.getOption(option));        }        if (__notifhand != null)        {            __notifhand.receivedNegotiation(                TelnetNotificationHandler.RECEIVED_DONT,                option);        }        if (_willResponse[option] > 0)        {            --_willResponse[option];            if (_willResponse[option] > 0 && _stateIsWont(option))            {                --_willResponse[option];            }        }        if (_willResponse[option] == 0 && _requestedWill(option))        {            switch (option)            {            default:                break;            }            /* FIX for a BUG in the negotiation (start)*/            if ((_stateIsWill(option)) || (_requestedWill(option)))            {                _sendWont(option);            }            _setWantWont(option);            /* FIX for a BUG in the negotiation (end)*/        }        _setWont(option);    }    /***     * Processes a WILL request.     * <p>     * @throws IOException - Exception in I/O.     * <p>     * @param option - option code to be set.     ***/    void _processWill(int option) throws IOException    {        if (debugoptions)        {            System.err.println("RECEIVED WILL: "                + TelnetOption.getOption(option));        }        if (__notifhand != null)        {            __notifhand.receivedNegotiation(                TelnetNotificationHandler.RECEIVED_WILL,                option);        }        boolean acceptNewState = false;        /* open TelnetOptionHandler functionality (start)*/        if (optionHandlers[option] != null)        {            acceptNewState = optionHandlers[option].getAcceptRemote();        }        /* open TelnetOptionHandler functionality (end)*/        if (_doResponse[option] > 0)        {            --_doResponse[option];            if (_doResponse[option] > 0 && _stateIsDo(option))            {                --_doResponse[option];            }        }        if (_doResponse[option] == 0 && _requestedDont(option))        {            switch (option)            {            default:                break;            }            if (acceptNewState)            {                _setWantDo(option);                _sendDo(option);            }            else            {                ++_doResponse[option];                _sendDont(option);            }        }        _setDo(option);    }    /***     * Processes a WONT request.     * <p>     * @throws IOException - Exception in I/O.     * <p>     * @param option - option code to be set.     ***/    void _processWont(int option) throws IOException    {        if (debugoptions)        {            System.err.println("RECEIVED WONT: "                + TelnetOption.getOption(option));        }        if (__notifhand != null)        {            __notifhand.receivedNegotiation(                TelnetNotificationHandler.RECEIVED_WONT,                option);        }        if (_doResponse[option] > 0)        {            --_doResponse[option];            if (_doResponse[option] > 0 && _stateIsDont(option))            {                --_doResponse[option];            }        }        if (_doResponse[option] == 0 && _requestedDo(option))        {            switch (option)            {            default:                break;            }            /* FIX for a BUG in the negotiation (start)*/            if ((_stateIsDo(option)) || (_requestedDo(option)))            {                _sendDont(option);            }            _setWantDont(option);            /* FIX for a BUG in the negotiation (end)*/        }        _setDont(option);    }    /* TERMINAL-TYPE option (start)*/    /***     * Processes a suboption negotiation.     * <p>     * @throws IOException - Exception in I/O.     * <p>     * @param suboption - subnegotiation data received     * @param suboptionLength - length of data received     ***/    void _processSuboption(int suboption[], int suboptionLength)    throws IOException    {        if (debug)        {            System.err.println("PROCESS SUBOPTION.");        }        /* open TelnetOptionHandler functionality (start)*/        if (suboptionLength > 0)        {            if (optionHandlers[suboption[0]] != null)            {                int responseSuboption[] =                  optionHandlers[suboption[0]].answerSubnegotiation(suboption,                  suboptionLength);                _sendSubnegotiation(responseSuboption);            }            else            {                if (suboptionLength > 1)                {                    if (debug)                    {                        for (int ii = 0; ii < suboptionLength; ii++)                        {                            System.err.println("SUB[" + ii + "]: "                                + suboption[ii]);                        }                    }                    if ((suboption[0] == TERMINAL_TYPE)                        && (suboption[1] == TERMINAL_TYPE_SEND))                    {                        _sendTerminalType();                    }                }            }        }        /* open TelnetOptionHandler functionality (end)*/    }    /***     * Sends terminal type information.     * <p>     * @throws IOException - Exception in I/O.     ***/    final synchronized void _sendTerminalType()    throws IOException    {        if (debug)        {            System.err.println("SEND TERMINAL-TYPE: " + terminalType);        }        if (terminalType != null)        {            _output_.write(_COMMAND_SB);            _output_.write(_COMMAND_IS);            _output_.write(terminalType.getBytes());            _output_.write(_COMMAND_SE);            _output_.flush();        }    }    /* TERMINAL-TYPE option (end)*/    /* open TelnetOptionHandler functionality (start)*/    /***     * Manages subnegotiation for Terminal Type.     * <p>     * @throws IOException - Exception in I/O.     * <p>     * @param subn - subnegotiation data to be sent     ***/    final synchronized void _sendSubnegotiation(int subn[])    throws IOException    {        if (debug)        {            System.err.println("SEND SUBNEGOTIATION: ");            if (subn != null)            {                for (int ii = 0; ii < subn.length; ii++)                {                    System.err.println("subn["  + ii + "]=" + subn[ii]);                }            }        }        if (subn != null)        {            byte byteresp[] = new byte[subn.length];            for (int ii = 0; ii < subn.length; ii++)            {                byteresp[ii] = (byte) subn[ii];            }            _output_.write(_COMMAND_SB);            _output_.write(byteresp);            _output_.write(_COMMAND_SE);            /* Code Section added for sending the negotiation ASAP (start)*/            _output_.flush();            /* Code Section added for sending the negotiation ASAP (end)*/        }    }    /* open TelnetOptionHandler functionality (end)*/    /* Code Section added for supporting AYT (start)*/    /***     * Processes the response of an AYT     ***/    final synchronized void _processAYTResponse()    {        if (!aytFlag)        {            synchronized (aytMonitor)            {                aytFlag = true;                try                {                    aytMonitor.notifyAll();                }                catch (Exception e)                {                    System.err.println("Exception notifying:" + e.getMessage());                }            }        }    }    /* Code Section added for supporting AYT (end)*/    /***     * Called upon connection.     * <p>     * @throws IOException - Exception in I/O.     ***/    protected void _connectAction_() throws IOException    {        /* (start). BUGFIX: clean the option info for each connection*/        for (int ii = 0; ii < TelnetOption.MAX_OPTION_VALUE + 1; ii++)        {            _doResponse[ii] = 0;            _willResponse[ii] = 0;            _options[ii] = 0;            if (optionHandlers[ii] != null)            {                optionHandlers[ii].setDo(false);                optionHandlers[ii].setWill(false);            }        }        /* (end). BUGFIX: clean the option info for each connection*/        super._connectAction_();        _input_ = new BufferedInputStream(_input_);        _output_ = new BufferedOutputStream(_output_);        /* open TelnetOptionHandler functionality (start)*/        for (int ii = 0; ii < TelnetOption.MAX_OPTION_VALUE + 1; ii++)        {            if (optionHandlers[ii] != null)            {                if (optionHandlers[ii].getInitLocal())                {                    try                    {                        _requestWill(optionHandlers[ii].getOptionCode());                    }                    catch (IOException e)                    {                        System.err.println(                            "Exception while initializing option: "                            + e.getMessage());                    }                }                if (optionHandlers[ii].getInitRemote())                {                    try                    {                        _requestDo(optionHandlers[ii].getOptionCode());                    }                    catch (IOException e)                    {                        System.err.println(                            "Exception while initializing option: "                            + e.getMessage());                    }                }            }        }        /* open TelnetOptionHandler functionality (end)*/    }    /***     * Sends a DO.     * <p>     * @throws IOException - Exception in I/O.     * <p>     * @param option - Option code.     ***/    final synchronized void _sendDo(int option)    throws IOException    {

⌨️ 快捷键说明

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