mirror of
https://github.com/Zeal-Operating-System/ZealOS.git
synced 2024-12-25 15:10:28 +00:00
Disconnect fix
This commit is contained in:
parent
81edb50c8e
commit
b9e7cd0c4a
1 changed files with 14 additions and 10 deletions
|
@ -64,34 +64,32 @@ U0 SendWindowSize(I64 sock, U16 rows, U16 cols) {
|
||||||
}
|
}
|
||||||
|
|
||||||
U0 SendTerminalType(I64 sock, U8 *term_type) {
|
U0 SendTerminalType(I64 sock, U8 *term_type) {
|
||||||
|
I64 term_type_len = StrLen(term_type);
|
||||||
U8 buf[6 + StrLen(term_type)];
|
U8 buf[6 + StrLen(term_type)];
|
||||||
|
|
||||||
buf[0] = 0xFF; // IAC
|
buf[0] = 0xFF; // IAC
|
||||||
buf[1] = 0xFA; // SB
|
buf[1] = 0xFA; // SB
|
||||||
buf[2] = 0x18; // Terminal Type
|
buf[2] = 0x18; // Terminal Type
|
||||||
buf[3] = 0x00; // IS
|
buf[3] = 0x00; // IS
|
||||||
StrCopy(buf + 4, term_type);
|
MemCopy(buf + 4, term_type, term_type_len); // Copy terminal type string
|
||||||
buf[4 + StrLen(term_type)] = 0xFF; // IAC
|
buf[4 + term_type_len] = 0xFF; // IAC
|
||||||
buf[5 + StrLen(term_type)] = 0xF0; // SE
|
buf[5 + term_type_len] = 0xF0; // SE
|
||||||
|
|
||||||
TCPSocketSend(sock, buf, sizeof(buf));
|
TCPSocketSend(sock, buf, 6 + term_type_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
U0 TelnetClient(U8 *host, U16 port) {
|
U0 TelnetClient(U8 *host, U16 port) {
|
||||||
I64 sock, bytes_received, input_len;
|
I64 sock, bytes_received, input_len;
|
||||||
U8 buffer[BUF_SIZE], input_buffer[BUF_SIZE], *ptr, ch;
|
U8 buffer[BUF_SIZE], input_buffer[BUF_SIZE], *ptr, ch;
|
||||||
Bool force_disconnect;
|
Bool force_disconnect = FALSE;
|
||||||
|
|
||||||
sock = TelnetOpen(host, port);
|
sock = TelnetOpen(host, port);
|
||||||
if (sock <= 0) {
|
if (sock <= 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SendWindowSize(sock, 24, 80); // Send default window size of 24 rows and 80 columns
|
|
||||||
|
|
||||||
"Connected to %s:%d.\n", host, port;
|
"Connected to %s:%d.\n", host, port;
|
||||||
|
|
||||||
force_disconnect = FALSE;
|
|
||||||
while (!force_disconnect) {
|
while (!force_disconnect) {
|
||||||
bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1);
|
bytes_received = TCPSocketReceive(sock, buffer, BUF_SIZE - 1);
|
||||||
if (bytes_received > 0) {
|
if (bytes_received > 0) {
|
||||||
|
@ -113,6 +111,7 @@ U0 TelnetClient(U8 *host, U16 port) {
|
||||||
response[1] = 0xFB; // WILL
|
response[1] = 0xFB; // WILL
|
||||||
TCPSocketSend(sock, response, 3);
|
TCPSocketSend(sock, response, 3);
|
||||||
SendTerminalType(sock, "ANSI");
|
SendTerminalType(sock, "ANSI");
|
||||||
|
SendWindowSize(sock, 40, 80); // default window size is normally 24 rows and 80 columns
|
||||||
} else if (negotiation_code == 0xFD || negotiation_code == 0xFE) {
|
} else if (negotiation_code == 0xFD || negotiation_code == 0xFE) {
|
||||||
response[1] = 0xFC; // WONT
|
response[1] = 0xFC; // WONT
|
||||||
} else { // Else, assume the negotiation code is WILL or WONT
|
} else { // Else, assume the negotiation code is WILL or WONT
|
||||||
|
@ -138,9 +137,14 @@ U0 TelnetClient(U8 *host, U16 port) {
|
||||||
// Process ansi_code
|
// Process ansi_code
|
||||||
if (*ptr == ';') {
|
if (*ptr == ';') {
|
||||||
ptr++; // Move to next part of the sequence
|
ptr++; // Move to next part of the sequence
|
||||||
} else if (*ptr == 'm' || *ptr == 'H' || *ptr == 'J' || *ptr == 'K' || *ptr == 'C') {
|
} else if (*ptr == 'm' || *ptr == 'H' || *ptr == 'J' || *ptr == 'K' ) {
|
||||||
ptr++; // Move past the current character
|
ptr++; // Move past the current character
|
||||||
break; // End of the escape sequence
|
break; // End of the escape sequence
|
||||||
|
} else if (*ptr == 'C') {
|
||||||
|
// Custom 'C' escape code for centering text
|
||||||
|
// TODO: Handle the centering here
|
||||||
|
ptr++;
|
||||||
|
break;
|
||||||
} else if (*ptr == '?') {
|
} else if (*ptr == '?') {
|
||||||
ptr++; // Skip the '?'
|
ptr++; // Skip the '?'
|
||||||
} else if (*ptr == 'h' || *ptr == 'l') {
|
} else if (*ptr == 'h' || *ptr == 'l') {
|
||||||
|
@ -159,7 +163,7 @@ U0 TelnetClient(U8 *host, U16 port) {
|
||||||
}
|
}
|
||||||
|
|
||||||
"\n";
|
"\n";
|
||||||
Sleep(500); // Add a 200 ms delay
|
Sleep(500); // Add a 500 ms delay
|
||||||
// Prompt user for input and send it to the remote host
|
// Prompt user for input and send it to the remote host
|
||||||
"Enter your choice: ";
|
"Enter your choice: ";
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue