35#ifndef SHELLMINATOR_HPP_
36#define SHELLMINATOR_HPP_
47 #include <avr/pgmspace.h>
53#ifdef SHELLMINATOR_USE_WIFI_CLIENT
55 #include <ESP8266WiFi.h>
62 #ifdef SHELLMINATOR_ENABLE_WEBSOCKET_MODULE
63 #include <WebSocketsServer.h>
68#ifdef SHELLMINATOR_ENABLE_PASSWORD_MODULE
70 #include "external/sha256/terminal_sha256.h"
75 #if __has_include ("Commander-API.hpp")
76 #include "Commander-API.hpp"
80#ifdef COMMANDER_API_VERSION
81#include "Commander-API.hpp"
95#ifdef SHELLMINATOR_ENABLE_QR_SUPPORT
102#define SHELLMINATOR_VERSION "1.1.2"
146#ifdef SHELLMINATOR_USE_WIFI_CLIENT
150 Shellminator( WiFiServer *server_p,
void( *execution_fn_p )(
char* ) );
160#ifdef SHELLMINATOR_ENABLE_WEBSOCKET_MODULE
164 Shellminator( WebSocketsServer *wsServer_p, uint8_t serverID_p );
166 Shellminator( WebSocketsServer *wsServer_p, uint8_t serverID_p,
void( *execution_fn_p )(
char* ) );
168 void webSocketPush( uint8_t data );
170 void webSocketPush( uint8_t* data,
size_t size );
172 void websocketDisconnect();
177 Shellminator( Stream *stream_p,
void( *execution_fn_p )(
char* ) );
183 void addExecFunc(
void( *execution_fn_p )(
char* ) );
191 void begin(
char* banner_p );
199 void begin(
const char* banner_p );
300 void attachLogo( __FlashStringHelper * progmemLogo_p );
471 #ifdef SHELLMINATOR_USE_WIFI_CLIENT
478 #ifdef SHELLMINATOR_ENABLE_PASSWORD_MODULE
480 void enablePasswordProtection( uint8_t* passwordHashAddress_p );
481 void enablePasswordProtection(
const uint8_t* passwordHashAddress_p );
482 void enablePasswordProtection(
char* passwordHashAddress_p );
483 void enablePasswordProtection(
const char* passwordHashAddress_p );
484 void disablePasswordProtection();
485 bool checkPassword( uint8_t* pwStr );
486 bool checkPassword(
const uint8_t* pwStr );
487 bool checkPassword(
char* pwStr );
488 bool checkPassword(
const char* pwStr );
502 #ifdef COMMANDER_API_VERSION
504 void attachCommander( Commander* commander_p );
509 #ifdef SHELLMINATOR_ENABLE_QR_SUPPORT
559 __FlashStringHelper *progmemLogo = NULL;
564 void( *execution_fn )(
char* );
580 uint32_t cmd_buff_dim = 1;
583 uint32_t cmd_buff_cntr = 0;
589 uint32_t escape_state = 0;
598 uint8_t lastBannerSize = 0;
601 void( *upArrowOverrideFunc )( void ) = NULL;
604 void( *downArrowOverrideFunc )( void ) = NULL;
607 void( *leftArrowOverrideFunc )( void ) = NULL;
610 void( *rightArrowOverrideFunc )( void ) = NULL;
613 void( *abortKeyFunc )( void ) = NULL;
616 void( *pageUpKeyFunc )( void ) = NULL;
619 void( *pageDownKeyFunc )( void ) = NULL;
622 void( *homeKeyFunc )( void ) = NULL;
625 void( *endKeyFunc )( void ) = NULL;
628 void( *logoutKeyFunc )( void ) = NULL;
631 void( *searchKeyFunc )( void ) = NULL;
639 void process(
char new_char );
646 #ifdef SHELLMINATOR_ENABLE_HIGH_MEMORY_USAGE
650 char *acceleratorBufferPtr;
653 #ifdef SHELLMINATOR_USE_WIFI_CLIENT
655 WiFiServer *server = NULL;
657 bool clientConnected =
false;
658 uint8_t telnetNegotiationState = 0;
659 uint16_t clientTimeout = 1000;
662 static const uint8_t TELNET_IAC_DONT_LINEMODE[ 3 ];
663 static const uint8_t TELNET_IAC_WILL_ECHO[ 3 ];
664 static const uint8_t TELNET_IAC_DONT_ECHO[ 3 ];
665 static const uint8_t TELNET_IAC_WILL_SUPRESS_GO_AHEAD[ 3 ];
666 static const uint8_t TELNET_IAC_DO_SUPRESS_GO_AHEAD[ 3 ];
670 static const char helpText[];
672 #ifdef SHELLMINATOR_ENABLE_WEBSOCKET_MODULE
674 WebSocketsServer *wsServer = NULL;
676 shellminatorWebSocketChannel webSocketChannel;
687 Stream *channel = &defaultChannel;
690 #ifdef COMMANDER_API_VERSION
693 Commander* commander = NULL;
696 uint32_t commandCheckTimerStart = 0;
699 bool commandChecked =
false;
703 bool commandFound =
false;
707 #ifdef SHELLMINATOR_ENABLE_SEARCH_MODULE
709 void historySearchBackward();
710 void historySearchForward();
711 void redrawHistorySearch();
712 int substring(
char* str1,
char* str2 );
714 bool inSearch =
false;
719 #ifdef SHELLMINATOR_ENABLE_PASSWORD_MODULE
723 SHA256_CTX passwordHashCtx;
724 uint8_t passwordHashBuffer[ SHA256_BLOCK_SIZE ];
725 uint8_t* passwordHashAddress = NULL;
730 #ifdef SHELLMINATOR_ENABLE_QR_SUPPORT
#define SHELLMINATOR_BANNER_PATH_LEN
#define SHELLMINATOR_BUFF_LEN
#define SHELLMINATOR_BANNER_LEN
#define SHELLMINATOR_ACCELERATOR_BUFFER_LEN
If defined, enables high memory mode.
#define SHELLMINATOR_BUFF_DIM
void begin(char *banner_p)
Shellminator initialization function.
void overrideHomeKey(void(*func)(void))
Override Home key behaviour.
void generateQRText(char *text)
This function generates a QR-code from text.
void overrideLogoutKey(void(*func)(void))
Override Logout key behaviour.
void clear()
Clear screen.
void freeLeftArrow()
Reset left arrow key functionality to default.
void overrideUpArrow(void(*func)(void))
Override up arrow key behaviour.
void update()
Update function.
void addExecFunc(void(*execution_fn_p)(char *))
Execution function adder function.
bool enableFormatting
This flag enables or disables character formatting.
void overrideRightArrow(void(*func)(void))
Override right arrow key behaviour.
void freeAbortKey()
Reset abort key functionality to default.
void freePageUpKey()
Reset Page-Up key functionality to default.
void clientDisconnect()
Disconnect WiFiClient telnet client.
void freeLogoutKey()
Reset Logout key functionality to default.
void freeEndKey()
Reset End key functionality to default.
void sendBackspace()
Sends a backspace.
void overrideEndKey(void(*func)(void))
Override End key behaviour.
void printBanner()
This function prints the banner text.
void freeUpArrow()
Reset up arrow key functionality to default.
void overrideDownArrow(void(*func)(void))
Override down arrow key behaviour.
void freeHomeKey()
Reset Home key functionality to default.
void beep()
Generate a beep sound on the terminal device.
void overridePageDownKey(void(*func)(void))
Override Page-Down key behaviour.
void setBannerPathText(char *bannerPath_p)
void overridePageUpKey(void(*func)(void))
Override Page-Up key behaviour.
void overrideSearchKey(void(*func)(void))
Override Search key behaviour.
void overrideAbortKey(void(*func)(void))
Override abort key behaviour.
void attachLogo(char *logo_p)
This function attaches a logo to the terminal.
void overrideLeftArrow(void(*func)(void))
Override left arrow key behaviour.
void setTerminalCharacterColor(uint8_t style, uint8_t color)
Bring some color into your code.
void freeRightArrow()
Reset right arrow key functionality to default.
void drawLogo()
Draws the startup logo.
void setBannerText(char *banner_p)
This function sets the banner text.
void setClientTimeout(uint16_t clientTimeout_p)
void freeSearchKey()
Reset Search key functionality to default.
void freeDownArrow()
Reset down arrow key functionality to default.
static const char * version
String that holds the version information.
void freePageDownKey()
Reset Page-Down key functionality to default.
Shellminator channel class.
#define qrcodegen_BUFFER_LEN_MAX