Продолжаю потихоньку хакать obexsync, бывший t68tool. Пора бы уже выкладывать, так как по сравнению с t68tool 0.4 есть заметный прогресс - поддерживаются русские (и прочие не Latin-1) имена файлов. Из всех прочих командно-строчных инструментов, виденных мной, на такое заморачивается только BSD-шный obexapp. Остальные ничтоже сумняшеся зовут OBEX_CharToUnicode из libopenobex, которая, ну вы понимаете, попросту вставляет перед каждым байтом 0.
Но хочется ещё в довершение блока работы с перекодировками сделать нормализацию скачиваемых телефонных книжек и календарей. Дело в том, что как было выяснено экспериментальным путем, каждый телефон кодирует VCARD-ы кто во что горазд. Ericsson (ещё с до-Sony-евских времен, с R520) любит UTF-7, попадались также Quoted-printable-encoded Windows-1251 и даже iso8859-5.
В то же время, столь же экспериментально выяснено, что все эти телефоны прекрасно понимают если им передать ENCODING=8BIT;CHARSET=UTF-8. А если хранить записную книжку на компьютере именно в таком виде, то её удобно просматривать текстовым редактором. Опять же, у меня уже есть, и должна войти в комплект утилита поиска по записной книжке (в том числе и умеющая работать query_command в mutt). Она как раз рассчитана на 8bit и utf-8. Поэтому книжку надо нормализовать. Раньше этим занималась внешняя скриптовая обвязка. Но с появлением в 0.4 Bluetooth name resolution она как-то лишняя стала.
Зато всплыла засада с OBEX File Transfer Profile. Почему-то при работе obexftp телефон (один раз за сессию) спрашивает "а правда, что вы хотите дать этому устройству (компьютеру) доступ к вашим данным", а при коннекте t68tool - сразу посылает как unauthorized. Долго смотрел в исходники, так и не понял. Запрос GET формируется совершенно одинаково, значит разница только в CONNECT. Исходный автор t68tool зачем-то пихает туда OBEX_HDR_WHO со значением Linux, но его удаление почти ничего не меняет. А в obexftp туда пихают OBEX_HDR_TARGET с каким-то UUID в качестве значения. В блютусовских спецификациях описания этого UUID не нашел, надо в IrMC-шных искать. Но добавление UUID тоже не помогает, похоже там где-то есть еще какой-то промежуточный обмен сообщениями. Надо бы найти описание, может можно сделать так, чтобы телефон глупых вопросов не задавал. А то впихнуть всю транзакцию в один вызов командно-строчной утилиты вряд ли получится.
Еще выяснилось что почему-то для IrMC надо делать GET с полным путем (telecom/pb.vcf), а для FTP - сначала SETPATH в нужное место, а потом GET без пути - иначе не работает. Ну эту логику я как раз уже впихнул. Правда, опять же спецификации читать надо - это заморочка конкретного телефона или общий принцип. Если первое, то надо эту фичу делать отключаемой, и позволять каким-то образом делать GET по полному пути без SETPATH.
Но хочется ещё в довершение блока работы с перекодировками сделать нормализацию скачиваемых телефонных книжек и календарей. Дело в том, что как было выяснено экспериментальным путем, каждый телефон кодирует VCARD-ы кто во что горазд. Ericsson (ещё с до-Sony-евских времен, с R520) любит UTF-7, попадались также Quoted-printable-encoded Windows-1251 и даже iso8859-5.
В то же время, столь же экспериментально выяснено, что все эти телефоны прекрасно понимают если им передать ENCODING=8BIT;CHARSET=UTF-8. А если хранить записную книжку на компьютере именно в таком виде, то её удобно просматривать текстовым редактором. Опять же, у меня уже есть, и должна войти в комплект утилита поиска по записной книжке (в том числе и умеющая работать query_command в mutt). Она как раз рассчитана на 8bit и utf-8. Поэтому книжку надо нормализовать. Раньше этим занималась внешняя скриптовая обвязка. Но с появлением в 0.4 Bluetooth name resolution она как-то лишняя стала.
Зато всплыла засада с OBEX File Transfer Profile. Почему-то при работе obexftp телефон (один раз за сессию) спрашивает "а правда, что вы хотите дать этому устройству (компьютеру) доступ к вашим данным", а при коннекте t68tool - сразу посылает как unauthorized. Долго смотрел в исходники, так и не понял. Запрос GET формируется совершенно одинаково, значит разница только в CONNECT. Исходный автор t68tool зачем-то пихает туда OBEX_HDR_WHO со значением Linux, но его удаление почти ничего не меняет. А в obexftp туда пихают OBEX_HDR_TARGET с каким-то UUID в качестве значения. В блютусовских спецификациях описания этого UUID не нашел, надо в IrMC-шных искать. Но добавление UUID тоже не помогает, похоже там где-то есть еще какой-то промежуточный обмен сообщениями. Надо бы найти описание, может можно сделать так, чтобы телефон глупых вопросов не задавал. А то впихнуть всю транзакцию в один вызов командно-строчной утилиты вряд ли получится.
Еще выяснилось что почему-то для IrMC надо делать GET с полным путем (telecom/pb.vcf), а для FTP - сначала SETPATH в нужное место, а потом GET без пути - иначе не работает. Ну эту логику я как раз уже впихнул. Правда, опять же спецификации читать надо - это заморочка конкретного телефона или общий принцип. Если первое, то надо эту фичу делать отключаемой, и позволять каким-то образом делать GET по полному пути без SETPATH.