LINUX.ORG.RU

Есть ли *нормальная* сишная библиотека?

 ,


2

1

Убил вчера весь вечер, пытаясь разобраться в библиотеке libwebsockets. Старая версия (0.5) не работает с новыми браузерами. Новая версия (коммит 5 дней назад) не собирается (подозреваю, что виноваты проклятые autotools).

Я уж от отчаяния решил выкинуть оттуда все ненужное (а там ненужного полным-полно) и оставить лишь нужное мне. Ну и CMake нормальный сделать, а не чертовы autotools.

Так вот, вопрос: маяться ли мне с велосипедостроением или есть приличная сишная библиотека?

☆☆☆☆☆

Для каких целей библиотека то нужна?

P.S. Квест на 5 серых решил не закрывать?

trex6 ★★★★★
()
Ответ на: комментарий от trex6

Для каких целей библиотека то нужна?

Мне нужно от нее только устанавливать постоянное соединение (асинхронные чтение/запись) и передавать файлы (и то, думаю еще: нужно ли).

Хочу сделать таки нормальную веб-морду для управления железяками. А еще в планах проанализировать возможность запуска вебсокет-сервера на микроконтроллере. Это было бы вообще замечательно (т.к. можно было бы отказаться от лишнего компьютера).

P.S. Квест на 5 серых решил не закрывать?

Ага.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Kalashnikov

Что-то она совсем уж допотопная.

Блин, зато маленькая-то какая! И в примерах какая-то ардуина есть. Вдруг и на нормальных микроконтроллерах взлетит?

Ща, пощупаю.

---------------------

Щютник, однако:

#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 1
#endif
Eddy_Em ☆☆☆☆☆
() автор топика
Последнее исправление: Eddy_Em (всего исправлений: 2)
Ответ на: комментарий от Eddy_Em

unknown type name <<SOCKET>>

Блин, оно еще и под мастдайку писалось.

Ну да ладно: пару файлов подрихтовать — не два десятка…

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от trashymichael

Уже ковыряю вендузячий cwebsockets, предложенный Калашниковым.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Reset

Ну так по сути тем и занимаюсь (вдобавок разгребая вендузячий код, чтобы не сегфолтился — что-то в мастдайке совсем через жопу все). cwebsockets выполняет элементарщину: открывает сокет и просто обрабатывает фреймы в соответствии с протоколом.

Eddy_Em ☆☆☆☆☆
() автор топика

Новая версия (коммит 5 дней назад) не собирается (подозреваю, что виноваты проклятые autotools).

как именно не собирается?

Harald ★★★★★
()
Ответ на: комментарий от Harald

Матерится:

./autogen.sh 
Preparing the libwebsockets build system...please wait

Found GNU Autoconf version 2.69
Found GNU Automake version 1.13.1
Found GNU Libtool version 2.4.2

Automatically preparing build ... Warning: autoreconf failed
Attempting to run the preparation steps individually

Preparing build ... ERROR: aclocal failed

Черт-те что: все нужное у меня установлено.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от nerdogeek

Не люблю я плюсовые библиотеки: для них прослойки писать зачастую приходится.

Eddy_Em ☆☆☆☆☆
() автор топика

лололо, за вечер можно написать, там протокол крайне прост.

Я брался внедрять вебсокеты в конторе, когда ещё только был черновик 76, и постепенно переписывал при каждом новом выходе аж до утверждения RFC.

Писалось на Qt (нагрузка планировалась не очень большая), всё довольно просто и понятно.

Chaser_Andrey ★★★★★
()
Ответ на: комментарий от Eddy_Em

Кстати, фигня какая-то получается: запускаю я вебсокет-сервер. Подключаюсь. Жамкаю ctrl+c, клиент вроде отрубается. Запускаю сервер повторно — фигвам, говорит, мол адрес уже занят. Перезапускаю веб-морду — та же фигня. Черт-те что! Проходит некоторое время — сервер уже запускается без матюгов.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

reuse флаг надо ставить на серверный сокет

Reset ★★★★★
()
Ответ на: комментарий от Harald
autoreconf 
aclocal: error: couldn't open directory 'm4': Нет такого файла или каталога
autoreconf: aclocal failed with exit status: 1
Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Harald

То же самое. Да ладно, мне cwebsockets больше нравятся: легенькая, простенькая штука. Может быть, даже для микроконтроллера запилю (но это уже ближе к лету, деньги у нас появляются только где-то к апрелю-маю + пока из китая через посредников купим…).

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от punya

Не, в sysctl вмешиваться не хочется.

Eddy_Em ☆☆☆☆☆
() автор топика

Оказывается, все не так просто. Нарыл свежий стандарт. Надо клиенту ответить хитрым ключом. В общем, подключаю openssl для sha1 и, похоже, придется еще gnutls использовать для base64 ☹. Блин, ну вот не могли сволочи эти сделать что-нибудь простое…

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Ради таких функций тащить не относящиеся к делу библиотеки не следует.

Код SHA1 целиком приведен в соответствующем RFC[0].

base64 предлагается как элементарное домашнее задание, для реализации достаточно написанного в википедии, но можно опять же обратиться к RFC[1].

[0] https://tools.ietf.org/html/rfc6234 [1] https://tools.ietf.org/html/rfc4648

