summaryrefslogtreecommitdiff
path: root/libpurple/protocols/qq/file_trans.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpurple/protocols/qq/file_trans.c')
-rw-r--r--libpurple/protocols/qq/file_trans.c32
1 files changed, 6 insertions, 26 deletions
diff --git a/libpurple/protocols/qq/file_trans.c b/libpurple/protocols/qq/file_trans.c
index bc6c2f024d..afdb89eead 100644
--- a/libpurple/protocols/qq/file_trans.c
+++ b/libpurple/protocols/qq/file_trans.c
@@ -76,26 +76,10 @@ static guint32 _encrypt_qq_uid(guint32 uid, guint32 key)
return (~uid) ^ key;
}
-static void _fill_filename_md5(const gchar *filename, guint8 *md5)
-{
- PurpleCipher *cipher;
- PurpleCipherContext *context;
-
- g_return_if_fail(filename != NULL && md5 != NULL);
-
- cipher = purple_ciphers_find_cipher("md5");
- context = purple_cipher_context_new(cipher, NULL);
- purple_cipher_context_append(context, (guint8 *) filename, strlen(filename));
- purple_cipher_context_digest(context, 16, md5, NULL);
- purple_cipher_context_destroy(context);
-}
-
static void _fill_file_md5(const gchar *filename, gint filelen, guint8 *md5)
{
FILE *fp;
guint8 *buffer;
- PurpleCipher *cipher;
- PurpleCipherContext *context;
size_t wc;
const gint QQ_MAX_FILE_MD5_LENGTH = 10002432;
@@ -118,11 +102,7 @@ static void _fill_file_md5(const gchar *filename, gint filelen, guint8 *md5)
return;
}
- cipher = purple_ciphers_find_cipher("md5");
- context = purple_cipher_context_new(cipher, NULL);
- purple_cipher_context_append(context, buffer, filelen);
- purple_cipher_context_digest(context, 16, md5, NULL);
- purple_cipher_context_destroy(context);
+ qq_get_md5(md5, QQ_KEY_LENGTH, buffer, filelen);
}
static gint _qq_get_file_header(qq_file_header *fh, guint8 *buf)
@@ -265,7 +245,7 @@ static gint _qq_send_file(PurpleConnection *gc, guint8 *data, gint len, guint16
ft_info *info;
qd = (qq_data *) gc->proto_data;
- g_return_val_if_fail(qd->session_key != NULL, -1);
+
info = (ft_info *) qd->xfer->data;
raw_data = g_newa(guint8, MAX_PACKET_SIZE);
@@ -395,7 +375,7 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
guint8 *raw_data, filename_md5[QQ_KEY_LENGTH], file_md5[QQ_KEY_LENGTH];
gint bytes;
guint32 fragment_size = 1000;
- gchar *filename;
+ const char *filename;
gint filename_len, filesize;
qq_data *qd;
ft_info *info;
@@ -403,7 +383,7 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
qd = (qq_data *) gc->proto_data;
info = (ft_info *) qd->xfer->data;
- filename = (gchar *) purple_xfer_get_filename(qd->xfer);
+ filename = purple_xfer_get_filename(qd->xfer);
filesize = purple_xfer_get_size(qd->xfer);
raw_data = g_newa(guint8, MAX_PACKET_SIZE);
@@ -423,11 +403,11 @@ static void _qq_send_file_data_packet(PurpleConnection *gc, guint16 packet_type,
{
case QQ_FILE_BASIC_INFO:
filename_len = strlen(filename);
- _fill_filename_md5(filename, filename_md5);
+ qq_get_md5(filename_md5, sizeof(filename_md5), (guint8 *)filename, filename_len);
_fill_file_md5(purple_xfer_get_local_filename(qd->xfer),
purple_xfer_get_size(qd->xfer),
file_md5);
-
+
info->fragment_num = (filesize - 1) / QQ_FILE_FRAGMENT_MAXLEN + 1;
info->fragment_len = QQ_FILE_FRAGMENT_MAXLEN;