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







                             



                              
                




                   
                          







                                                
                                                           





                                                                                
                                                      





                         
                                                                        



                         
                            
 

                                     
                                                        





                           










                                                                                                                              
                                         


                               
                                                                 




                                   
                                                                            













                                                                               
                                                                                    

                      












                                                    
                                                               


                                                                        


                                                                       
                 
                                                                                   
                 





                                                                                                                        
                              






                                                                      
                                                                              


                                                                                         
                                                                     



                     

                                                                       


















                                                                                                                           
                                 


                                                
                                                                      
         


                                                                                                                           
                                 

                                                                  
                                                          



            
                                                           
         


 
                                   







                                                  



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

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

#include "msg_sender.h"

static irc_session_t *session;
irc_callbacks_t callbacks;

char* nick_from;
char* send_to;
char* received_msg;
char* msg_to_send;

irc_dcc_t dccid;
irc_dcc_t buddy_dccid = 1;

BF_KEY key;

int run_session = 0;
int message_available = 0;

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

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

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

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

void set_txt_msg(char *msg)
{
	if (msg != NULL)
	{
		send_message(session, msg);
	}
}

void dump_message(char *msg)
{
	received_msg = msg;
}

void dcc_recv_callback (irc_session_t * session, irc_dcc_t id, int status, void * ctx, const char * data, unsigned int length)
{
	printf("dcc_recv_callback() \n");
	switch (status)
	{
	case LIBIRC_ERR_CLOSED:
		printf ("MSG_SENDER: DCC %d: chat closed\n", id);
		break;

	case 0:
		if ( data == NULL )
		{
			printf ("MSG_SENDER: DCC %d: chat connected\n", id);
			send_message(session, "im here");
		}
		else 
		{
			char *decrypted_msg = (char*) malloc(sizeof(data));
		
			BF_ecb_encrypt(data, decrypted_msg, &key, BF_DECRYPT);
			
			show_message(decrypted_msg);
			printf("incoming message:	%s \n", decrypted_msg);
		}
		break;

	default:
		printf ("MSG_SENDER: DCC %d: error %s\n", id, irc_strerror(status));
		break;
	}
}

int i = 0;

void send_message(irc_session_t *session, char *msg)
{
//	printf("your message %i = test 	\n", i);
	
	//char msg[64];
	if (msg != NULL)
	{
		char crypted_msg[64];

		printf("MSG_SENDER: send_message: %s \n", msg);
	
		BF_ecb_encrypt(msg, crypted_msg, &key, BF_ENCRYPT);	

		int i = irc_dcc_msg(session, buddy_dccid, crypted_msg);
	
		if (i == 0)
		{
			printf("MSG_SENDER: message '%s' sent successful \n", msg);
		}
	}
	else return;
}

void on_join(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
	printf("on_join()\n");

	char sender_name[90];
	
	irc_target_get_nick(origin, sender_name, sizeof(sender_name));
	
	if (strcmp(sender_name, send_to) == 0)
	{	
		printf("MSG_SENDER: Buddy %s joined the channel \n", send_to);
	
		if (irc_dcc_chat(session, NULL, send_to, dcc_recv_callback, &dccid) != 0)
		{
			printf("MSG_SENDER: ddc_chat_init_error \n");
		}

		else 
		{
			printf("MSG_SENDER: dcc_chat_init_success \n");
			printf("MSG_SENDER: dccid %d \n", dccid);

			char _dccid[2];
			sprintf(_dccid, "%d", dccid);
			irc_cmd_msg(session, "#msg", _dccid);
		}
	}
	//irc_cmd_quit(session, "on_join");
}

void on_connect(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
	irc_cmd_join(session, "#msg", NULL);	
	irc_cmd_msg(session, "#msg", "connected"); 		

	BF_set_key(&key, 5, "abcde");	
}

void on_channel(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
//	printf("on_channel()\n");
	if (strcmp(params[1], "connected") != 0)
	{
		buddy_dccid = atoi(params[1]);
		printf("MSG_SENDER: buddy_dccid: %d \n", buddy_dccid);
	}
}
void on_dcc_req(irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count)
{
	printf("on_dcc_req()\n");
	if(irc_dcc_accept (session, 1, 0, dcc_recv_callback) != 0)
	{
		printf("MSG_SENDER: ddc_chat_decline \n");
	}

	else
	{
		printf("MSG_SENDER: dcc_chat_accepted \n");
	}
}


void msg_main_loop(void *nicknames)
{
	memset(&callbacks, 0, sizeof(callbacks));

	callbacks.event_connect = on_connect;
	callbacks.event_join = on_join;
	callbacks.event_dcc_chat_req = on_dcc_req;
	callbacks.event_channel = on_channel;

	struct nick *nicks= (struct nick*) malloc(sizeof(struct nick));
	nicks = (struct nick*) nicknames;
	nick_from = nicks->from;
	send_to = nicks->to;

 	if (init_connection("127.0.0.1", nick_from) == 0)
	{	
		printf("MSG_SENDER: connection succesfull\n");
		irc_run(session);
	}
}