Re: [PATCH] Default charset patch (bug 0000068)

Stipe Tolj <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Organization The Kannel Group
Message-ID <[email protected]>
Hi Paul,

comments inlined.

> 
> I know the reasoning I had when invented NEW_CHARSET. Phone claims it
> supports multiple encodings - like, for example, latin1, koi8-r, and
> utf8, but does this in-line and with q=0.x weights. The, webserver
> decides to present russian content in, for example, koi8. But there's
> <?xml encoding=utf-8?> ot whatever in wml source anyway, and wml
> compiler bombs at the stage it calls libxml.
> So I am explicitly requesting UTF-8 in that case, then recoding any
> received page to UTF-8 before feeding it to libxml.
> 
> 
> But text/plain ...
> 
> 
> 
> ------------------------------------------------------------------------
> 
> Index: gateway.A9/configure.in
> ===================================================================
> --- gateway.A9.orig/configure.in	2004-11-06 17:36:55.728060912 +0300
> +++ gateway.A9/configure.in	2004-11-06 17:46:21.818002160 +0300
> @@ -216,6 +216,18 @@
>  ]
>  )
>  
> +AC_MSG_CHECKING([whether to do all wapbox xml processing in utf-8])
> +AC_ARG_ENABLE(scharset,
> +[  --enable-scharset		do all wapbox xml processing in utf-8],
> +[
> +  if test "$enableval" != yes; then
> +    AC_MSG_RESULT(no)
> +  else
> +    AC_MSG_RESULT(yes)
> +    AC_DEFINE(NEW_CHARSETS, 1, [Simplify wapbox charset processing])
> +  fi
> +])
> +
>  dnl Extra feature checks
>  
>  dnl GW_HAVE_TYPE_FROM(HDRNAME, TYPE, HAVENAME, DESCRIPTION)
> Index: gateway.A9/gw/wap-appl.c
> ===================================================================
> --- gateway.A9.orig/gw/wap-appl.c	2004-11-06 17:41:37.645202992 +0300
> +++ gateway.A9/gw/wap-appl.c	2004-11-06 17:46:21.819002008 +0300
> @@ -718,6 +718,10 @@
>   * to handle those charsets for all content types, just WML/XHTML. */
>  static void add_charset_headers(List *headers) 
>  {
> +#ifdef NEW_CHARSETS
> +    if (!http_charset_accepted(headers, "utf-8"))
> +        http_header_add(headers, "Accept-Charset", "utf-8");
> +#else
>      long i, len;
>      
>      gw_assert(charsets != NULL);
> @@ -727,6 +731,7 @@
>          if (!http_charset_accepted(headers, charset))
>              http_header_add(headers, "Accept-Charset", charset);
>      }
> +#endif
>  }

ok, reading this, it means from the point of logic:
If there has not been an Accept-Charset header with utf-8, you add it directly. 
But, when I look into how List *charset is filled, I see in gw/xml_shared.c:77 
that UTF-8 is added anyway in the "rest" of the #else that you do. Right? So 
where is the benefit here?

> @@ -1055,11 +1060,29 @@
>              
>              /* get charset used in content body, default to utf-8 if not present */
>              if ((charset = find_charset_encoding(content.body)) == NULL)
> +#ifdef NEW_CHARSETS
> +                if (octstr_len(content.charset) > 0) {
> +                    charset = octstr_duplicate(content.charset);
> +                } else {
> +                    charset = octstr_imm("UTF-8");
> +                }
> +#else
>                  charset = octstr_imm("UTF-8"); 
> +#endif

this block sounds reasonable to me even without the #ifdef braces. It means, 
pick the charset from the xml preamble via find_charset_encoding(), otherwise, 
check if the HTTP response header gave a charset back, otherwise pick utf-8 as 
default. Right?

>              /* convert to utf-8 if original charset is not utf-8 
>               * and device supports it */
>  
> +#ifdef NEW_CHARSETS
> +            if (octstr_case_compare(charset, octstr_imm("UTF-8")) != 0) {
> +                debug("wsp",0,"Converting wml/xhtml from charset <%s> to UTF-8",
> +                    octstr_get_cstr(charset));
> +                if (charset_convert(content.body, octstr_get_cstr(charset), "UTF-8") >= 0) {
> +                    octstr_destroy(content.charset);
> +                    content.charset = octstr_create("UTF-8");
> +                }
> +            }
> +#else
>              if (octstr_case_compare(charset, octstr_imm("UTF-8")) < 0 &&
>                  !http_charset_accepted(device_headers, octstr_get_cstr(charset))) {
>                  if (!http_charset_accepted(device_headers, "UTF-8")) {
> @@ -1097,6 +1120,7 @@
>                      }
>                  }
>              }
> +#endif
>  
>              octstr_destroy(charset);
>          }

this #ifdef assumes that you device definetly supports utf-8??? How do you 
garanetee this?

There may be devices that do not?!

I think the present logic (inside the #else section of the patch), does it the 
right way: convert to utf-8 _only_ when the device has stated via it's headers 
taht it supports it. Right?


Stipe

mailto:stolj_{at}_wapme.de
-------------------------------------------------------------------
Wapme Systems AG

Vogelsanger Weg 80
40470 Düsseldorf, NRW, Germany

phone: +49.211.74845.0
fax: +49.211.74845.299

mailto:info_{at}_wapme-systems.de
http://www.wapme-systems.de/
-------------------------------------------------------------------
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.