Pregunta

Estoy trabajando en un filtro ISAPI para eliminar cierto contenido de las respuestas. Necesito recopilar todo el cuerpo de la respuesta antes de realizar el procesamiento, ya que el contenido que estoy eliminando podría superponerse a los buffers de envío.

Para hacer esto, me gustaría almacenar el contenido de la respuesta con cada notificación de SF_NOTIFY_SEND_RAW_DATA hasta que llegue a la última, luego envíe los datos traducidos. Me gustaría saber cuál es la mejor forma de determinar qué SF_NOTIFY_SEND_RAW_DATA es en realidad el último. Si espero hasta la notificación de SF_NOTIFY_END_OF_REQUEST , no sé cómo enviar los datos que he almacenado en búfer.

Un enfoque sería utilizar la longitud del contenido. Esto requeriría que detectara el final de los encabezados. También requeriría asumir que el encabezado de la longitud del contenido es correcto (¿está garantizado?). Dado que HTTP ni siquiera requiere un encabezado de contenido, ni siquiera estoy seguro de que siempre estará allí. Parece que debería haber una manera más fácil.

Supongo que la respuesta no está fragmentada, por lo que no estoy manejando dechunking antes de hacer el cambio de respuesta. Además, cuando haga las modificaciones al cuerpo de la respuesta, el tamaño del cuerpo de la respuesta no cambiará, por lo que no necesito volver atrás y actualizar la longitud del contenido.

¿Fue útil?

Solución

Finalmente encontré algunas buenas discusiones a través de google.

Esta publicación responde a mis preguntas, así como plantea cuestiones que un filtro más complicado tendría que abordar: http: // grupos. google /group/microsoft.public.platformsdk.internet.server. + a + Buscar & amp; & amp; d & amp; pli = 1

El filtro tengo s almacenando en búfer la solicitud completa en su propio búfer y luego utilizo el SF_NOTIFY_END_OF_REQUEST para enviar el contenido. La modificación que hace no cambia el tamaño, y excluye la posibilidad de que la respuesta sea fragmentada, por lo que en mi caso el filtro es relativamente simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top