Added support for CTCP VERSION queries
diff --git a/contiki/apps/ircc.c b/contiki/apps/ircc.c
index c53d8c6..bc05eff 100644
--- a/contiki/apps/ircc.c
+++ b/contiki/apps/ircc.c
@@ -2,6 +2,8 @@
#include "contiki.h"
#include "ircc.h"
+#include "irc-conf.h"
+
#include "ircc-strings.h"
#include <string.h>
@@ -59,13 +61,13 @@
SOCKET_BEGIN(&s->s);
ptr = s->outputbuf;
- ptr = copystr(ptr, ircc_nick, sizeof(s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_nick, sizeof(s->outputbuf));
ptr = copystr(ptr, s->nick, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_crnl_user, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_crnl_user, sizeof(s->outputbuf) - (ptr - s->outputbuf));
ptr = copystr(ptr, s->nick, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_contiki, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_contiki, sizeof(s->outputbuf) - (ptr - s->outputbuf));
ptr = copystr(ptr, s->server, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_colon_contiki, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_colon_contiki, sizeof(s->outputbuf) - (ptr - s->outputbuf));
SEND_STRING(&s->s, s->outputbuf);
@@ -77,9 +79,9 @@
{
SOCKET_BEGIN(&s->s);
- SEND_STRING(&s->s, ircc_join_);
+ SEND_STRING(&s->s, ircc_strings_join);
SEND_STRING(&s->s, s->channel);
- SEND_STRING(&s->s, ircc_crnl);
+ SEND_STRING(&s->s, ircc_strings_crnl);
ircc_sent(s);
@@ -91,9 +93,9 @@
{
SOCKET_BEGIN(&s->s);
- SEND_STRING(&s->s, ircc_part_);
+ SEND_STRING(&s->s, ircc_strings_part);
SEND_STRING(&s->s, s->channel);
- SEND_STRING(&s->s, ircc_crnl);
+ SEND_STRING(&s->s, ircc_strings_crnl);
ircc_sent(s);
@@ -105,9 +107,9 @@
{
SOCKET_BEGIN(&s->s);
- SEND_STRING(&s->s, ircc_list_);
+ SEND_STRING(&s->s, ircc_strings_list);
SEND_STRING(&s->s, s->channel);
- SEND_STRING(&s->s, ircc_crnl);
+ SEND_STRING(&s->s, ircc_strings_crnl);
ircc_sent(s);
@@ -122,11 +124,11 @@
SOCKET_BEGIN(&s->s);
ptr = s->outputbuf;
- ptr = copystr(ptr, ircc_privmsg, sizeof(s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_privmsg, sizeof(s->outputbuf));
ptr = copystr(ptr, s->channel, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_colon, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_colon, sizeof(s->outputbuf) - (ptr - s->outputbuf));
ptr = copystr(ptr, s->msg, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_crnl, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_crnl, sizeof(s->outputbuf) - (ptr - s->outputbuf));
SEND_STRING(&s->s, s->outputbuf);
@@ -143,12 +145,12 @@
SOCKET_BEGIN(&s->s);
ptr = s->outputbuf;
- ptr = copystr(ptr, ircc_privmsg, sizeof(s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_privmsg, sizeof(s->outputbuf));
ptr = copystr(ptr, s->channel, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_colon, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_action, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_colon, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_action, sizeof(s->outputbuf) - (ptr - s->outputbuf));
ptr = copystr(ptr, s->msg, sizeof(s->outputbuf) - (ptr - s->outputbuf));
- ptr = copystr(ptr, ircc_actioncrnl, sizeof(s->outputbuf) - (ptr - s->outputbuf));
+ ptr = copystr(ptr, ircc_strings_ctcpcrnl, sizeof(s->outputbuf) - (ptr - s->outputbuf));
SEND_STRING(&s->s, s->outputbuf);
@@ -276,6 +278,8 @@
parse_command();
parse_params();
+ /* printf("user %s host %s name %s command %s middle %s trailing %s\n",
+ r.user, r.host, r.name, r.command, r.middle, r.trailing);*/
}
/*---------------------------------------------------------------------------*/
@@ -294,7 +298,7 @@
s->inputbuf[SOCKET_DATALEN(&s->s)] = 0;
- if(strncmp(s->inputbuf, ircc_ping, 5) == 0) {
+ if(strncmp(s->inputbuf, ircc_strings_ping, 5) == 0) {
strncpy(s->outputbuf, s->inputbuf, sizeof(s->outputbuf));
/* Turn "PING" into "PONG" */
@@ -313,12 +317,36 @@
}
}
- if(r.command != NULL && strncmp(r.command, ircc_join_, 4) == 0) {
- ircc_text_output(s, "Joined channel", r.name);
- } else if(r.command != NULL && strncmp(r.command, ircc_part_, 4) == 0) {
+ if(r.command != NULL && strncmp(r.command, ircc_strings_join, 4) == 0) {
+ ircc_text_output(s, "Joined channel", r.name);
+ } else if(r.command != NULL && strncmp(r.command, ircc_strings_part, 4) == 0) {
ircc_text_output(s, "Left channel", r.name);
- } else {
- ircc_text_output(s, r.name, r.trailing);
+ } else if(r.trailing != NULL) {
+ if(strncmp(r.trailing, ircc_strings_action,
+ strlen(ircc_strings_action)) == 0) {
+ ptr = strchr(&r.trailing[1], 1);
+ if(ptr != NULL) {
+ *ptr = 0;
+ }
+
+ ircc_text_output(s, r.name,
+ &r.trailing[strlen(ircc_strings_action)]);
+ } else if(strncmp(r.trailing, ircc_strings_version_query,
+ strlen(ircc_strings_version_query)) == 0) {
+ if(r.name != NULL) {
+ strncpy(s->outputbuf, r.name, sizeof(s->outputbuf));
+ SEND_STRING(&s->s, ircc_strings_notice);
+ /* user is temporarily stored in outputbuf. */
+ SEND_STRING(&s->s, s->outputbuf);
+ SEND_STRING(&s->s, ircc_strings_colon);
+ SEND_STRING(&s->s, ircc_strings_version);
+ SEND_STRING(&s->s, ircc_strings_version_string);
+ SEND_STRING(&s->s, IRC_CONF_SYSTEM_STRING);
+ SEND_STRING(&s->s, ircc_strings_ctcpcrnl);
+ }
+ } else {
+ ircc_text_output(s, r.name, r.trailing);
+ }
}
}
}
@@ -414,7 +442,6 @@
if(s->conn == NULL) {
return NULL;
}
- uip_set_mss(s->conn, 120);
s->server = servername;
s->nick = nick;
return s;