if(ret == 0) return;
for (sock = sockets->data; sock; sock = sock->next) {
if((sock->flags & SOCKET_FLAG_CONNECTED) && FD_ISSET(sock->sock, &fds)) {
- printf("RECV FROM: %d", sock->sock);
if(sock->bufferpos != 0) {
bytes = read(sock->sock, buffer, sizeof(buffer));
if(bytes > 0) {
} else {
bytes = read(sock->sock, sock->buffer, sizeof(sock->buffer));
sock->buffer[bytes] = 0; //debug only
- printf("RECV %d: %s", bytes, sock->buffer);
if(bytes > 0)
sock->bufferpos = bytes;
}
}
}
+void
+putsock(struct ClientSocket *client, const char *text, ...)
+{
+ va_list arg_list;
+ char buffer[MAXLEN];
+ int pos;
+ if (!(client->flags & SOCKET_FLAG_CONNECTED)) return;
+ buffer[0] = '\0';
+ va_start(arg_list, text);
+ pos = vsnprintf(buffer, MAXLEN - 2, text, arg_list);
+ va_end(arg_list);
+ if (pos < 0 || pos > (MAXLEN - 2)) pos = MAXLEN - 2;
+ buffer[pos] = '\n';
+ buffer[pos+1] = '0';
+ write_socket(client, buffer, pos+1);
+}
+
int close_socket(struct ClientSocket *client);
int write_socket(struct ClientSocket *client, char* msg, int len);
void socket_loop(int timeout_seconds);
+void putsock(struct ClientSocket *client, const char *text, ...) PRINTF_LIKE(1, 2);
#endif
\ No newline at end of file
static void parse_line(struct ClientSocket *client, char *line) {
int i = 0, argc = 0;
char *argv[MAXNUMPARAMS];
- printf("[recv %lu] %s", (unsigned long) strlen(line), line);
+ printf("[recv %lu] %s\n", (unsigned long) strlen(line), line);
if(line[0] == ':')
i = 1;
else
static IRC_CMD(raw_001) {
client->flags |= SOCKET_FLAG_READY;
- write_socket(client, "PRIVMSG Watchcat :hi\n", 21);
+ putsock(client, "PRIVMSG Watchcat :hi");
+ return 1;
+}
+
+static IRC_CMD(raw_ping) {
+ if(argc == 0) return 0;
+ putsock(client, "POMG :%s", argv[0]);
return 1;
}
void parser_init() {
-
+ //all the raws we receive...
register_irc_function("001", raw_001);
-
+ register_irc_function("PING", raw_ping);
}
#include <unistd.h>
#include <netdb.h>
+#if __GNUC__
+#define PRINTF_LIKE(M,N) __attribute__((format (printf, M, N)))
+#else
+#define PRINTF_LIKE(M,N)
+#endif
+
#if __GNUC__ >= 2
#define UNUSED_ARG(ARG) ARG __attribute__((unused))
#elif defined(S_SPLINT_S)
#define REALLEN 50
#define TOPICLEN 500
#define CHANNELLEN 200
+#define MAXLEN 512
//valid nick chars
#define VALID_NICK_CHARS "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890{|}~[\\]^_`"