O projeto GNU anunciou o lançamento da biblioteca libmicrohttpd 0.9.77, que oferece uma API simples para embutir funcionalidades de servidor HTTP em aplicações. As plataformas suportadas incluem: GNU/Linux, FreeBSD, OpenBSD, NetBSD, Solaris, Android, macOS, Win32 e z/OS. A biblioteca é distribuída sob a licença LGPL 2.1+. Em sua versão compilada, a biblioteca ocupa cerca de 32 KB.
A biblioteca suporta o protocolo HTTP 1.1, TLS, processamento incremental de solicitações POST, autenticação básica e digest, IPv6, SHOUTcast, diversos métodos de multiplexação de conexões (select, poll, epoll) e modelos de multithreading (por exemplo, pode-se usar um pool de threads ou um thread por conexão). Para reduzir a sobrecarga relacionada à troca de contexto entre o núcleo e o espaço do usuário, o número de chamadas de sistema durante a operação foi minimizado.
As mudanças mais notáveis:
- A API propõe uma nova função MHD_get_version_bin() para obter informações sobre a versão da biblioteca em um formato embalado (por exemplo, 0x00097701).
- Em conformidade com o formato recomendado no RFC, foram ajustados os identificadores dos algoritmos utilizados para autenticação digest («MD5» / «SHA-256» em vez de «md5» / «sha-256»).
- O código de decodificação de blocos no formato Base64 foi reescrito, com uma verificação mais rigorosa sobre a validade dos dados de entrada no formato Base64.
- A configuração de compilação cruzada foi aprimorada, aumentando a compatibilidade com POSIX e novas versões de compiladores.
- Testes internos foram adicionados para verificar a decodificação de Base64, Basic Auth e cabeçalhos HTTP longos compactados.
- Os testes usam a API atualizada da biblioteca libcurl para ocultar avisos sobre o uso de chamadas obsoletas.
- Foi adicionada a capacidade de usar compiladores VC (Visual C) ao compilar para sistemas ARM e ARM64.
- Qualquer valor negativo retornado por chamadas de callback agora é interpretado como erro (anteriormente, valores negativos, exceto códigos de erro predefinidos, podiam levar a comportamentos indefinidos).
- Foi adicionada o tratamento do macro do pré-processador «DEBUG» (o manipulador é idêntico ao macro «_DEBUG»).
- Foram corrigidos erros acumulados.
Fonte: opennet.ru
