Exemplo n.º 1
0
        /// <summary>
        /// 応答送信(SB)
        /// </summary>
        /// <param name="client"></param>
        /// <param name="info"></param>
        private void ResponseSB(Common.Net.TelnetClient client, TelnetNegotiationInfomation info)
        {
            // オプション毎に分岐
            switch (info.Option)
            {
            case TelnetOption.terminal_type:
                // TODO:未実装
                if (info.Stream.Length > 0 && info.Stream.ToArray()[0] == 0x01)
                {
                    client.SendAsync(SendTerminalType());
                }
                break;

            case TelnetOption.window_size:
                // TODO:未実装
                client.SendAsync(SendWinSize());
                break;

            case TelnetOption.terminal_speed:
                // TODO:未実装
                if (info.Stream.Length > 0 && info.Stream.ToArray()[0] == 0x01)
                {
                    client.SendAsync(SendTerminalSpeed());
                }
                break;

            default:
                break;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// ネゴシエーション応答送信
        /// </summary>
        /// <param name="client"></param>
        /// <param name="infoList"></param>
        /// <returns></returns>
        public void NegotiationResponse(Common.Net.TelnetClient client, List <TelnetNegotiationInfomation> infoList)
        {
            // リスト数分繰返し
            foreach (TelnetNegotiationInfomation info in infoList)
            {
                // コマンド毎に分岐
                switch (info.Command)
                {
                case TelnetCommand.DO:
                    // 応答送信(DO)
                    this.ResponseDO(client, info);
                    break;

                case TelnetCommand.DONT:
                    // 応答送信(DONT)
                    this.ResponseDONT(client, info);
                    break;

                case TelnetCommand.WILL:
                    // 応答送信(WILL)
                    this.ResponseWILL(client, info);
                    break;

                case TelnetCommand.WONT:
                    // 応答送信(WONT)
                    this.ResponseWONT(client, info);
                    break;

                case TelnetCommand.SB:
                    // 応答送信(SB)
                    this.ResponseSB(client, info);
                    break;

                case TelnetCommand.SE:
                    // 応答送信(SE)
                    this.ResponseSE(client, info);
                    break;

                default:
                    // 異常終了
                    break;
                }
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// 応答送信(SE)
 /// </summary>
 /// <param name="client"></param>
 /// <param name="info"></param>
 private void ResponseSE(Common.Net.TelnetClient client, TelnetNegotiationInfomation info)
 {
 }
Exemplo n.º 4
0
        /// <summary>
        /// 応答送信(WONT)
        /// </summary>
        /// <param name="client"></param>
        /// <param name="info"></param>
        private void ResponseWONT(Common.Net.TelnetClient client, TelnetNegotiationInfomation info)
        {
            if (info.Option <= TelnetOption.max)
            {
                switch (this.m_Remote[info.Option].Status)
                {
                case TelnetOptionStatus.Yes:
                    this.m_Remote[info.Option].Status = TelnetOptionStatus.No;
                    client.SendAsync(SendBack(TelnetCommand.DONT, info.Option));
                    break;

                case TelnetOptionStatus.WantNo:
                    switch (this.m_Remote[info.Option].Queue)
                    {
                    case TelnetOptionQueue.Empty:
                        this.m_Remote[info.Option].Status = TelnetOptionStatus.No;
                        break;

                    case TelnetOptionQueue.Opposite:
                        this.m_Remote[info.Option].Status = TelnetOptionStatus.WantYes;
                        this.m_Remote[info.Option].Queue  = TelnetOptionQueue.Empty;
                        client.SendAsync(SendBack(TelnetCommand.DO, info.Option));
                        break;
                    }
                    break;

                case TelnetOptionStatus.WantYes:
                    switch (this.m_Remote[info.Option].Queue)
                    {
                    case TelnetOptionQueue.Empty:
                        this.m_Remote[info.Option].Status = TelnetOptionStatus.No;
                        break;

                    case TelnetOptionQueue.Opposite:
                        this.m_Remote[info.Option].Status = TelnetOptionStatus.No;
                        this.m_Remote[info.Option].Queue  = TelnetOptionQueue.Empty;
                        break;
                    }
                    break;
                }
            }
            else
            {
                client.SendAsync(SendBack(TelnetCommand.DONT, info.Option));
            }

            switch (info.Option)
            {
            case TelnetOption.echo:
                if (this.m_TelEcho)
                {
                    switch (this.m_Remote[TelnetOption.echo].Status)
                    {
                    case TelnetOptionStatus.Yes:
                        this.m_LocalEcho = 0;
                        break;

                    case TelnetOptionStatus.No:
                        this.m_LocalEcho = 1;
                        break;
                    }
                }
                if (this.m_Remote[TelnetOption.echo].Status == TelnetOptionStatus.Yes)
                {
                    this.m_TelLineMode = false;
                }
                break;

            case TelnetOption.binary:
                switch (this.m_Remote[TelnetOption.binary].Status)
                {
                case TelnetOptionStatus.Yes:
                    this.m_TelBinRecv = true;
                    break;

                case TelnetOptionStatus.No:
                    this.m_TelBinRecv = false;
                    break;
                }
                break;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// 応答送信(DONT)
        /// </summary>
        /// <param name="client"></param>
        /// <param name="info"></param>
        private void ResponseDONT(Common.Net.TelnetClient client, TelnetNegotiationInfomation info)
        {
            if (info.Option <= TelnetOption.max)
            {
                switch (this.m_Local[info.Option].Status)
                {
                case TelnetOptionStatus.Yes:
                    this.m_Local[info.Option].Status = TelnetOptionStatus.No;
                    client.SendAsync(SendBack(TelnetCommand.WONT, info.Option));
                    break;

                case TelnetOptionStatus.WantNo:
                    switch (this.m_Local[info.Option].Queue)
                    {
                    case TelnetOptionQueue.Empty:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.No;
                        break;

                    case TelnetOptionQueue.Opposite:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.WantYes;
                        this.m_Local[info.Option].Queue  = TelnetOptionQueue.Empty;
                        client.SendAsync(SendBack(TelnetCommand.WILL, info.Option));
                        break;
                    }
                    break;

                case TelnetOptionStatus.WantYes:
                    switch (this.m_Local[info.Option].Queue)
                    {
                    case TelnetOptionQueue.Empty:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.No;
                        break;

                    case TelnetOptionQueue.Opposite:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.No;
                        this.m_Local[info.Option].Queue  = TelnetOptionQueue.Empty;
                        break;
                    }
                    break;
                }
            }
            else
            {
                client.SendAsync(SendBack(TelnetCommand.WONT, info.Option));
            }

            switch (info.Option)
            {
            case TelnetOption.binary:
                switch (this.m_Local[TelnetOption.binary].Status)
                {
                case TelnetOptionStatus.Yes:
                    this.m_TelBinSend = true;
                    break;

                case TelnetOptionStatus.No:
                    this.m_TelBinSend = false;
                    break;
                }
                break;
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 応答送信(DO)
        /// </summary>
        /// <param name="client"></param>
        /// <param name="info"></param>
        private void ResponseDO(Common.Net.TelnetClient client, TelnetNegotiationInfomation info)
        {
            if (info.Option <= TelnetOption.max)
            {
                // オプション状態で分岐
                switch (this.m_Local[info.Option].Status)
                {
                case TelnetOptionStatus.No:
                    if (this.m_Local[info.Option].Accept)
                    {
                        this.m_Local[info.Option].Status = TelnetOptionStatus.Yes;
                        client.SendAsync(SendBack(TelnetCommand.WILL, info.Option));
                    }
                    else
                    {
                        client.SendAsync(SendBack(TelnetCommand.WONT, info.Option));
                    }
                    break;

                case TelnetOptionStatus.WantNo:
                    switch (this.m_Local[info.Option].Queue)
                    {
                    case TelnetOptionQueue.Empty:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.No;
                        break;

                    case TelnetOptionQueue.Opposite:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.Yes;
                        break;
                    }
                    break;

                case TelnetOptionStatus.WantYes:
                    switch (this.m_Local[info.Option].Queue)
                    {
                    case TelnetOptionQueue.Empty:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.Yes;
                        break;

                    case TelnetOptionQueue.Opposite:
                        this.m_Local[info.Option].Status = TelnetOptionStatus.WantNo;
                        this.m_Local[info.Option].Queue  = TelnetOptionQueue.Empty;
                        client.SendAsync(SendBack(TelnetCommand.WONT, info.Option));
                        break;
                    }
                    break;
                }
            }
            else
            {
                client.SendAsync(SendBack(TelnetCommand.WONT, info.Option));
            }

            switch (info.Option)
            {
            case TelnetOption.binary:
                switch (this.m_Local[TelnetOption.binary].Status)
                {
                case TelnetOptionStatus.Yes:
                    this.m_TelBinSend = true;
                    break;

                case TelnetOptionStatus.No:
                    this.m_TelBinSend = false;
                    break;
                }
                break;

            case TelnetOption.window_size:
                if (this.m_Local[TelnetOption.window_size].Status == TelnetOptionStatus.Yes)
                {
                    client.SendAsync(SendWinSize());
                }
                break;

            case TelnetOption.suppress_go_ahead:
                if (this.m_Local[TelnetOption.suppress_go_ahead].Status == TelnetOptionStatus.Yes)
                {
                    this.m_TelLineMode = false;
                }
                break;
            }
        }