Embedded Web Server
Jun. 22nd, 2011 09:43 pmЦілий день ваяю web-інтерфейс на базі оцього: libwebserver. Бібліотека стара як смерть - остання версія вийшла у 2004-му. Інтерфейс жахливий. Що прикрутити нормальний цикл poll треба виробляти неабиякі трюки і частково дублювати у себе в коді її внутрішню логіку. Один той факт що хендлери задаються сигнатурою void (*) () викликає відчайдушний крик душі. Дані передаються через глобальну змінну що називається так-же як і її тип. Отаку:
Ну більшість моментів я виправив: додав void * data аргументом для хендлеру, перейменував цю довбану глобальну змінну (викорінити її не вдалось, дуже глибоко проросла) ну і всякі різні дрібні штуки. Да, кваліфікатор const взагалі не використовується. А це приводить до неможливості передавати у функції результат std::string::c_str() і викликає подив компілятора (проявляється десятками попереджень). А ще вона підозріло проторможує і перепризначує stdout.
Але ця бібліотека підкупає двома речами: розміром і вмінням HTTPS. Так і чешуться руки взяти і "причесати" її до нормального сучасного вигляду...
struct ClientInfo * ClientInfo;
Ну більшість моментів я виправив: додав void * data аргументом для хендлеру, перейменував цю довбану глобальну змінну (викорінити її не вдалось, дуже глибоко проросла) ну і всякі різні дрібні штуки. Да, кваліфікатор const взагалі не використовується. А це приводить до неможливості передавати у функції результат std::string::c_str() і викликає подив компілятора (проявляється десятками попереджень). А ще вона підозріло проторможує і перепризначує stdout.
Але ця бібліотека підкупає двома речами: розміром і вмінням HTTPS. Так і чешуться руки взяти і "причесати" її до нормального сучасного вигляду...