From 5ca9287182092530dc206fa1af13fbe19cc357d1 Mon Sep 17 00:00:00 2001 From: Geert Date: Sat, 31 May 2014 02:12:44 +0200 Subject: [PATCH] Kill servertest/ --- servertest/Makefile.am | 7 - servertest/server.c | 450 ----------------------------------------- 2 files changed, 457 deletions(-) delete mode 100644 servertest/Makefile.am delete mode 100644 servertest/server.c diff --git a/servertest/Makefile.am b/servertest/Makefile.am deleted file mode 100644 index 7ae23c59..00000000 --- a/servertest/Makefile.am +++ /dev/null @@ -1,7 +0,0 @@ -bin_PROGRAMS = ircserver - -INCLUDES = $(GLIB_CFLAGS) -I$(top_srcdir)/src - -ircserver_LDADD = $(GLIB_LIBS) ../src/core/network.o - -ircserver_SOURCES = server.c diff --git a/servertest/server.c b/servertest/server.c deleted file mode 100644 index 114da426..00000000 --- a/servertest/server.c +++ /dev/null @@ -1,450 +0,0 @@ -#include - -#include "core/network.h" - -#define FLOOD_TIMEOUT 1 - -typedef struct -{ - gchar *name; - GList *nicks; -} -SERVER_CHANNEL_REC; - -GList *channels; -gchar *clientnick, clienthost[MAX_IP_LEN]; - -GIOChannel *clienth; - -#ifdef MEM_DEBUG -/* we don't -lgmodule.. */ -#undef g_module_build_path -char *g_module_build_path(const char *dir, const char *module) -{ - return NULL; -} -#endif - -/* Read a line */ -gint read_line(GIOChannel *handle, GString *output, GString *buffer) -{ - gchar tmpbuf[512]; - gint recvlen, pos; - - g_return_val_if_fail(handle != NULL, -1); - g_return_val_if_fail(output != NULL, -1); - g_return_val_if_fail(buffer != NULL, -1); - - g_string_truncate(output, 0); - - recvlen = net_receive(handle, tmpbuf, sizeof(tmpbuf)-1); - - if (recvlen <= 0) - { - if (buffer->len > 0) - { - /* no new data got but still something in buffer.. */ - for (pos = 0; pos < buffer->len; pos++) - { - if (buffer->str[pos] == 13 || buffer->str[pos] == 10) - { - recvlen = 0; - break; - } - } - if (recvlen < 0 && buffer->len > 0) - { - /* connection closed and last line is missing \n .. - just add it so we can see if it had anything useful.. */ - recvlen = 0; - g_string_append_c(buffer, '\n'); - } - } - - if (recvlen < 0) return -1; - } - else - { - /* append received data to buffer */ - tmpbuf[recvlen] = '\0'; - g_string_append(buffer, tmpbuf); - } - - for (pos = 0; pos < buffer->len; pos++) - { - if (buffer->str[pos] == 13 || buffer->str[pos] == 10) - { - /* end of line */ - buffer->str[pos] = '\0'; - g_string_assign(output, buffer->str); - - if (buffer->str[pos] == 13 && buffer->str[pos+1] == 10) - { - /* skip \n too */ - pos++; - } - - g_string_erase(buffer, 0, pos+1); - return 1; - } - } - - /* EOL wasn't found, wait for more data.. */ - return 0; -} -void client_send(char *text) -{ - if (strlen(text) > 508) text[508] = 0; - net_transmit(clienth, text, strlen(text)); - net_transmit(clienth, "\r\n", 2); -} - -void makerand(char *str, int len) -{ - for (; len > 0; len--) - *str++ = (rand() % 20)+'A'; -} - -void makerand2(char *str, int len) -{ -#if 1 - gchar c; - - while (len > 0) - { - c = (rand() % 20)+ 'A'; - if (c != 0 && c != 13 && c != 10) - { - *str++ = c; - len--; - } - } -#else - makerand(str, len); -#endif -} - -void send_cmd(void) -{ - static gint nicks = 0; - GList *tmp; - char str[512]; - int pos; - - /* send msg to every channel */ - str[511] = '\0'; - for (tmp = g_list_first(channels); tmp != NULL; tmp = tmp->next) - { - SERVER_CHANNEL_REC *rec = tmp->data; - - makerand(str, 511); - str[0] = ':'; - str[10] = '!'; - str[20] = '@'; - - switch (rand() % 10) - { - case 0: - /* join */ - pos = 2+sprintf(str+2, "%d", nicks++); /* don't use same nick twice */ - str[pos] = '-'; - str[10] = '\0'; - g_list_append(rec->nicks, g_strdup(str+1)); - str[10] = '!'; - sprintf(str+30, " JOIN :%s", rec->name); - break; - case 1: - /* part */ - if (g_list_length(rec->nicks) > 1 && rand() % 3 == 0) - { - gchar *nick; - - nick = g_list_nth(rec->nicks, rand()%(g_list_length(rec->nicks)-1)+1)->data; - if (rand() % 3 == 0) - sprintf(str, ":kicker!some@where KICK %s %s :go away", rec->name, nick); - else if (rand() % 3 == 0) - sprintf(str, ":%s!dunno@where QUIT %s :i'm outta here", nick, rec->name); - else - sprintf(str, ":%s!dunno@where PART %s", nick, rec->name); - rec->nicks = g_list_remove(rec->nicks, nick); - g_free(nick); - } - else - str[0] = '\0'; - break; - case 2: - /* nick change */ - if (g_list_length(rec->nicks) > 1) - { - gchar *nick; - - nick = g_list_nth(rec->nicks, rand()%(g_list_length(rec->nicks)-1)+1)->data; - pos = sprintf(str, ":%s!dunno@where NICK ", nick); - str[pos] = '_'; - str[50] = '\0'; - rec->nicks = g_list_remove(rec->nicks, nick); - rec->nicks = g_list_append(rec->nicks, g_strdup(str+pos)); - g_free(nick); - } - else - str[0] = '\0'; - break; - case 3: - /* topic */ - pos = 30+sprintf(str+30, " TOPIC %s :", rec->name); - str[pos] = 'x'; - break; - case 4: - /* mode */ - sprintf(str+30, " MODE %s :%cnt", rec->name, (rand() & 1) ? '+' : '-'); - break; - case 5: - /* notice */ - pos = 30+sprintf(str+30, " NOTICE %s :", rec->name); - str[pos] = 'X'; - break; - case 6: - /* nick mode change */ - if (g_list_length(rec->nicks) > 1) - { - gchar *nick; - - nick = g_list_nth(rec->nicks, rand()%(g_list_length(rec->nicks)-1)+1)->data; - pos = sprintf(str, ":server MODE %s +%c %s", rec->name, rand()&1 ? 'o' : 'v', nick); - str[pos] = '_'; - str[50] = '\0'; - rec->nicks = g_list_remove(rec->nicks, nick); - rec->nicks = g_list_append(rec->nicks, g_strdup(str+pos)); - g_free(nick); - } - else - str[0] = '\0'; - break; - default: - pos = 30+sprintf(str+30, " PRIVMSG %s :", rec->name); - makerand2(str+pos, 511-pos); - if (rand() % 4 == 0) - { - pos += sprintf(str+pos, "\001ACTION "); - str[510] = 1; - } - else if (rand() % 10 == 0) - { - pos += sprintf(str+pos, "\001VERSION\001"); - pos++; - } - else if (rand() % 2 == 0) - { - pos += sprintf(str+pos, "%s: ", clientnick); - } - str[pos] = 'X'; - break; - } - - client_send(str); - } - makerand(str, 511); - str[0] = ':'; - str[10] = '!'; - str[20] = '@'; - switch (rand() % 11) - { - case 0: - /* join */ - if (g_list_length(channels) < 20) - { - SERVER_CHANNEL_REC *rec; - int n, pos; - - n = (rand()%20)+25; - pos = sprintf(str, ":%s!%s JOIN :", clientnick, clienthost); - str[pos] = '#'; - str[n] = '\0'; - - rec = g_new(SERVER_CHANNEL_REC, 1); - rec->name = g_strdup(str+pos); - rec->nicks = g_list_append(NULL, g_strdup(clientnick)); - - channels = g_list_append(channels, rec); - client_send(str); - - sprintf(str, ":server 353 %s = %s :@%s", clientnick, rec->name, clientnick); - client_send(str); - sprintf(str, ":server 366 %s %s :End of /NAMES list.", clientnick, rec->name); - } - else - str[0] = '\0'; - break; - case 1: - /* leave channel (by kick) */ - if (g_list_length(channels) > 3) - { - SERVER_CHANNEL_REC *chan; - - chan = g_list_nth(channels, rand()%g_list_length(channels))->data; - if (rand() % 3 != 0) - { - pos = sprintf(str, ":%s!%s PART %s :", clientnick, clienthost, chan->name); - str[pos] = 'x'; - } - else - { - str[0] = ':'; - sprintf(str+30, " KICK %s %s :byebye", chan->name, clientnick); - } - - g_free(chan->name); - g_list_foreach(chan->nicks, (GFunc) g_free, NULL); g_list_free(chan->nicks); - g_free(chan); - channels = g_list_remove(channels, chan); - } - else - str[0] = '\0'; - break; - case 2: - /* ctcp version */ - sprintf(str+30, " PRIVMSG %s :\001VERSION\001", clientnick); - break; - case 3: - /* ctcp ping */ - sprintf(str+30, " PRIVMSG %s :\001PING\001", clientnick); - break; - case 4: - /* user mode */ - sprintf(str+30, " MODE %s :%ciw", clientnick, (rand() & 1) ? '+' : '-'); - break; - case 5: - /* msg */ - pos = 30+sprintf(str+30, " PRIVMSG %s :", clientnick); - str[pos] = 'X'; - break; - case 6: - /* notice */ - pos = 30+sprintf(str+30, " NOTICE %s :", clientnick); - str[pos] = 'X'; - break; - case 7: - /* invite */ - pos = 30+sprintf(str+30, " INVITE %s ", clientnick); - str[pos] = 'X'; - break; - case 8: - /* error */ - pos = sprintf(str, ":server ERROR :"); - str[pos] = 'X'; - break; - case 9: - /* wallops */ - pos = sprintf(str, ":server WALLOPS :"); - str[pos] = 'X'; - break; - case 10: - /* ping */ - pos = sprintf(str, ":server PING :"); - str[pos] = 'X'; - break; - } - client_send(str); -} - -void handle_command(char *str) -{ - if (strncmp(str, "NICK ", 5) == 0) - { - clientnick = g_strdup(str+5); /* got the nick */ - } -} - -int main(void) -{ - static fd_set fdset; - struct timeval tv; - GIOChannel *serverh; - int port; - - srand(0); - port = 6660; - serverh = net_listen(NULL, &port); - if (serverh == NULL) - { - printf("listen()\n"); - return 1; - } - - clienth = NULL; channels = NULL; - for (;;) - { - FD_ZERO(&fdset); - if (clienth != NULL) FD_SET(g_io_channel_unix_get_fd(clienth), &fdset); - FD_SET(g_io_channel_unix_get_fd(serverh), &fdset); - - tv.tv_sec = 0; - tv.tv_usec = FLOOD_TIMEOUT; - if (select((g_io_channel_unix_get_fd(serverh) > g_io_channel_unix_get_fd(clienth) ? - g_io_channel_unix_get_fd(serverh) : g_io_channel_unix_get_fd(clienth))+1, &fdset, NULL, NULL, &tv) <= 0) - { - /* nothing happened, bug the client with some commands.. */ - if (clienth != NULL && clientnick != NULL) send_cmd(); - } - else - { - if (FD_ISSET(g_io_channel_unix_get_fd(serverh), &fdset)) - { - /* client connecting! */ - if (clienth != NULL) - { - /* only one client allowed.. */ - GIOChannel *handle; - - handle = net_accept(serverh, NULL, &port); - if (handle != NULL) - { - client_send("Only one client allowed"); - net_disconnect(handle); - continue; - } - } - else - { - IPADDR clientip; - - clienth = net_accept(serverh, &clientip, &port); - if (clienth != NULL) - { - net_ip2host(&clientip, clienthost); - client_send(":server 001 pla"); - client_send(":server 002 plapla"); - client_send(":server 003 plaplapla"); - client_send(":server 004 connected!"); - } - } - } - else - { - /* clients sending something.. */ - GString *str, *buf; - int ret; - - str = g_string_new(NULL); - buf = g_string_new(NULL); - do - { - ret = read_line(clienth, str, buf); - if (ret == -1) - { - /* client disconnected */ - net_disconnect(clienth); - clienth = NULL; - break; - } - if (ret == 1) handle_command(str->str); - } - while (ret == 1); - g_string_free(str, TRUE); - g_string_free(buf, TRUE); - } - } - } - - return 0; -}