<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ISAPI code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Mon, 06 Oct 2008 10:58:11 GMT</pubDate>
    <description>DZone Snippets: ISAPI code</description>
    <item>
      <title>ISAPI URL Rewrite</title>
      <link>http://snippets.dzone.com/posts/show/4225</link>
      <description>// description of your code here&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#include &lt;windows.h&gt;&lt;br /&gt;#include &lt;httpfilt.h&gt;&lt;br /&gt;&lt;br /&gt;#define MAX_URL_LEN 4096&lt;br /&gt;&lt;br /&gt;BOOL WINAPI GetFilterVersion(HTTP_FILTER_VERSION * pVer)&lt;br /&gt;{&lt;br /&gt;      pVer-&gt;dwFlags = (SF_NOTIFY_SECURE_PORT | SF_NOTIFY_NONSECURE_PORT | SF_NOTIFY_PREPROC_HEADERS | SF_NOTIFY_ORDER_HIGH);&lt;br /&gt;      pVer-&gt;dwFilterVersion = HTTP_FILTER_REVISION;&lt;br /&gt;      strcpy_s(pVer-&gt;lpszFilterDesc,9,"Blah blah blah");&lt;br /&gt;      return TRUE;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void ReMapURLs(CHAR* pUrl,HTTP_FILTER_CONTEXT* pfc,PHTTP_FILTER_PREPROC_HEADERS pHeaders)&lt;br /&gt;{&lt;br /&gt;      if (pUrl[0] != '/') return;&lt;br /&gt;&lt;br /&gt;      CHAR *iUrl = 0;&lt;br /&gt;      BOOL doSet = FALSE;&lt;br /&gt;&lt;br /&gt;      char *sOldUrls[] = { "/test/", "/TEST/" };&lt;br /&gt;      char *sNewUrls[] = { "/go/", "/GO/" };&lt;br /&gt;&lt;br /&gt;      for (int i=0; i&lt;2; i++)&lt;br /&gt;      {&lt;br /&gt;            if (iUrl = strstr(pUrl,sOldUrls[i]))&lt;br /&gt;            {&lt;br /&gt;                  doSet = TRUE;&lt;br /&gt;                  memcpy(iUrl,sNewUrls[i],strlen(sNewUrls[i]));&lt;br /&gt;            }&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      if (doSet) pHeaders-&gt;SetHeader(pfc, "url", pUrl);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;DWORD WINAPI HttpFilterProc(HTTP_FILTER_CONTEXT *pfc,DWORD NotificationType,VOID * pvData)&lt;br /&gt;{&lt;br /&gt;      PHTTP_FILTER_PREPROC_HEADERS pHeaders;&lt;br /&gt;      DWORD cUrlOrig = MAX_URL_LEN;&lt;br /&gt;      DWORD cUrl = cUrlOrig;&lt;br /&gt;      CHAR rgUrl[MAX_URL_LEN];&lt;br /&gt;      CHAR *pUrl;&lt;br /&gt;      BOOL result;&lt;br /&gt;&lt;br /&gt;      switch ( NotificationType )&lt;br /&gt;      {&lt;br /&gt;            case SF_NOTIFY_PREPROC_HEADERS:&lt;br /&gt;                  pHeaders = (PHTTP_FILTER_PREPROC_HEADERS) pvData;&lt;br /&gt;                  result = pHeaders-&gt;GetHeader(pfc, "url", rgUrl, &amp;cUrl);&lt;br /&gt;&lt;br /&gt;                  if (!result &amp;&amp; cUrl &gt; cUrlOrig)&lt;br /&gt;                  {&lt;br /&gt;                        pUrl = (CHAR*)LocalAlloc(0, cUrl);&lt;br /&gt;                        result = pHeaders-&gt;GetHeader(pfc, "url", pUrl, &amp;cUrl);&lt;br /&gt;                        if (!result)&lt;br /&gt;                        {&lt;br /&gt;                              LocalFree(pUrl);&lt;br /&gt;                              break;&lt;br /&gt;                        }&lt;br /&gt;                        ReMapURLs(pUrl, pfc, pHeaders);&lt;br /&gt;                        LocalFree(pUrl);&lt;br /&gt;                  }&lt;br /&gt;                  else&lt;br /&gt;                        ReMapURLs(rgUrl, pfc, pHeaders);&lt;br /&gt;                  break;&lt;br /&gt;            default:&lt;br /&gt;                  break;&lt;br /&gt;      }&lt;br /&gt;      return SF_STATUS_REQ_NEXT_NOTIFICATION;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 29 Jun 2007 08:01:32 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4225</guid>
      <author>mornlee (mornlee)</author>
    </item>
  </channel>
</rss>
