[MPlayer-dev-eng] [Patch] libmpdemux/asf_mmst_streaming.c: fixed mms url encoding with multibyte characters
Wang WenRui
wangwr at mail.ustc.edu.cn
Sat Oct 4 19:06:57 CEST 2003
Hi,
Current mplayer (mine is mplayer-1.0-pre1cvs20031001) cannot play mms
stream with multibyte characters in the url.
There is a bug in string_utf16() of libmpdemux/asf_mmst_streaming.c:
the url encoding code is written for single-byte character only. It
just fill a zero byte between every two adjacent bytes of the url
string. This is wrong when the url string contains multi-byte
characters.
My patch is in the attachment, and has been tested working. It uses
iconv() to convert the url's encoding to utf-16 correctly. So can this
patch be accepted and commit into CVS?
Thanks in advance.
Best regards
Wang WenRui
-------------- next part --------------
--- mplayer-1.0-pre1cvs20031001.orig/libmpdemux/asf_mmst_streaming.c
+++ mplayer-1.0-pre1cvs20031001/libmpdemux/asf_mmst_streaming.c
@@ -22,6 +22,12 @@
#include <winsock2.h>
#endif
+#ifdef USE_ICONV
+#include <locale.h>
+#include <langinfo.h>
+#include <iconv.h>
+#endif
+
#include "url.h"
#include "asf.h"
@@ -101,6 +107,38 @@
}
}
+#ifdef USE_ICONV
+static iconv_t url_conv;
+
+static void string_utf16_open() {
+ setlocale(LC_CTYPE, "");
+ url_conv = iconv_open("UTF-16LE",nl_langinfo(CODESET));
+}
+
+static void string_utf16_close() {
+
+ iconv_close(url_conv);
+}
+
+static void string_utf16(char *dest, char *src, int len) {
+ size_t len1, len2;
+ char *ip, *op;
+
+ memset(dest, 0, 1000);
+ len1 = len; len2 = 1000;
+ ip = src; op = dest;
+
+ iconv(url_conv, &ip, &len1, &op, &len2);
+}
+
+#else
+
+static void string_utf16_open() {
+}
+
+static void string_utf16_close() {
+}
+
static void string_utf16(char *dest, char *src, int len)
{
int i;
@@ -115,6 +153,7 @@
dest[i*2] = 0;
dest[i*2+1] = 0;
}
+#endif
static void get_answer (int s)
{
@@ -461,6 +500,9 @@
* cmd 1 0x01
* */
+ /* prepare for the url encoding conversion */
+ string_utf16_open();
+
snprintf (str, 1023, "\034\003NSPlayer/7.0.0.1956; {33715801-BAB3-9D85-24E9-03B90328270A}; Host: %s", url1->hostname);
string_utf16 (data, str, strlen(str)+2);
// send_command(s, commandno ....)
@@ -557,5 +599,7 @@
packet_length1 = packet_length;
printf("mmst packet_length = %d\n",packet_length);
+ string_utf16_close();
+
return 0;
}
More information about the MPlayer-dev-eng
mailing list