summaryrefslogtreecommitdiff
path: root/kris
diff options
context:
space:
mode:
Diffstat (limited to 'kris')
l---------kris/Makefile1
l---------kris/config.mk1
-rw-r--r--kris/sic.c215
-rw-r--r--kris/util.c86
4 files changed, 0 insertions, 303 deletions
diff --git a/kris/Makefile b/kris/Makefile
deleted file mode 120000
index d0b0e8e..0000000
--- a/kris/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../Makefile \ No newline at end of file
diff --git a/kris/config.mk b/kris/config.mk
deleted file mode 120000
index f2cf390..0000000
--- a/kris/config.mk
+++ /dev/null
@@ -1 +0,0 @@
-../config.mk \ No newline at end of file
diff --git a/kris/sic.c b/kris/sic.c
deleted file mode 100644
index 7835fec..0000000
--- a/kris/sic.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* ? 2005-2007 Anselm R. Garbe <garbeam at gmail dot com>
- * ? 2007 Kris Maglione <fbsdaemon@gmail.com>
- * ? 2005 Nico Golde <nico at ngolde dot de>
- * See LICENSE file for license details.
- */
-#include <ctype.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-
-#define nil ((void*)0)
-typedef unsigned short ushort;
-
-#define PINGTIMEOUT 300
-
-static char* host = "irc.oftc.net";
-static char* port = "ircd";
-static char* password;
-static char nick[32];
-
-static char bufin[4096];
-static char bufout[4096];
-static char channel[256];
-static time_t trespond;
-static FILE *srv;
-
-#include "util.c"
-
-static void
-pout(char *channel, char *fmt, ...) {
- static char timestr[18];
- time_t t;
-
- va_buf(bufout, fmt);
-
- t = time(nil);
- strftime(timestr, sizeof timestr, "%D %R", localtime(&t));
- fprintf(stdout, "%-12s: %s %s\n", channel, timestr, bufout);
-}
-
-static void
-sout(char *fmt, ...) {
- va_buf(bufout, fmt);
- fprintf(srv, "%s\r\n", bufout);
-}
-
-static void
-privmsg(char *channel, char *msg) {
- if(channel[0] == '\0') {
- pout("", "No channel to send to");
- return;
- }
- pout(channel, "<%s> %s", nick, msg);
- sout("PRIVMSG %s :%s", channel, msg);
-}
-
-static void
-parsein(char *msg) {
- char *p;
- char c;
-
- if(msg[0] == '\0')
- return;
- msg = ctok(&msg, '\n');
- if(msg[0] != ':') {
- privmsg(channel, msg);
- return;
- }
- c = *++msg;
- if(!c || !isspace(msg[1]))
- sout("%s", msg);
- else {
- if(msg[1])
- msg += 2;
- switch(c) {
- case 'j':
- sout("JOIN %s", msg);
- if(channel[0] == '\0')
- strlcpy(channel, msg, sizeof channel);
- break;
- case 'l':
- p = tok(&msg);
- if(!*p)
- p = channel;
- if(!*msg)
- msg = "sic - 250 LOC are too much!";
- sout("PART %s :%s", p, msg);
- break;
- case 'm':
- p = tok(&msg);
- privmsg(p, msg);
- break;
- case 's':
- strlcpy(channel, msg, sizeof channel);
- break;
- default:
- sout("%c %s", c, msg);
- break;
- }
- }
-}
-
-static void
-parsesrv(char *msg) {
- char *cmd, *p, *usr, *txt;
-
- usr = host;
- if(!msg || !*msg)
- return;
- if(msg[0] == ':') {
- msg++;
- p = tok(&msg);
- if(!*msg)
- return;
- usr = ctok(&p, '!');
- }
- txt = ctok(&msg, '\r');
- msg = ctok(&txt, ':');
- cmd = tok(&msg);
- if(!strcmp("PONG", cmd))
- return;
- if(!strcmp("PRIVMSG", cmd))
- pout(msg, "<%s> %s", usr, txt);
- else if(!strcmp("PING", cmd))
- sout("PONG %s", txt);
- else {
- pout(usr, ">< %s: %s", cmd, txt);
- if(!strcmp("NICK", cmd) && !strcmp(usr, nick))
- strlcpy(nick, txt, sizeof nick);
- }
-}
-
-int
-main(int argc, char *argv[]) {
- int i, c;
- struct timeval tv;
- fd_set rd;
-
- strlcpy(nick, getenv("USER"), sizeof nick);
- for(i = 1; i < argc; i++) {
- c = argv[i][1];
- if(argv[i][0] != '-' || argv[i][2])
- c = -1;
- switch(c) {
- case 'h':
- if(++i < argc) host = argv[i];
- break;
- case 'p':
- if(++i < argc) port = argv[i];
- break;
- case 'n':
- if(++i < argc) strlcpy(nick, argv[i], sizeof nick);
- break;
- case 'k':
- if(++i < argc) password = argv[i];
- break;
- case 'v':
- eprint("sic-"VERSION", ©2005-2009 Kris Maglione, Anselm R. Garbe, Nico Golde\n");
- default:
- eprint("usage: sic [-h host] [-p port] [-n nick] [-k keyword] [-v]\n");
- }
- }
-
- /* init */
- i = dial(host, port);
- srv = fdopen(i, "r+");
-
- /* login */
- if(password)
- sout("PASS %s", password);
- sout("NICK %s", nick);
- sout("USER %s localhost %s :%s", nick, host, nick);
- fflush(srv);
-
- setbuf(stdout, nil);
- setbuf(srv, nil);
-
- for(;;) { /* main loop */
- FD_ZERO(&rd);
- FD_SET(0, &rd);
- FD_SET(fileno(srv), &rd);
- tv.tv_sec = 120;
- tv.tv_usec = 0;
- i = select(fileno(srv) + 1, &rd, 0, 0, &tv);
- if(i < 0) {
- if(errno == EINTR)
- continue;
- eprint("sic: error on select():");
- }
- else if(i == 0) {
- if(time(nil) - trespond >= PINGTIMEOUT)
- eprint("sic shutting down: parse timeout\n");
- sout("PING %s", host);
- continue;
- }
- if(FD_ISSET(fileno(srv), &rd)) {
- if(fgets(bufin, sizeof bufin, srv) == nil)
- eprint("sic: remote host closed connection\n");
- parsesrv(bufin);
- trespond = time(nil);
- }
- if(FD_ISSET(0, &rd)) {
- if(fgets(bufin, sizeof bufin, stdin) == nil)
- eprint("sic: broken pipe\n");
- parsein(bufin);
- }
- }
- return 0;
-}
-
-
diff --git a/kris/util.c b/kris/util.c
deleted file mode 100644
index 33d5693..0000000
--- a/kris/util.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <netdb.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-
-#define va_buf(buf, fmt) {\
- va_list ap; \
- va_start(ap, fmt); \
- vsnprintf(buf, sizeof buf, fmt, ap); \
- va_end(ap); \
-}
-
-static void
-eprint(const char *fmt, ...) {
-
- va_buf(bufout, fmt);
- fprintf(stderr, "%s", bufout);
-
- if(fmt[0] && fmt[strlen(fmt)-1] == ':')
- fprintf(stderr, " %s\n", strerror(errno));
- exit(1);
-}
-
-static int
-dial(char *host, char *port) {
- static struct addrinfo hints;
- struct addrinfo *res, *r;
- int srv;
-
- memset(&hints, 0, sizeof hints);
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
- if(getaddrinfo(host, port, &hints, &res) != 0)
- eprint("error: cannot resolve hostname '%s':", host);
- for(r = res; r; r = r->ai_next) {
- if((srv = socket(r->ai_family, r->ai_socktype, r->ai_protocol)) == -1)
- continue;
- if(connect(srv, r->ai_addr, r->ai_addrlen) == 0)
- break;
- close(srv);
- }
- freeaddrinfo(res);
- if(!r)
- eprint("error: cannot connect to host '%s'\n", host);
- return srv;
-}
-
-#define strlcpy _strlcpy
-static void
-strlcpy(char *to, const char *from, int l) {
- memccpy(to, from, '\0', l);
- to[l-1] = '\0';
-}
-
-static void
-eat(char **s, int (*p)(int), int r) {
- char *q;
-
- for(q=*s; *q && p(*q) == r; q++)
- ;
- *s = q;
-}
-
-static char*
-tok(char **s) {
- char *p;
-
- eat(s, isspace, 1);
- p = *s;
- eat(s, isspace, 0);
- if(**s) *(*s)++ = '\0';
- return p;
-}
-
-static char*
-ctok(char **s, int c) {
- char *p, *q;
-
- q = *s;
- for(p=q; *p && *p != c; p++)
- ;
- if(*p) *p++ = '\0';
- *s = p;
- return q;
-}
-
-