summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--msg_sender/Makefile9
-rw-r--r--msg_sender/Makefile.CE26
-rw-r--r--msg_sender/Makefile.inc30
-rw-r--r--msg_sender/gui.c409
-rw-r--r--msg_sender/gui.h26
-rw-r--r--msg_sender/handler.c58
-rw-r--r--msg_sender/handler.h10
-rw-r--r--msg_sender/msg_sender.c263
-rw-r--r--msg_sender/msg_sender.h22
-rw-r--r--receiver/Makefile9
-rw-r--r--receiver/Makefile.CE26
-rw-r--r--receiver/Makefile.inc28
-rw-r--r--receiver/receiver.c133
-rw-r--r--sender/Makefile9
-rw-r--r--sender/Makefile.CE21
-rw-r--r--sender/Makefile.inc30
-rw-r--r--sender/sender.c176
17 files changed, 1285 insertions, 0 deletions
diff --git a/msg_sender/Makefile b/msg_sender/Makefile
new file mode 100644
index 0000000..8b00324
--- /dev/null
+++ b/msg_sender/Makefile
@@ -0,0 +1,9 @@
+include Makefile.inc
+
+all: $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -o gui$(SUFFIX)
+
+
+prepare: $(OBJECTS_PREPARE)
+ $(CC) $(CFLAGS) -g $(LDFLAGS) $(OBJECTS_PREPARE) $(LIBS) -lm -o prepare
+
diff --git a/msg_sender/Makefile.CE b/msg_sender/Makefile.CE
new file mode 100644
index 0000000..63f7230
--- /dev/null
+++ b/msg_sender/Makefile.CE
@@ -0,0 +1,26 @@
+include Makefile.inc
+
+#OBJECTS += gps/gps_wince.o
+#OBJECTS += gps/nmea.o
+#OBJECTS += wince/display.o
+#OBJECTS += libircclient.o
+
+#OBJECTS += rc/ueberall.rsc
+
+CC = gcc
+#WINDRES = arm-wince-mingw32ce-windres
+#LDFLAGS = -Wl#,--enable-auto-import
+#SUFFIX = .exe
+
+#CFLAGS += -DWINCE
+#CFLAGS += -DGPS_LOG
+
+
+rc/ueberall.rsc: rc/ueberall.rc
+ $(WINDRES) $? $@
+
+all: $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -lws2 -o gui$(SUFFIX)
+
+install: all
+ cp gui.exe $(WINCE_PATH)/bin
diff --git a/msg_sender/Makefile.inc b/msg_sender/Makefile.inc
new file mode 100644
index 0000000..4b7d74c
--- /dev/null
+++ b/msg_sender/Makefile.inc
@@ -0,0 +1,30 @@
+###########
+# settings
+###########
+
+CFLAGS = -g -Wall
+INCLUDES = -I../include
+LIBS = -ledje -lecore -levas -lelementary -lcrypto -lircclient
+
+
+###########
+# objects
+###########
+
+OBJECTS = msg_sender.o
+OBJECTS += gui.o
+OBJECTS += handler.o
+
+##################
+# rules
+##################
+
+%.o: %.c
+ $(CC) $(CFLAGS) $(INCLUDES) -c -o $@ $<
+
+clean:
+ rm -rf $(OBJECTS) $(OBJECTS_PREPARE) gui$(SUFFIX)
+# $(MAKE) -C themes clean
+# $(MAKE) -C vkbd clean
+
+
diff --git a/msg_sender/gui.c b/msg_sender/gui.c
new file mode 100644
index 0000000..374a4ad
--- /dev/null
+++ b/msg_sender/gui.c
@@ -0,0 +1,409 @@
+#include <stdlib.h>
+#include <time.h>
+#include "Evas.h"
+#include "Ecore.h"
+#include "Ecore_Evas.h"
+#include "Elementary.h"
+
+#include "msg_sender.h"
+#include "gui.h"
+#include "handler.h"
+
+int h = 600;
+int w = 450;
+
+int first = 0;
+int bubble_pos = 0;
+time_t now;
+const char* msg_text;
+char *from, *to, *current_msg, *last_msg;
+
+static Evas_Object *win;
+
+static void
+on_cancel(void *data, Evas_Object *obj, void *event_info)
+{
+ /* cleanly exit */
+ elm_exit();
+}
+
+static void
+on_chat(void *data, Evas_Object *obj, void *event_info)
+{
+
+ init_window_parts();
+ init_buttons(obj, NULL);
+ init_toolbar(obj);
+
+}
+
+static void
+on_history(void *data, Evas_Object *obj, void *event_info)
+{
+
+ init_history();
+
+}
+
+static void
+on_options(void *data, Evas_Object *obj, void *event_info)
+{
+
+ init_options();
+
+}
+
+static void
+on_message(void *data, Evas_Object *obj, void *event_info)
+{
+
+ msg_text = elm_entry_entry_get(obj);
+ elm_entry_context_menu_clear(obj);
+
+}
+
+static void
+on_send_message(void *data, Evas_Object *bx3, void *event_info)
+{
+
+ printf("on_send_message: %s\n", msg_text);
+ set_txt_msg(msg_text);
+ Evas_Object *bb;
+
+ if (bubble_pos == 0)
+ {
+ bubble_pos = 100;
+ }
+
+ if (msg_text != NULL)
+ {
+ /* if its the first bubble */
+ if (first == 0)
+ {
+ bb = elm_bubble_add(bx3);
+ //elm_bubble_label_set(bb, "Username");
+ evas_object_resize(bb, w, h/7);
+ evas_object_move(bb, 0, 0);
+ evas_object_show(bb);
+ set_bubble_text(bb, "testuser", msg_text);
+
+ first = 1;
+ bubble_pos = bubble_pos + h/6;
+ }
+ else
+ {
+ bb = elm_bubble_add(bx3);
+ //elm_bubble_label_set(bb, "Username");
+ evas_object_resize(bb, w, h/6);
+ evas_object_move(bb, 0, bubble_pos);
+ evas_object_show(bb);
+ set_bubble_text(bb, "testuser", msg_text);
+
+ bubble_pos = bubble_pos + h/6;
+ }
+ printf("position: %d\n", bubble_pos);
+
+ if (bubble_pos >= 400)
+ {
+ bubble_pos = 100;
+ }
+ }
+}
+
+/* if message has been sent, print it in a bubble */
+static void show_message()
+{
+ //current_msg = get_text_msg();
+ last_msg = NULL;
+
+ if (current_msg != NULL && strcmp(current_msg, last_msg) != 0)
+ {
+ //print bubble with current_message in it!
+ }
+}
+/* returns the current system time */
+char*
+get_current_time()
+{
+
+ time_t now;
+ time(&now);
+ char *text = ctime(&now);
+ return text;
+
+}
+
+
+/* sets the username, time-text and the text in the bubble */
+void
+set_bubble_text(Evas_Object *bb, char *username, char *text)
+{
+
+ Evas_Object *cn;
+
+ /* sets the username */
+ elm_entry_entry_set(bb, username);
+
+ /* get time string and set it */
+ elm_bubble_info_set(bb, get_current_time());
+
+ /* create entry */
+ cn = elm_entry_add(bb);
+ elm_entry_entry_set(cn, text);
+ elm_entry_line_wrap_set(cn, 0);
+ evas_object_size_hint_weight_set(cn, 1.0, 1.0);
+
+ /* create overlay bubble with message string */
+ Evas_Object *inner_bb;
+ inner_bb = elm_bubble_add(bb);
+ elm_bubble_info_set(inner_bb, text);
+ evas_object_resize(bb, w, h/6);
+ evas_object_move(bb, 0, bubble_pos);
+ elm_bubble_content_set(bb, cn);
+ evas_object_show(bb);
+
+}
+
+void
+init_window_parts()
+{
+
+ Evas_Object *bg, *bx, *bx2, *bx3, *sc, *en;
+
+ /* add a standard bg */
+ bg = elm_bg_add(win);
+ /* not not allow bg to expand. let's limit dialog size to contents */
+ elm_win_resize_object_add(win, bg);
+ evas_object_show(bg);
+
+ /* add a box object - default is vertical. a box holds children in a row,
+ * either horizontally or vertically. nothing more. */
+ bx = elm_box_add(win);
+ evas_object_resize(bx, w, h*0.85);
+ evas_object_show(bx);
+
+ /* add horizontal box for buttons */
+ bx2 = elm_box_add(win);
+ elm_box_horizontal_set(bx2, 1);
+ elm_box_homogenous_set(bx2, 1);
+ elm_frame_content_set(bx, bx2);
+ evas_object_move(bx2, 0, h*0.93);
+ evas_object_resize(bx2, w, h*0.05);
+ //elm_box_pack_end(bx, bx2);
+ evas_object_show(bx2);
+
+ /* add box for incoming messages */
+ bx3 = elm_box_add(win);
+ evas_object_resize(bx3, w, h*0.15);
+ evas_object_move(bx3, 0, h*0.78);
+ evas_object_show(bx3);
+
+
+ sc = elm_scroller_add(win);
+ evas_object_size_hint_weight_set(sc, 1.0, 1.0);
+ evas_object_size_hint_align_set(sc, -1.0, -1.0);
+ elm_box_pack_end(bx3, sc);
+
+ en = elm_entry_add(win);
+ //if (text) elm_entry_entry_set(en, text);
+ //else elm_entry_entry_set(en, "");
+ evas_object_size_hint_weight_set(en, 1.0, 1.0);
+ evas_object_size_hint_align_set(en, 0.0, 0.0);
+ elm_scroller_content_set(sc, en);
+ evas_object_smart_callback_add(en, "changed", on_message, NULL);
+ evas_object_show(en);
+
+ evas_object_show(sc);
+
+ /* init buttons */
+ init_buttons(bx2, en);
+
+ /* init toolbar */
+ init_toolbar(win);
+}
+
+void init_toolbar()
+{
+
+ Evas_Object *tb, *ic, *bx;
+
+ /* add box for toolbar */
+ bx = elm_box_add(win);
+ evas_object_resize(bx, w, h*0.15);
+ evas_object_move(bx, 0, 0);
+ evas_object_show(bx);
+
+ tb = elm_toolbar_add(win);
+ evas_object_size_hint_weight_set(tb, 1.0, 0.0);
+ evas_object_size_hint_align_set(tb, -1.0, -1.0);
+
+ ic = elm_icon_add(win);
+ elm_icon_standard_set(ic, "chat");
+ elm_toolbar_item_add(tb, ic, "Chat", on_chat, NULL);
+ evas_object_show(ic);
+
+ ic = elm_icon_add(win);
+ elm_icon_standard_set(ic, "edit");
+ elm_toolbar_item_add(tb, ic, "Options", on_options, NULL);
+ evas_object_show(ic);
+
+ ic = elm_icon_add(win);
+ elm_icon_standard_set(ic, "clock");
+ elm_toolbar_item_add(tb, ic, "History", on_history, NULL);
+ evas_object_show(ic);
+
+// evas_object_show(ic);
+
+ elm_box_pack_end(bx, tb);
+ evas_object_show(tb);
+}
+
+void
+init_options()
+{
+
+ Evas_Object *bg, *bx, *bx2, *bt;
+
+ /* add a standard bg */
+ bg = elm_bg_add(win);
+ /* not not allow bg to expand. let's limit dialog size to contents */
+ elm_win_resize_object_add(win, bg);
+ evas_object_show(bg);
+
+ /* set toolbar again */
+ init_toolbar(bg);
+
+ bx = elm_box_add(win);
+ evas_object_size_hint_weight_set(bx, 1.0, 1.0);
+ evas_object_size_hint_align_set(bx, -1.0, -1.0);
+ evas_object_resize(bx, w, h);
+ evas_object_show(bx);
+
+ bx2 = elm_box_add(win);
+ elm_box_horizontal_set(bx2, 1);
+ evas_object_size_hint_weight_set(bx2, 1.0, 0.0);
+ evas_object_size_hint_align_set(bx2, -1.0, -1.0);
+ elm_box_pack_end(bx, bx2);
+ evas_object_show(bx2);
+
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, "Stell mich ein");
+ evas_object_size_hint_weight_set(bt, 1.0, 0.0);
+ evas_object_size_hint_align_set(bt, -1.0, -1.0);
+ elm_box_pack_end(bx2, bt);
+ evas_object_smart_callback_add(bt, "clicked", NULL, NULL);
+ evas_object_show(bt);
+}
+
+void
+init_history()
+{
+
+ Evas_Object *bg, *bx, *bx2, *bb;
+
+ /* add a standard bg */
+ bg = elm_bg_add(win);
+ /* not not allow bg to expand. let's limit dialog size to contents */
+ elm_win_resize_object_add(win, bg);
+ evas_object_show(bg);
+
+ /* set toolbar again */
+ init_toolbar(bg);
+
+ bx = elm_box_add(win);
+ evas_object_size_hint_weight_set(bx, 1.0, 1.0);
+ evas_object_size_hint_align_set(bx, -1.0, -1.0);
+ evas_object_resize(bx, w, h);
+ evas_object_show(bx);
+
+ bx2 = elm_box_add(win);
+ elm_box_horizontal_set(bx2, 1);
+ evas_object_size_hint_weight_set(bx2, 1.0, 0.0);
+ evas_object_size_hint_align_set(bx2, -1.0, -1.0);
+ elm_box_pack_end(bx, bx2);
+ evas_object_show(bx2);
+
+ bb = elm_bubble_add(bx2);
+ evas_object_resize(bb, w, h/7);
+ evas_object_move(bb, 0, 300);
+ evas_object_show(bb);
+ set_bubble_text(bb, "testuser", NULL);
+
+
+
+}
+
+
+void
+init_buttons(Evas_Object *box, Evas_Object *msg)
+{
+
+ Evas_Object *bt;
+
+ /* add ok button to box - fill and expand */
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, "Send Message");
+ evas_object_size_hint_weight_set(bt, 1.0, 1.0);
+ evas_object_size_hint_align_set(bt, -1.0, -1.0);
+ elm_box_pack_end(box, bt);
+ evas_object_show(bt);
+
+ /* and when clicked - run "on_ok" */
+ evas_object_smart_callback_add(bt, "clicked", on_send_message, NULL);
+
+
+ /* add cancel button to box - fill and expand */
+ bt = elm_button_add(win);
+ elm_button_label_set(bt, "Cancel");
+ evas_object_size_hint_weight_set(bt, 1.0, 1.0);
+ evas_object_size_hint_align_set(bt, -1.0, -1.0);
+ elm_box_pack_end(box, bt);
+ evas_object_show(bt);
+
+ /* and when clicked - run "on_cancel" */
+ evas_object_smart_callback_add(bt, "clicked", on_cancel, NULL);
+
+}
+
+void
+elm_main ()
+{
+
+ /* new window - do the usual and give it a name, title and delete handler */
+ win = elm_win_add(NULL, "Main", ELM_WIN_BASIC);
+ elm_win_title_set(win, "Main");
+ evas_object_smart_callback_add(win, "delete,request", on_cancel, NULL);
+
+ /* resize window */
+ evas_object_resize(win, w, h);
+
+ /* init window parts */
+ init_window_parts();
+
+ /* show the window */
+ evas_object_show(win);
+
+ init_ecore_handler(from, to);
+ /* get going and draw/respond to the user */
+ // elm_run();
+
+ /* standard shutdown */
+ elm_exit();
+
+}
+
+int main (int argc, char **argv)
+{
+
+ from = argv[1];
+ to = argv[2];
+
+ elm_init(argc, argv);
+
+ elm_main();
+
+ elm_shutdown();
+
+ return 0;
+
+}
diff --git a/msg_sender/gui.h b/msg_sender/gui.h
new file mode 100644
index 0000000..5f4f276
--- /dev/null
+++ b/msg_sender/gui.h
@@ -0,0 +1,26 @@
+#ifndef __GUI_H_
+#define __GUI_H_
+
+//structs
+//typedef struct _ginfo ginfo;
+
+
+//callback functions
+static void on_cancel(void *data, Evas_Object *obj, void *event_info);
+static void on_send_message(void *data, Evas_Object *obj, void *event_info);
+static void on_message(void *data, Evas_Object *obj, void *event_info);
+static void on_options(void *data, Evas_Object *obj, void *event_info);
+static void on_chat(void *data, Evas_Object *obj, void *event_info);
+static void on_history(void *data, Evas_Object *obj, void *event_info);
+
+//other functions
+void set_bubble_text(Evas_Object *bb, char *username, char *text);
+char* get_current_time();
+//init functions
+void init_options();
+void init_window_parts();
+void init_toolbar();
+void init_history();
+void init_buttons(Evas_Object *box, Evas_Object *msg);
+void elm_main();
+#endif
diff --git a/msg_sender/handler.c b/msg_sender/handler.c
new file mode 100644
index 0000000..6c15c8e
--- /dev/null
+++ b/msg_sender/handler.c
@@ -0,0 +1,58 @@
+#include "Ecore.h"
+#include "/usr/local/include/Evas.h"
+#include "/usr/local/include/Ecore.h"
+#include "/usr/local/include/Ecore_Evas.h"
+#include "/usr/local/include/Elementary.h"
+#include "msg_sender.h"
+
+int is_init = 0;
+double interval = 0.1;
+double current_time, last_call;
+
+void pause_msg_sender()
+{
+ stop_irc();
+}
+
+void continue_msg_sender()
+{
+ run_irc();
+}
+
+void exit_all()
+{
+ elm_exit();
+ ecore_shutdown();
+ elm_shutdown();
+}
+
+void continue_gui(void *data)
+{
+ elm_run();
+}
+
+void init_ecore_handler(char *from, char *to)
+{
+ ecore_init();
+
+ if (is_init == 0)
+ {
+ is_init = 1;
+ msg_main_loop(from, to);
+ }
+
+ ecore_idle_exiter_add(continue_msg_sender, NULL);
+
+ ecore_idle_exiter_add(pause_msg_sender, NULL);
+
+ ecore_idle_exiter_add(continue_gui, NULL);
+
+ ecore_event_handler_add(ECORE_EVENT_SIGNAL_EXIT, exit_all, NULL);
+
+ ecore_main_loop_begin();
+}
+
+void shutdown_ecore_handler()
+{
+ ecore_shutdown();
+}
diff --git a/msg_sender/handler.h b/msg_sender/handler.h
new file mode 100644
index 0000000..6192044
--- /dev/null
+++ b/msg_sender/handler.h
@@ -0,0 +1,10 @@
+#ifndef __SALSA20_H_
+#define __SALSA20_H_
+
+/* inits all needed parts of ecore for the handlers */
+void init_ecore_handler(char *from, char *to);
+
+/* shutdown all ecore handler parts */
+void shutdown_ecore_handler();
+
+#endif
diff --git a/msg_sender/msg_sender.c b/msg_sender/msg_sender.c
new file mode 100644
index 0000000..85a5eda
--- /dev/null
+++ b/msg_sender/msg_sender.c
@@ -0,0 +1,263 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "libircclient.h"
+#include "openssl/blowfish.h"
+
+#include "msg_sender.h"
+
+static irc_session_t *session;
+irc_callbacks_t callbacks;
+
+char* nick;
+char* send_to;
+char* received_msg;
+char* msg_to_send;
+
+irc_dcc_t dccid;
+irc_dcc_t buddy_dccid;
+
+BF_KEY key;
+
+int run_session = 0;
+int message_available = 0;
+
+int init_connection(char* server_ip, char* user)
+{
+ printf("initialising connection...\n");
+
+ session = irc_create_session(&callbacks);
+ int con = irc_connect(session, server_ip, 6667, NULL, user, user, user);
+
+ if (irc_is_connected(session) == 1)
+ {
+ printf("connected... \n");
+ return 0;
+
+ }
+
+ if (con != 0)
+ {
+ printf("connection error-code: %i \n", con);
+ return 1;
+ }
+}
+
+void disconnect()
+{
+ printf("disconnected...\n");
+ irc_disconnect(session);
+ irc_destroy_session(session);
+}
+
+void set_txt_msg(char *msg)
+{
+ if (msg != NULL)
+ {
+ printf("input msg_sender: %s \n", msg);
+ send_message(session, msg);
+ }
+}
+
+char* get_txt_msg()
+{
+ if (msg_available == 1)
+ {
+ msg_available == 0;
+ return received_msg;
+ }
+ else return;
+}
+
+void dump_message(char *msg)
+{
+ msg_available = 1;
+ received_msg = msg;
+}
+
+void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length)
+{
+ switch (status)
+ {
+ case LIBIRC_ERR_CLOSED:
+ printf ("DCC %d: chat closed\n", id);
+ break;
+
+ case 0:
+ if ( data == NULL )
+ {
+ printf ("DCC %d: chat connected\n", id);
+ send_message(session, "im here");
+ }
+ else
+ {
+ char *decrypted_msg = (char*) malloc(sizeof(data));
+
+ BF_ecb_encrypt(data, decrypted_msg, &key, BF_DECRYPT);
+
+ if( run_session = 0)
+ {
+ irc_run(session);
+ run_session = 1;
+ }
+ printf("incoming message: %s \n", decrypted_msg);
+ dump_message(decrypted_msg);
+ }
+ break;
+
+ default:
+ printf ("DCC %d: error %s\n", id, irc_strerror(status));
+ break;
+ }
+ irc_cmd_quit(session, "dcc_recv_callback: 99");
+}
+
+int i = 0;
+
+void send_message(irc_session_t *session, char *msg)
+{
+// printf("your message %i = test \n", i);
+
+ //char msg[64];
+ if (msg != NULL)
+ {
+ char crypted_msg[64];
+
+ BF_ecb_encrypt(msg, crypted_msg, &key, BF_ENCRYPT);
+
+ if ( run_session == 0)
+ {
+ irc_run(session);
+ run_session = 1;
+ }
+
+ irc_dcc_msg(session, buddy_dccid, crypted_msg);
+ //TODO: irc_cmd_quit an richtiger stelle einbauen und ablaufen checken!!!
+ irc_cmd_quit(session, "send_message()");
+ }
+ else return;
+}
+
+void on_join(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ printf("on_join()\n");
+
+ char sender_name[90];
+
+ irc_target_get_nick(origin, sender_name, sizeof(sender_name));
+
+ if (strcmp(sender_name, send_to) == 0)
+ {
+ printf("Buddy %s joined the channel \n", send_to);
+
+ if (irc_dcc_chat(session, NULL, send_to, dcc_recv_callback, &dccid) != 0)
+ {
+ printf("ddc_chat_init_error \n");
+ }
+
+ else
+ {
+ printf("dcc_chat_init_success \n");
+ printf("dccid %d \n", dccid);
+
+ char _dccid[2];
+ sprintf(_dccid, "%d", dccid);
+ irc_cmd_msg(session, "#msg", _dccid);
+ }
+ }
+ //irc_cmd_quit(session, "on_join");
+}
+
+void on_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ irc_cmd_join(session, "#msg", NULL);
+ irc_cmd_msg(session, "#msg", "connected");
+
+ BF_set_key(&key, 5, "abcde");
+}
+
+void on_channel(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ printf("on_channel()\n");
+ if (strcmp(params[1], "connected") != 0)
+ {
+ buddy_dccid = atoi(params[1]);
+ printf("buddy_dccid: %d \n", buddy_dccid);
+ }
+// irc_cmd_quit(session, "continue");
+}
+void on_dcc_req(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ printf("on_dcc_req()\n");
+ if(irc_dcc_accept (session, 1, 0, dcc_recv_callback) != 0)
+ {
+ printf("ddc_chat_decline \n");
+ }
+
+ else
+ {
+ printf("dcc_chat_accepted \n");
+ }
+// irc_cmd_quit(session, "continue");
+}
+
+
+void msg_main_loop(char *sender, char *receiver)
+{
+ memset(&callbacks, 0, sizeof(callbacks));
+
+ callbacks.event_connect = on_connect;
+ callbacks.event_join = on_join;
+ callbacks.event_dcc_chat_req = on_dcc_req;
+ callbacks.event_channel = on_channel;
+
+ nick = sender;
+ send_to = receiver;
+
+ if (init_connection("127.0.0.1", sender) == 0)
+ {
+ printf("connection succesfull\n");
+ }
+}
+
+void run_irc()
+{
+ if (run_session == 0)
+ {
+ irc_run(session);
+ run_session = 1;
+ }
+}
+
+void stop_irc()
+{
+ irc_cmd_quit(session, "paused");
+}
+
+/*
+int main (int argc, char **argv)
+{
+ memset(&callbacks, 0, sizeof(callbacks));
+
+ callbacks.event_connect = on_connect;
+ callbacks.event_join = on_join;
+ callbacks.event_dcc_chat_req = on_dcc_req;
+ callbacks.event_channel = on_channel;
+
+ nick = argv[1];
+ send_to = argv[2];
+
+ if (init_connection("127.0.0.1", argv[1]) == 0)
+ {
+ int ses = irc_run(session);
+
+ return 0;
+ }
+
+ else
+ {
+ printf("aborting...\n");
+ return 1;
+ }
+}*/
diff --git a/msg_sender/msg_sender.h b/msg_sender/msg_sender.h
new file mode 100644
index 0000000..28db8a4
--- /dev/null
+++ b/msg_sender/msg_sender.h
@@ -0,0 +1,22 @@
+#ifndef __SALSA20_H_
+#define __SALSA20_H_
+
+/* inits main loop of message sender. callbacks are initialized in this function */
+void msg_main_loop(char *sender, char *receiver);
+
+/* starts infinite loop */
+void run_irc();
+
+/* stops infinite loop * loop */
+void stop_irc();
+
+/* input for message which has to be sent */
+void set_txt_msg(char *msg);
+
+/* returns received message */
+char* get_txt_msg();
+
+
+
+
+#endif
diff --git a/receiver/Makefile b/receiver/Makefile
new file mode 100644
index 0000000..ba4c68e
--- /dev/null
+++ b/receiver/Makefile
@@ -0,0 +1,9 @@
+include Makefile.inc
+
+all: $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -o receiver$(SUFFIX)
+
+
+prepare: $(OBJECTS_PREPARE)
+ $(CC) $(CFLAGS) -g $(LDFLAGS) $(OBJECTS_PREPARE) $(LIBS) -lm -o prepare
+
diff --git a/receiver/Makefile.CE b/receiver/Makefile.CE
new file mode 100644
index 0000000..fc40a16
--- /dev/null
+++ b/receiver/Makefile.CE
@@ -0,0 +1,26 @@
+include Makefile.inc
+
+#OBJECTS += gps/gps_wince.o
+#OBJECTS += gps/nmea.o
+#OBJECTS += wince/display.o
+#OBJECTS += libircclient.o
+
+#OBJECTS += rc/ueberall.rsc
+
+#CC = arm-wince-mingw32ce-gcc
+#WINDRES = arm-wince-mingw32ce-windres
+#LDFLAGS = -Wl#,--enable-auto-import
+#SUFFIX = .exe
+
+CC = colorgcc
+LDFLAGS = -Wl
+
+#CFLAGS += -DWINCE
+#CFLAGS += -DGPS_LOG
+
+
+#rc/ueberall.rsc: rc/ueberall.rc
+# $(WINDRES) $? $@
+
+all: $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -lws2 -o receiver
diff --git a/receiver/Makefile.inc b/receiver/Makefile.inc
new file mode 100644
index 0000000..ae15c3b
--- /dev/null
+++ b/receiver/Makefile.inc
@@ -0,0 +1,28 @@
+###########
+# settings
+###########
+
+CFLAGS = -g -Wall -pg
+INCLUDES = -I../include
+LIBS = -lgmp -lircclient -lcrypto
+
+
+###########
+# objects
+###########
+
+OBJECTS = receiver.o
+OBJECTS += salsa20.o
+##################
+# rules
+##################
+
+%.o: %.c
+ $(CC) -std=c99 $(CFLAGS) $(INCLUDES) -c -o $@ $<
+
+clean:
+ rm -rf $(OBJECTS) $(OBJECTS_PREPARE) receiver$(SUFFIX)
+# $(MAKE) -C themes clean
+# $(MAKE) -C vkbd clean
+
+
diff --git a/receiver/receiver.c b/receiver/receiver.c
new file mode 100644
index 0000000..8f69a21
--- /dev/null
+++ b/receiver/receiver.c
@@ -0,0 +1,133 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+#include <libircclient/libircclient.h>
+
+#include "openssl/blowfish.h"
+
+static irc_session_t *session;
+irc_callbacks_t callbacks;
+int counter = 0;
+char sender_name[100];
+
+int ret;
+
+BF_KEY key;
+
+int init_connection(char* server_ip, char* user)
+{
+ printf("init_connection()\n");
+
+ session = irc_create_session(&callbacks);
+ int con = irc_connect(session, server_ip, 6666, NULL, user, "receiver", "receiver");
+ if (con != 0)
+ {
+ printf("connection error-code: %i \n", con);
+
+ return 0;
+ }
+
+ if (irc_is_connected(session) == 1)
+ {
+ printf("connecting...\n");
+ return 1;
+ }
+}
+
+void disconnect()
+{
+ irc_disconnect(session);
+ irc_destroy_session(session);
+}
+
+char* dump_event (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ char* msg = " ";
+
+ //msg = params[2];
+ //printf("%c: \n",params[2]);
+
+
+ return msg;
+}
+
+void get_position(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+
+ char *decrypted_lat = (char*) malloc(sizeof(params[1]));
+ char *decrypted_lon = (char*) malloc(sizeof(params[1]));
+
+ irc_target_get_nick(origin, sender_name, sizeof(sender_name));
+
+ if (sender_name != NULL && strcmp(sender_name, "sender") == 1)
+ {
+
+ //first message is the ret param, which is needed for message decryption
+ if (counter == 0)
+ {
+ //BF_set_key(&key, 5, "abcde");
+ }
+
+ //dump_event(session, event, origin, params, count);
+ if (counter % 2 == 0)
+ {
+ BF_ecb_encrypt(params[1], decrypted_lat, &key, BF_DECRYPT);
+ printf("lat %s, origin: %s \n", decrypted_lat, sender_name);
+ }
+
+ if (counter % 2 != 0)
+ {
+ BF_ecb_encrypt(params[1], decrypted_lon, &key, BF_DECRYPT);
+ printf("lon %s , origin: %s \n", decrypted_lon, sender_name);
+ printf("====\n");
+ }
+
+ //send an aknowledge to the sender (=sendername, to differ between multiple sender)
+ if (strcmp(params[1], "128") != 0)
+ {
+ irc_cmd_msg(session, "#test", sender_name);
+ counter++;
+ }
+ else
+ {
+ counter++;
+ }
+ }
+
+}
+
+void on_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ BF_set_key(&key, 5, "abcde");
+
+ irc_cmd_join(session, "#test", NULL);
+ irc_cmd_msg(session, "#test", "connected");
+}
+
+int main (int argc, char **argv)
+{
+
+ memset(&callbacks, 0, sizeof(callbacks));
+
+ callbacks.event_channel = get_position;
+ callbacks.event_connect = on_connect;
+
+ char *user = argv[1];
+
+ if (init_connection("127.0.0.1", user) == 1)
+ {
+ irc_run(session);
+ printf("done? \n");
+ return 1;
+ }
+
+ else
+ {
+ printf("aborting...\n");
+ return 0;
+ }
+
+}
+
+
diff --git a/sender/Makefile b/sender/Makefile
new file mode 100644
index 0000000..d04669d
--- /dev/null
+++ b/sender/Makefile
@@ -0,0 +1,9 @@
+include Makefile.inc
+
+all: $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -o sender$(SUFFIX)
+
+
+prepare: $(OBJECTS_PREPARE)
+ $(CC) $(CFLAGS) -g $(LDFLAGS) $(OBJECTS_PREPARE) $(LIBS) -lm -o prepare
+
diff --git a/sender/Makefile.CE b/sender/Makefile.CE
new file mode 100644
index 0000000..a4feb19
--- /dev/null
+++ b/sender/Makefile.CE
@@ -0,0 +1,21 @@
+include Makefile.inc
+
+#OBJECTS += rc/ueberall.rsc
+
+#CC = arm-wince-mingw32ce-gcc
+#WINDRES = arm-wince-mingw32ce-windres
+#LDFLAGS = -Wl#,--enable-auto-import
+#SUFFIX = .exe
+
+CC = gcc
+LDFLAGS = -Wl
+
+#CFLAGS += -DWINCE
+#CFLAGS += -DGPS_LOG
+
+
+#rc/ueberall.rsc: rc/ueberall.rc
+# $(WINDRES) $? $@
+
+all: $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LIBS) -lws2 -o sender
diff --git a/sender/Makefile.inc b/sender/Makefile.inc
new file mode 100644
index 0000000..716e5f6
--- /dev/null
+++ b/sender/Makefile.inc
@@ -0,0 +1,30 @@
+###########
+# settings
+###########
+
+CFLAGS = -g -Wall
+INCLUDES = -I../include
+LIBS =-lircclient -lcrypto
+
+
+###########
+# objects
+###########
+
+OBJECTS = sender.o
+OBJECTS += crypto.o
+OBJECTS += salsa20.o
+
+##################
+# rules
+##################
+
+%.o: %.c
+ $(CC) -std=c99 $(CFLAGS) $(INCLUDES) -c -o $@ $<
+
+clean:
+ rm -rf $(OBJECTS) $(OBJECTS_PREPARE) sender$(SUFFIX)
+# $(MAKE) -C themes clean
+# $(MAKE) -C vkbd clean
+
+
diff --git a/sender/sender.c b/sender/sender.c
new file mode 100644
index 0000000..917e9d8
--- /dev/null
+++ b/sender/sender.c
@@ -0,0 +1,176 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "libircclient.h"
+#include "openssl/blowfish.h"
+
+static irc_session_t *session;
+irc_callbacks_t callbacks;
+int msg_count = 0;
+int ack_count = 0;
+int resend = 0;
+char* nick;
+
+int first_send = 0;
+
+BF_KEY key;
+
+int init_connection(char* server_ip, char* user)
+{
+ printf("initialising connection...\n");
+
+ session = irc_create_session(&callbacks);
+ int con = irc_connect(session, server_ip, 6667, NULL, user, user, user);
+
+ if (irc_is_connected(session) == 1)
+ {
+ printf("connected... \n");
+ return 0;
+
+ }
+
+ if (con != 0)
+ {
+ printf("connection error-code: %i \n", con);
+ return 1;
+ }
+}
+
+void disconnect()
+{
+ printf("disconnected...\n");
+ irc_disconnect(session);
+ irc_destroy_session(session);
+}
+
+//create random position between two y coordinates. bb_y_left < bb_y_right, bb_y_left = 0!
+int random_position_y(int bb_y_right)
+{
+ return rand() % bb_y_right;
+}
+
+//create random position between two x coordinates. bb_x_lower < bb_x_upper, bb_x_lower = 0!
+int random_position_x(int bb_x_upper)
+{
+ return rand() % bb_x_upper;
+}
+
+void send_position(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+
+ unsigned char crypted_lat[64];
+ unsigned char crypted_lon[64];
+
+ if (first_send == 0)
+ {
+ BF_set_key(&key, 5, "abcde");
+
+ irc_cmd_join(session, "#test", NULL);
+ }
+
+ for(int i = 0; i < 2; i++)
+ {
+ int lat = random_position_x(1000);
+ printf("lat position %i \n", lat);
+ int lon = random_position_y(1000);
+ printf("lon position %i \n", lon);
+
+ unsigned char lat_char[8];
+ sprintf(lat_char, "%i", lat);
+
+ unsigned char lon_char[8];
+ sprintf(lon_char, "%i", lon);
+
+ BF_ecb_encrypt(lat_char, crypted_lat, &key, BF_ENCRYPT);
+ BF_ecb_encrypt(lon_char, crypted_lon, &key, BF_ENCRYPT);
+
+ BF_ecb_encrypt(crypted_lat, lat_char, &key, BF_DECRYPT);
+ printf("self-test: %s \n", lat_char);
+
+ int _x = irc_cmd_msg(session, "#test", crypted_lat);
+ int _y = irc_cmd_msg(session, "#test", crypted_lon);
+
+ //increase counter variable, which counts number of send positions!
+ msg_count = msg_count + 2;
+
+ if (_x == 0 && _y == 0)
+ {
+ printf("send succesfull %i %i \n", lat, lon);
+ }
+
+ if (_y != 0)
+ {
+ printf("error code due sending: %i \n", _y);
+ }
+
+ if (_x != 0)
+ {
+ printf("error code due sending: %i \n", _x);
+ }
+
+ first_send = 1;
+ }
+
+ if(resend == 1)
+ {
+ get_aknowledge(session, event, origin, params, count);
+ resend = 0;
+ ack_count = 0;
+ }
+}
+
+void get_aknowledge(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
+{
+ if(strcmp(params[1], nick) == 0)
+ {
+ //use count variable, to count number of aknowledged positions! second number has to be twice as big, as the number of
+ //for-runs in send_position
+ if (ack_count <= 3 && msg_count > 0)
+ {
+ ack_count++;
+ msg_count--;
+ }
+
+ if (ack_count == 4 && msg_count == 0)
+ {
+ resend = 1;
+ send_position(session, event, origin, params, count);
+ }
+ }
+}
+
+int main (int argc, char **argv)
+{
+ memset(&callbacks, 0, sizeof(callbacks));
+
+ callbacks.event_connect = send_position;
+ callbacks.event_channel = get_aknowledge;
+
+ nick = argv[1];
+
+ if (init_connection("127.0.0.1", argv[1]) == 0)
+ {
+ int ses = irc_run(session);
+ if (ses == 0)
+ {
+ printf("session started...\n");
+ }
+ else
+ {
+ printf("error due starting session: %i \n", ses);
+ }
+ printf("done \n");
+
+ return 0;
+ }
+
+ else
+ {
+ printf("aborting...\n");
+ return 1;
+ }
+}
+
+