Putting It All Together


Listing 21-7 contains a few things that we omitted during the course of this chapter for the sake of brevity.

Listing 21.7: The Complete Example
start example
 #include <atlstencil.>  #include <passport.h>  template < class THandler,             class ThreadModel=CComSingleThreadModel,             class TagReplacerType=CHtmlTagReplacer< THandler > >  class CPassportHandlerT : public CRequestHandlerT< THandler,                                                     ThreadModel,                                                     TagReplacerType >  {  protected:      typedef CRequestHandlerT< THandler,                                ThreadModel,                                TagReplacerType> baseType;      IPassportManager2 *m_passportManager;      CComVariant        m_returnURL;      CComVariant        m_timeWindow;      CComVariant        m_forceLogin;      CComVariant        m_coBrandArgs;      CComVariant        m_langId;      CComVariant        m_usingHTTPS;      CComVariant        m_namespace;      CComVariant        m_kpp;      CComVariant        m_useSecureAuth;  public:          CPassportHandlerT() :                  m_passportManager(NULL),                  m_forceLogin(true),                  m_langId(GetThreadLocale())          {}          virtual ~CPassportHandlerT(void)          {}          HTTP_CODE Uninitialize(HTTP_CODE hcError)          {              if (m_passportManager)              {                  m_passportManager->Release();                  m_passportManager = NULL;              }              return hcError;          }         HTTP_CODE InitializeHandler( AtlServerRequest *pRequestInfo,                                      IServiceProvider *pProvider )         {              HTTP_CODE httpCode = baseType::InitializeHandler(pRequestInfo,                                                               pProvider);              if (httpCode == HTTP_SUCCESS)              {                   if (!m_passportManager)                   {                        if (FAILED(CoCreateInstance(CLSID_Manager,                                                    NULL,                                                    CLSCTX_INPROC_SERVER,                                                    IID_IPassportManager2,                                                    (void**)&m_passportManager)))                        {                             return HTTP_S_FALSE;                        }                   }                   DWORD bufferSize(ATL_MAX_COOKIE_LEN);                   CHAR  cookieHeader[ATL_MAX_COOKIE_LEN + 1];                   cookieHeader[0] = 0;                   if (FAILED(m_passportManager->                                  OnStartPageECB((BYTE*)pRequestInfo->pECB,                                                 &bufferSize,                                                 cookieHeader)))                   {                        return HTTP_S_FALSE;                   }                   CString url;                   bool    https(false);                   if (!GetURL(url, https))                   {                        return HTTP_S_FALSE;                   }                   m_returnURL  = url;                   m_usingHTTPS = https;                   m_HttpResponse.SetCacheControl("no-cache");                   m_HttpResponse.SetContentType("text/html");             }             return httpCode;      }      bool GetURL(CString& url, bool& bHttps)      {          CHAR szURL[ATL_URL_MAX_URL_LENGTH];          DWORD dwUrlSize = sizeof(szURL) * sizeof(CHAR);          CHAR szServer[ATL_URL_MAX_HOST_NAME_LENGTH];          DWORD dwServerSize = sizeof(szServer) * sizeof(CHAR);          CHAR szHttps[10];          DWORD dwHttpsLen = sizeof(szHttps) * sizeof(CHAR);          if (m_spServerContext->GetServerVariable("URL",                                                   szURL,                                                   &dwUrlSize) != FALSE)          {              if (m_spServerContext->GetServerVariable("SERVER_NAME",                                                       szServer,                                                       &dwServerSize) != FALSE)              {                  bHttps = false;                  if ((m_spServerContext->GetServerVariable("HTTPS",                                                            szHttps,                                                            &dwHttpsLen) != FALSE)                                                            &&                                                         (!_stricmp(szHttps, "ON")))                  {                      bHttps = true;                  }                  _ATLTRY                  {                      url.Format("http%s://%s%s", bHttps ? "s" : "",                                                  szServer,                                                  szURL);                      return true;                  }                  _ATLCATCHALL()                  {                      return false;                  }              }          }          return false;      }      HTTP_CODE OnLogoTag()      {          BSTR logoTag(NULL);          if (FAILED(m_passportManager->LogoTag(m_returnURL,                                                m_timeWindow,                                                m_forceLogin,                                                m_coBrandArgs,                                                m_langId,                                                m_usingHTTPS,                                                m_namespace,                                                m_kpp,                                                m_useSecureAuth,                                                &logoTag)))          {              m_HttpResponse << "ERROR - could not get LogoTag";              return HTTP_S_FALSE;          }          m_HttpResponse << logoTag;          ::SysFreeString(logoTag);          return HTTP_SUCCESS;      }      HTTP_CODE OnIsAuthenticated()      {          VARIANT_BOOL isAuthenticated(VARIANT_FALSE);          if (FAILED(m_passportManager->IsAuthenticated(m_timeWindow,                                                        m_forceLogin,                                                        m_useSecureAuth,                                                        &isAuthenticated)))          {              return HTTP_S_FALSE;          }          return isAuthenticated == VARIANT_TRUE ? HTTP_SUCCESS : HTTP_S_FALSE;      }      HTTP_CODE OnGetProfile(char *profileName)      {          CComVariant value;          if (FAILED(m_passportManager->get_Profile(CComBSTR(profileName),                                                    &value)))          {               return HTTP_S_FALSE;          }          switch (value.vt)          {              case VT_I1:                  m_HttpResponse << value.cVal;                  break;              case VT_I4:                  m_HttpResponse << value.intVal;                  break;              case VT_BSTR:                  m_HttpResponse << value.bstrVal;                  break;              default:                  m_HttpResponse << "Unknown type!";                  break;          }          return HTTP_SUCCESS;      }      BEGIN_REPLACEMENT_METHOD_MAP(THandler)        REPLACEMENT_METHOD_ENTRY("Passport_LogoTag", OnLogoTag)        REPLACEMENT_METHOD_ENTRY("Passport_IsAuthenticated", OnIsAuthenticated)        REPLACEMENT_METHOD_ENTRY_EX_STR("Passport_GetProfile", OnGetProfile)      END_REPLACEMENT_METHOD_MAP()  }; 
end example
 

Now that you ve built your new request handler, you ll come full circle in the next section and see how you can use it to implement the scenario you ve been looking at throughout this chapter.




ATL Server. High Performance C++ on. NET
Observing the User Experience: A Practitioners Guide to User Research
ISBN: B006Z372QQ
EAN: 2147483647
Year: 2002
Pages: 181

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net