anonymous
()
Ответ на: комментарий от Eddy_Em

Квест на 5 серых решил не закрывать?

Ага.

Слабак.

Мне нужно от нее только устанавливать постоянное соединение (асинхронные чтение/запись)

libevent уже советовали?

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

Слабак

лучше быть живым трусом, чем дохлым храбрецом!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от anonymous

Код SHA1 целиком приведен в соответствующем RFC[0].

О микроконтроллерах можно забыть ☹

Вот же сволочи. Я вообще не понимаю, на кой хрен они такой бред замутили!!! Ну отдавал бы сервер немодифицированный ключ — можно подумать, от man-in-the-middle то, что есть сейчас, сможет защитить…

base64 — да, несложно. Но, опять-таки повторю: бред сивой кобылы.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

О микроконтроллерах можно забыть ☹

Это почему? Из-за объема кода? То есть как openssl тянуть, так нормально, а дописать 2-3КБ кода — так много? :-)

anonymous
()
Ответ на: комментарий от Sadler

Реализацию на яве я видел на stackoverflow.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от anonymous

Из-за объема кода?

Да.

То есть как openssl тянуть, так нормально, а дописать 2-3КБ кода — так много? :-)

Да без разницы: я вообще о том, что разрабатывали стандарт, похоже, какие-то бараны. На МК с 1МБ флеша на борту, ясен пень, ни openssl, ни самописные сотни килобайт лишнего кода не воткнешь.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

На МК с 1МБ флеша на борту

В 1МБ, наверное, сейчас и ядро не влезет.

Но вообще ты зря паникуешь — я специально посмотрел, у нас реализация websockets (включая sha1) занимает (по данным size) на x86 ~4КБ. Ей-богу, не страшно.

anonymous
()
Ответ на: комментарий от anonymous

В 1МБ, наверное, сейчас и ядро не влезет.

Мне операционка не нужна. И даже freeRTOS не нужен.

я специально посмотрел, у нас реализация websockets (включая sha1) занимает (по данным size) на x86 ~4КБ

Хм, странно: маловато будет! Ты попробуй статически слинковать.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Мне операционка не нужна.

Тогда тебя, опять-таки, должен больше интересовать размер, скажем, TCP-стека.

Ты попробуй статически слинковать.

Смотря с чем. :-) Я привел размер объектного файла с реализацией websockets. Если вообще все слинковать, то конечно больше получится, ну так у нас программа не только из вебсокетов состоит.

anonymous
()
Ответ на: комментарий от anonymous

размер, скажем, TCP-стека

Влезает где-то в сотню килобайт.

Если вообще все слинковать, то конечно больше получится, ну так у нас программа не только из вебсокетов состоит.

Вот в том-то и дело: у МКшки же по сути статическая линковка!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

у МКшки же по сути статическая линковка!

У нас тоже. Еще раз: размер кода, который вызывал у тебя такое неприятие — 4КБ. Остальное — это совсем другой код (в твоем случае — тот же TCP-стек). Сколько его есть, столько есть, а от вебсокетов становится именно на 4КБ больше.

anonymous
()
Ответ на: комментарий от anonymous

размер кода, который вызывал у тебя такое неприятие — 4КБ

Странно: я смотрел листинг sha1 — что-то мне показалось, что больше выйдет.

Ну да ладно: не буду заранее судить. Вечером попробую.

Eddy_Em ☆☆☆☆☆
() автор топика

Вот же у кого-то в одном месте чешется!

Нет, ну я фигею от этого стандарта. Теперь пакеты такие:

      0                   1                   2                   3
      0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
     +-+-+-+-+-------+-+-------------+-------------------------------+
     |F|R|R|R| opcode|M| Payload len |    Extended payload length    |
     |I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |
     |N|V|V|V|       |S|             |   (if payload len==126/127)   |
     | |1|2|3|       |K|             |                               |
     +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
     |     Extended payload length continued, if payload len == 127  |
     + - - - - - - - - - - - - - - - +-------------------------------+
     |                               |Masking-key, if MASK set to 1  |
     +-------------------------------+-------------------------------+
     | Masking-key (continued)       |          Payload Data         |
     +-------------------------------- - - - - - - - - - - - - - - - +
     :                     Payload Data continued ...                :
     + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
     |                     Payload Data continued ...                |
     +---------------------------------------------------------------+
Ну вот почему бы не передавать тупо данные в оригинальном виде?

Ох уж эти извращенцы!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: Вот же у кого-то в одном месте чешется! от Eddy_Em

Японский городовой! Реализовал все до страницы 35. Когда ее прочитал, охренел: они еще и предлагают «внеочередные» контрольные фреймы пихать внутри раздробленного кадра!

Да пошли они в одно место! Не буду этот бред реализовывать. И так уже вместо планируемых 1-2кБ хрен знает сколько получилось! Пихать в вебсокеты «шифрование» — идиотизм чистой воды! Кому нужно «шифрование» нехай ssl использует, есть же vss-сокеты...

Блин, сижу тут, испражняю трехэтажные маты, а жена смеется: «что, не получается?»

Eddy_Em ☆☆☆☆☆
() автор топика

Можно потыкать палкой

тестовый экземпляр.

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

Eddy_Em ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.