Mercurial > pidgin.yaz
comparison libpurple/protocols/oscar/odc.c @ 27805:80d3f4ff1cae
- fixed the offset of encoding field in ODC frame to be sent to peer.
- added sanitize_utf8() to purple_plugin_oscar_convert_to_utf8() as nosuke pointed it out.
- altered encoding candidates in purple_plugin_oscar_decode_im_part() to handle UTF-8 properly.
- now direct IM with multi-byte characters works correctly.
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 20 Mar 2008 11:48:40 +0000 |
parents | 35b4f1dc4c8d |
children | eeee264cd325 |
comparison
equal
deleted
inserted
replaced
27804:d44a96d49ee5 | 27805:80d3f4ff1cae |
---|---|
99 | 99 |
100 length = 76; | 100 length = 76; |
101 byte_stream_new(&bs, length + frame->payload.len); | 101 byte_stream_new(&bs, length + frame->payload.len); |
102 byte_stream_putraw(&bs, conn->magic, 4); | 102 byte_stream_putraw(&bs, conn->magic, 4); |
103 byte_stream_put16(&bs, length); | 103 byte_stream_put16(&bs, length); |
104 | |
104 byte_stream_put16(&bs, frame->type); | 105 byte_stream_put16(&bs, frame->type); |
105 byte_stream_put16(&bs, frame->subtype); | 106 byte_stream_put16(&bs, frame->subtype); |
106 byte_stream_put16(&bs, 0x0000); | 107 byte_stream_put16(&bs, 0x0000); |
108 | |
107 byte_stream_putraw(&bs, frame->cookie, 8); | 109 byte_stream_putraw(&bs, frame->cookie, 8); |
108 byte_stream_put16(&bs, 0x0000); | 110 byte_stream_put16(&bs, 0x0000); |
109 byte_stream_put16(&bs, 0x0000); | 111 byte_stream_put16(&bs, 0x0000); |
110 byte_stream_put16(&bs, 0x0000); | 112 byte_stream_put16(&bs, 0x0000); |
111 byte_stream_put16(&bs, 0x0000); | 113 byte_stream_put16(&bs, 0x0000); |
114 | |
112 byte_stream_put32(&bs, frame->payload.len); | 115 byte_stream_put32(&bs, frame->payload.len); |
113 byte_stream_put16(&bs, 0x0000); | |
114 byte_stream_put16(&bs, frame->encoding); | 116 byte_stream_put16(&bs, frame->encoding); |
115 byte_stream_put16(&bs, 0x0000); | 117 byte_stream_put16(&bs, 0x0000); |
118 byte_stream_put16(&bs, 0x0000); | |
119 | |
116 byte_stream_put16(&bs, frame->flags); | 120 byte_stream_put16(&bs, frame->flags); |
117 byte_stream_put16(&bs, 0x0000); | 121 byte_stream_put16(&bs, 0x0000); |
118 byte_stream_put16(&bs, 0x0000); | 122 byte_stream_put16(&bs, 0x0000); |
123 | |
119 byte_stream_putraw(&bs, frame->sn, 32); | 124 byte_stream_putraw(&bs, frame->sn, 32); |
125 | |
120 byte_stream_putraw(&bs, frame->payload.data, frame->payload.len); | 126 byte_stream_putraw(&bs, frame->payload.data, frame->payload.len); |
121 | 127 |
122 peer_connection_send(conn, &bs); | 128 peer_connection_send(conn, &bs); |
123 | 129 |
124 g_free(bs.data); | 130 g_free(bs.data); |
494 | 500 |
495 frame = g_new0(OdcFrame, 1); | 501 frame = g_new0(OdcFrame, 1); |
496 frame->type = byte_stream_get16(bs); | 502 frame->type = byte_stream_get16(bs); |
497 frame->subtype = byte_stream_get16(bs); | 503 frame->subtype = byte_stream_get16(bs); |
498 byte_stream_advance(bs, 2); | 504 byte_stream_advance(bs, 2); |
505 | |
499 byte_stream_getrawbuf(bs, frame->cookie, 8); | 506 byte_stream_getrawbuf(bs, frame->cookie, 8); |
500 byte_stream_advance(bs, 8); | 507 byte_stream_advance(bs, 8); |
508 | |
501 frame->payload.len = byte_stream_get32(bs); | 509 frame->payload.len = byte_stream_get32(bs); |
502 frame->encoding = byte_stream_get16(bs); | 510 frame->encoding = byte_stream_get16(bs); |
503 byte_stream_advance(bs, 4); | 511 byte_stream_advance(bs, 4); |
512 | |
504 frame->flags = byte_stream_get16(bs); | 513 frame->flags = byte_stream_get16(bs); |
505 byte_stream_advance(bs, 4); | 514 byte_stream_advance(bs, 4); |
515 | |
506 byte_stream_getrawbuf(bs, frame->sn, 32); | 516 byte_stream_getrawbuf(bs, frame->sn, 32); |
507 | 517 |
508 purple_debug_info("oscar", "Incoming ODC frame from %s with " | 518 purple_debug_info("oscar", "Incoming ODC frame from %s with " |
509 "type=0x%04x, flags=0x%04x, payload length=%u\n", | 519 "type=0x%04x, flags=0x%04x, payload length=%u\n", |
510 frame->sn, frame->type, frame->flags, frame->payload.len); | 520 frame->sn, frame->type, frame->flags, frame->payload.len); |