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







                             
                



                              
                      
                
              


                  
                          


           

                                                
                                                           

                                                 
                                                                                


                                           
                                                      





                         
                                                                        



                         
                            
 

                                     
                                                        



                           
                                           
         

                                             
         

                                                 

 







































                                                                                                                                              

                                                    

                        
                                                                
 

                                                                        
                                                                  

                           
                 
                                                                                   
                 



                    










                                                                                                                           


                                                                      
 















                                                                                

 
                                   



                                                 

                                             
                                                                        


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

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

#include "msg_sender.h"
#include "gui.h"

static irc_session_t *session;
irc_callbacks_t callbacks;

char sender_name[100];
char* nick_from;
char* send_to;
char* msg_to_send;

irc_dcc_t dccid;
irc_dcc_t buddy_dccid = 1;

BF_KEY key;

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, 6666, 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 && session != NULL)
	{
		prepare_msg(msg);
		//send_message(session, msg);
	}
	else printf("MSG_SENDER: NULL value \n");
	
}

void prepare_msg(char *msg)
{
	int len = strlen(msg);
	int part_count = (strlen(msg) / 7); //division mit rest, wenn ich mich nicht irre => wird auf nächst kleinere zahl abgerundet! passt!
	
	if (len <= 7)
	{
		char *msg_parts[1];
		msg_parts[0] = msg;
		return msg;
	}
	
	if (len > 7)
	{
		char **msg_parts = (char(*)[part_count]) malloc(sizeof(char) * part_count);
		int i = 0;
		
		while (i < part_count)
		{
			if (i < part_count - 1)
			{
				strncpy(msg_parts[i], msg, 7);
			 	msg = &msg +7; //FIXME
				printf("msg_parts[%i]: %s \n",i, msg_parts[i]);
			}
			else if (i == part_count - 1)
			{	
				printf("%s \n", msg);
				strncpy(msg_parts[i], msg, strlen(msg));
			}
			i++;
		}
		for (int j = 0; j < part_count; j++)
		{
			printf("%i: %s \n", j, msg_parts[j]);
		} 
		return msg;
	}
}

void send_message(irc_session_t *session, char *msg)
{
	if (msg != NULL)
	{
		char *crypted_msg = (char*) malloc(sizeof(msg));

		BF_ecb_encrypt(msg, crypted_msg, &key, BF_ENCRYPT);	

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


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)
{
	char *msg = (char*) malloc(sizeof(char));

	irc_target_get_nick(origin, sender_name, sizeof(sender_name));

	if (nick_from = sender_name)
	{ 
		if (strcmp(params[1], "connected") == 0)
		{
			return;
		}	
		
		else
		{
			BF_ecb_encrypt(params[1], msg, &key, BF_DECRYPT);	
			printf("%s:   %s \n", params[0], msg);

			show_message(msg);
		}
	}
	free(msg);
}

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

	callbacks.event_connect = on_connect;
	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);
	}
}