2009-03-06 4 views
1

Je travaille sur un filtre ISAPI pour supprimer certains contenus des réponses. J'ai besoin de rassembler tout le corps de la réponse avant de faire le traitement, car le contenu que je suis en train d'effacer pourrait chevaucher les tampons d'envoi.Détermination de la longueur de réponse à partir d'un filtre ISAPI

Pour ce faire, je voudrais mettre en tampon le contenu de la réponse avec chaque notification SF_NOTIFY_SEND_RAW_DATA jusqu'à ce que je reçois la dernière, puis envoyer les données traduites. Je voudrais savoir la meilleure façon de déterminer lequel SF_NOTIFY_SEND_RAW_DATA est réellement le dernier. Si j'attends la notification SF_NOTIFY_END_OF_REQUEST, je ne sais pas comment envoyer les données que j'ai tamponnées.

Une approche consisterait à utiliser la longueur de contenu. Cela nécessiterait que je détecte la fin des en-têtes. Il faudrait également supposer que l'en-tête content-length est correct (est-ce garanti?). Puisque HTTP ne nécessite même pas un en-tête de longueur de contenu, je ne suis même pas sûr qu'il sera toujours là. Il semble qu'il devrait y avoir un moyen plus facile.

Je suppose que la réponse n'est pas fragmentée, donc je ne gère pas le découplage avant de faire le changement de réponse. De plus, lorsque je modifie le corps de la réponse, la taille du corps de la réponse ne change pas, donc je n'ai pas besoin de revenir en arrière et de mettre à jour la longueur du contenu.

Répondre

1

J'ai finalement trouvé de bonnes discussions via google.

Ce message répond à mes questions, ainsi que soulève des questions un filtre plus complexe devrait répondre: http://groups.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

Le filtre je s en mémoire tampon la demande complète dans son propre tampon puis en utilisant le SF_NOTIFY_END_OF_REQUEST pour envoyer le contenu . La modification qu'il fait ne change pas la taille, et exclut la possibilité que la réponse soit tronquée, donc dans mon cas, le filtre est relativement simple.

Questions connexes