make color a build-time option for telnet-proxy

This commit is contained in:
Sean Middleditch 2009-03-15 13:10:08 -04:00
parent 637df7f064
commit 93b8980f81
2 changed files with 33 additions and 16 deletions

View File

@ -1,5 +1,5 @@
CFLAGS = -Wall -g -O0 -DHAVE_ZLIB CFLAGS = -Wall -g -O0 -DHAVE_ZLIB -DENABLE_COLOR
LFLAGS = -lz LFLAGS = -lz
telnet-proxy: telnet-proxy.c libtelnet.c libtelnet.h telnet-proxy: telnet-proxy.c libtelnet.c libtelnet.h Makefile
$(CC) -o telnet-proxy $(CFLAGS) telnet-proxy.c libtelnet.c $(LFLAGS) $(CC) -o telnet-proxy $(CFLAGS) telnet-proxy.c libtelnet.c $(LFLAGS)

View File

@ -27,6 +27,20 @@
#include "libtelnet.h" #include "libtelnet.h"
#ifdef ENABLE_COLOR
# define COLOR_SERVER "\e[35m"
# define COLOR_CLIENT "\e[34m"
# define COLOR_BOLD "\e[1m"
# define COLOR_UNBOLD "\e[22m"
# define COLOR_NORMAL "\e[0m"
#else
# define COLOR_SERVER ""
# define COLOR_CLIENT ""
# define COLOR_BOLD ""
# define COLOR_UNBOLD ""
# define COLOR_NORMAL ""
#endif
struct conn_t { struct conn_t {
const char *name; const char *name;
int sock; int sock;
@ -121,9 +135,10 @@ static void print_buffer(unsigned char *buffer, unsigned int size) {
if (buffer[i] == ' ' || (isprint(buffer[i]) && !isspace(buffer[i]))) if (buffer[i] == ' ' || (isprint(buffer[i]) && !isspace(buffer[i])))
printf("%c", (char)buffer[i]); printf("%c", (char)buffer[i]);
else if (buffer[i] == '\n') else if (buffer[i] == '\n')
printf("<\e[1m0x%02X\e[22m>\n", (int)buffer[i]); printf("<" COLOR_BOLD "[1m0x%02X" COLOR_UNBOLD ">\n",
(int)buffer[i]);
else else
printf("<\e[1m0x%02X\e[22m>", (int)buffer[i]); printf("<" COLOR_BOLD "0x%02X" COLOR_UNBOLD ">", (int)buffer[i]);
} }
} }
@ -155,7 +170,7 @@ static void _event_handler(struct libtelnet_t *telnet,
case LIBTELNET_EV_DATA: case LIBTELNET_EV_DATA:
printf("%s DATA: ", conn->name); printf("%s DATA: ", conn->name);
print_buffer(ev->buffer, ev->size); print_buffer(ev->buffer, ev->size);
printf("\e[0m\n"); printf(COLOR_NORMAL "\n");
libtelnet_send_data(&conn->remote->telnet, ev->buffer, ev->size, libtelnet_send_data(&conn->remote->telnet, ev->buffer, ev->size,
conn->remote); conn->remote);
@ -165,22 +180,23 @@ static void _event_handler(struct libtelnet_t *telnet,
/* DONT SPAM /* DONT SPAM
printf("%s SEND: ", conn->name); printf("%s SEND: ", conn->name);
print_buffer(ev->buffer, ev->size); print_buffer(ev->buffer, ev->size);
printf("\e[0m\n"); printf(COLOR_BOLD "\n");
*/ */
_send(conn->sock, ev->buffer, ev->size); _send(conn->sock, ev->buffer, ev->size);
break; break;
/* IAC command */ /* IAC command */
case LIBTELNET_EV_IAC: case LIBTELNET_EV_IAC:
printf("%s IAC %s\e[0m\n", conn->name, get_cmd(ev->command)); printf("%s IAC %s" COLOR_NORMAL "\n", conn->name,
get_cmd(ev->command));
libtelnet_send_command(&conn->remote->telnet, ev->command, libtelnet_send_command(&conn->remote->telnet, ev->command,
conn->remote); conn->remote);
break; break;
/* negotiation */ /* negotiation */
case LIBTELNET_EV_NEGOTIATE: case LIBTELNET_EV_NEGOTIATE:
printf("%s IAC %s %d (%s)\e[0m\n", conn->name, get_cmd(ev->command), printf("%s IAC %s %d (%s)" COLOR_NORMAL "\n", conn->name,
(int)ev->telopt, get_opt(ev->telopt)); get_cmd(ev->command), (int)ev->telopt, get_opt(ev->telopt));
libtelnet_send_negotiate(&conn->remote->telnet, ev->command, libtelnet_send_negotiate(&conn->remote->telnet, ev->command,
ev->telopt, conn->remote); ev->telopt, conn->remote);
@ -193,19 +209,20 @@ static void _event_handler(struct libtelnet_t *telnet,
printf(" [%u]: ", ev->size); printf(" [%u]: ", ev->size);
print_buffer(ev->buffer, ev->size); print_buffer(ev->buffer, ev->size);
} }
printf("\e[0m\n"); printf(COLOR_NORMAL "\n");
libtelnet_send_subnegotiation(&conn->remote->telnet, ev->telopt, libtelnet_send_subnegotiation(&conn->remote->telnet, ev->telopt,
ev->buffer, ev->size, conn->remote); ev->buffer, ev->size, conn->remote);
break; break;
/* compression notification */ /* compression notification */
case LIBTELNET_EV_COMPRESS: case LIBTELNET_EV_COMPRESS:
printf("%s COMPRESSION %s\e[0m\n", conn->name, printf("%s COMPRESSION %s" COLOR_NORMAL "\n", conn->name,
ev->command ? "ON" : "OFF"); ev->command ? "ON" : "OFF");
break; break;
/* error */ /* error */
case LIBTELNET_EV_ERROR: case LIBTELNET_EV_ERROR:
printf("%s ERROR: %.*s\e[0m\n", conn->name, ev->size, ev->buffer); printf("%s ERROR: %.*s" COLOR_NORMAL "\n", conn->name, ev->size,
ev->buffer);
exit(1); exit(1);
} }
} }
@ -297,9 +314,9 @@ int main(int argc, char **argv) {
freeaddrinfo(ai); freeaddrinfo(ai);
/* initialize connection structs */ /* initialize connection structs */
server.name = "\e[35mSERVER"; server.name = COLOR_SERVER "SERVER";
server.remote = &client; server.remote = &client;
client.name = "\e[34mCLIENT"; client.name = COLOR_CLIENT "CLIENT";
client.remote = &server; client.remote = &server;
/* initialize telnet boxes */ /* initialize telnet boxes */
@ -320,7 +337,7 @@ int main(int argc, char **argv) {
if ((rs = recv(server.sock, buffer, sizeof(buffer), 0)) > 0) { if ((rs = recv(server.sock, buffer, sizeof(buffer), 0)) > 0) {
libtelnet_push(&server.telnet, buffer, rs, (void*)&server); libtelnet_push(&server.telnet, buffer, rs, (void*)&server);
} else if (rs == 0) { } else if (rs == 0) {
printf("%s DISCONNECTED\e[0m\n", server.name); printf("%s DISCONNECTED" COLOR_NORMAL "\n", server.name);
break; break;
} else { } else {
fprintf(stderr, "recv(server) failed: %s\n", strerror(errno)); fprintf(stderr, "recv(server) failed: %s\n", strerror(errno));
@ -333,7 +350,7 @@ int main(int argc, char **argv) {
if ((rs = recv(client.sock, buffer, sizeof(buffer), 0)) > 0) { if ((rs = recv(client.sock, buffer, sizeof(buffer), 0)) > 0) {
libtelnet_push(&client.telnet, buffer, rs, (void*)&client); libtelnet_push(&client.telnet, buffer, rs, (void*)&client);
} else if (rs == 0) { } else if (rs == 0) {
printf("%s DISCONNECTED\e[0m\n", client.name); printf("%s DISCONNECTED" COLOR_NORMAL "\n", client.name);
break; break;
} else { } else {
fprintf(stderr, "recv(client) failed: %s\n", strerror(errno)); fprintf(stderr, "recv(client) failed: %s\n", strerror(errno));