summaryrefslogblamecommitdiffstats
path: root/receiver/receiver.c
blob: abe703bd7e3921e2e46499fe83c51f45c3a94db2 (plain) (tree)





















































































                                                                                                                             
                                                  



                                                                   
                    
                 
                                  






































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

#include "openssl/blowfish.h"

static irc_session_t *session;
irc_callbacks_t callbacks;
int counter = 0;
char sender_name[100];

int ret;

BF_KEY key;

int init_connection(char* server_ip, char* user)
{
	printf("init_connection()\n");	
	
	session = irc_create_session(&callbacks);
	int con = irc_connect(session, server_ip, 6666, NULL, user, "receiver", "receiver");
	if (con != 0)
	{
		printf("connection error-code: %i \n", con);

		return 0;
	}

	if (irc_is_connected(session) == 1)
	{
		printf("connecting...\n");
		return 1;
	}
}

void disconnect()
{
	irc_disconnect(session);
	irc_destroy_session(session);
}

char* dump_event (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
        char* msg = " ";

	//msg = params[2];
	//printf("%c: \n",params[2]);
       	

	return msg;
}

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(params[1]));
	char *decrypted_lon = (char*) malloc(sizeof(params[1]));

	irc_target_get_nick(origin, sender_name, sizeof(sender_name));
	
	if (sender_name != NULL && strcmp(sender_name, "sender") == 1)
	{

		//first message is the ret param, which is needed for message decryption
		if (counter == 0)
		{
			//BF_set_key(&key, 5, "abcde");	
		}

	        //dump_event(session, event, origin, params, count);
		if (counter % 2 == 0)
		{
			BF_ecb_encrypt(params[1], decrypted_lat, &key, BF_DECRYPT);		
	    		printf("lat %s, origin: %s \n", decrypted_lat, sender_name);
		}
		
		if (counter % 2 != 0)
		{
			BF_ecb_encrypt(params[1], decrypted_lon, &key, BF_DECRYPT);
			printf("lon %s , origin: %s \n", decrypted_lon, sender_name);
			printf("====\n");
		}
	
		//send an aknowledge to the sender (=sendername, to differ between multiple sender)
//		if (strcmp(params[1], "128") != 0)
		{ 
			irc_cmd_msg(session, "#test", sender_name);
			counter++;
		}
//		else
		{
//			counter++;
		}
	}

}

void on_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
	BF_set_key(&key, 5, "abcde");	
	
	irc_cmd_join(session, "#test", NULL);	
	irc_cmd_msg(session, "#test", "connected"); 		
}

int main (int argc, char **argv)
{
	
	memset(&callbacks, 0, sizeof(callbacks));
	
	callbacks.event_channel = get_position;
	callbacks.event_connect = on_connect;
	
	char *user = argv[1];

	if (init_connection("127.0.0.1", user) == 1)
	{
		irc_run(session);
		printf("done? \n");
		return 1;
	}

	else 
	{
		printf("aborting...\n");
		return 0;
	}

}