#include <stdarg.h> #include "mud.h" #include "telnet.h" /* This file is primarily for debugging so the source code can be compiled, modified, and tested without having to plug it into an existing codebase. */ void log_printf(char *fmt, ...) { char buf[MAX_STRING_LENGTH]; va_list args; va_start(args, fmt); vsprintf(buf, fmt, args); va_end(args); printf("%s\n", buf); return; } /* Call translate_telopts() in telopt.c with a MSSP request. */ int main(int argc, char **argv) { DESCRIPTOR_DATA *d; char input[MAX_INPUT_LENGTH], output[MAX_INPUT_LENGTH]; int size = 0; // Create the mud data structure mud = calloc(1, sizeof(MUD_DATA)); mud->mccp_buf = calloc(COMPRESS_BUF_SIZE, sizeof(unsigned char)); // Initialize the MSDP table init_msdp_table(); // Create a character d = calloc(1, sizeof(DESCRIPTOR_DATA)); d->host = strdup("localhost"); d->character = (char *) strdup("test"); // Lets debug the telopt handler. printf("\n\n\033[1;31m-- receiving announce_support\033[0m\n\n"); announce_support(d); printf("\n\n\033[1;31m-- sending IAC DO MSSP as a broken packet:\033[0m\n\n"); sprintf(input, "%c", IAC); size += translate_telopts(d, input, 1, output); sprintf(input, "%c", DO); size += translate_telopts(d, input, 1, &output[size]); sprintf(input, "%c", TELOPT_MSSP); size += translate_telopts(d, input, 1, &output[size]); printf("\n\n\033[1;31m-- sending broken MSDP packet:\033[0m\n\n"); sprintf(input, "%c%c%c%c%c%c%c", IAC, DO, TELOPT_MSDP, IAC, SB, TELOPT_MSDP, MSDP_VAR); size += translate_telopts(d, input, 7, &output[size]); sprintf(input, "%s%c%s%c%c", "LIST", MSDP_VAL, "COMMANDS", IAC, SE); size += translate_telopts(d, input, 15, &output[size]); sprintf(input, "%c%c%c%c%s%c%s%c%c", IAC, SB, TELOPT_MSDP, MSDP_VAR, "LIST", MSDP_VAL, "SENDABLE_VARIABLES", IAC, SE); size += translate_telopts(d, input, strlen(input), &output[size]); sprintf(input, "%c%c%c%c%s%c%s%c%c", IAC, SB, TELOPT_MSDP, MSDP_VAR, "SEND", MSDP_VAL, "SPECIFICATION", IAC, SE); size += translate_telopts(d, input, strlen(input), &output[size]); sprintf(input, "%c%c%c%c%s%c%c%c%s%c%s%c%c%c", IAC, SB, TELOPT_MSDP, MSDP_VAR, "SEND", MSDP_VAL, MSDP_TABLE_OPEN, MSDP_VAR, "SPECIFICATION", MSDP_VAL, "\003\001TEST\002ING\002DDDD\001BONK\002ING\004", MSDP_TABLE_CLOSE, IAC, SE); size += translate_telopts(d, input, strlen(input), &output[size]); msdp_send_update(d); return 0; } /* Send response generated above to recv_sb_mssp() in client.c for interpretation */ int write_to_descriptor(DESCRIPTOR_DATA *d, char *txt, int length) { debug_telopts(d, (unsigned char *) txt, length); if (txt[0] == (char) IAC && txt[1] == (char) SB && (txt[2] == (char) TELOPT_MSSP || txt[2] == (char) TELOPT_MSDP)) { recv_sb_mssp((unsigned char *) txt, length); } return 0; }