Pergunta

Eu estou trabalhando em um filtro ISAPI para retirar determinados conteúdos fora de respostas. Eu preciso recolher todo o corpo da resposta antes de eu fazer o processamento, como o conteúdo que eu estou tirando poderia se sobrepor enviar buffers.

Para fazer isso eu gostaria de tamponar o conteúdo da resposta a cada notificação SF_NOTIFY_SEND_RAW_DATA até eu chegar à última, em seguida, enviar os dados traduzidos. Eu gostaria de saber a melhor maneira de determinar qual SF_NOTIFY_SEND_RAW_DATA é realmente o último. Se eu esperar até o SF_NOTIFY_END_OF_REQUESTnotification, então eu não sei como enviar os dados que eu buffer.

Uma abordagem seria usar o conteúdo de comprimento. Isso exigiria que eu detectar o final dos cabeçalhos. Também exigiria assumindo o cabeçalho Content-Length está correta (se que garantida?). Desde HTTP nem sequer exigem um cabeçalho de comprimento de conteúdo, eu nem tenho certeza de que ele estará sempre lá. Não parece que deve haver uma maneira mais fácil.

Estou assumindo a resposta não é fragmentada, então eu não estou lidando com dechunking antes de eu fazer a mudança de resposta. Além disso, quando eu faço as modificações no corpo da resposta, o tamanho do teh corpo da resposta não vai mudar, então eu não preciso voltar e atualizar o conteúdo de comprimento.

Foi útil?

Solução

Eu finalmente encontrei algumas boas discussões através do Google.

Este mensagens responde minhas perguntas, bem como questões levanta um filtro mais complicado teria de endereço: http: // grupos. google.com/group/microsoft.public.platformsdk.internet.server.isapi-dev/browse_thread/thread/85a5e75f342fad2b/cbb638f9a85c9e03?q=HTTP_FILTER_RAW_DATA&_done=%2Fgroups%3Fq%3DHTTP_FILTER_RAW_DATA%26start%3D20%26&_doneTitle=Back+to+Search&&d&pli = 1

O filtro eu tenho s tamponantes o pedido completo em seu próprio buffer, em seguida, usando o SF_NOTIFY_END_OF_REQUEST para enviar o conteúdo. A modificação faz não muda o tamanho, e exclui a possibilidade de que a resposta é fragmentada, então no meu caso o filtro é relativamente simples.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top