summaryrefslogtreecommitdiffstats
path: root/friendfinder/receiver.c
diff options
context:
space:
mode:
authorPatrick Hornecker2010-02-08 13:47:07 +0100
committerPatrick Hornecker2010-02-08 13:47:07 +0100
commitb0aea6231713cfa9544a501d64b5405cb66a05af (patch)
treea90fbbcdebbfb41485772dcd6334e4120a0994a4 /friendfinder/receiver.c
parentbarcode gui improvement (diff)
downloadfriendfinder-b0aea6231713cfa9544a501d64b5405cb66a05af.tar.gz
friendfinder-b0aea6231713cfa9544a501d64b5405cb66a05af.tar.xz
friendfinder-b0aea6231713cfa9544a501d64b5405cb66a05af.zip
receiver improved
Diffstat (limited to 'friendfinder/receiver.c')
-rw-r--r--friendfinder/receiver.c136
1 files changed, 82 insertions, 54 deletions
diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c
index 980f3a1..a33262c 100644
--- a/friendfinder/receiver.c
+++ b/friendfinder/receiver.c
@@ -10,18 +10,16 @@
static irc_session_t *session;
irc_callbacks_t callbacks;
-int counter = 0;
+
char sender_name[100];
char own_nickname[100];
-char *lat, *lon;
char *receiver_server_ip;
-char *last_sender;
-int sender_count = 0;
int username_length;
-int ret;
-int got_lat = 0;
-int got_lon = 0;
+
+struct sender **s_sender;
+int s_sender_size;
+
BF_KEY key;
void receiver_set_ip(char *_ip)
@@ -57,6 +55,25 @@ void disconnect_receiver()
printf("RECEIVER: disconnected...\n");
}
+int get_sender_array_pos(char* nick)
+{
+ for (int i = 0; i < s_sender_size; i++)
+ {
+ if (s_sender[i]->is_init == 1 && strcmp(s_sender[i]->nick, nick) == 0)
+ {
+ return i;
+ }
+
+ if (s_sender[i]->is_init == 0 && strcmp(s_sender[i]->nick, nick) != 0)
+ {
+ s_sender[i]->is_init = 1;
+ s_sender[i]->nick = nick;
+
+ return i;
+ }
+ }
+}
+
void dump_data(char* lat, char* lon, char* nick)
{
struct position *pos = (struct position*) malloc(sizeof(struct position));
@@ -64,94 +81,105 @@ void dump_data(char* lat, char* lon, char* nick)
pos->lon = lon;
pos->nick = nick;
- printf("RECEIVER: dump_data(lat: %s, lon: %s, nick %s) \n", lat, lon, nick);
-
draw_user(pos);
}
void get_position(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
-
-// int code = irc_cmd_names (session, "#test");
-// printf("%i \n", code);
- irc_send_raw (session, "WHO %s", "#test");
-
- char *decrypted_lat = (char*) malloc(sizeof(char) * 9);
- char *decrypted_lon = (char*) malloc(sizeof(char) * 9);
-
+ char *decrypted;
+
char *sender_org = (char*) malloc(username_length + 1);
irc_target_get_nick(origin, sender_name, sizeof(sender_name));
strncpy(sender_org, sender_name, username_length);
sender_org[username_length] = '\0';
- last_sender = (char*) malloc(strlen(sender_name));
- last_sender = sender_name;
-
- if (sender_name != NULL && strcmp(sender_org, own_nickname) != 0 && strcmp(sender_name, "_s") > 0 && strcmp(params[1], "connected") != 0)
+ if (strcmp(sender_org, own_nickname) != 0 && strcmp(sender_name, "_s") > 0 && strcmp(params[1], "connected") != 0
+ && strcmp(params[1], "ack") != 0)
{
- if (counter % 2 == 0 && strcmp(last_sender, sender_name) == 0 && sender_count <= 1)
+ int pos = get_sender_array_pos(sender_org);
+
+ if (s_sender[pos]->lat_set == 0)
{
- BF_ecb_encrypt(params[1], decrypted_lat, &key, BF_DECRYPT);
- decrypted_lat[8] = '\0';
- lat = decrypted_lat;
- got_lat = 1;
+ decrypted = (char*) malloc(sizeof(char) * 8);
+ BF_ecb_encrypt(params[1], decrypted, &key, BF_DECRYPT);
+ s_sender[pos]->lat = decrypted;
+ // printf("s_sender[%i]->lat: %s \n", pos, s_sender[pos]->lat);
+ s_sender[pos]->lat_set = 1;
}
-
- if (counter % 2 != 0 && strcmp(last_sender, sender_name) == 0 && sender_count <= 1)
+
+ else if (s_sender[pos]->lon_set == 0)
{
- BF_ecb_encrypt(params[1], decrypted_lon, &key, BF_DECRYPT);
- decrypted_lon[8] = '\0';
- lon = decrypted_lon;
- got_lon = 1;
+ decrypted = (char*) malloc(sizeof(char) * 8);
+ BF_ecb_encrypt(params[1], decrypted, &key, BF_DECRYPT);
+ s_sender[pos]->lon = decrypted;
+ // printf("s_sender[%i]->lon: %s \n", pos, s_sender[pos]->lon);
+ s_sender[pos]->lon_set = 1;
}
-
- if(got_lon == 1 && got_lat == 1 && lon != NULL && lat != NULL)
+
+ if(s_sender[pos]->lon_set == 1 && s_sender[pos]->lat_set == 1)// && lon != NULL && lat != NULL)
{
double _lat, _lon;
- _lat = atof(lat);
- _lon = atof(lon);
+ _lat = atof(s_sender[pos]->lat);
+ _lon = atof(s_sender[pos]->lon);
- if (_lat > _lon)
+ if (_lat > _lon && _lat == _lat && _lon == _lon)
{
- dump_data(lat, lon, sender_name);
+ dump_data(s_sender[pos]->lat, s_sender[pos]->lon, s_sender[pos]->nick);
}
- if (_lat < _lon)
+ if (_lat < _lon && _lat == _lat && _lon == _lon)
{
- dump_data(lon, lat, sender_name);
+ dump_data(s_sender[pos]->lon, s_sender[pos]->lat, s_sender[pos]->nick);
}
- got_lon = 0;
- got_lat = 0;
+ s_sender[pos]->lon_set = 0;
+ s_sender[pos]->lat_set = 0;
- free(decrypted_lon);
- free(decrypted_lat);
+ free(decrypted);
free(sender_org);
}
+
+ irc_cmd_msg(session, "#test", "ack");
+ }
+}
- if (sender_count == 1)
- sender_count = 0;
+void init_sender_struct(int number)
+{
+ s_sender = (struct sender(*)[number]) malloc(sizeof(struct sender*) * number);
+ s_sender_size = number;
- if (sender_count == 0)
- sender_count = 1;
+ 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) * 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;
- irc_cmd_msg(session, "#test", sender_name);
- counter++;
+ 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;
}
}
void on_connect_receiver(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
printf("RECEIVER: on_connect_receiver \n");
-
+
char *_key = read_key();
- BF_set_key(&key, strlen(_key) -1, _key);
+ BF_set_key(&key, strlen(_key) - 1, _key);
+
+ init_sender_struct(3);
irc_cmd_join(session, "#test", NULL);
irc_cmd_msg(session, "#test", "connected");
-
}
void receiver_main(void *user)
@@ -161,7 +189,7 @@ void receiver_main(void *user)
callbacks.event_channel = get_position;
callbacks.event_connect = on_connect_receiver;
- char username[100];
+ char username[20];
sprintf(username, "%s", (char*) user);
sprintf(own_nickname, "%s", username);
username_length = strlen(username);