From 992b0f7bd918795432f936f87d362f247258bcca Mon Sep 17 00:00:00 2001 From: Pavol Rusnak Date: Fri, 12 Nov 2010 01:21:53 +0100 Subject: [PATCH] started to work on C rewrite to deploy directly on WRT --- Makefile | 9 +++++ brmdoor.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 Makefile create mode 100644 brmdoor.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9be5a83 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +CFLAGS=-Wall + +all: brmdoor + +clean: + rm -f brmdoor + +brmdoor: brmdoor.c + gcc $(CFLAGS) brmdoor.c -o brmdoor diff --git a/brmdoor.c b/brmdoor.c new file mode 100644 index 0000000..fa08f5e --- /dev/null +++ b/brmdoor.c @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2010 Pavol Rusnak + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include +#include +#include +#include +#include + +#define IRCSERVER "213.92.8.4" // irc.freenode.net +#define IRCPORT 6667 +#define IRCNICK "brmdoor" +#define IRCIDENT "brmdoor" +#define IRCHOST "brmlab.cz" +#define IRCCHAN "#kvak" +#define IRCNAME "brmlab door" + +#define IRCJOINCMD "USER " IRCIDENT " " IRCHOST " " IRCNICK " :" IRCNAME "\r\nNICK " IRCNICK "\r\nJOIN " IRCCHAN "\r\n" + +#define BUFSIZE 1024 +char buf[BUFSIZE]; + +void do_irc(int o) +{ + struct sockaddr_in sa; + int res; + int fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + if (-1 == fd) + return; + memset(&sa, 0, sizeof(sa)); + sa.sin_family = AF_INET; + sa.sin_port = htons(IRCPORT); + res = inet_pton(AF_INET, IRCSERVER, &sa.sin_addr); + if (0 >= res) { + close(fd); + return; + } + if (-1 == connect(fd, (struct sockaddr *)&sa, sizeof(sa))) { + close(fd); + return; + } + + +/* + + $topic = ''; + while (!feof($fp)) { + $line = fgets($fp,256); + $data = explode(' ', $line, 5); + if ($data[1] == '366') break; + if ($data[1] == '332') { + $topic = $data[4]; + break; + } + } + + if (!$topic) { + $topic = $open ? 'BRMLAB OPEN' : 'BRMLAB CLOSED'; + } else { + $topic = explode('|', $topic, 2); + @ $topic = ($open ? 'BRMLAB OPEN' : 'BRMLAB CLOSED') . ' | ' . trim($topic[1]); + } + + fwrite($fp, "TOPIC $chan :$topic\r\n"); + while (!feof($fp)) { + $line = fgets($fp,256); + $data = explode(' ', $line, 3); + if ($data[1] == 'TOPIC') break; + } + + +*/ + + shutdown(fd, SHUT_RDWR); + close(fd); +} + +int main(int argc, char **argv) +{ + if (argc < 2 || (argv[1][0] & 0xFE) != 0x30 ) // first arg is not 0 or 1 + { + printf("\nUsage: brmdoor [0|1]\n\n"); + return 1; + } + + switch (argv[1][0]) { + case '0': + do_irc(0); + break; + case '1': + do_irc(1); + break; + } + + return 0; +}