#include #include #include #include #include #include "openssl/blowfish.h" #include "draw_user.h" 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 username_length; int ret; int got_lat = 0; int got_lon = 0; BF_KEY key; void receiver_set_ip(char *_ip) { receiver_server_ip = _ip; } int init_connection_receiver(char* server_ip, char* user) { printf("RECEIVER: initialising connection...\n"); session = irc_create_session(&callbacks); int con = irc_connect(session, server_ip, 6666, NULL, user, "receiver", "receiver"); if (con != 0) { printf("RECEIVER: connection error-code: %i \n", con); return 1; } if (irc_is_connected(session) == 1) { printf("RECEIVER: connected...\n"); return 0; } } void disconnect_receiver() { irc_disconnect(session); irc_destroy_session(session); printf("RECEIVER: disconnected...\n"); } void dump_data(char* lat, char* lon, char* nick) { struct position *pos = (struct position*) malloc(sizeof(struct position)); pos->lat = lat; pos->lon = lon; pos->nick = nick; draw_user(pos); } 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(char)); char *decrypted_lon = (char*) malloc(sizeof(char)); 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 (counter % 2 != 0) { BF_ecb_encrypt(params[1], decrypted_lat, &key, BF_DECRYPT); lat = decrypted_lat; got_lat = 1; } if (counter % 2 == 0 && strcmp(last_sender, sender_name) == 0 ) { BF_ecb_encrypt(params[1], decrypted_lon, &key, BF_DECRYPT); lon = decrypted_lon; got_lon = 1; } if(got_lon == 1 && got_lat == 1) { double _lat, _lon; _lat = atof(lat); _lon = atof(lon); /* if (_lat < 0) { new_lon = atof(lat) * (-1); sprintf(helper_lon, "%f", new_lon); new_lat = atof(lon); sprintf(lat, "%f", new_lat); } else { _lat = _lat * (-1); sprintf(lat, "%f", _lat); sprintf(helper_lon, "%f", _lon); } printf("RECEIVER: lat %s lon %s \n", lat, helper_lon); dump_data(lat, helper_lon, sender_name);*/ if (_lat > _lon) { dump_data(lat, lon, sender_name); } if (_lat < _lon) { dump_data(lon, lat, sender_name); } got_lon = 0; got_lat = 0; } irc_cmd_msg(session, "#test", sender_name); counter++; } } 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"); BF_set_key(&key, 5, "abcde"); irc_cmd_join(session, "#test", NULL); irc_cmd_msg(session, "#test", "connected"); } void receiver_main(void *user) { memset(&callbacks, 0, sizeof(callbacks)); callbacks.event_channel = get_position; callbacks.event_connect = on_connect_receiver; char username[100]; sprintf(username, "%s", (char*) user); sprintf(own_nickname, "%s", username); username_length = strlen(username); if (receiver_server_ip != NULL && user != NULL) { strcat(username, "_r"); if (init_connection_receiver(receiver_server_ip, username) == 0) { printf("RECEIVER: connection succesfull...\n"); irc_run(session); } } else { printf("RECEIVER: error ip not set! Receiver can't be started\n"); } }