|
|
//***********************************************************************************
//
// Copyright (c) 2001 Microsoft Corporation. All Rights Reserved.
//
// File: UrlAgent.h
//
// Description:
//
// This class encapsulates the logic about where to get the right logic
// for various purposes, including the case of running WU in corporate
// environments.
//
// An object based on this class should be created first, then call
// GetOriginalIdentServer() function to get where to download ident,
// then download ident, then call PopulateData() function to read
// all URL related data.
//
//
// Created by:
// Charles Ma
//
// Date Creatd:
// Oct 19, 2001
//
//***********************************************************************************
#pragma once
class CUrlAgent { public: //
// constructor/destructor
//
CUrlAgent(); virtual ~CUrlAgent();
//
// when instantiated, the object is not populated,
// until PopulateData() is called.
//
inline BOOL HasBeenPopulated(void) {return m_fPopulated;}
//
// this function should be called after you downloaded ident, and get
// a fresh copy of ident text file from the cab, after verifying cab was
// signed properly.
//
// this function reads data from ident and registry
//
HRESULT PopulateData(void);
//
// the following are access function to obtain URL's
//
//
// get the original ident server.
// *** this API should be called before PopulateData() is called ***
// *** this API should be called to retrieve the base URL where you download ident ***
//
HRESULT GetOriginalIdentServer( LPTSTR lpsBuffer, int nBufferSize, BOOL* pfInternalServer = NULL);
//
// get the ping/status server
// *** this API should be called after PopulateData() is called ***
//
HRESULT GetLivePingServer( LPTSTR lpsBuffer, int nBufferSize);
// *** this API can be called before PopulateData() is called ***
HRESULT GetCorpPingServer( LPTSTR lpsBuffer, int nBufferSize);
//
// get the query server. this is per client based
// *** this API should be called after PopulateData() is called ***
//
HRESULT GetQueryServer( LPCTSTR lpsClientName, LPTSTR lpsBuffer, int nBufferSize, BOOL* pfInternalServer = NULL); //
// tell if a particular client is controlled by policy in corporate
// returns:
// S_OK = TRUE
// S_FALSE = FALSE
// other = error, so don't know
//
HRESULT IsClientSpecifiedByPolicy( LPCTSTR lpsClientName ); //
// when client isn't available, is IU controlled by policy in corporate?
// returns:
// S_OK = TRUE
// S_FALSE = FALSE
// other = error, so don't know
//
HRESULT IsIdentFromPolicy();
private:
typedef struct _ServerPerClient { LPTSTR pszClientName; LPTSTR pszQueryServer; BOOL fInternalServer; } ServerPerClient, *PServerPerClient;
BOOL m_fPopulated; // whether this object has been populated
LPTSTR m_pszWUServer; // WU server defined in policy, if any
LPTSTR m_pszInternetPingUrl; // ping server
LPTSTR m_pszIntranetPingUrl; PServerPerClient m_ArrayUrls; int m_nArrayUrlCount; // how many we data slot we used
int m_nArraySize; // current size of this array
//
// private functions
//
void DesertData(void);
//
// helper function
//
LPTSTR RetrieveIdentStrAlloc( LPCTSTR pSection, LPCTSTR pEntry, LPDWORD lpdwSizeAllocated, LPCTSTR lpszIdentFile); //
// helper function
// if there is no empty slot, double the size of url array
//
HRESULT ExpandArrayIfNeeded(void);
protected: HANDLE m_hProcHeap; BOOL m_fIdentFromPolicy; // tell if original ident url based on policy setup
LPTSTR m_pszOrigIdentUrl; // this one should always have it, no matter population
int m_nOrigIdentUrlBufSize; // in tchar count
BOOL m_fIsBetaMode; };
class CIUUrlAgent : public CUrlAgent { public: //
// constructor/destructor
//
CIUUrlAgent(); ~CIUUrlAgent();
// call base class PopulateData() and then populate self-update url
HRESULT PopulateData(void);
//
// get the self-update server.
// *** this API should be called after PopulateData() is called ***
//
HRESULT GetSelfUpdateServer( LPTSTR lpsBuffer, int nBufferSize, BOOL* pfInternalServer = NULL);
private: LPTSTR m_pszSelfUpdateUrl; // self-update server
BOOL m_fIUPopulated; // whether this object has been populated
};
|