Если клиент работает под debian, то всё хорошо.
Если клиент работает под ALM, то в случае, если string - это русские букыв, получаем ошибку "error decoding RPC. reference to invalid character". Если ASCII - то всё нормально. Кодировка везде UTF-8.
Клиент написан на PHP. На debian PHP собран с xmlrpc из коробки. На ALM я поддержку xmlrpc делал ручками как extention, потому что в Alt нету xmlrpc для PHP (как и многих других вещей; впрочем, про приколы alt-овцев с php я уже писал когда-то; кстати, у них опять репозиторий побился).
Начинаем исследовать баг. Смотрим запрос (тестовый запрос - A("'раз','два'")).
debian: "
ALM: "
Заметили? В ALM как-будто нолики вырезали из первого байта.
Оказывается, это древний баг (http://bugs.php.net/bug.php?id=28597). Но! В xmlrpc-epi фикса нет, в ALM нету xmlrpc вообще, patch из бага не открывается (сервер, где он лежал, уже нету). Из debian вытащить исходники не получится, так как там не отдельно xmlrpc-epi, а в самом бинарнике php.
Еле нашёл патч - http://cvs.php.net/viewvc.cgi/php-src/ext/xmlrpc/libxmlrpc/xml_element.c?r1=1.3.4.2&r2=1.3.4.3 (ещё бы, 2004 год). Естественно, он не наложился бы, потому что исходники xmlrpc-epi другие, чем xmlrpc в php (а пересобирать весь php мне как-то не охота). Благо что патч маленький, нашёл нужное место, да поправил руками.
Пересобрал. Работает.
В принципе ничего страшного или сложного во всём этом нету (хотя в прошлый раз я за день не смог это пофиксить, видимо, голова хреново работала; хотя с другой стороны, в прошлый раз проблему локализовал (так как проблема могла быть и в сервере, и в прохождении от клиента к выводу, и ещё хоть где), так что сегодня было много легче), но сука раздражает. Вот какого хрена в Alt нету xmlrpc для PHP ни в каком виде (ну, вообще-то там есть php-devel, где есть какие-то .h и .c файлы, может их даже собрать можно, но там ни makefile нет, ни ещё чего, а xmlrpc-php без libxmlrpc работать не будет, а её в php-devel нету)? Что, тем, кто выбирает Alt, xmlrpc в php не нужен (как и mod_php для apache2)? Пиздец какой-то...
Кстати, судя по количеству патчей на xmlrpc в cvs PHP, есть вероятность ещё что-нибудь cловить непонятное. Ну хоть буду знать, где сначала искать.
PS: и ещё - C как язык - это пиздец. Почитайте баг, посмотрите патч. Как на этом можно писать? Сука машинный код, натурально.