summaryrefslogtreecommitdiffstats
path: root/friendfinder
diff options
context:
space:
mode:
authorPatrick Hornecker2010-01-15 17:39:37 +0100
committerPatrick Hornecker2010-01-15 17:39:37 +0100
commitd9f00dca10f75b7e777ad31711ec3c93fd050851 (patch)
tree3540fd0b0b20e2c352f015ad31daa69cd193283e /friendfinder
parentkeys are read vom from file key.pem now (diff)
downloadfriendfinder-d9f00dca10f75b7e777ad31711ec3c93fd050851.tar.gz
friendfinder-d9f00dca10f75b7e777ad31711ec3c93fd050851.tar.xz
friendfinder-d9f00dca10f75b7e777ad31711ec3c93fd050851.zip
messages converted into blocks of 7*char, and send them
Diffstat (limited to 'friendfinder')
-rw-r--r--friendfinder/msg_sender.c114
-rw-r--r--friendfinder/msg_sender.h6
-rw-r--r--friendfinder/receiver.c1
3 files changed, 73 insertions, 48 deletions
diff --git a/friendfinder/msg_sender.c b/friendfinder/msg_sender.c
index 4980ad1..4946c37 100644
--- a/friendfinder/msg_sender.c
+++ b/friendfinder/msg_sender.c
@@ -16,6 +16,7 @@ char sender_name[100];
char* nick_from;
char* send_to;
char* msg_to_send;
+char *msg;
irc_dcc_t dccid;
irc_dcc_t buddy_dccid = 1;
@@ -25,6 +26,8 @@ BF_KEY key;
int init_connection(char* server_ip, char* user)
{
printf("MSG_SENDER: initialising connection...\n");
+
+ msg = (char*) malloc(sizeof(char));
session = irc_create_session(&callbacks);
int con = irc_connect(session, server_ip, 6666, NULL, user, user, user);
@@ -50,58 +53,64 @@ void disconnect_msg_sender()
printf("MSG_SENDER: disconnected...\n");
}
-void set_txt_msg(char *msg)
-{
- if (msg != NULL && session != NULL)
- {
- prepare_msg(msg);
- printf("done \n");
- //send_message(session, msg);
- }
- else printf("MSG_SENDER: NULL value \n");
-}
-
-//bekommt noch char** als return value
-void prepare_msg(char *msg)
+struct msg_part* 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!
- printf("part_count %i \n", part_count);
- char *message = (char*) malloc(strlen(msg)*2);
- message = msg;
+ int len_used = 0;
+
+ struct msg_part *msg_p = (struct msg_part*) malloc(sizeof(struct msg_part));
+ msg_p->part_count = len / 7;
+ int inc_part_count = msg_p->part_count + 1;
+ msg_p->msg_parts = (char(*)[inc_part_count]) malloc(sizeof(char*) * inc_part_count);
+
+ char *message = (char*) malloc(len + 1);
+ memcpy(message, msg, len + 1);
+
if (len <= 7)
{
- char *msg_parts[1];
- msg_parts[0] = msg;
- return msg_parts;
+ msg_p->msg_parts[0] = message;
+ return msg_p;
}
if (len > 7)
{
- char **msg_parts = (char(*)[part_count]) malloc(sizeof(char) * part_count);
int i = 0;
- while (i <= part_count)
+ while (i <= msg_p->part_count)
{
- printf("while ( %i < %i ) \n", i, part_count);
- if (i < part_count)
- {
- printf("if ( %i < %i ) \n", i, part_count);
- strncpy(msg_parts[i], message, 7);
- message = message + 7; //FIXME
- printf("msg_parts[%i]: %s \n",i, msg_parts[i]);
+ if (i < msg_p->part_count)
+ {
+ msg_p->msg_parts[i] = (char*) malloc(sizeof(char) * 8);
+
+ strncpy(msg_p->msg_parts[i], message, 7);
+ for (int j = 0; j <= 7; j++)
+ {
+ if (len - len_used >= 7)
+ {
+ *(message + j) = *(message + j + 7);
+ }
+ }
+ len_used += 7;
}
- else if (i == part_count)
+ else if (i == msg_p->part_count)
{
- printf("if ( %i == %i )", i, part_count);
- strncpy(msg_parts[i], message, strlen(msg));
- printf("msg_parts[%i]: %s \n",i, msg_parts[i]);
+ msg_p->msg_parts[i] = (char*) malloc(sizeof(char) * (len - len_used)); //FIXME
+
+ for (int j = 0; j <= (len - len_used); j++)
+ {
+ *(message + j) = *(message + j + len_used);
+ }
+ strncpy(msg_p->msg_parts[i], message, (len - len_used));
}
i++;
}
- //return msg;
}
+ for (int i = 0; i <= msg_p->part_count; i++)
+ {
+ printf("%i %s \n", i, msg_p->msg_parts[i]);
+ }
+ return msg_p;
}
void repair_msg(char* inc_msg, char *msg)
@@ -116,22 +125,31 @@ void repair_msg(char* inc_msg, char *msg)
{
strcat(inc_msg, msg);
strcat(inc_msg, '\0');
+ show_message(msg);
}
}
-void send_message(irc_session_t *session, char *msg)
+void set_txt_msg(char *msg)
{
- if (msg != NULL)
+ if (msg != NULL && session != NULL)
{
- char *crypted_msg = (char*) malloc(sizeof(msg));
-
- BF_ecb_encrypt(msg, crypted_msg, &key, BF_ENCRYPT);
+ struct msg_part *msg_p = (struct msg_part*) malloc(sizeof(struct msg_part));
+ msg_p = prepare_msg(msg);
+ send_message(session, msg_p);
+ }
+ else printf("MSG_SENDER: NULL value \n");
+}
- int i = irc_cmd_msg(session, "#msg", crypted_msg);
-
- if (i == 0)
+void send_message(irc_session_t *session, struct msg_part *msg_p)
+{
+ if (msg_p->msg_parts != NULL)
+ {
+ for (int i = 0; i <= msg_p->part_count; i++)
{
- printf("MSG_SENDER: message '%s' sent successful \n", msg);
+ char *crypted_msg = (char*) malloc(sizeof(char));
+ BF_ecb_encrypt(msg_p->msg_parts[i], crypted_msg, &key, BF_ENCRYPT);
+ irc_cmd_msg(session, "#msg", crypted_msg);
+ free(crypted_msg);
}
}
else return;
@@ -146,11 +164,13 @@ void on_connect(irc_session_t * session, const char * event, const char * origin
irc_cmd_msg(session, "#msg", "connected");
BF_set_key(&key, strlen(_key) - 1, _key);
+// 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));
+ //char *msg = (char*) malloc(sizeof(char));
+ char *inc_msg = (char*) malloc(sizeof(char));
irc_target_get_nick(origin, sender_name, sizeof(sender_name));
@@ -163,13 +183,13 @@ void on_channel(irc_session_t * session, const char * event, const char * origin
else
{
- BF_ecb_encrypt(params[1], msg, &key, BF_DECRYPT);
+ BF_ecb_encrypt(params[1], inc_msg, &key, BF_DECRYPT);
printf("%s: %s \n", params[0], msg);
- show_message(msg);
+ //show_message(msg);
+ repair_msg(inc_msg, msg);
}
}
- free(msg);
}
void msg_main_loop(void *nicknames)
diff --git a/friendfinder/msg_sender.h b/friendfinder/msg_sender.h
index c7497c1..9205e14 100644
--- a/friendfinder/msg_sender.h
+++ b/friendfinder/msg_sender.h
@@ -7,6 +7,12 @@ struct nick
char *to;
};
+struct msg_part
+{
+ char **msg_parts;
+ int part_count;
+};
+
/* inits main loop of message sender. callbacks are initialized in this function */
void msg_main_loop(void *nicknames);
diff --git a/friendfinder/receiver.c b/friendfinder/receiver.c
index b97e94c..160b547 100644
--- a/friendfinder/receiver.c
+++ b/friendfinder/receiver.c
@@ -63,7 +63,6 @@ void dump_data(char* lat, char* lon, char* nick)
pos->lon = lon;
pos->nick = nick;
- printf("%s || %s \n", pos->lat, pos->lon);
draw_user(pos);
}