Il progetto GNU ha pubblicato l'uscita della libreria libmicrohttpd 0.9.77, che offre un'API semplice per integrare funzionalità di server HTTP nelle applicazioni. Le piattaforme supportate includono: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 e z/OS. La libreria è distribuita sotto la licenza LGPL 2.1+. La libreria occupa circa 32 KB nella forma compilata.
La libreria supporta il protocollo HTTP 1.1, TLS, l'elaborazione incrementale delle richieste POST, l'autenticazione basic e digest, IPv6, SHOUTcast, vari metodi di multiplexing delle connessioni (select, poll, epoll) e modelli di multithreading (ad esempio, è possibile utilizzare un pool di thread o un thread per connessione). Per ridurre il sovraccarico causato dal passaggio di contesto tra nucleo e spazio utente, il numero di chiamate di sistema durante il funzionamento è ridotto al minimo.
Le modifiche più significative:
- Nell'API è stata proposta una nuova funzione MHD_get_version_bin() per ottenere informazioni sulla versione della libreria in formato compatto (ad esempio, 0x00097701).
- Alle forme raccomandate nella RFC sono stati associati identificatori per gli algoritmi utilizzati per l'autenticazione digest («MD5» / «SHA-256» invece di «md5» / «sha-256»).
- Il codice per la decodifica dei blocchi in formato Base64 è stato riscritto, e il controllo della correttezza dei dati in ingresso in formato Base64 è stato potenziato.
- È stata migliorata la configurazione della cross-compilazione, aumentando la compatibilità con POSIX e le nuove versioni dei compilatori.
- Sono stati aggiunti test interni per la verifica della decodifica di Base64, dell'Autenticazione Base e dell'accorciamento delle intestazioni HTTP lunghe.
- Nei test è stato utilizzato l'API aggiornato della libreria libcurl per nascondere avvisi sull'uso di chiamate obsolete.
- È stata aggiunta la possibilità di utilizzare i compilatori VC (Visual C) durante la compilazione per i sistemi ARM e ARM64.
- Qualsiasi valore negativo restituito da una callback viene ora interpretato come un errore (in precedenza, i valori negativi, ad eccezione dei codici di errore predefiniti, potevano portare a comportamenti indefiniti).
- È stata aggiunta la gestione del macro preprocessore "DEBUG" (il gestore è identico al macro "_DEBUG").
- Corrette le bug accumulate.
Fonte: opennet.ru
