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