Executando verificação de segurança...
-7

Wasabi v2.3.8

Esta versão consolida o endurecimento do módulo através de uma auditoria profunda na gestão de memória e na conformidade estrita com as especificações RFC 6455 (WebSocket) e MQTT v5. O foco desta atualização foi eliminar comportamentos indefinidos em sistemas de longa duração e garantir a integridade da comunicação em fluxos de dados de grande escala.

Correções de Bugs

Protocolo WebSocket RFC 6455

ProcessCloseFrame: Correção na alocação do array de resposta.
A implementação anterior possuía uma falha na dimensão do array replyFrame ao lidar com fechos iniciados pelo servidor. O código agora realiza o ReDim dinâmico baseado na presença ou ausência de payload no frame de fecho. Isto garante que o cabeçalho e a máscara de 4 bytes sejam transmitidos sem corrupção de memória ou erros de índice.

SendPongFrame: Ordem de precedência da chave de mascaramento.
A lógica para construir o frame de PONG foi corrigida. A atribuição da máscara nos bytes de controlo do frame ocorre agora antes do processo de cifragem XOR. Esta alteração garante que o payload do PONG seja sempre mascarado com valores já persistidos no buffer de saída, alinhando-se ao comportamento esperado no BuildWSFrame.

ProcessFrames: Validação estrita de bits reservados RSV2 e RSV3.
Em conformidade com a secção 5.2 da RFC 6455, o parser de frames agora valida se os bits reservados 2 e 3 estão ativos. Como o Wasabi não negocia extensões que utilizem estes bits, a presença de qualquer um deles resulta no encerramento imediato da ligação com o código de erro 1002 (Protocol Error).

WebSocketSendClose: Refinamento da FSM no estado STATE_CLOSING.
A transição de estado durante o handshake de encerramento foi aprimorada. O módulo sinaliza agora corretamente o estado STATE_CLOSING e aguarda o echo de fecho do servidor antes de libertar os recursos do socket, prevenindo erros de socket pendurado em ciclos rápidos de ligação e desconexão.

MQTT v5

MqttUnsubscribe: Correção de Packet ID estático.
Identificado e corrigido um erro onde o MqttUnsubscribe utilizava um Packet ID fixo (10). A função utiliza agora o contador global MqttNextPacketId, garantindo que cada pedido de cancelamento de subscrição tenha um identificador único.

MqttReceive: Migração de literais para constantes de protocolo.
O processamento de pacotes de desconexão foi refatorado para utilizar a constante MQTT_DISCONNECT em vez do literal numérico 14. Esta alteração garante a consistência do código e evita quebras silenciosas caso a enumeração interna seja modificada no futuro.

MqttPublish: Estabilização do cálculo de PayloadLen.
Removida a utilização da função IIf no cálculo do tamanho do pacote de publicação. Em VBA, a função IIf avalia sempre ambos os argumentos, o que poderia introduzir efeitos colaterais. O cálculo utiliza agora uma estrutura condicional padrão para reservar o espaço do Packet ID apenas quando necessário.

Gestão de Memória e Correctness x64

EnsureBufferCapacity: Expansão do teto de memória para 256 MB.
O limite anterior de 16 MB para fragmentos de dados foi elevado para 256 MB para suportar casos de uso industriais e transferência de grandes payloads binários, utilizando uma estratégia de crescimento agressiva para minimizar realocações.

Base64Encode: Verificação de inicialização de array em x64.
A verificação de integridade da array de entrada foi corrigida para utilizar o padrão idiomático (Not Not Bytes) = 0, evitando falhas em hosts de 64 bits devido à forma como o VBA trata ponteiros de SafeArrays.

ReceiveHTTPResponse: Drenagem do buffer TLS.
Corrigida uma falha onde o recvBuffer não era limpo após a extração de um cabeçalho HTTP em ligações seguras. Isto impede que restos de handshakes antigos sejam reprocessados pela função TLSDecrypt.

WebSocketGetStats: Proteção contra overflow em uptime.
A variável de uptime foi convertida de Long para Double. O cálculo anterior sofria de um erro de overflow após aproximadamente 24 dias de ligação ativa. A nova lógica suporta tempos de ligação virtualmente ilimitados.

Notas Finais

Esta versão mantém o sufixo beta enquanto finalizamos a validação do novo modelo de memória em ambientes Access 32 bit. O núcleo de comunicação MQTT 5.0 e WebSocket WSS é considerado estável para integração em ferramentas de automação e monitorização em tempo real.

Link do Repositório: https://github.com/uesleibros/wasabi

Carregando publicação patrocinada...