summaryrefslogblamecommitdiffstats
path: root/friendfinder/receiver.c
blob: 980f3a19c50b15229bda3c508342f7938562b3dc (plain) (tree)
1
2
3
4
5
6
7
8
9



                   
                         

                             
                      
                      




                              
                       
                
                         
                  
 
                     
                    
        

                

           




                                 
                                                         
 
                                                                




                                                                                            
                                                                      
 
                         



                                           
                                                   
                
                         


         
                          


                                     
                                              

 
                                                
 
                                                                                  
                       
                       

                         

                                                                                    
                       



                                                                                                                             
 

                                                        

                                                  


                                                               
                                                               
        
                                                                      


                                                          


                                                          
                                                                                                                                                  
         
                                                                                                   
                 

                                                                                   

                                            

                 
                                                                                                   

                                                                                   
                                                

                                            
                 
        
                                                                              
                 



                                          









                                                                 

                                    



                                            
                        
 





                                         

                                                           
         

 
                                                                                                                                    
 
                                                   



                                                        

                                                

                                                        

 
                              
 


                                                 
                                                      
        



                                                
 
                                                       
         
                                       
                






                                                                                
        



                                                                                  
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <libircclient.h>

#include "openssl/blowfish.h"
#include "draw_user.h"
#include "read_file.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 sender_count = 0;
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;

	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 *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 && strcmp(last_sender, sender_name) == 0 && sender_count <= 1)
		{
			BF_ecb_encrypt(params[1], decrypted_lat, &key, BF_DECRYPT);
			decrypted_lat[8] = '\0';
			lat = decrypted_lat;
			got_lat = 1;
		}
		
		if (counter % 2 != 0 && strcmp(last_sender, sender_name) == 0 && sender_count <= 1)
		{
			BF_ecb_encrypt(params[1], decrypted_lon, &key, BF_DECRYPT);
			decrypted_lon[8] = '\0';
			lon = decrypted_lon;
			got_lon = 1;
		}
	
		if(got_lon == 1 && got_lat == 1 && lon != NULL && lat != NULL)
		{
			double _lat, _lon;
			_lat = atof(lat);
			_lon = atof(lon);
			
			if (_lat > _lon)
			{
				dump_data(lat, lon, sender_name);
			}
	
			if (_lat < _lon)
			{
				dump_data(lon, lat, sender_name);
			}

			got_lon = 0;
			got_lat = 0;

			free(decrypted_lon);
			free(decrypted_lat);
			free(sender_org);
		}	

		if (sender_count == 1)
			sender_count = 0;

		if (sender_count == 0)
			sender_count = 1;

		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");
	
	char *_key = read_key();
	
	BF_set_key(&key, strlen(_key) -1, _key);	
	
	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");
	}
}