Mercurial > pidgin
comparison src/protocols/yahoo/yahoo_filexfer.c @ 10976:be22eb8fa671
[gaim-migrate @ 12802]
Fix encoding of filename
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Mon, 06 Jun 2005 22:38:11 +0000 |
parents | ca3e0882d377 |
children | bd8ac1d4b2f2 |
comparison
equal
deleted
inserted
replaced
10975:e5f99cbcda9c | 10976:be22eb8fa671 |
---|---|
92 const char *host; | 92 const char *host; |
93 int content_length, port; | 93 int content_length, port; |
94 GaimConnection *gc; | 94 GaimConnection *gc; |
95 GaimAccount *account; | 95 GaimAccount *account; |
96 struct yahoo_data *yd; | 96 struct yahoo_data *yd; |
97 char *filename; | 97 char *filename, *encoded_filename; |
98 | 98 |
99 gaim_debug(GAIM_DEBUG_INFO, "yahoo", | 99 gaim_debug(GAIM_DEBUG_INFO, "yahoo", |
100 "AAA - in yahoo_sendfile_connected\n"); | 100 "AAA - in yahoo_sendfile_connected\n"); |
101 if (!(xfer = data)) | 101 if (!(xfer = data)) |
102 return; | 102 return; |
122 | 122 |
123 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, YAHOO_STATUS_AVAILABLE, yd->session_id); | 123 pkt = yahoo_packet_new(YAHOO_SERVICE_FILETRANSFER, YAHOO_STATUS_AVAILABLE, yd->session_id); |
124 | 124 |
125 size = g_strdup_printf("%" G_GSIZE_FORMAT, gaim_xfer_get_size(xfer)); | 125 size = g_strdup_printf("%" G_GSIZE_FORMAT, gaim_xfer_get_size(xfer)); |
126 filename = g_path_get_basename(gaim_xfer_get_local_filename(xfer)); | 126 filename = g_path_get_basename(gaim_xfer_get_local_filename(xfer)); |
127 encoded_filename = yahoo_string_encode(gc, filename, NULL); | |
127 | 128 |
128 yahoo_packet_hash(pkt, "sssss", 0, gaim_connection_get_display_name(gc), | 129 yahoo_packet_hash(pkt, "sssss", 0, gaim_connection_get_display_name(gc), |
129 5, xfer->who, 14, "", 27, filename, 28, size); | 130 5, xfer->who, 14, "", 27, encoded_filename, 28, size); |
130 | 131 |
131 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt); | 132 content_length = YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt); |
132 | 133 |
133 buf = g_strdup_printf("Y=%s; T=%s", yd->cookie_y, yd->cookie_t); | 134 buf = g_strdup_printf("Y=%s; T=%s", yd->cookie_y, yd->cookie_t); |
134 | 135 |
148 write(xfer->fd, "29\xc0\x80", 4); | 149 write(xfer->fd, "29\xc0\x80", 4); |
149 | 150 |
150 g_free(size); | 151 g_free(size); |
151 g_free(post); | 152 g_free(post); |
152 g_free(buf); | 153 g_free(buf); |
154 g_free(encoded_filename); | |
153 g_free(filename); | 155 g_free(filename); |
154 } | 156 } |
155 | 157 |
156 static void yahoo_xfer_init(GaimXfer *xfer) | 158 static void yahoo_xfer_init(GaimXfer *xfer) |
157 { | 159 { |
421 /* Build the file transfer handle. */ | 423 /* Build the file transfer handle. */ |
422 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, from); | 424 xfer = gaim_xfer_new(gc->account, GAIM_XFER_RECEIVE, from); |
423 xfer->data = xfer_data; | 425 xfer->data = xfer_data; |
424 | 426 |
425 /* Set the info about the incoming file. */ | 427 /* Set the info about the incoming file. */ |
426 if (filename) | 428 if (filename) { |
427 gaim_xfer_set_filename(xfer, filename); | 429 char *utf8_filename = yahoo_string_decode(gc, filename, TRUE); |
428 else { | 430 gaim_xfer_set_filename(xfer, utf8_filename); |
431 g_free(utf8_filename); | |
432 } else { | |
429 gchar *start, *end; | 433 gchar *start, *end; |
430 start = g_strrstr(xfer_data->path, "/"); | 434 start = g_strrstr(xfer_data->path, "/"); |
431 if (start) | 435 if (start) |
432 start++; | 436 start++; |
433 end = g_strrstr(xfer_data->path, "?"); | 437 end = g_strrstr(xfer_data->path, "?"); |
434 if (start && *start && end) { | 438 if (start && *start && end) { |
439 char *utf8_filename; | |
435 filename = g_strndup(start, end - start); | 440 filename = g_strndup(start, end - start); |
436 gaim_xfer_set_filename(xfer, filename); | 441 utf8_filename = yahoo_string_decode(gc, filename, TRUE); |
437 g_free(filename); | 442 g_free(filename); |
443 gaim_xfer_set_filename(xfer, utf8_filename); | |
444 g_free(utf8_filename); | |
438 filename = NULL; | 445 filename = NULL; |
439 } | 446 } |
440 } | 447 } |
441 | 448 |
442 gaim_xfer_set_size(xfer, filesize); | 449 gaim_xfer_set_size(xfer, filesize); |