summaryrefslogtreecommitdiffstats
path: root/friendfinder/receiver.c
diff options
context:
space:
mode:
authorPatrick Hornecker2010-02-14 16:47:11 +0100
committerPatrick Hornecker2010-02-14 16:47:11 +0100
commitd87ceaf676e137bffa3e6fb57ee3260a92db0f28 (patch)
tree0de81397eb0b529fd4c40ea886bb9b90cd59a4bd /friendfinder/receiver.c
parenttex source (diff)
downloadfriendfinder-d87ceaf676e137bffa3e6fb57ee3260a92db0f28.tar.gz
friendfinder-d87ceaf676e137bffa3e6fb57ee3260a92db0f28.tar.xz
friendfinder-d87ceaf676e137bffa3e6fb57ee3260a92db0f28.zip
improved sender and receiver
Diffstat (limited to 'friendfinder/receiver.c')
-rw-r--r--friendfinder/receiver.c147
1 files changed, 113 insertions, 34 deletions
diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c
index e1ab333..28018b0 100644
--- a/friendfinder/receiver.c
+++ b/friendfinder/receiver.c
@@ -12,6 +12,8 @@
static irc_session_t *session;
irc_callbacks_t callbacks;
+int _exit = 0;
+
char sender_name[100];
char own_nickname[100];
char *receiver_server_ip;
@@ -28,6 +30,11 @@ void receiver_set_ip(char *_ip)
receiver_server_ip = _ip;
}
+void set_receiver_exit()
+{
+ _exit = 1;
+}
+
int init_connection_receiver(char* server_ip, char* user)
{
printf("RECEIVER: initialising connection...\n");
@@ -49,11 +56,49 @@ int init_connection_receiver(char* server_ip, char* user)
}
}
-void disconnect_receiver()
+void disconnect_receiver(irc_session_t * session, const char * event, const char * origin, const unsigned char ** params, unsigned int count)
{
irc_disconnect(session);
- irc_destroy_session(session);
- printf("RECEIVER: disconnected...\n");
+ //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);
+
+ 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]->lat_set);
+ free(s_sender[i]->lat_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]->lon_first);
+ free(s_sender[i]->lon_second);
+
+ free(s_sender[i]);
+
+ }
+
+ free(s_sender);
+
+ printf("RECEIVER: disconnected...\n");
+
+ }
}
int get_sender_array_pos(char* nick)
@@ -79,55 +124,74 @@ void repair_position(struct sender *_sender, unsigned char *decrypted)
{
if (decrypted[5] == 'a')
{
- _sender->lat_first = decrypted;
+ memcpy(_sender->lat_first, decrypted, sizeof(decrypted));
_sender->lat_first[5] = '\0';
_sender->lat_first_set = 1;
-
// return;
}
- if (decrypted[4] == 'b')
+ else if (decrypted[4] == 'b')
{
- _sender->lat_second = decrypted;
+ memcpy(_sender->lat_second, decrypted, sizeof(decrypted));
_sender->lat_second[4] = '\0';
_sender->lat_second_set = 1;
-
// return;
}
- if (decrypted[5] == 'c')
+ else if (decrypted[5] == 'c')
{
- _sender->lon_first = decrypted;
+ memcpy(_sender->lon_first, decrypted, sizeof(decrypted));
_sender->lon_first[5] = '\0';
_sender->lon_first_set = 1;
-
// return;
}
- if (decrypted[4] == 'd')
+ else if (decrypted[3] == 'd')
{
- _sender->lon_second = decrypted;
- _sender->lon_second[4] = '\0';
+ memcpy(_sender->lon_second, decrypted, sizeof(decrypted));
+ _sender->lon_second[3] = '\0';
_sender->lon_second_set = 1;
-
// return;
}
if (_sender->lat_first_set == 1 && _sender->lat_second_set == 1)
{
- _sender->lat = _sender->lat_first;
- strcat(_sender->lat, _sender->lat_second);
+ memcpy(_sender->lat, _sender->lat_first, sizeof(_sender->lat_first)); //FIXME IM A ANGRY SEGFAULT
+
+ strcat(_sender->lat, _sender->lat_second);//FIXME TOO
+
_sender->lat_set = 1;
+ _sender->lat_first_set = 0;
+ _sender->lat_second_set = 0;
+
+ _sender->lat_first[0] = '\0';
+ _sender->lat_second[0] = '\0';
+
+ // printf("lat: %s \n", _sender->lat);
+
+ // _sender->lat[0] = '\0';
}
if (_sender->lon_first_set == 1 && _sender->lon_second_set == 1)
{
- _sender->lon = _sender->lon_first;
- strcat(_sender->lon, _sender->lon_second);
+ memcpy(_sender->lon, _sender->lon_first, sizeof(_sender->lon_first));//FIXME ALSO PLEASE
+
+ strcat(_sender->lon, _sender->lon_second);//FIXME IS THE WORD OF THE HOUR
+
_sender->lon_set = 1;
+ _sender->lon_first_set = 0;
+ _sender->lon_second_set = 0;
+
+ _sender->lon_first[0] = '\0';
+ _sender->lon_second[0] = '\0';
+
+ // printf("lon: %s \n", _sender->lon);
+
+ // _sender->lat[0] = '\0';
}
}
+
void dump_data(char* lat, char* lon, char* nick)
{
struct position *pos = (struct position*) malloc(sizeof(struct position));
@@ -143,6 +207,9 @@ void get_position(irc_session_t * session, const char * event, const char * orig
unsigned char *decrypted;
char *sender_org = (char*) malloc(username_length + 1);
+
+// if (_exit == 1)
+// disconnect_receiver();
irc_target_get_nick(origin, sender_name, sizeof(sender_name));
strncpy(sender_org, sender_name, username_length);
@@ -160,7 +227,7 @@ void get_position(irc_session_t * session, const char * event, const char * orig
BF_ecb_encrypt(params[1], decrypted, &key, BF_DECRYPT);
decrypted[strlen(decrypted)] = '\0';
- printf("decrypted %s \n", decrypted);
+ // printf("decrypted %s \n", decrypted);
repair_position(s_sender[pos], decrypted);
@@ -173,19 +240,23 @@ void get_position(irc_session_t * session, const char * event, const char * orig
BF_ecb_encrypt(params[1], decrypted, &key, BF_DECRYPT);
decrypted[strlen(decrypted)] = '\0';
- printf("decrypted %s \n", decrypted);
+ // printf("decrypted %s \n", decrypted);
repair_position(s_sender[pos], decrypted);
free(decrypted);
}
-
+
if(s_sender[pos]->lon_set == 1 && s_sender[pos]->lat_set == 1)// && lon != NULL && lat != NULL)
{
double _lat, _lon;
_lat = atof(s_sender[pos]->lat);
_lon = atof(s_sender[pos]->lon);
-
+
+ printf("%f %f \n", _lat, _lon);
+
+ printf("char lat: %s char lon: %s \n", s_sender[pos]->lat, s_sender[pos]->lon);
+
if (_lat > _lon && _lat == _lat && _lon == _lon)
{
dump_data(s_sender[pos]->lat, s_sender[pos]->lon, s_sender[pos]->nick);
@@ -198,10 +269,11 @@ void get_position(irc_session_t * session, const char * event, const char * orig
s_sender[pos]->lon_set = 0;
s_sender[pos]->lat_set = 0;
-
- free(sender_org);
+ // s_sender[pos]->lat = '\0';
+ // s_sender[pos]->lon = '\0';
}
-
+ free(sender_org);
+
irc_cmd_msg(session, "#test", "ack");
}
}
@@ -216,24 +288,27 @@ 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]->lat = (char*) malloc(sizeof(char) * 8);
- s_sender[i]->lon = (char*) malloc(sizeof(char) * 8);
+ s_sender[i]->lat = (char*) malloc(sizeof(char) * 9);
+ s_sender[i]->lon = (char*) malloc(sizeof(char) * 9);
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 = (int) malloc(sizeof(int));
s_sender[i]->lat_set = 0;
- s_sender[i]->lon_set = (int) malloc(sizeof(int));
+ //s_sender[i]->lon_set = (int) malloc(sizeof(int));
s_sender[i]->lon_set = 0;
- s_sender[i]->lat_first = (char*) malloc(sizeof(char) * 5);
- s_sender[i]->lat_second = (char*) malloc(sizeof(char) * 5);
+ s_sender[i]->lat_first = (char*) malloc(sizeof(char) * 6);
+ s_sender[i]->lat_second = (char*) malloc(sizeof(char) * 6);
- s_sender[i]->lon_first = (char*) malloc(sizeof(char) * 5);
- s_sender[i]->lon_second = (char*) malloc(sizeof(char) * 5);
+ s_sender[i]->lon_first = (char*) malloc(sizeof(char) * 6);
+ s_sender[i]->lon_second = (char*) malloc(sizeof(char) * 6);
+
+// s_sender[i]->lat[0] = '\0';
+// s_sender[i]->lon[0] = '\0';
}
}
@@ -252,6 +327,9 @@ void on_connect_receiver(irc_session_t * session, const char * event, const char
irc_cmd_join(session, "#test", NULL);
irc_cmd_msg(session, "#test", "connected");
+
+ free(keyd->key);
+ free(keyd);
}
void receiver_main(void *user)
@@ -260,6 +338,7 @@ 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);