Skip to content

Commit

Permalink
Revert "more"
Browse files Browse the repository at this point in the history
This reverts commit f7ab1eb.
  • Loading branch information
teverett committed Jun 15, 2024
1 parent f7ab1eb commit 151cb9f
Show file tree
Hide file tree
Showing 37 changed files with 276 additions and 454 deletions.
40 changes: 38 additions & 2 deletions src/main/java/com/khubla/telnet/nvt/IACCommandHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,47 @@
import java.io.IOException;

public interface IACCommandHandler {
/**
* IAC Commands (RFC 854)
*/
// End of subnegotiation parameters.
int IAC_COMMAND_SE = 240;
// No operation.
int IAC_COMMAND_NOP = 241;
// The data stream portion of a Synch
int IAC_COMMAND_DATAMARK = 242;
// NVT character BRK.
int IAC_COMMAND_BREAK = 243;
// interrupt process
int IAC_COMMAND_IP = 244;
// abort output
int IAC_COMMAND_AO = 245;
// are you there
int IAC_COMMAND_AYT = 246;
// erase character
int IAC_COMMAND_EC = 247;
// erase line
int IAC_COMMAND_EL = 248;
// go ahead
int IAC_COMMAND_GA = 249;
// Indicates that what follows is subnegotiation of the indicated option.
int IAC_COMMAND_SB = 250;
// Indicates the desire to begin performing, or confirmation that you are now performing, the indicated option.
int IAC_COMMAND_WILL = 251;
// Indicates the refusal to perform, or continue performing, the indicated option.
int IAC_COMMAND_WONT = 252;
// Indicates the request that the other party perform, or confirmation that you are expecting the other party to perform, the indicated option.
int IAC_COMMAND_DO = 253;
// Indicates the demand that the other party stop performing or confirmation that you are no longer expecting the other party to perform, the indicated option.
int IAC_COMMAND_DONT = 254;
// IAC
int IAC_IAC = 255;



void process(NVT nvt, int cmd) throws IOException;

int getCommand();

String getDescription();

boolean negotiate();
}
49 changes: 24 additions & 25 deletions src/main/java/com/khubla/telnet/nvt/NVT.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.khubla.telnet.nvt.iac.command.EchoIAICCommandHandlerImpl;
import com.khubla.telnet.nvt.iac.command.SGIACCommandHandlerImpl;
import com.khubla.telnet.nvt.spy.NVTSpy;
import com.khubla.telnet.nvt.stream.IACProcessor;
import com.khubla.telnet.nvt.stream.IACProcessorImpl;
import com.khubla.telnet.nvt.stream.NVTStream;
import com.khubla.telnet.nvt.stream.NVTStreamImpl;
Expand Down Expand Up @@ -75,76 +74,76 @@ private void sendConfigParameters() throws IOException {
/*
* lets exchange options
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_WILL, IACHandler.IAC_CODE_EXTENDED_OPTIONS_LIST);
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_EXTENDED_OPTIONS_LIST);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_WILL, IACHandler.IAC_CODE_EXTENDED_OPTIONS_LIST);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_EXTENDED_OPTIONS_LIST);
/*
* i can talk binary
*/
sendIACCommand(IACProcessor.IAC_COMMAND_DO, BinaryIAICCommandHandlerImpl.IAC_CODE_BINARY);
sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, BinaryIAICCommandHandlerImpl.IAC_CODE_BINARY);
/*
* no go-aheads pls
*/
sendIACCommand(IACProcessor.IAC_COMMAND_DO, SGIACCommandHandlerImpl.IAC_CODE_SUPPRESS_GOAHEAD);
sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, SGIACCommandHandlerImpl.IAC_CODE_SUPPRESS_GOAHEAD);
/*
* tell me your status
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_STATUS);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_STATUS);
/*
* echo
*/
sendIACCommand(IACProcessor.IAC_COMMAND_WILL, EchoIAICCommandHandlerImpl.IAC_CODE_ECHO);
sendIACCommand(IACCommandHandler.IAC_COMMAND_WILL, EchoIAICCommandHandlerImpl.IAC_CODE_ECHO);
/*
* ask to linemode
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_LINEMODE);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_LINEMODE);
/*
* i accept environment variables
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_ENVVAR);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_ENVVAR);
/*
* tell me your terminal type
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_TERMTYPE);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_TERMTYPE);
/*
* EOR
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_EOR);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_EOR);
/*
* query 3270. we must have negotiated termtype, EOR, and and binary before we can ask for 3270 regime
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_3270_REGIME);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_3270_REGIME);
/*
* tell me your termspeed type
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_TERMSPEED);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_TERMSPEED);
/*
* tell me your winsize
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_WINSIZE);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_WINSIZE);
/*
* i am able to receive 3270E information
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_TN3270E);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_TN3270E);
/*
* i would like to talk about charsets
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_WILL, IACHandler.IAC_CODE_CHARSET);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_WILL, IACHandler.IAC_CODE_CHARSET);
/*
* i like to talk in extended ASCII
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_WILL, IACHandler.IAC_CODE_EXTENDED_ASCII);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_WILL, IACHandler.IAC_CODE_EXTENDED_ASCII);
/*
* lets talk about the environment
*/
// sendIACCommand(IACProcessor.IAC_COMMAND_DO, IACHandler.IAC_CODE_NEW_ENVIRON);
// sendIACCommand(IACCommandHandler.IAC_COMMAND_DO, IACHandler.IAC_CODE_NEW_ENVIRON);
}

