comparison src/protocols/oscar/oscar.c @ 13601:009a1e608419

[gaim-migrate @ 15987] Partial non-ascii support for oscar direct IM committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 09 Apr 2006 22:35:50 +0000
parents e1c81d199ee0
children 57e5d1455ad7
comparison
equal deleted inserted replaced
13600:e1c81d199ee0 13601:009a1e608419
3944 3944
3945 /* TODO: Move this into odc.c! */ 3945 /* TODO: Move this into odc.c! */
3946 static void 3946 static void
3947 gaim_odc_send_im(PeerConnection *conn, const char *message, GaimMessageFlags imflags) 3947 gaim_odc_send_im(PeerConnection *conn, const char *message, GaimMessageFlags imflags)
3948 { 3948 {
3949 GString *msg = g_string_new("<HTML><BODY>"); 3949 GString *msg;
3950 GString *data = g_string_new("</BODY></HTML><BINARY>"); 3950 GString *data;
3951 gchar *tmp;
3952 int tmplen;
3953 guint16 charset, charsubset;
3951 GData *attribs; 3954 GData *attribs;
3952 const char *start, *end, *last; 3955 const char *start, *end, *last;
3953 int oscar_id = 0; 3956 int oscar_id = 0;
3954 3957
3958 msg = g_string_new("<HTML><BODY>");
3959 data = g_string_new("<BINARY>");
3955 last = message; 3960 last = message;
3956 3961
3957 /* for each valid IMG tag... */ 3962 /* for each valid IMG tag... */
3958 while (last && *last && gaim_markup_find_tag("img", last, &start, &end, &attribs)) 3963 while (last && *last && gaim_markup_find_tag("img", last, &start, &end, &attribs))
3959 { 3964 {
3986 oscar_id, size); 3991 oscar_id, size);
3987 3992
3988 /* ... and append the data to the binary section ... */ 3993 /* ... and append the data to the binary section ... */
3989 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%lu\">", 3994 g_string_append_printf(data, "<DATA ID=\"%d\" SIZE=\"%lu\">",
3990 oscar_id, size); 3995 oscar_id, size);
3991 data = g_string_append_len(data, imgdata, size); 3996 g_string_append_len(data, imgdata, size);
3992 data = g_string_append(data, "</DATA>"); 3997 g_string_append(data, "</DATA>");
3993 } 3998 }
3994 /* If the tag is invalid, skip it, thus no else here */ 3999 /* If the tag is invalid, skip it, thus no else here */
3995 4000
3996 g_datalist_clear(&attribs); 4001 g_datalist_clear(&attribs);
3997 4002
3998 /* continue from the end of the tag */ 4003 /* continue from the end of the tag */
3999 last = end + 1; 4004 last = end + 1;
4000 } 4005 }
4001 4006
4002 /* append any remaining message data (without the > :-) ) */ 4007 /* append any remaining message data */
4003 if (last && *last) 4008 if (last && *last)
4004 msg = g_string_append(msg, last); 4009 g_string_append(msg, last);
4005 4010
4006 /* if we inserted any images in the binary section, append it */ 4011 g_string_append(msg, "</BODY></HTML>");
4012
4013 /* Convert the message to a good encoding */
4014 gaim_plugin_oscar_convert_to_best_encoding(conn->od->gc,
4015 conn->sn, msg->str, &tmp, &tmplen, &charset, &charsubset);
4016 g_string_free(msg, TRUE);
4017 msg = g_string_new_len(tmp, tmplen);
4018
4019 /* Append any binary data that we may have */
4007 if (oscar_id) { 4020 if (oscar_id) {
4008 msg = g_string_append_len(msg, data->str, data->len); 4021 msg = g_string_append_len(msg, data->str, data->len);
4009 msg = g_string_append(msg, "</BINARY>"); 4022 msg = g_string_append(msg, "</BINARY>");
4010 } 4023 }
4011
4012 g_string_free(data, TRUE); 4024 g_string_free(data, TRUE);
4013 4025
4014 /* TODO: Deal with the encoding. */ 4026 peer_odc_send_im(conn, msg->str, msg->len, charset,
4015 peer_odc_send_im(conn, msg->str, msg->len, 0, imflags & GAIM_MESSAGE_AUTO_RESP); 4027 imflags & GAIM_MESSAGE_AUTO_RESP);
4016 g_string_free(msg, TRUE); 4028 g_string_free(msg, TRUE);
4017 } 4029 }
4018 4030
4019 static int 4031 static int
4020 oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimMessageFlags imflags) 4032 oscar_send_im(GaimConnection *gc, const char *name, const char *message, GaimMessageFlags imflags)