Silly IRC client

This commit is contained in:
Kevin Lange 2014-05-17 15:08:50 -07:00
parent 03f8f5062c
commit 7b05a869a5

View File

@ -758,29 +758,57 @@ DEFINE_SHELL_FUNCTION(irc_test, "irc test") {
return 0; return 0;
} }
DEFINE_SHELL_FUNCTION(irc, "irc sender") { static char irc_payload[512];
char payload[512]; static void irc_send(char * payload) {
int my_tx = next_tx_buf();
int l = strlen(payload);
size_t packet_size = write_tcp_packet(rtl_tx_buffer[my_tx], (uint8_t *)payload, l, (TCP_FLAGS_ACK | DATA_OFFSET_5));
outportl(rtl_iobase + RTL_PORT_TXBUF + 4 * my_tx, rtl_tx_phys[my_tx]);
outportl(rtl_iobase + RTL_PORT_TXSTAT + 4 * my_tx, packet_size);
}
DEFINE_SHELL_FUNCTION(irc_init, "irc connector") {
if (argc < 2) {
fprintf(tty, "Specify a username\n");
return 1;
}
char * nick = argv[1];
sprintf(irc_payload, "NICK %s\r\nUSER %s * 0:%s\r\n", nick);
irc_send(irc_payload);
return 0;
}
DEFINE_SHELL_FUNCTION(irc_join, "irc channel tool") {
if (argc < 2) {
fprintf(tty, "Specify a channel.\n");
return 1;
}
char * channel = argv[1];
sprintf(irc_payload, "JOIN %s\r\n", channel);
irc_send(irc_payload);
while (1) { while (1) {
fprintf(tty, "> "); fprintf(tty, "%s> ", channel);
debug_shell_readline(tty, payload, 509); char input[400];
int c = debug_shell_readline(tty, input, 400);
input[c] = '\0';
if (!strcmp(payload, "exit")) { if (!strcmp(input, "/part")) {
sprintf(irc_payload, "PART %s\r\n", channel);
irc_send(irc_payload);
break; break;
} }
int i = strlen(payload); sprintf(irc_payload, "PRIVMSG %s :%s\r\n", channel, input);
payload[i] = '\r'; irc_send(irc_payload);
payload[i+1] = '\n';
payload[i+2] = '\0';
int my_tx = next_tx_buf();
int l = strlen(payload);
size_t packet_size = write_tcp_packet(rtl_tx_buffer[my_tx], (uint8_t *)payload, l, (TCP_FLAGS_ACK | DATA_OFFSET_5));
outportl(rtl_iobase + RTL_PORT_TXBUF + 4 * my_tx, rtl_tx_phys[my_tx]);
outportl(rtl_iobase + RTL_PORT_TXSTAT + 4 * my_tx, packet_size);
} }
return 0; return 0;
@ -964,7 +992,8 @@ DEFINE_SHELL_FUNCTION(rtl, "rtl8139 experiments") {
static int init(void) { static int init(void) {
BIND_SHELL_FUNCTION(rtl); BIND_SHELL_FUNCTION(rtl);
BIND_SHELL_FUNCTION(irc_test); BIND_SHELL_FUNCTION(irc_test);
BIND_SHELL_FUNCTION(irc); BIND_SHELL_FUNCTION(irc_init);
BIND_SHELL_FUNCTION(irc_join);
pci_scan(&find_rtl, -1, &rtl_device_pci); pci_scan(&find_rtl, -1, &rtl_device_pci);
if (!rtl_device_pci) { if (!rtl_device_pci) {
debug_print(ERROR, "No RTL 8139 found?"); debug_print(ERROR, "No RTL 8139 found?");