|
kICQa :: Скачать:: Компиляция :: Что умеет :: Недоработки :: Проблема :: Решение :: Копирайты :: Авторопочта |
ICQ клиент для платформы Mophun ICQ-клиент для мобильных телефонов с поддержкой Mophun, разрабатывался и тестировался на SonyEriccson T300 © 2003,2004 Калугин Михаил aka 4D man, 4d_man@ngs.ru kicqa_full.zip, 462 kb - исходные коды, бинарник(несертифицированный), описание ICQ-протокола kicqa_docs.zip, 363 kb - отдельно описание ICQ-протокола kicqa_src_bin.zip, 100 kb - исходники и бинарник без описания ICQ-протокола
В настоящий момент клиент умеет: 1)распознавать FLAP, SNAC, TLV в потоке данных из сети и соответствующим образом обрабатывать их 2)составлять соответсвующие пакеты и отправлять их 3)распознает основные типы SNAC 4)таким образом, клиент способен подключиться к серверу, пройти процедуру аутенификации, скачать оффлайн-сообщения, скачать контакт-лист и обновлять данные о статусах пользователей в нем. Естественно, есть возможноть принимать сообщения(при приеме она запихиваются в стек для них) и отправлять их(отправляются немедленно) 5)обладает скудным интерфейсом, позволяющим делать лишь очень ограниченные вещи 1)малое количество известных SNAC 2)в некоторых случаях были замечены проблемы со скачиванием контакт-листа. скорее всего, проблема была в недостаточном к-ве памяти 3)очень неудобный редактор сообщений, к тому же поддерживающий только английский 4)интерфейс очень сложно масштабировать, добавляя к нему новые пункты меню и т.д. 5)нет средств для конфигурации, UIN и пароль можно изменить только перекомпилировав. Проблема собственно одна, из действительно важных. Если все описанное выше работает в эмуляторе, то на реальном телефоне дальше обмена первыми 2мя пакетами дело не доходит. Связано это с недоработкой в сокетах мобильного телефона. Недоработка состоит в следующем. Если сервер посылает нам на сокет меньше 256 байт, то мы их "видим"(vStreamReady!=0) и можем спокойно прочитать. При этом читаются все данные, как и должно быть. Если же сервер посылает нам 256 байт или больше то, мы можем прочесть только перве 255 из них, остальные же мы не видим(vStreamReady==0), а если и проигнорировать это, тупо пытаясь считать остальные, то мы получаем ошибку. Но, что самое интересное, когда на сокет придут ещё данные, хотя бы 1 байт, мы сможем прочитать все до конца. Проблема состоит как раз в том, что дождаться этого байта не всегда удается. Возьмем например ответ логин сервера на наше подключение: он содержит адрес BOS сервера и ещё cookie, в сумме получается 300 байт. После этого логин-сервер нам ничего не посылает и посылать не должен. Естественно, что на этом месте программа блокируется, т.к. ждет оставшиеся 45 байт. Очевидно, что никакие keep-alive пакеты здесь не спасут - проблемы начинаются ещё на стадии аутенификации. Если не считать надежды на исправление реализации сокетов в телефоне разработчиками, то единственное решение - искуственное разбиение данные на пакеты по 200-255 байт. Протокол ICQ такого не предусматривает, поэтому наиболее простым решением, на мой взгляд, является использование промежуточного прокси-сервера, работающего про принципу: получил данные от сервера-отправил клиенту-дождался подтверждения от клиента-и т.д. Подтверждение необходимо, дабы не пришло 2 подряд пакета по 200 байт, тогда опять всплывет описанная выше проблема. Я не скажу, что сложно написать такой сервер, но идея создания промежуточного сервера не очень хороша, т.к. его как-то, где-то и кому-то нужно будет поддерживать. Данная проблема обсуждалась на форуме разработчиков Mophun. Никаких решений не было найдено. Тем не менее, то, что требуется в данном случае, я довольно подробно описал далее. Решение проблемы с помощью промежуточного сервера В общем-то в данном случае прокси чем-то похож на sock4. От него в нашем случае требуется слудующее:
Вот, в общем-то, весь принцип работы. Т.к. к-во данных в сокете мобилы в этом случае гарантированно не будет слишком большим, то и с прочтением и обработкой проблем возникнуть не должно. Копирайты & условия распространения Разработан в 2003-2004 Калугиным Михаилом aka 4D man. В настоящее время разработка завершается силами участиков форума http://soneric.ru/forums/. Никаких ограничений на распространение не накладывается, кроме одного: эта версия и никакая из её модификаций, будь хоть в виде исходных кодов, будь хоть в виде скомпилированного приложения, не может продаваться: все копии должны распростаняться свободно и без каких либо ограничений, кроме этого. Все желающие могут свободно использовать этот клиент, модифицировать его. Если Вы можете что-то сделать для клиента - делайте, от этого будет лучше для всех. Автору клиента также хотелось бы быть в курсе всех изменений в коде, поэтому имеется одна просьба: если вы что-то улучшили, или решили, наконец-то, описаную выше проблему - пришлите мне вашу версию, буду очень благодарен. :))) |