| 1020 else if (args->type == OSCAR_CAPABILITY_SENDFILE) |
1020 else if (args->type == OSCAR_CAPABILITY_SENDFILE) |
| 1021 { |
1021 { |
| 1022 gchar *filename; |
1022 gchar *filename; |
| 1023 |
1023 |
| 1024 conn->xfer = gaim_xfer_new(account, GAIM_XFER_RECEIVE, sn); |
1024 conn->xfer = gaim_xfer_new(account, GAIM_XFER_RECEIVE, sn); |
| 1025 conn->xfer->data = conn; |
1025 if (conn->xfer) |
| 1026 gaim_xfer_ref(conn->xfer); |
1026 { |
| 1027 gaim_xfer_set_size(conn->xfer, args->info.sendfile.totsize); |
1027 conn->xfer->data = conn; |
| 1028 |
1028 gaim_xfer_ref(conn->xfer); |
| 1029 /* Set the file name */ |
1029 gaim_xfer_set_size(conn->xfer, args->info.sendfile.totsize); |
| 1030 if (g_utf8_validate(args->info.sendfile.filename, -1, NULL)) |
1030 |
| 1031 filename = g_strdup(args->info.sendfile.filename); |
1031 /* Set the file name */ |
| 1032 else |
1032 if (g_utf8_validate(args->info.sendfile.filename, -1, NULL)) |
| 1033 filename = gaim_utf8_salvage(args->info.sendfile.filename); |
1033 filename = g_strdup(args->info.sendfile.filename); |
| 1034 |
1034 else |
| 1035 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) |
1035 filename = gaim_utf8_salvage(args->info.sendfile.filename); |
| 1036 { |
1036 |
| |
1037 if (args->info.sendfile.subtype == AIM_OFT_SUBTYPE_SEND_DIR) |
| |
1038 { |
| |
1039 /* |
| |
1040 * If they are sending us a directory then the last character |
| |
1041 * of the file name will be an asterisk. We don't want to |
| |
1042 * save stuff to a directory named "*" so we remove the |
| |
1043 * asterisk from the file name. |
| |
1044 */ |
| |
1045 char *tmp = strrchr(filename, '\\'); |
| |
1046 if ((tmp != NULL) && (tmp[1] == '*')) |
| |
1047 tmp[0] = '\0'; |
| |
1048 } |
| |
1049 gaim_xfer_set_filename(conn->xfer, filename); |
| |
1050 g_free(filename); |
| |
1051 |
| 1037 /* |
1052 /* |
| 1038 * If they are sending us a directory then the last character |
1053 * Set the message, unless this is the dummy message from an |
| 1039 * of the file name will be an asterisk. We don't want to |
1054 * ICQ client or an empty message from an AIM client. |
| 1040 * save stuff to a directory named "*" so we remove the |
1055 * TODO: Maybe we should strip HTML and then see if strlen>0? |
| 1041 * asterisk from the file name. |
|
| 1042 */ |
1056 */ |
| 1043 char *tmp = strrchr(filename, '\\'); |
1057 if ((message != NULL) && |
| 1044 if ((tmp != NULL) && (tmp[1] == '*')) |
1058 (g_ascii_strncasecmp(message, "<ICQ_COOL_FT>", 13) != 0) && |
| 1045 tmp[0] = '\0'; |
1059 (g_ascii_strcasecmp(message, "<HTML>") != 0)) |
| 1046 } |
1060 { |
| 1047 gaim_xfer_set_filename(conn->xfer, filename); |
1061 gaim_xfer_set_message(conn->xfer, message); |
| 1048 g_free(filename); |
1062 } |
| 1049 |
1063 |
| 1050 /* |
1064 /* Setup our I/O op functions */ |
| 1051 * Set the message (unless this is the dummy message from an |
1065 gaim_xfer_set_init_fnc(conn->xfer, peer_oft_recvcb_init); |
| 1052 * ICQ client or an empty message from an AIM client. |
1066 gaim_xfer_set_end_fnc(conn->xfer, peer_oft_recvcb_end); |
| 1053 * TODO: Maybe we should strip HTML and then see if strlen>0? |
1067 gaim_xfer_set_request_denied_fnc(conn->xfer, peer_oft_cb_generic_cancel); |
| 1054 */ |
1068 gaim_xfer_set_cancel_recv_fnc(conn->xfer, peer_oft_cb_generic_cancel); |
| 1055 if ((message != NULL) && |
1069 gaim_xfer_set_ack_fnc(conn->xfer, peer_oft_recvcb_ack_recv); |
| 1056 (g_ascii_strncasecmp(message, "<ICQ_COOL_FT>", 13) != 0) && |
1070 |
| 1057 (g_ascii_strcasecmp(message, "<HTML>") != 0)) |
1071 /* Now perform the request */ |
| 1058 { |
1072 gaim_xfer_request(conn->xfer); |
| 1059 gaim_xfer_set_message(conn->xfer, message); |
1073 } |
| 1060 } |
|
| 1061 |
|
| 1062 /* Setup our I/O op functions */ |
|
| 1063 gaim_xfer_set_init_fnc(conn->xfer, peer_oft_recvcb_init); |
|
| 1064 gaim_xfer_set_end_fnc(conn->xfer, peer_oft_recvcb_end); |
|
| 1065 gaim_xfer_set_request_denied_fnc(conn->xfer, peer_oft_cb_generic_cancel); |
|
| 1066 gaim_xfer_set_cancel_recv_fnc(conn->xfer, peer_oft_cb_generic_cancel); |
|
| 1067 gaim_xfer_set_ack_fnc(conn->xfer, peer_oft_recvcb_ack_recv); |
|
| 1068 |
|
| 1069 /* Now perform the request */ |
|
| 1070 gaim_xfer_request(conn->xfer); |
|
| 1071 } |
1074 } |
| 1072 } |
1075 } |
| 1073 |
1076 |
| 1074 /*******************************************************************/ |
1077 /*******************************************************************/ |
| 1075 /* End code for establishing a peer connection */ |
1078 /* End code for establishing a peer connection */ |