summaryrefslogtreecommitdiffstats
path: root/friendfinder/receiver.c
diff options
context:
space:
mode:
authorPatrick Hornecker2010-02-22 20:13:47 +0100
committerPatrick Hornecker2010-02-22 20:13:47 +0100
commitffe78ce6e53229d7ef2e1b57ce1de120575f7936 (patch)
treefdb9e2106a5fd856b47c22c4fc4855ea60354e93 /friendfinder/receiver.c
parentdeleted few files (diff)
downloadfriendfinder-ffe78ce6e53229d7ef2e1b57ce1de120575f7936.tar.gz
friendfinder-ffe78ce6e53229d7ef2e1b57ce1de120575f7936.tar.xz
friendfinder-ffe78ce6e53229d7ef2e1b57ce1de120575f7936.zip
fixes and tex source
Diffstat (limited to 'friendfinder/receiver.c')
-rw-r--r--friendfinder/receiver.c190
1 files changed, 98 insertions, 92 deletions
diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c
index 403e10f..569981e 100644
--- a/friendfinder/receiver.c
+++ b/friendfinder/receiver.c
@@ -13,13 +13,11 @@
static irc_session_t *session;
irc_callbacks_t callbacks;
-char sender_name[100];
-char own_nickname[100];
+char *username, *own_nickname, *sender_name;
char *receiver_server_ip;
int username_length;
int _sender_count = 3;
-int _exit = 0;
struct sender **s_sender;
int s_sender_size;
@@ -31,11 +29,6 @@ void receiver_set_ip(char *_ip)
receiver_server_ip = _ip;
}
-void set_receiver_exit()
-{
- _exit = 1;
-}
-
void set_sender_count(int number)
{
_sender_count = number;
@@ -62,49 +55,40 @@ int init_connection_receiver(char* server_ip, char* user)
}
}
-void disconnect_receiver(irc_session_t * session, const char * event, const char * origin, const unsigned char ** params, unsigned int count)
+void disconnect_receiver()
{
- irc_disconnect(session);
//irc_destroy_session(session);
- char *sender_org = (char*) malloc(username_length + 1);
-
- irc_target_get_nick(origin, sender_name, sizeof(sender_name));
- if (strcmp(sender_name, own_nickname) == 0)
- {
- irc_disconnect(session);
- //irc_destroy_session(session);
+ irc_disconnect(session);
+ irc_destroy_session(session);
- for (int i = 0; i < s_sender_size; i++)
- {
- free(s_sender[i]->nick);
- free(s_sender[i]->lat);
- free(s_sender[i]->lon);
+ for (int i = 0; i < s_sender_size; i++)
+ {
+ free(s_sender[i]->nick);
+ free(s_sender[i]->lat);
+ free(s_sender[i]->lon);
- free(s_sender[i]->is_init);
- free(s_sender[i]->is_init);
+ free(s_sender[i]->is_init);
+ free(s_sender[i]->is_init);
- free(s_sender[i]->lat_set);
- free(s_sender[i]->lat_set);
+ free(s_sender[i]->lat_set);
+ free(s_sender[i]->lat_set);
- free(s_sender[i]->lon_set);
- free(s_sender[i]->lon_set);
-
+ free(s_sender[i]->lon_set);
+ free(s_sender[i]->lon_set);
- free(s_sender[i]->lat_first);
- free(s_sender[i]->lat_second);
+ free(s_sender[i]->lat_first);
+ free(s_sender[i]->lat_second);
- free(s_sender[i]->lon_first);
- free(s_sender[i]->lon_second);
+ free(s_sender[i]->lon_first);
+ free(s_sender[i]->lon_second);
- free(s_sender[i]);
+ free(s_sender[i]);
- }
-
- free(s_sender);
+ }
- printf("RECEIVER: disconnected...\n");
+ free(s_sender);
- }
+ printf("RECEIVER: disconnected...\n");
}
int get_sender_array_pos(char* nick)
@@ -126,6 +110,46 @@ int get_sender_array_pos(char* nick)
}
}
+void init_sender_struct(int number)
+{
+ s_sender = (struct sender**) malloc(sizeof(struct sender) * number);
+
+ s_sender_size = number;
+
+ for (int i = 0; i <= number; i++)
+ {
+ s_sender[i] = (struct sender*) malloc(sizeof(struct sender));
+
+ s_sender[i]->nick = (char*) malloc(sizeof(char) * 20);
+
+ s_sender[i]->lat = (char*) malloc(sizeof(char) * 10);
+
+ s_sender[i]->lon = (char*) malloc(sizeof(char) * 10);
+
+ s_sender[i]->lat_first = (char*) malloc(sizeof(char) * 9);
+ s_sender[i]->lat_first[0] = '\0';
+
+ s_sender[i]->lat_second = (char*) malloc(sizeof(char) * 9);
+ s_sender[i]->lat_second[0] = '\0';
+
+ s_sender[i]->lon_first = (char*) malloc(sizeof(char) * 9);
+ s_sender[i]->lon_first[0] = '\0';
+
+ s_sender[i]->lon_second = (char*) malloc(sizeof(char) * 9);
+ s_sender[i]->lon_second[0] = '\0';
+
+ s_sender[i]->lon_first_set = 0;
+ s_sender[i]->lon_second_set = 0;
+
+ 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;
+ }
+}
+
void repair_position(struct sender *_sender, unsigned char *decrypted)
{
if (decrypted[5] == 'a')
@@ -200,7 +224,6 @@ void repair_position(struct sender *_sender, unsigned char *decrypted)
printf("====================== \n");*/
}
-
void dump_data(char* lat, char* lon, char* nick)
{
struct position *pos = (struct position*) malloc(sizeof(struct position));
@@ -213,20 +236,22 @@ void dump_data(char* lat, char* lon, char* nick)
void get_position(irc_session_t * session, const char * event, const char * origin, const unsigned char ** params, unsigned int count)
{
- if (_exit == 1)
- disconnect_receiver(session, event, origin, params, count);
-
unsigned char *decrypted;
unsigned char *encrypted_base64;
char *sender_org = (char*) malloc(username_length + 1);
-
+ char *own_sender_nickname = (char*) malloc(username_length + 2);
+ sender_name = (char*) malloc(sizeof(char) * 50);
+
+ memcpy(own_sender_nickname, own_nickname, sizeof(own_nickname));
+ strcat(own_sender_nickname, "_s");
+
irc_target_get_nick(origin, sender_name, sizeof(sender_name));
strncpy(sender_org, sender_name, username_length);
sender_org[username_length] = '\0';
if (strcmp(sender_org, own_nickname) != 0 && strcmp(sender_name, "_s") > 0 && strcmp(params[1], "connected") != 0
- && strcmp(params[1], "ack") != 0)
+ && check_message(params[1]) == 0)
{
int pos = get_sender_array_pos(sender_org);
@@ -242,6 +267,8 @@ void get_position(irc_session_t * session, const char * event, const char * orig
repair_position(s_sender[pos], decrypted);
+ send_acknowledgement();
+
free(encrypted_base64);
free(decrypted);
}
@@ -258,6 +285,8 @@ void get_position(irc_session_t * session, const char * event, const char * orig
repair_position(s_sender[pos], decrypted);
+ send_acknowledgement();
+
free(encrypted_base64);
free(decrypted);
}
@@ -294,57 +323,32 @@ void get_position(irc_session_t * session, const char * event, const char * orig
free(sender_org);
pos = NULL;
-
-
- 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);
}
}
-void init_sender_struct(int number)
+void send_acknowledgement()
{
- s_sender = (struct sender**) malloc(sizeof(struct sender*) * number);
-
- s_sender_size = number;
+ char* ack = "ack";
+ char* ack_base64 = (char*) malloc(sizeof(char) * 50);
+ char* ack_crypted = (char*) malloc(sizeof(char) * 20);
- for (int i = 0; i <= number; i++)
- {
- s_sender[i] = (struct sender*) malloc(sizeof(struct sender));
-
- s_sender[i]->nick = (char*) malloc(sizeof(char) * 20);
-
- s_sender[i]->lat = (char*) malloc(sizeof(char) * 10);
-
- s_sender[i]->lon = (char*) malloc(sizeof(char) * 10);
-
- s_sender[i]->lat_first = (char*) malloc(sizeof(char) * 9);
- s_sender[i]->lat_first[0] = '\0';
+ BF_ecb_encrypt(ack, ack_crypted, &key, BF_ENCRYPT);
+ to_base64(ack_crypted, strlen(ack_crypted), ack_base64, 50);
+ irc_cmd_msg(session, "#test", ack_base64);
+}
- s_sender[i]->lat_second = (char*) malloc(sizeof(char) * 9);
- s_sender[i]->lat_second[0] = '\0';
-
- s_sender[i]->lon_first = (char*) malloc(sizeof(char) * 9);
- s_sender[i]->lon_first[0] = '\0';
+int check_message(char *msg)
+{
+ char* ack = "ack";
+ char* ack_base64 = (char*) malloc(sizeof(char) * 50);
+ char* ack_decrypted = (char*) malloc(sizeof(char) * 20);
- s_sender[i]->lon_second = (char*) malloc(sizeof(char) * 9);
- s_sender[i]->lon_second[0] = '\0';
+ from_base64(msg, strlen(msg), ack_base64, 50);
+ BF_ecb_encrypt(ack_decrypted, ack_base64, &key, BF_DECRYPT);
- s_sender[i]->lon_first_set = 0;
- s_sender[i]->lon_second_set = 0;
-
- 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;
- }
+ if (strcmp(ack, ack_decrypted) == 0)
+ return 1;
+ else return 0;
}
void on_connect_receiver(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
@@ -372,11 +376,13 @@ void receiver_main(void *user)
callbacks.event_channel = get_position;
callbacks.event_connect = on_connect_receiver;
- callbacks.event_quit = disconnect_receiver;
- char username[20];
- sprintf(username, "%s", (char*) user);
- sprintf(own_nickname, "%s", username);
+ username = (char*) malloc(sizeof(char) * 50);
+ own_nickname = (char*) malloc(sizeof(char) * 50);
+
+ memcpy(username, (char*) user, sizeof(user));
+ memcpy(own_nickname, (char*) user, sizeof(user));
+
username_length = strlen(username);
if (receiver_server_ip != NULL && user != NULL)