00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "NetTelnetProtocol.h"
00026
00027 namespace cmlabs {
00028
00029
00030
00031
00032
00033 NetTelnetProtocol::NetTelnetProtocol(JString greeting, JString prompt):NetProtocol("Telnet")
00034 {
00035 welcomeText = greeting;
00036 promptText = prompt;
00037 netTimeout = 60000;
00038 }
00039
00040 NetTelnetProtocol::~NetTelnetProtocol()
00041 {
00042
00043 }
00044
00045 Object* NetTelnetProtocol::clone() const {
00046 return new NetTelnetProtocol(welcomeText, promptText);
00047 }
00048
00049 bool NetTelnetProtocol::checkBufferForCompatibility(char* buffer, int length) {
00050
00051 if (buffer == NULL)
00052 return false;
00053
00054 if (length < 1) return false;
00055
00056 if ((buffer[0] == 13) || (buffer[0] == 10))
00057 return true;
00058
00059 return false;
00060 }
00061
00062 bool NetTelnetProtocol::initializeConversation(JSocket* socket) {
00063 if (socket == NULL)
00064 return false;
00065
00066 JString str = socket->readln(100);
00067
00068 if (socket->writeln(welcomeText) < 0)
00069 return false;
00070
00071 if (socket->writeln("") < 0)
00072 return false;
00073
00074 if (socket->writeString(promptText) < 0)
00075 return false;
00076
00077 return true;
00078 }
00079
00080 bool NetTelnetProtocol::sendObject(JSocket* socket, Message* msg, bool isReply) {
00081
00082 if (socket == NULL)
00083 return false;
00084
00085 JString newPrompt = msg->get("NewPromptText");
00086 if (newPrompt.length() > 0) {
00087 promptText = newPrompt;
00088 }
00089 JString newWelcome = msg->get("NewWelcomeText");
00090 if (newWelcome.length() > 0) {
00091 welcomeText = newWelcome;
00092 }
00093
00094 JString str = msg->getContent();
00095
00096
00097
00098 if (str.equals("###QUIT###")) {
00099 socket->writeln("\nGoodbye...\n\n");
00100 wait(10);
00101 socket->disconnectNow();
00102
00103 return true;
00104 }
00105
00106 if (socket->writeln(str) < 0)
00107 return false;
00108
00109 if (socket->writeString(promptText) < 0)
00110 return false;
00111
00112
00113 return true;
00114 }
00115
00116 Message* NetTelnetProtocol::receiveObject(JSocket* socket, int timeout) {
00117 Message* msg = NULL;
00118
00119 if (socket == NULL)
00120 return NULL;
00121
00122 JString str = socket->readln(timeout);
00123
00124 if ( (str.equalsIgnoreCase("exit")) || (str.equalsIgnoreCase("quit"))) {
00125 socket->writeln("\nGoodbye...\n\n");
00126 wait(10);
00127 socket->disconnectNow();
00128 return NULL;
00129 }
00130 else if ((str.length() > 0) || (str.isCRTerminated)) {
00131 JString hostname = socket->getRemoteIPAddress();
00132 if (hostname.equals("localhost"))
00133 hostname = socket->getLocalIPAddress();
00134
00135 msg = new Message(hostname, "", "TelnetInput", str, "");
00136 msg->setOrigin(hostname);
00137 msg->set("netprotocol", name);
00138 }
00139
00140 return msg;
00141 }
00142
00143
00144
00145 }