#include "vxworks.h" #include "iolib.h" #include "KermitCommand.h" #include "RegisterKermitCommands.h" #include "CommandSession.h" #include "CommandDirectory.h" #include "OutputStream.h" #include "ParameterList.h" #include "BasicString.h" #include "CreateIOConsole.h" #include "IOConsole.h" extern "C" int consoleFd; extern "C" char consoleName[20]; extern "C" int kinit(int action, int xmode, int ftype, int parity, int check, int remote, char *path); KermitReceiveCommand :: KermitReceiveCommand() { } KermitReceiveCommand :: ~KermitReceiveCommand() { } RESULT KermitReceiveCommand :: help(OutputStream &os, TUINT32 level) { switch ( level ) { case 0: os << "Kermit"; break; case 1: os << "receive a file"; break; case 2: os << "directory to put the received file"; break; default: return RESULT_E_FAIL; } return RESULT_S_OK; } RESULT KermitReceiveCommand :: process(ModeContextList *, ParameterList *pParameterList, OutputStream &os) { BasicString *pDir = pParameterList->next(); IOConsole *pIOConsole; GetIOConsole(&pIOConsole); //int saved = pIOConsole->getHandle(); //pIOConsole->flush(); //pIOConsole->setHandle(-1); int action = 2; // receive int xmode = 1; // force mode int ftype = 1; // binary(1), text(0) int parity = 0; // no parity int check = 3; // block check int remote = 1; RESULT res = kinit(action, xmode, ftype, parity, check, remote, pDir->buffer()); //pIOConsole->setHandle(saved); if (res != RESULT_S_OK) { os << "receive file failed" << endl; return RESULT_E_FAIL; } os << "receive file success" << endl; return RESULT_S_OK; } RESULT KermitReceiveCommand :: cancel() { return RESULT_S_OK; } const char * KermitReceiveCommand :: format() const { return "kermit receive {PATH}"; } Command * KermitReceiveCommand :: create() { return new KermitReceiveCommand; } ////////////////////////////////////////////////////////////////////// KermitSendCommand :: KermitSendCommand() { } KermitSendCommand :: ~KermitSendCommand() { } RESULT KermitSendCommand :: help(OutputStream &os, TUINT32 level) { switch ( level ) { case 0: os << "Kermit"; break; case 1: os << "send a file"; break; case 2: os << "path of the file to send"; break; default: return RESULT_E_FAIL; } return RESULT_S_OK; } RESULT KermitSendCommand :: process(ModeContextList *, ParameterList *pParameterList, OutputStream &os) { BasicString *pFile = pParameterList->next(); if (!pFile) return RESULT_E_FAIL; IOConsole *pIOConsole; GetIOConsole(&pIOConsole); //int saved = pIOConsole->getHandle(); //pIOConsole->flush(); //pIOConsole->setHandle(-1); int action = 1; // send int xmode = 1; // force mode int ftype = 1; // binary(1), text(0) int parity = 0; // no parity int check = 1; // checksum check int remote = 1; RESULT res = kinit(action, xmode, ftype, parity, check, remote, pFile->buffer()); //pIOConsole->setHandle(saved); if (res != RESULT_S_OK) { os << "send file failed" << endl; return RESULT_E_FAIL; } os << "send file success" << endl; return RESULT_S_OK; } RESULT KermitSendCommand :: cancel() { return RESULT_S_OK; } const char * KermitSendCommand :: format() const { return "kermit send {PATH}"; } Command * KermitSendCommand :: create() { return new KermitSendCommand; } // RESULT RegisterKermitCommands(CommandDirectory *pCommandDirectory) { char *pMode[] = {"", "shell"}; pCommandDirectory->addCommand(pMode[1], new KermitReceiveCommand, CommandDirectory::Normal, 15); pCommandDirectory->addCommand(pMode[1], new KermitSendCommand, CommandDirectory::Normal, 15); return RESULT_S_OK; }