eddy_em: (Default)
2020-05-28 01:17 pm

И еще про вебсокеты

Единственной более-менее приличной библиотекой вебсокетов, что я нашел, оказалась вот эта. Для сравнения с libwebsockets, советую заглянуть, какую там предлагают накатать простыню кода просто для того, чтобы "завести" пример-эхо. Здесь же это — четыре десятка строк! Вот:
Код )
Единственный недостаток — отсутствие поддержки SSL, ну да ладно. Буду делать аутентификацию с использованием CGI, а сессионный ключ по вебсокету надо только один раз — при авторизации — передавать. Авось, студенты не взломают.

Библиотеку опакетил и выложил в своем репозитории: тарбол и ебилд.
С чувством выполненного долга пойду домой: обедать и спать. Надо еще полей ночью нащелкать для экстинкции и калькулятора экспозиции.
eddy_em: (Default)
2020-05-24 01:01 pm
Entry tags:

И опять про вебсокеты

В связи с тем, что libwebsockets настолько ожирел, что уже как emacs стал больше походить на операционную систему, возник вопрос: есть ли вменяемая легковесная сишная библиотека для работы с SSL-вебсокетами? SSL — обязательное требование, т.к. это будет частью систем управления спектрографом и будущими телескопами-роботами.
Самым лучшим вариантом было бы наличие ебилда под генту. Либо же код должен быть не очень раздутым, чтобы я сам мог в случае чего вносить мелкие коррективы, если оно перестанет собираться.
Нашел на гитхабе libwebsock. Но останавливает то, что последний коммит был сделан 6 лет назад (а за это время протокол менялся), да еще и с сообщением "NOT-STABLE: Lots of debugging information, and fixes for threading."
Еще есть wsServer, но он без SSL. Извращаться же с авторизацией по https, а работой по http мне не хочется. Просто по http работать нельзя, т.к., насколько я знаю, не существует механизма авторизации по http, устойчивого к MITM.
eddy_em: (Default)
2020-03-02 09:43 am

А есть ли легкая библиотека для wss-вебсокетов?

В libwebsocket наворотили очень много — она уже практически вместо веб-сервера может использоваться!
А мне всего-то нужен сокет между сетевым демоном и веб-страницей. Убивает необходимость копирования всей огромной портянки из примеров libwebsocket, когда нужно что-то, вроде такого:
int main(){
	/* Register events. */
	struct ws_events evs;
	evs.onopen    = &onopen;
	evs.onclose   = &onclose;
	evs.onmessage = &onmessage;
	
	/* Main loop, this function never returns. */
	ws_socket(&evs, 8080);

	return (0);
}

Вот только работать это должно с wss, т.к. нужна аутентификация, а, судя по комментариям на ЛОРе, даже в 2020 году в http нормальной аутентификации обеспечить практически невозможно... Колхозить велосипеды с квадратными колесами не хочу. Кстати, вот еще одно "фи" в сторону libwebsocket: код по ссылке, хоть и написан три с небольшим года назад, не собирается (т.е. апи опять поломали).

UPD: наткнулся на libwebsock. Пишут, что SSL поддерживается и даже какой-то пример есть.
Буду MWE для теста писать.
eddy_em: (Костерок)
2016-04-26 04:38 pm
Entry tags:

Авторизация через вебсокеты

Решил я добавить в свой вебсокет-сниппет еще и авторизацию, чтобы уж точно им можно было в реальной жизни пользоваться.
Происходит все достаточно просто. Сервер хранит MD5 пароля (в примере — просто как строковую константу). При соединении генерируется "соль" и вычисляется MD5 от строки "соль + MD5 пароля". Эта "соль" отсылается клиенту. Клиент запрашивает у пользователя пароль, вычисляет MD5 от него, присовокупляет к "соли" и отправляет серверу MD5 результата. Если все ОК, сервер посылает сообщение "authOK", если же пароль неправильный, отсылается "badpass" → клиент опять запрашивает пароль у пользователя.
MD5 введенного пароля сохраняется в localStorage (или куках, если localStorage отсутствует), чтобы не вводить пароль каждый раз. В принципе, можно добавить кнопочку "forget me", но смысла в этом не вижу. Теперь у моих веб-морд будет хоть какая-то условная безопасность.
eddy_em: (Костерок)
2016-04-22 05:11 pm
Entry tags:

Простейший вебсокет-сервер

Я решил набросать веб-морду для управления ИК-спектрометром IRBIS, для чего опять понадобилось прикручивать вебсокеты. И опять пришлось ковыряться в предыдущем коде (веб-морда для простой управлялки на raspberry Pi). Чтобы впредь не нужно было заниматься чисткой кода, я решил сделать минимальный пример, позволяющий общаться через очередь сообщений: код на гитхабе.

Так как вебсокеты у меня используются лишь для управления железяками, т.е. всегда нужен блокирующий доступ, я в этот пример добавил блокиратор левых подключений.

При подключении клиента ему каждую секунду передается текущее время, а клиент может отослать серверу сообщение, введенное в текстовое поле. Таким образом, легко можно будет использовать этот каркас в разных управлялках.

Остается теперь придумать метод авторизации/аутентификации. Простейшее, что приходит в голову — при соединении сервер отсылает "соль", клиент шифрует введенный пароль этой "солью" и отсылает серверу. А тот проверяет, все ли ОК.
Нужно лишь найти вменяемые MD5 или SHA на жабоскрипте.

P.S. Полдня убил на верстку базы веб-морды! Совсем уже этот HTML забыл. Пытался верстать блоками, но ничего не вышло. Решил по-старому — вложенными таблицами.
eddy_em: (Костерок)
2016-01-19 05:35 pm
Entry tags:

Допиливание веб-морды

Сегодня я весь день занимался устранением багов и внедрением фич. Теперь веб-интерфейс выглядит так:
2016.01.19_17:13:35



  • Исправлены тормоза при работе с шаговым двигателем (сервер вебсокетов отжирал почти все процессорное время, поэтому тайминги на шаговики были неровными).

  • Удалена возможность передачи видео через вебсокеты (все равно тормозит жутко на "малинке").

  • Добавлен индикатор "прогресса" перемещения подвижки.

  • При изменении IP-адреса теперь не просто сеть перезапускается, а перезагружается "малинка" (т.к. нужно перезапустить совершенно все сетевые сервисы, в т.ч. и сервисы видео и вебсокетов).

  • Ну и немного изменений во внешнем виде.


Осталась, правда, проблема с видео: как-то странно оно себя ведет. Даже при запуске mplayer tv:// видео запаздывает секунд на 10, да еще и какие-то артефакты от предыдущих кадров сохраняются. Чертовщина какая-то!
eddy_em: (Костерок)
2016-01-18 09:39 pm
Entry tags:

Еще одна веб-морда на RPi для спектрометра

Сейчас закончил еще одну веб-морду, вот как она выглядит:
2016.01.18_21:07:35


Подробности )