aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBertrand Jacquin (Beber) <beber@setibzh.com>2006-01-31 08:56:40 +0100
committerBertrand Jacquin (Beber) <beber@setibzh.com>2006-01-31 08:56:40 +0100
commita0ee1d23a9b4cc0eb3507985254302e593d0465f (patch)
tree09b9494cf21bf1928f970bb1c74b6cd0df16331e
parenterm, don'(t push a symlink (diff)
downloadespik-a0ee1d23a9b4cc0eb3507985254302e593d0465f.tar.xz
Missing files
-rw-r--r--src/espik_irc.c296
-rw-r--r--src/espik_irc.h29
-rw-r--r--src/espik_net.c181
-rw-r--r--src/espik_net.h12
4 files changed, 518 insertions, 0 deletions
diff --git a/src/espik_irc.c b/src/espik_irc.c
new file mode 100644
index 0000000..dbe962d
--- /dev/null
+++ b/src/espik_irc.c
@@ -0,0 +1,296 @@
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <Ecore.h>
+/*#include <Ecore_Con.h>*/
+
+#include "espik_global.h"
+#include "espik_irc.h"
+#include "espik_error.h"
+/*#include "espik_common_handler.h"*/
+#include "espik_net.h"
+#include "espik_debug.h"
+#include "espik.h"
+
+char* current_chan;
+
+typedef struct
+{
+ char* cmd_name;
+ char* (*format) (char *dest, char *msg);
+} cmd_t;
+
+cmd_t cmd_tab[] = {
+ { "JOIN", irc_join },
+ { "PART", irc_part },
+ { "PRIVMSG", irc_privmsg },
+ { "QUIT", irc_quit },
+ { "RAW", irc_raw },
+ { "NICK", irc_nick },
+/* { "ACTION", irc_action }, */
+ { 0, 0 }
+};
+
+/* Cut the commandline in two string
+ * 1: The first word
+ * 2: The rest (without any trailer whitespace between firt and rest).
+ */
+char** separate_commandline (char *msg)
+{
+ unsigned int len;
+ char** two_words;
+ espik_enter();
+
+ /* Yes, do nothing, just get len ! */
+ for (len = 0 ; msg[len] != ' ' && msg[len] != '\t' ; len++);
+
+ two_words = malloc (2 * sizeof(char*));
+
+ msg[len] = '\0';
+ two_words[0] = msg;
+
+ do
+ {
+ two_words[1] = msg + ++len;
+ }
+ while (*two_words[1] == ' ' || *two_words[1] == '\t');
+
+ espik_leave();
+ return (two_words);
+}
+
+#if 0
+void string_upper (char *str)
+{
+ unsigned int len, i;
+ espik_enter();
+
+ len = strlen (str);
+
+ for (i = 0; i < len; i++)
+ {
+ if (str[i] >= 0x61 && str[i] <= 0x7A)
+ str[i] -= 0x20;
+ }
+ espik_debug_print ("string_upper: %s", str);
+ espik_leave();
+}
+#endif
+
+unsigned short sendmsg_len (char* msg)
+{
+ espik_enter();
+ espik_leave();
+ return (strlen (msg) + 2);
+}
+
+buf_t make_buffer(int len)
+{
+ buf_t buf;
+ espik_enter();
+
+ buf.buf = malloc (len);
+ buf.len = len + 1; /* Alloc trailing \0 */
+
+ espik_leave();
+ return (buf);
+}
+
+char* irc_privmsg (char* chan, char* msg)
+{
+ buf_t out;
+ espik_enter();
+
+ out = make_buffer (strlen ("PRIVMSG") + 1 /* "PRIVMSG " */
+ + strlen (chan) + 2 /* ":<channel> "*/
+ + strlen (msg)); /* "<msg>EOF" */
+
+ snprintf (out.buf, out.len, "PRIVMSG %s :%s", chan, msg);
+
+ free (msg);
+ espik_leave();
+ return (out.buf);
+}
+
+char* irc_join (char* chan __UNUSED__, char* msg)
+{
+ buf_t out;
+ espik_enter();
+
+ /* Could also by '&' and so one ...
+ * have to look on RFC, dev will be done with # only */
+ if (msg[0] != '#')
+ {
+ espik_debug_print ("%s is not a channel", msg);
+ espik_debug_print ("Usage: /JOIN #channel");
+ espik_leave();
+ return (0);
+ }
+
+ out = make_buffer (strlen ("JOIN") + 1 /* "JOIN " */
+ + strlen (msg)); /* "<msg>EOF" */
+
+ snprintf (out.buf, out.len, "JOIN %s", msg);
+
+ free (msg);
+ espik_leave();
+ return (out.buf);
+}
+
+char* irc_part (char* chan, char* msg)
+{
+ buf_t out;
+ espik_enter();
+
+ if (msg[0] != '#')
+ {
+ out = make_buffer (strlen ("PART") + 1 /* "PART " */
+ + strlen (chan) + 2 /* ":<chan> " */
+ + strlen (msg)); /* "<msg>EOF" */
+
+ snprintf (out.buf, out.len, "PART %s :%s", chan, msg);
+ }
+ else
+ {
+ char** sep;
+
+ sep = separate_commandline (msg);
+
+ out = make_buffer (strlen ("PART") + 1 /* "PART " */
+ + strlen (sep[0]) + 2 /* ":<chan> "*/
+ + strlen (sep[1])); /* "<msg>EOF"*/
+
+ snprintf (out.buf, out.len, "PART %s :%s", sep[0], sep[1]);
+ }
+
+ free (msg);
+ espik_leave();
+ return (out.buf);
+}
+
+char* irc_quit (char* chan __UNUSED__, char* msg)
+{
+ buf_t out;
+ espik_enter();
+
+ out = make_buffer (strlen ("QUIT") + 2 /* "QUIT :" */
+ + strlen (msg)); /* "<msg>EOF" */
+
+ snprintf (out.buf, out.len, "QUIT :%s", msg);
+
+ espik_debug_print ("msg : %s\nout: %s", msg, out.buf);
+
+ /*
+ espik_raw_send (out);
+ espik_con_shutdown ();
+
+ irc_disconnect(sock);
+ */
+ free (msg);
+
+ espik_leave();
+ return (out.buf);
+}
+
+char* irc_raw (char* chan __UNUSED__, char* msg)
+{
+ espik_enter();
+ espik_leave();
+ return (msg);
+}
+
+char* irc_nick (char* chan __UNUSED__, char* nick)
+{
+ espik_enter();
+ buf_t out;
+
+ out = make_buffer (strlen ("NICK") + 1 /* "NICK " */
+ + strlen (nick)); /* "<nick>EOF" */
+
+ snprintf (out.buf, out.len, "NICK %s", nick);
+
+ espik_debug_print ("NICK CHANGED REQUEST: %s", nick);
+
+ espik_leave();
+ return (out.buf);
+}
+
+#if 0
+Ecore_Con_Server* irc_connect (char* host __UNUSED__, int port __UNUSED__)
+{
+ espik_enter();
+ espik_leave();
+ return (NULL);
+}
+
+void irc_disconnect (Ecore_Con_Server *sock)
+{
+ espik_enter();
+ espik_debug_print ("> irc_disconnect");
+ ecore_main_loop_quit ();
+ espik_debug_print ("< irc_disconnect");
+ espik_leave();
+}
+#endif
+
+char* irc_send (char* msg)
+{
+ char* out;
+ espik_enter();
+
+ out = NULL;
+
+ current_chan = "#e.fr";
+
+ if (msg[0] == '/')
+ {
+ char** cmd_and_message;
+ cmd_t* cmd;
+
+ cmd_and_message = separate_commandline (msg + 1);
+
+ /*
+ espik_debug_print ("irc_send: <separate_commandline");
+ */
+
+ /*
+ string_upper (cmd_and_message[0]);
+ */
+
+ for (cmd = cmd_tab; cmd->cmd_name != 0; cmd++)
+ {
+ if ((strcasecmp (cmd_and_message[0], cmd->cmd_name)) == 0)
+ {
+ out = cmd->format (current_chan,
+ cmd_and_message[1]);
+ free (msg);
+ /* Why do job after found the good to do ? */
+ break;
+ }
+ }
+ if (!out)
+ {
+ espik_debug_print ("%s is not a know command",
+ cmd_and_message[0]);
+ espik_leave();
+ return (0);
+ }
+ }
+ else
+ {
+ out = irc_privmsg (current_chan, msg);
+ }
+
+ if (!out)
+ {
+ free (msg);
+ espik_leave();
+ return (0);
+ }
+
+ espik_debug_print ("%s", out);
+
+ espik_leave();
+ return (out);
+}
diff --git a/src/espik_irc.h b/src/espik_irc.h
new file mode 100644
index 0000000..5d72095
--- /dev/null
+++ b/src/espik_irc.h
@@ -0,0 +1,29 @@
+#ifndef HAVE_ESPIK_IRC_H
+#define HAVE_ESPIK_IRC_H
+
+typedef struct
+{
+ char* buf;
+ int len;
+} buf_t;
+
+unsigned short sendmsg_len (char*);
+char* irc_send (char*);
+char* irc_privmsg (char*, char *);
+
+/*char* irc_action (char *, char *);*/
+char* irc_join (char*, char*);
+char* irc_part (char*, char*);
+char* irc_quit (char*, char*);
+char* irc_raw (char*, char*);
+char* irc_nick(char*, char*);
+
+char** separate_commandline (char*);
+buf_t make_buffer(int);
+/*void string_upper (char*);*/
+
+/*Ecore_Con_Server* irc_connect (char*, int);*/
+/*void irc_disconnect (Ecore_Con_Server*);*/
+
+
+#endif /* HAVE_ESPIK_IRC_H */
diff --git a/src/espik_net.c b/src/espik_net.c
new file mode 100644
index 0000000..d56f070
--- /dev/null
+++ b/src/espik_net.c
@@ -0,0 +1,181 @@
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+#include "espik_global.h"
+#include "espik_net.h"
+#include "espik_common_handler.h"
+#include "espik_error.h"
+#include "espik_debug.h"
+#include "espik_irc.h"
+#include "espik.h"
+
+#include <Ecore.h>
+#include <Ecore_Con.h>
+
+typedef int (*Handler_Func) (void* data, int ev_type, void* ev);
+
+static int ret_int; /* For debug */
+char connected = 0;
+
+Ecore_Con_Server* con_sock;
+
+Ecore_Event_Handler* ret;
+
+void espik_con_init (t_info serv_info)
+{
+ int nb_launch;
+ espik_enter();
+
+ nb_launch = ecore_con_init ();
+
+ com_active = 0;
+
+ /*
+ espik_debug_printf ("nb_launch = %d", nb_launch);
+ */
+
+ con_sock = ecore_con_server_connect (ECORE_CON_REMOTE_SYSTEM,
+ serv_info.server->host,
+ (int)serv_info.server->port, NULL);
+ if (!con_sock)
+ {
+ espik_debug_print ("ecore_con_server_connect failed "
+ "(ECORE_CON_REMOTE_SYSTEM)");
+ exit (-1);
+ }
+ espik_free (con_sock);
+
+ if (! (ret = ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DATA,
+ (Handler_Func) server_data, NULL)))
+ {
+ espik_debug_print ("ecore_event_handler_add "
+ "(ECORE_CON_EVENT_SERVER_DATA)");
+ exit (-1);
+ }
+ espik_free (ret);
+
+ if (! (ret = ecore_event_handler_add (ECORE_CON_EVENT_SERVER_ADD,
+ (Handler_Func) espik_con_up, NULL)))
+ {
+ espik_debug_print ("ecore_event_handler_add "
+ "(ECORE_CON_EVENT_SERVER_ADD)");
+ exit (-1);
+ }
+ espik_free (ret);
+
+ if (! (ret = ecore_event_handler_add (ECORE_CON_EVENT_SERVER_DEL,
+ (Handler_Func) espik_con_shutdown, NULL)))
+ {
+ espik_debug_print ("ecore_event_handler_add "
+ "(ECORE_CON_EVENT_SERVER_DEL)");
+ exit (-1);
+ }
+ espik_free (ret);
+
+ espik_leave();
+}
+
+void send_login()
+{
+ espik_enter();
+// espik_debug_print ("<<<<<<<< DUMMMMY CODE >>>>>>>");
+
+ char *tmp, *tmp2;
+
+ tmp = malloc ( strlen("NICK ")
+ + strlen (a_infos.client->nickname));
+ tmp2 = malloc ( strlen("USER :")
+ + strlen(a_infos.client->nickname)*2
+ + strlen (a_infos.client->realname)
+ + strlen (a_infos.server->host));
+
+ sprintf (tmp, "NICK %s", a_infos.client->nickname);
+ sprintf (tmp2, "USER %s %s %s: %s", a_infos.client->nickname,
+ a_infos.client->nickname, a_infos.server->host,
+ a_infos.client->realname);
+
+ espik_debug_print("tmp: %s", tmp);
+ espik_raw_send (tmp);
+ espik_debug_print("tmp2: %s", tmp2);
+ espik_raw_send (tmp2);
+ espik_raw_send ("JOIN #e.fr");
+
+ com_active = 1;
+
+// espik_debug_print ("<<<<<<<< DUMMMMY CODE >>>>>>>");
+
+ free (tmp);
+ free (tmp2);
+
+ connected++;
+ espik_leave();
+}
+
+void espik_con_up()
+{
+ espik_enter();
+ printf ("Connected\n");
+ espik_leave();
+}
+
+void espik_con_shutdown ()
+{
+ espik_enter();
+
+ if (!connected)
+ espik_debug_print ("Unable to connect to server");
+
+ espik_debug_print ("ecore_con_server_del: %p",
+ ecore_con_server_del (con_sock));
+
+ ecore_con_shutdown ();
+
+ /*
+ ecore_event_handler_del (handler_list.data);
+ ecore_event_handler_del (handler_list.up);
+ ecore_event_handler_del (handler_list.down);
+ */
+
+ ecore_main_loop_quit ();
+ espik_free (server_dns);
+
+ espik_leave();
+}
+
+void espik_raw_send (const char *msg)
+{
+ buf_t buf;
+ espik_enter();
+
+ buf = make_buffer (strlen(msg) + 1); /* <MESSAGE>\r\n\0" */
+
+ snprintf (buf.buf, buf.len, "%s\r\n", msg);
+ /* Override trailing \0 */
+ espik_debug_print("strlen(msg): %d", strlen(msg));
+ espik_debug_print("buf.len: %d", buf.len);
+ buf.buf[buf.len-1] = '\n';
+// buf.buf[buf.len] = '\0';
+
+ espik_debug_print ("\n\nmsg(%d): %s\n\nout(%d-%d): %s\n", strlen(msg), msg, strlen(buf.buf), buf.len, buf.buf);
+ /*
+ printf ("out[len-3]: 0x%X\n", out[len - 3]);
+ printf ("out[len-2]: 0x%X\n", out[len - 2]);
+ printf ("out[len-1]: 0x%X\n", out[len - 1]);
+ */
+
+ int i;
+ for (i = 0 ; buf.buf[i] != 0 ; i++)
+ {
+ espik_debug_print ("buf.buf[%d]: '%d'", i, buf.buf[i]);
+ }
+
+
+ ret_int = ecore_con_server_send (con_sock, buf.buf, buf.len);
+
+ espik_debug_print ("ret_int: %d", ret_int);
+ free (buf.buf);
+// free (msg);
+ espik_leave();
+}
diff --git a/src/espik_net.h b/src/espik_net.h
new file mode 100644
index 0000000..a095ba9
--- /dev/null
+++ b/src/espik_net.h
@@ -0,0 +1,12 @@
+#ifndef HAVE_ESPIK_NET_H
+#define HAVE_ESPIK_NET_H
+
+#include "espik.h"
+
+void espik_raw_send (const char*);
+void espik_con_init (t_info);
+void espik_con_up();
+void espik_con_shutdown ();
+void send_login();
+
+#endif /* HAVE_ESPIK_NET_H */