windows-nt/Source/XPSP1/NT/enduser/windows.com/inc/urlagent.h
2020-09-26 16:20:57 +08:00

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
};