186 lines
4.3 KiB
C
186 lines
4.3 KiB
C
|
|
||
|
//***********************************************************************************
|
||
|
//
|
||
|
// 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
|
||
|
|
||
|
};
|