Есть такая клёвая простенькая программа для телефона: Remote Volume Control. Делает одну простую вещь — даёт крутить громкость на компьютере (PC). Удобно: включил кино, упал в гамак и когда вдруг возникла необходимость — подкручиваешь громкость.
Вдруг в какой-то чудесный день программа просто молча перестала работать. Никаких обновлений не было, настройки сети не менялись… Как-то я вот не привык чтобы программы вдруг ломались и переставали работать сами по себе.
В общем под катом расскажу ход расследования и в чём оказалось дело.
Отступая от темы, вообще говоря есть веб-интерфейс и даже специализированный клиент для vlc, который, в том числе, и громкость позволяет крутить, но у него есть два недостатка: он не будет работать для других плееров или youtube и второе — он медленный (потому что tcp).
Возвращаясь к предмету, Remote Volume Control очень простая программа она позволяет крутить системный master volume. Для работы нужно ещё запустить простенький консольный сервер, работает он мгновенно и ещё умеет гасить монитор. Гасить монитор мне не надо вообще никогда, вот выключение питания помогло бы… ну нет так нет, не об этом речь.
В общем вдруг внезапно программа просто тихо перестала работать. Я всю голову сломал, в чём может быть дело. Удалил некоторые недавно установленные программы, думал кто-то занял её порт или что-то такое… что я только не пробовал. Ближе к концу я уже при помощи netcat стал изучать протокол, в отчаянной попытке понять что же может быть не так.
Так вот работает эта штука по UDP, занимает 5555-й порт. Просто шлёт команду и не ожидает, похоже, никакого ответа. Что, с одной стороны клёво: работает очень быстро. С другой стороны полное отсутствие обратной связи: вообще не понятно дошло ли сообщение или нет.
Сам протокол… «протокол» это громко очень сказано, просто при смене громкости с телефона приходит «0.25» например, прямо текстом. Это значит 25% громкости. А по команде «погасить монитор» приходит 1.00, вот и весь протокол.
При помощи того же netcat я пробовал эмулировать и клиент, может серверная часть «протухла» и с ней что-то не то, писал те же 0.25… нет успеха, сервер не реагировал вообще никак (а при нормальной работе он показывает какую ставит громкость).
Поставил сниффер, снова написал что-то в netcat и тут бах, у меня гаснет монитор.
Думаю: «нормальный сниффер, убил мне систему». Оказалось, монитор погасил мне сервер от Remote Volume Control, причём по команде и написал про это в консоли.
«Вот это уже интересно», подумал я. Смотрю что я последнее отправил — «123». Снова пишу «123», — монитор корректно гаснет. Так же он гаснет если писать «321», «12», любые цифры, а если встречается буква, то никакой реакции. И если писать законную команду на отключение монитора «1.00» то тоже тишина.
И вот тут меня осенило: десятичная точка. Ну и точно, пишу «1,00» — монитор гаснет. «0,25», пишет что 25% громкости.
Вспомнил что какое-то время назад я из-за одной программы, не важно какой, хотя это был брокерский клиент для альфа-банка, был вынужден сменить региональные настройки на русские.
Зашёл в региональные настройки, сменил десятичный разделитель с запятой на точку и всё у меня заработало.
Автор: dug