Example #1
0
      public void ReadNetwork()
      {
          byte[] buffer = new byte[10];

          int          received = 0;
          StreamReader reader   = new StreamReader(stream);

          while (ConnectionSocket.Poll(0, SelectMode.SelectRead))
          {
              try
              {
                  received = ConnectionSocket.Receive(buffer, buffer.Length, SocketFlags.None);
              }catch (SocketException) {
                  ConnectionSocket.Close();
                  Interpreter.Shutdown();
                  break;
              }

              if (received == 0)
              {
                  ConnectionSocket.Close();
                  Interpreter.Shutdown();
                  return;
              }

              for (int x = 0; x < received; x++)
              {
                  byte b = buffer[x];

                  switch (status)
                  {
                  case TelnetStatus.standard:
                      if (b == 255)
                      {
                          status = TelnetStatus.awaitCommand;
                      }
                      else
                      {
                          stream.WriteByte(b);
                      }
                      break;

                  case TelnetStatus.awaitCommand:
                      AcceptCommand(b);
                      break;

                  case TelnetStatus.opNegotiation:
                      if (b == 240)
                      {
                          status = TelnetStatus.standard;
                      }
                      break;

                  case TelnetStatus.awaitOption:
                      option = b;
                      //deal with option here
                      status = TelnetStatus.standard;
                      break;
                  }
              }
          }
          stream.Seek(0, SeekOrigin.Begin);
          while (!reader.EndOfStream)
          {
              string line = reader.ReadLine();
              Interpreter.HandleInput(line);
          }
          stream.SetLength(0);
      }
Example #2
0
      void AcceptCommand(byte command)
      {
          switch (command)
          {
          case 255:                       //escaped 255
              stream.WriteByte(command);
              status = TelnetStatus.standard;
              break;

          case 240:                       //shouldn't get this
              break;

          case 241:                       //nop
              break;

          case 242:
              break;

          case 243:                       //break
              break;

          case 244:                       //IP
              break;

          case 245:                      //AO
              break;

          case 246:                      //AYT(ARE YOU THERE(PING)
              lock (lockObject)
              {
                  try
                  {
                      ConnectionSocket.Send(new byte[] { 255, 246 });
                  }catch (SocketException) {
                      ConnectionSocket.Close();
                      Interpreter.Shutdown();
                  }
                  status = TelnetStatus.standard;
              }
              break;

          case 247:
              break;

          case 248:
              break;

          case 249:
              break;

          case 250:
              status = TelnetStatus.opNegotiation;
              break;

          case 251:
              this.Command = command;
              status       = TelnetStatus.awaitOption;
              break;

          case 252:
              this.Command = command;
              status       = TelnetStatus.awaitOption;
              break;

          case 253:
              this.Command = command;
              status       = TelnetStatus.awaitOption;
              break;

          case 254:
              this.Command = command;
              status       = TelnetStatus.awaitOption;
              break;
          }
      }