#include #include #include #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); } }