summaryrefslogtreecommitdiffstats
path: root/friendfinder
diff options
context:
space:
mode:
authorPatrick Hornecker2010-02-20 12:42:23 +0100
committerPatrick Hornecker2010-02-20 12:42:23 +0100
commit5bbe2ca10a09db4c444ce98f4ddea501e7c9be22 (patch)
tree90419438bf2e47a6edc63062e08af0a1f98a7629 /friendfinder
parentfew bugs fixed, redrawing of bubbels changed (diff)
downloadfriendfinder-5bbe2ca10a09db4c444ce98f4ddea501e7c9be22.tar.gz
friendfinder-5bbe2ca10a09db4c444ce98f4ddea501e7c9be22.tar.xz
friendfinder-5bbe2ca10a09db4c444ce98f4ddea501e7c9be22.zip
few code work and tex source
Diffstat (limited to 'friendfinder')
-rw-r--r--friendfinder/crypto.c94
-rw-r--r--friendfinder/cryptossl.h7
-rw-r--r--friendfinder/e_smart_map.c5
-rwxr-xr-xfriendfinder/guibin479445 -> 480334 bytes
-rw-r--r--friendfinder/gui.c123
-rw-r--r--friendfinder/msg_sender.c34
-rw-r--r--friendfinder/receiver.c28
-rw-r--r--friendfinder/sender.c6
8 files changed, 224 insertions, 73 deletions
diff --git a/friendfinder/crypto.c b/friendfinder/crypto.c
new file mode 100644
index 0000000..465c83f
--- /dev/null
+++ b/friendfinder/crypto.c
@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include <string.h>
+
+#include <openssl/pem.h>
+#include <openssl/bio.h>
+#include <openssl/err.h>
+#include <openssl/evp.h>
+
+#include "cryptossl.h"
+
+#define dump_sslerror() \
+do {\
+ unsigned long err = ERR_get_error(); \
+ ERR_load_crypto_strings(); \
+ printf("%s:%i %s\n", __FILE__, __LINE__, ERR_error_string(err, NULL)); \
+} while(0)
+
+#define MAX_PEM_SIZE 4096
+static char buff[4096]; //XXX: stat() to get filesize!
+
+BIO* load_pem(char *filename)
+{
+ FILE *file;
+ int size;
+ BIO *bio;
+
+ file = fopen(filename, "r");
+ if(file == NULL)
+ return NULL;
+
+ for(size = 0; fread(buff + size, 1, 1, file) == 1; size++)
+ {
+ if(size >= MAX_PEM_SIZE)
+ {
+ fclose(file);
+ return NULL;
+ }
+ }
+ fclose(file);
+
+ bio = BIO_new_mem_buf(buff, size);
+ if(bio == NULL)
+ dump_sslerror();
+ return bio;
+}
+
+int from_base64(char *in, int inlen, char *out, int maxlen)
+{
+ BIO *b64, *bmem;
+
+ memset(out, 0, maxlen);
+
+ b64 = BIO_new(BIO_f_base64());
+ if(!strchr(in, '\n'))
+ BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
+
+ bmem = BIO_new_mem_buf(in, inlen);
+ bmem = BIO_push(b64, bmem);
+ int j = BIO_ctrl_pending(bmem);
+ int ret = BIO_read(bmem, out, j);
+ BIO_free_all(bmem);
+ return ret;
+}
+
+int to_base64(char *in, int inlen, char *out, int maxlen)
+{
+ BIO *bmem, *b64;
+ BUF_MEM *bptr;
+ int ret;
+
+ b64 = BIO_new(BIO_f_base64());
+ bmem = BIO_new(BIO_s_mem());
+ b64 = BIO_push(b64, bmem);
+ BIO_write(b64, in, inlen);
+ BIO_flush(b64);
+
+ BIO_get_mem_ptr(b64, &bptr);
+ if(bptr->length > maxlen)
+ {
+ BIO_free_all(b64);
+ return -1;
+ }
+
+ memcpy(out, bptr->data, bptr->length-1);
+// XXX: we don't teminate b64 buffer as string
+// XXX: user gets length so wtf ;)
+// out[bptr->length-1] = 0;
+ ret = bptr->length;
+
+ BIO_free_all(b64);
+ return ret;
+}
+
+
diff --git a/friendfinder/cryptossl.h b/friendfinder/cryptossl.h
new file mode 100644
index 0000000..2cbc7cf
--- /dev/null
+++ b/friendfinder/cryptossl.h
@@ -0,0 +1,7 @@
+#ifndef __CRYPTO_SLL__
+#define __CRYPTO_SLL__
+
+int to_base64(char *in, int inlen, char *out, int maxlen);
+int from_base64(char *in, int inlen, char *out, int maxlen);
+
+#endif
diff --git a/friendfinder/e_smart_map.c b/friendfinder/e_smart_map.c
index d87335d..2bdcd23 100644
--- a/friendfinder/e_smart_map.c
+++ b/friendfinder/e_smart_map.c
@@ -28,6 +28,9 @@ static void _map_object_clip_unset(Evas_Object *o);
#define SMART_MAP_NAME "e_smart_map"
+struct bubble *bb;
+first_draw = 0;
+
void e_smart_map_set_info(Evas_Object *o, const char *info)
{
struct smart_map *smart;
@@ -84,8 +87,6 @@ static struct bubble *create_text_bubble(struct smart_map *smart, char *info, ch
return bubble;
}
-struct bubble *bb;
-first_draw = 0;
void e_smart_map_overlay_set_bubble(Evas_Object *o, char *overlay, char *info, char *text, double lat, double lon, int flags)
{
struct smart_map *smart;
diff --git a/friendfinder/gui b/friendfinder/gui
index 64b740a..7e9cbb3 100755
--- a/friendfinder/gui
+++ b/friendfinder/gui
Binary files differ
diff --git a/friendfinder/gui.c b/friendfinder/gui.c
index c34739a..4ea6318 100644
--- a/friendfinder/gui.c
+++ b/friendfinder/gui.c
@@ -29,6 +29,7 @@ const char *msg_text, *key, *ip = NULL, *nickname = NULL, *partner_nickname = NU
char *from = NULL, *to = NULL, *count = "3", *current_msg, *last_msg;
int sender_count = 3;
+time_t now;
static Evas_Object *win, *bbx, *map, *img, *bcb;
@@ -191,23 +192,27 @@ 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);
}
- Evas_Object *bb;
+
+Evas_Object *bb1, *bb2, *bb3;
+
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);
if (msg_text != NULL)
{
if (first == 0 && enable_chat == 1)
{
- bb = elm_bubble_add(bx3);
- evas_object_size_hint_weight_set(bb, 0.0, 0.0);
- evas_object_size_hint_align_set(bb, -1.0, -1.0);
- evas_object_resize(bb, w, h/6);
- evas_object_move(bb, 0, bubble_pos);
- set_bubble_text(bb, from, msg_text);
- evas_object_show(bb);
+ if(bb1 !=NULL)
+ evas_object_del(bb1);
+
+ bb1 = elm_bubble_add(bx3);
+ evas_object_size_hint_weight_set(bb1, 0.0, 0.0);
+ evas_object_size_hint_align_set(bb1, -1.0, -1.0);
+ evas_object_resize(bb1, w, h/6);
+ evas_object_move(bb1, 0, bubble_pos);
+ set_bubble_text(bb1, from, msg_text);
+ evas_object_show(bb1);
first = 1;
bubble_pos = bubble_pos + h/6;
@@ -216,13 +221,16 @@ static void on_send_message(void *data, Evas_Object *bx3, void *event_info)
if (first == 1 && enable_chat == 1)
{
- bb = elm_bubble_add(bx3);
- evas_object_size_hint_weight_set(bb, 1.0, 1.0);
- evas_object_size_hint_align_set(bb, -1.0, -1.0);
- evas_object_resize(bb, w, h/6);
- evas_object_move(bb, 0, bubble_pos);
- set_bubble_text(bb, from, msg_text);
- evas_object_show(bb);
+ if(bb2 !=NULL)
+ evas_object_del(bb2);
+
+ bb2 = elm_bubble_add(bx3);
+ evas_object_size_hint_weight_set(bb2, 1.0, 1.0);
+ evas_object_size_hint_align_set(bb2, -1.0, -1.0);
+ evas_object_resize(bb2, w, h/6);
+ evas_object_move(bb2, 0, bubble_pos);
+ set_bubble_text(bb2, from, msg_text);
+ evas_object_show(bb2);
first = 2;
bubble_pos = bubble_pos + h/6;
@@ -231,13 +239,16 @@ static void on_send_message(void *data, Evas_Object *bx3, void *event_info)
if (first == 2 && enable_chat == 1)
{
- bb = elm_bubble_add(bx3);
- evas_object_size_hint_weight_set(bb, 1.0, 1.0);
- evas_object_size_hint_align_set(bb, -1.0, -1.0);
- evas_object_resize(bb, w, h/6);
- evas_object_move(bb, 0, bubble_pos);
- set_bubble_text(bb, from, msg_text);
- evas_object_show(bb);
+ if(bb3 !=NULL)
+ evas_object_del(bb3);
+
+ bb3 = elm_bubble_add(bx3);
+ evas_object_size_hint_weight_set(bb3, 1.0, 1.0);
+ evas_object_size_hint_align_set(bb3, -1.0, -1.0);
+ evas_object_resize(bb3, w, h/6);
+ evas_object_move(bb3, 0, bubble_pos);
+ set_bubble_text(bb3, from, msg_text);
+ evas_object_show(bb3);
first = 0;
bubble_pos = 100;
@@ -253,13 +264,16 @@ void show_message(char *current_msg)
{
if (first == 0 && enable_chat == 1)
{
- bb = elm_bubble_add(bbx);
- evas_object_size_hint_weight_set(bb, 1.0, 1.0);
- evas_object_size_hint_align_set(bb, -1.0, -1.0);
- evas_object_resize(bb, w, h/6);
- evas_object_move(bb, 0, bubble_pos);
- set_bubble_text(bb, to, current_msg);
- evas_object_show(bb);
+ if(bb1 !=NULL)
+ evas_object_del(bb1);
+
+ bb1 = elm_bubble_add(bbx);
+ evas_object_size_hint_weight_set(bb1, 1.0, 1.0);
+ evas_object_size_hint_align_set(bb1, -1.0, -1.0);
+ evas_object_resize(bb1, w, h/6);
+ evas_object_move(bb1, 0, bubble_pos);
+ set_bubble_text(bb1, to, current_msg);
+ evas_object_show(bb1);
first = 1;
bubble_pos = bubble_pos + h/6;
@@ -270,13 +284,16 @@ void show_message(char *current_msg)
if (first == 1 && enable_chat == 1)
{
- bb = elm_bubble_add(bbx);
- evas_object_size_hint_weight_set(bb, 1.0, 1.0);
- evas_object_size_hint_align_set(bb, -1.0, -1.0);
- evas_object_resize(bb, w, h/6);
- evas_object_move(bb, 0, bubble_pos);
- set_bubble_text(bb, to, current_msg);
- evas_object_show(bb);
+ if(bb2 !=NULL)
+ evas_object_del(bb2);
+
+ bb2 = elm_bubble_add(bbx);
+ evas_object_size_hint_weight_set(bb2, 1.0, 1.0);
+ evas_object_size_hint_align_set(bb2, -1.0, -1.0);
+ evas_object_resize(bb2, w, h/6);
+ evas_object_move(bb2, 0, bubble_pos);
+ set_bubble_text(bb2, to, current_msg);
+ evas_object_show(bb2);
first = 2;
bubble_pos = bubble_pos + h/6;
@@ -287,13 +304,16 @@ void show_message(char *current_msg)
if (first == 2 && enable_chat == 1)
{
- bb = elm_bubble_add(bbx);
- evas_object_size_hint_weight_set(bb, 1.0, 1.0);
- evas_object_size_hint_align_set(bb, -1.0, -1.0);
- evas_object_resize(bb, w, h/6);
- evas_object_move(bb, 0, bubble_pos);
- set_bubble_text(bb, to, current_msg);
- evas_object_show(bb);
+ if(bb3 !=NULL)
+ evas_object_del(bb3);
+
+ bb3 = elm_bubble_add(bbx);
+ evas_object_size_hint_weight_set(bb3, 1.0, 1.0);
+ evas_object_size_hint_align_set(bb3, -1.0, -1.0);
+ evas_object_resize(bb3, w, h/6);
+ evas_object_move(bb3, 0, bubble_pos);
+ set_bubble_text(bb3, to, current_msg);
+ evas_object_show(bb3);
first = 0;
bubble_pos = 100;
@@ -301,10 +321,21 @@ void show_message(char *current_msg)
current_msg[0] = '\0';
return;
}
- free(bb);
+ free(bb1);
+ free(bb2);
+ free(bb3);
}
}
+char* get_current_time()
+{
+ time_t now;
+ time(&now);
+ char *text = ctime(&now);
+ return text;
+
+}
+
/* sets the username and the text in the bubble */
void set_bubble_text(Evas_Object *bb, char *username, char *text)
{
@@ -318,6 +349,8 @@ void set_bubble_text(Evas_Object *bb, char *username, char *text)
elm_entry_line_wrap_set(cn, 0);
evas_object_size_hint_weight_set(cn, 1.0, 1.0);
+ elm_bubble_info_set(bb, get_current_time());
+
/* create overlay bubble with message string */
Evas_Object *inner_bb;
inner_bb = elm_bubble_add(bb);
diff --git a/friendfinder/msg_sender.c b/friendfinder/msg_sender.c
index 9ef7fc6..ca9bd5f 100644
--- a/friendfinder/msg_sender.c
+++ b/friendfinder/msg_sender.c
@@ -8,6 +8,7 @@
#include "msg_sender.h"
#include "gui.h"
#include "read_file.h"
+#include "cryptossl.h"
static irc_session_t *session;
irc_callbacks_t callbacks;
@@ -60,7 +61,7 @@ struct msg_part* prepare_msg(char *msg)
msg_p->part_count = (len / 6) - 1;
int inc_part_count = msg_p->part_count + 1;
- msg_p->msg_parts = (char(*)[inc_part_count]) malloc(sizeof(char*) * inc_part_count);
+ msg_p->msg_parts = (char(*)[inc_part_count]) malloc(sizeof(char*) * inc_part_count); // richtig: (char**) malloc(sizeof(....))
char *message = (char*) malloc(len + 1);
memcpy(message, msg, len + 1);
@@ -120,7 +121,7 @@ struct msg_part* prepare_msg(char *msg)
void repair_msg(char* inc_msg, char *msg)
{
printf("repair_msg: %s \n", msg);
-
+
if (strcmp(inc_msg, "//c//") != 0)
strcat(msg, inc_msg);
@@ -136,9 +137,10 @@ void set_txt_msg(char *msg)
struct msg_part *msg_p = (struct msg_part*) malloc(sizeof(struct msg_part));
msg_p = prepare_msg(msg);
send_message(session, msg_p);
- // free(msg_p);
}
else printf("MSG_SENDER: session not initialized \n");
+
+
}
void send_message(irc_session_t *session, struct msg_part *msg_p)
@@ -148,26 +150,35 @@ void send_message(irc_session_t *session, struct msg_part *msg_p)
for (int i = 0; i <= msg_p->part_count; i++)
{
char *crypted_msg = (char*) malloc(sizeof(char) * 8);
-
+ char *crypted_msg_base64 = (char*) malloc(sizeof(char) * 50);
+
if (msg_p->msg_parts[i] != NULL)
{
BF_ecb_encrypt(msg_p->msg_parts[i], crypted_msg, &key, BF_ENCRYPT);
- irc_cmd_msg(session, "#msg", crypted_msg);
+ to_base64(crypted_msg, strlen(crypted_msg), crypted_msg_base64, 50);
+ irc_cmd_msg(session, "#msg", crypted_msg_base64);
+
+ free(crypted_msg_base64);
free(crypted_msg);
}
}
char* eof = "//c//";
char *crypted_eof = (char*) malloc(sizeof(char) * sizeof(eof));
+ char *crypted_eof_base64 = (char*) malloc(sizeof(char) * 50);
+
BF_ecb_encrypt(eof, crypted_eof, &key, BF_ENCRYPT);
- irc_cmd_msg(session, "#msg", crypted_eof);
+ to_base64(crypted_eof, strlen(crypted_eof), crypted_eof_base64, 50);
+ irc_cmd_msg(session, "#msg", crypted_eof_base64);
free(crypted_eof);
+ free(crypted_eof_base64);
for (int i = 0; i < msg_p->part_count; i++)
{
free(msg_p->msg_parts[i]);
}
+
free(msg_p->msg_parts);
free(msg_p);
@@ -179,15 +190,13 @@ void send_message(irc_session_t *session, struct msg_part *msg_p)
void on_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
struct key_data *keyd = (struct key_data*) malloc(sizeof(struct key_data));
- //keyd->key = (char*) malloc(sizeof(char) * 300);
keyd = read_key();
irc_cmd_join(session, "#msg", NULL);
irc_cmd_msg(session, "#msg", "connected");
-// printf("keyd->key %s :: keyd->key_length %i \n", keyd->key, keyd->key_length);
- BF_set_key(&key, keyd->key_length - 1, keyd->key);
+ BF_set_key(&key, keyd->key_length, keyd->key);
free(keyd->key);
free(keyd);
@@ -196,6 +205,7 @@ void on_connect(irc_session_t * session, const char * event, const char * origin
void on_channel(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
char *inc_msg = (char*) malloc(sizeof(char) * 8);
+ char *inc_msg_base64 = (char*) malloc(sizeof(char) * 50);
irc_target_get_nick(origin, sender_name, sizeof(sender_name));
@@ -208,9 +218,13 @@ void on_channel(irc_session_t * session, const char * event, const char * origin
else
{
- BF_ecb_encrypt(params[1], inc_msg, &key, BF_DECRYPT);
+ from_base64(params[1], strlen(params[1]), inc_msg_base64, 50);
+ BF_ecb_encrypt(inc_msg_base64, inc_msg, &key, BF_DECRYPT);
printf("%s \n", inc_msg);
repair_msg(inc_msg, msg);
+
+ free(inc_msg_base64);
+ free(inc_msg);
}
}
}
diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c
index ee02249..403e10f 100644
--- a/friendfinder/receiver.c
+++ b/friendfinder/receiver.c
@@ -295,7 +295,15 @@ void get_position(irc_session_t * session, const char * event, const char * orig
pos = NULL;
- irc_cmd_msg(session, "#test", "ack");
+
+ char* ack = "ack";
+ char* ack_base64 = (char*) malloc(sizeof(char) * 50);
+ char* ack_crypted = (char*) malloc(sizeof(char) * strlen(ack));
+
+ BF_ecb_encrypt(ack, ack_crypted, &key, BF_DECRYPT);
+ to_base64(ack_crypted, strlen(ack_crypted), ack_base64, 50);
+
+ irc_cmd_msg(session, "#test", ack_base64);
}
}
@@ -310,23 +318,11 @@ void init_sender_struct(int number)
s_sender[i] = (struct sender*) malloc(sizeof(struct sender));
s_sender[i]->nick = (char*) malloc(sizeof(char) * 20);
- // s_sender[i]->nick[0] = '\0';
s_sender[i]->lat = (char*) malloc(sizeof(char) * 10);
-// s_sender[i]->lat[0] = '\0';
-
+
s_sender[i]->lon = (char*) malloc(sizeof(char) * 10);
-// s_sender[i]->lon[0] = '\0';
- // s_sender[i]->is_init = (int) malloc(sizeof(int));
- s_sender[i]->is_init = 0;
-
- // s_sender[i]->lat_set = (int) malloc(sizeof(int));
- s_sender[i]->lat_set = 0;
-
- // s_sender[i]->lon_set = (int) malloc(sizeof(int));
- s_sender[i]->lon_set = 0;
-
s_sender[i]->lat_first = (char*) malloc(sizeof(char) * 9);
s_sender[i]->lat_first[0] = '\0';
@@ -344,6 +340,10 @@ void init_sender_struct(int number)
s_sender[i]->lat_first_set = 0;
s_sender[i]->lat_second_set = 0;
+
+ s_sender[i]->is_init = 0;
+ s_sender[i]->lat_set = 0;
+ s_sender[i]->lon_set = 0;
}
}
diff --git a/friendfinder/sender.c b/friendfinder/sender.c
index 6f67730..a2b86a1 100644
--- a/friendfinder/sender.c
+++ b/friendfinder/sender.c
@@ -203,7 +203,9 @@ void send_position(irc_session_t * session, const char * event, const char * ori
//increase counter variable, which counts number of send positions!
msg_count = msg_count + 2;
-
+
+ //TODO: nochmal überdenken...resend wirklich nötig???
+ //ack von base64 ausgehend umwandeln, entschlüsseln und dann weiterreichen
if(resend == 1)
{
get_aknowledge(session, event, origin, params, count);
@@ -243,7 +245,7 @@ void get_aknowledge(irc_session_t * session, const char * event, const char * or
{
resend = 1;
- //sleep(3);
+ sleep(3);
send_position(session, event, origin, params, count);
}