summaryrefslogblamecommitdiffstats
path: root/friendfinder/sender.c
blob: 8ba59809d7628391d8942dbf2bf4f8ed0990a19a (plain) (tree)
1
2
3
4
5
6
7
8






                             
                   





                              

                              
                        

                   


           




                                             
                                                       
 
                                                       

                                                 
                                                                                


                                           
                                                  





                         
                                                                    



                         
                        
 
                                            















                                                                                            
                                                




                      









                                                                                                                              

                                                                

         









                                 

                                  




                                                  
                                           


                                                 
                                           



                                                                


                                                                        








                                                                                   
                                                                             



                            
                                                                            



                            
                                                                            














                                                                                                                               
                                       
















                                                                                                                                       
                            





                                                 
                                     
 
                                     
         





                                                                                                                                            
 






                                                                              
         

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

#include "libircclient.h"
#include "openssl/blowfish.h"
#include "sender.h"

static irc_session_t *session;
irc_callbacks_t callbacks;
int msg_count = 0;
int ack_count = 0;
int resend = 0;
char *nick;
char *sender_server_ip = NULL;
double own_lat, own_lon;

int first_send = 0;

BF_KEY key;

void sender_set_ip(char *_sender_server_ip)
{
	sender_server_ip = _sender_server_ip;
}

int init_connection_sender(char* server_ip, char* user)
{
	printf("SENDER: initialising connection...\n");

	session = irc_create_session(&callbacks);
	int con = irc_connect(session, server_ip, 6669, NULL, user, user, user);
	
	if (irc_is_connected(session) == 1)
	{
		printf("SENDER: connected... \n");
		return 0;
	
	}

	if (con != 0)
	{
		printf("SENDER: connection error-code: %i \n", con);
		return 1;
	}
}

void disconnect_sender()
{
	printf("SENDER: disconnected...\n");
	irc_disconnect(session);
	irc_destroy_session(session);
}

//create random position between two y coordinates. bb_y_left < bb_y_right, bb_y_left = 0!
int random_position_y(int bb_y_right)
{
	return rand() % bb_y_right;
}

//create random position between two x coordinates. bb_x_lower < bb_x_upper, bb_x_lower = 0!
int random_position_x(int bb_x_upper)
{
	return rand() % bb_x_upper;
}

void set_sender_position(double lat, double lon)
{		
	own_lat = lat;
	own_lon = lon;
}

void send_position(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{

	unsigned char crypted_lat[64];
	unsigned char crypted_lon[64];

	if (first_send == 0)
	{
		BF_set_key(&key, 5, "abcde");

		irc_cmd_join(session, "#test", NULL);
		irc_cmd_msg(session, "#test", "connected");	
	}

/*
	char lat_pos[3];
	lat_pos[0] = "47.992119";
	lat_pos[1] = "47.984882";
	lat_pos[2] = "47.984708";
	char lon_pos[3];
	lon_pos[0] = "7.850584";
	lon_pos[1] = "7.857411";
	lon_pos[2] = "7.843972";
*/
	for(int i = 0; i < 2; i++)
	{
	// 	int lat = random_position_x(1000);
	//	printf("lat position %i \n", lat);
	//	int lon = random_position_y(1000);
	//	printf("lon position %i \n", lon);
		
       	        unsigned char lat_char[16];
                sprintf(lat_char, "%f", own_lat);
	//	itoa(own_lat, lat_char, 10);

                unsigned char lon_char[16];
	        sprintf(lon_char, "%f", own_lon);
	//	itoa(own_lat, lat_char, 10);

		printf("lat %s, lon %s \n", lat_char, lon_char);

 		BF_ecb_encrypt(lat_char, crypted_lat, &key, BF_ENCRYPT);
		BF_ecb_encrypt(lon_char, crypted_lon, &key, BF_ENCRYPT);
			
		int _x = irc_cmd_msg(session, "#test", crypted_lat);
		int _y = irc_cmd_msg(session, "#test", crypted_lon); 	
	
		//increase counter variable, which counts number of send positions!
		msg_count = msg_count + 2;

		if (_x == 0 && _y == 0)
		{
		//	printf("SENDER: send succesfull %i %i \n", lat, lon);
		}

		if (_y != 0)
		{	
			printf("SENDER: error code due sending: %i \n", _y);
		}

		if (_x != 0)
		{
			printf("SENDER: error code due sending: %i \n", _x);
		}
	
		first_send = 1;
	}
	
	if(resend == 1)
	{
		get_aknowledge(session, event, origin, params, count);
		resend = 0;
		ack_count = 0;
	}
}

void get_aknowledge(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
	if(strcmp(params[1], "_r") > 0)
	{	
		//use count variable, to count number of aknowledged positions! second number has to be twice as big, as the number of 
		//for-runs in send_position
		if (ack_count <= 3 && msg_count > 0)
		{	
			ack_count++;
			msg_count--;
		}
		
		if (ack_count == 4 && msg_count == 0)
		{	
			resend = 1;
			send_position(session, event, origin, params, count);
		}
	}
}

void sender_main(void *user)
{
        memset(&callbacks, 0, sizeof(callbacks));

	callbacks.event_connect = send_position;
	callbacks.event_channel = get_aknowledge;
	
	char *username = (char*)user;

	if (sender_server_ip != NULL)
	{
		//TODO pointer zeigt immer auf gleiche variable....damit wird immer gleicher from wert genutzt und _r _s angehängt....fixen
		strcat(username, "_s");

		if (init_connection_sender(sender_server_ip, username) == 0)
		{
			printf("SENDER: connection succesfull...\n");

			irc_run(session);
		}
	}
	
	else
	{
		printf("SENDER: error ip not set! Sender can't be started\n");
	}
}