public void sendIACCommand(int command, int option) throws IOException {
CommandIACHandlerImpl cmdHandler = new CommandIACHandlerImpl();
IACCommandHandler iacCommandHandler = cmdHandler.getIACCommandHandler(option);
if (null != iacCommandHandler) {
logger.info("Sent IAC command: " + commandToString(command) + " option: " + iacCommandHandler.getDescription());
nvtStream.writeBytes(IACProcessor.IAC_IAC, command, option);
nvtStream.writeBytes(IACCommandHandler.IAC_IAC, command, option);
flush();
} else {
throw new IOException("Unknown option: " + option);
Expand All @@ -157,17 +156,17 @@ public void setNvtSpy(NVTSpy nvtSpy) {

private String commandToString(int command) {
switch (command) {
case IACProcessor.IAC_COMMAND_DO:
case IACCommandHandler.IAC_COMMAND_DO:
return "do";
case IACProcessor.IAC_COMMAND_DONT:
case IACCommandHandler.IAC_COMMAND_DONT:
return "dont";
case IACProcessor.IAC_COMMAND_SB:
case IACCommandHandler.IAC_COMMAND_SB:
return "sb";
case IACProcessor.IAC_COMMAND_NOP:
case IACCommandHandler.IAC_COMMAND_NOP:
return "nop";
case IACProcessor.IAC_COMMAND_WILL:
case IACCommandHandler.IAC_COMMAND_WILL:
return "will";
case IACProcessor.IAC_COMMAND_WONT:
case IACCommandHandler.IAC_COMMAND_WONT:
return "wont";
default:
return "<unknown>";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import com.khubla.telnet.nvt.IACCommandHandler;
import com.khubla.telnet.nvt.NVT;
import com.khubla.telnet.nvt.iac.command.*;
import com.khubla.telnet.nvt.stream.IACProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -80,10 +79,10 @@ public void process(NVT nvt, int cmd, int option) throws IOException {
/*
* send a "nope"
*/
if (cmd == IACProcessor.IAC_COMMAND_DO) {
nvt.sendIACCommand(IACProcessor.IAC_COMMAND_WONT, option);
} else if (cmd == IACProcessor.IAC_COMMAND_WILL) {
nvt.sendIACCommand(IACProcessor.IAC_COMMAND_DONT, option);
if (cmd == IACCommandHandler.IAC_COMMAND_DO) {
nvt.sendIACCommand(IACCommandHandler.IAC_COMMAND_WONT, option);
} else if (cmd == IACCommandHandler.IAC_COMMAND_WILL) {
nvt.sendIACCommand(IACCommandHandler.IAC_COMMAND_DONT, option);
} else {
logger.info("Unexpected IAC command:" + cmd + " option: " + option);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@
*/
package com.khubla.telnet.nvt.iac.command;

import com.khubla.telnet.nvt.IACCommandHandler;
import com.khubla.telnet.nvt.NVT;
import com.khubla.telnet.nvt.stream.IACProcessor;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;

import com.khubla.telnet.nvt.IACCommandHandler;
import com.khubla.telnet.nvt.NVT;

public abstract class AbstractIACCommandHandler implements IACCommandHandler {
protected short readShort(byte[] array, int idx) {
final ByteBuffer bb = ByteBuffer.allocate(2);
Expand All @@ -34,9 +33,9 @@ protected byte[] readSubnegotiation(NVT nvt) throws IOException {
boolean cont = true;
while (cont) {
final int b = nvt.getNvtStream().readRawByte();
if (b == IACProcessor.IAC_IAC) {
if (b == IACCommandHandler.IAC_IAC) {
final int b2 = nvt.getNvtStream().readRawByte();
if (b2 == IACProcessor.IAC_COMMAND_SE) {
if (b2 == IACCommandHandler.IAC_COMMAND_SE) {
cont = false;
} else {
baos.write(b);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import com.khubla.telnet.nvt.IACCommandHandler;
import com.khubla.telnet.nvt.NVT;
import com.khubla.telnet.nvt.stream.IACProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -40,32 +39,32 @@ public class AuthenticationIAICCommandHandlerImpl extends AbstractIACCommandHand
public static final int MODIFIER_AUTH_HOW_MASK = 2;
public static final int MODIFIER_AUTH_HOW_ONE_WAY = 0;
public static final int MODIFIER_AUTH_HOW_MUTUAL = 2;
// RFC 1416, RFC 2941
public static final int IAC_CODE_AUTHENTICATION = 37;
/**
* logger
*/
private static final Logger logger = LoggerFactory.getLogger(AuthenticationIAICCommandHandlerImpl.class);
// RFC 1416, RFC 2941
public static final int IAC_CODE_AUTHENTICATION = 37;

@Override
public void process(NVT nvt, int cmd) throws IOException {
switch (cmd) {
case IACProcessor.IAC_COMMAND_DO:
case IACCommandHandler.IAC_COMMAND_DO:
logger.info("Received IAC DO auth");
nvt.sendIACCommand(IACProcessor.IAC_COMMAND_WONT, IAC_CODE_AUTHENTICATION);
nvt.sendIACCommand(IACCommandHandler.IAC_COMMAND_WONT, IAC_CODE_AUTHENTICATION);
break;
case IACProcessor.IAC_COMMAND_DONT:
case IACCommandHandler.IAC_COMMAND_DONT:
logger.info("Received IAC DONT auth");
break;
case IACProcessor.IAC_COMMAND_WILL:
case IACCommandHandler.IAC_COMMAND_WILL:
logger.info("Received IAC WILL auth");
// request auth
nvt.getNvtStream().writeBytes(IACProcessor.IAC_IAC, IACProcessor.IAC_COMMAND_SB, IAC_CODE_AUTHENTICATION, AUTHTYPE_KERBEROS_V4 | MODIFIER_AUTH_CLIENT_TO_SERVER, IACProcessor.IAC_IAC, IACProcessor.IAC_COMMAND_SE);
nvt.getNvtStream().writeBytes(IACCommandHandler.IAC_IAC, IACCommandHandler.IAC_COMMAND_SB, IAC_CODE_AUTHENTICATION, AUTHTYPE_KERBEROS_V4 | MODIFIER_AUTH_CLIENT_TO_SERVER, IACCommandHandler.IAC_IAC, IACCommandHandler.IAC_COMMAND_SE);
break;
case IACProcessor.IAC_COMMAND_WONT:
case IACCommandHandler.IAC_COMMAND_WONT:
logger.info("Received IAC WONT auth");
break;
case IACProcessor.IAC_COMMAND_SB:
case IACCommandHandler.IAC_COMMAND_SB:
logger.info("Received IAC SB auth");
final byte[] sn = readSubnegotiation(nvt);
if (sn[0] == NAME) {
Expand All @@ -89,9 +88,4 @@ public int getCommand() {
public String getDescription() {
return "AUTHENTICATION";
}

@Override
public boolean negotiate() {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import com.khubla.telnet.nvt.IACCommandHandler;
import com.khubla.telnet.nvt.NVT;
import com.khubla.telnet.nvt.stream.IACProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand All @@ -25,25 +24,25 @@ public class BinaryIAICCommandHandlerImpl extends AbstractIACCommandHandler {
@Override
public void process(NVT nvt, int cmd) throws IOException {
switch (cmd) {
case IACProcessor.IAC_COMMAND_DO:
case IACCommandHandler.IAC_COMMAND_DO:
logger.info("Received IAC DO binary");
nvt.getNvtOptions().setBinaryMode(true);
nvt.sendIACCommand(IACProcessor.IAC_COMMAND_WILL, IAC_CODE_BINARY);
nvt.sendIACCommand(IACCommandHandler.IAC_COMMAND_WILL, IAC_CODE_BINARY);
break;
case IACProcessor.IAC_COMMAND_DONT:
case IACCommandHandler.IAC_COMMAND_DONT:
logger.info("Received IAC DONT binary");
nvt.getNvtOptions().setBinaryMode(false);
nvt.sendIACCommand(IACProcessor.IAC_COMMAND_WONT, IAC_CODE_BINARY);
nvt.sendIACCommand(IACCommandHandler.IAC_COMMAND_WONT, IAC_CODE_BINARY);
break;
case IACProcessor.IAC_COMMAND_WILL:
case IACCommandHandler.IAC_COMMAND_WILL:
logger.info("Received IAC WILL binary");
nvt.getNvtOptions().setBinaryMode(true);
break;
case IACProcessor.IAC_COMMAND_WONT:
case IACCommandHandler.IAC_COMMAND_WONT:
logger.info("Received IAC WONT binary");
nvt.getNvtOptions().setBinaryMode(false);
break;
case IACProcessor.IAC_COMMAND_SB:
case IACCommandHandler.IAC_COMMAND_SB:
logger.info("Received IAC SB binary");
break;
default:
Expand All @@ -61,9 +60,4 @@ public int getCommand() {
public String getDescription() {
return "BINARY";
}

@Override
public boolean negotiate() {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import com.khubla.telnet.nvt.IACCommandHandler;
import com.khubla.telnet.nvt.NVT;
import com.khubla.telnet.nvt.stream.IACProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -41,21 +40,21 @@ public class CharsetIAICCommandHandlerImpl extends AbstractIACCommandHandler {
@Override
public void process(NVT nvt, int cmd) throws IOException {
switch (cmd) {
case IACProcessor.IAC_COMMAND_DO:
case IACCommandHandler.IAC_COMMAND_DO:
logger.info("Received IAC DO charset");
nvt.getNvtOptions().setClientcancharset(true);
break;
case IACProcessor.IAC_COMMAND_DONT:
case IACCommandHandler.IAC_COMMAND_DONT:
logger.info("Received IAC DONT charset");
nvt.getNvtOptions().setClientcancharset(false);
break;
case IACProcessor.IAC_COMMAND_WILL:
case IACCommandHandler.IAC_COMMAND_WILL:
logger.info("Received IAC WILL charset");
break;
case IACProcessor.IAC_COMMAND_WONT:
case IACCommandHandler.IAC_COMMAND_WONT:
logger.info("Received IAC WONT charset");
break;
case IACProcessor.IAC_COMMAND_SB:
case IACCommandHandler.IAC_COMMAND_SB:
logger.info("Received IAC SB charset");
break;
default:
Expand All @@ -73,9 +72,4 @@ public int getCommand() {
public String getDescription() {
return "CHARSET";
}

@Override
public boolean negotiate() {
return false;
}
}
Loading

0 comments on commit 151cb9f

Please sign in to comment.