Windows-Server-2003/sdktools/debuggers/symsrv/store.hpp

181 lines
3.9 KiB
C++

/*
* store.hpp
*/
enum {
stHTTP = 0,
stHTTPS,
stUNC,
stError
};
typedef BOOL (*COPYPROC)(DWORD, LPCSTR, LPCSTR, DWORD);
typedef struct _SRVTYPEINFO {
LPCSTR tag;
COPYPROC copyproc;
int taglen;
} SRVTYPEINFO, *PSRVTYPEINFO;
#define SF_DISABLED 0X1
#define SF_INTERNET_DISABLED 0x2
typedef int (*DBGPRINT)(LPSTR, ...);
extern DBGPRINT gdprint;
#define dprint (gdprint)&&gdprint
typedef int (*DBGEPRINT)(LPSTR, ...);
extern DBGEPRINT geprint;
#define eprint (geprint)&&geprint
typedef int (*QUERYCANCEL)();
extern QUERYCANCEL gquerycancel;
__inline BOOL querycancel()
{
if (!gquerycancel)
return false;
return gquerycancel();
}
class Store
{
public:
Store()
{
*m_name = 0;
m_type = 0;
m_flags = 0;
}
DWORD assign(PCSTR name);
char *target();
void setsize(LONGLONG size);
void setbytes(LONGLONG bytes);
virtual BOOL init();
virtual BOOL open(PCSTR rpath, PCSTR file);
virtual BOOL get(PCSTR trg);
virtual VOID close();
virtual BOOL copy(PCSTR rpath, PCSTR file, PCSTR trg);
virtual BOOL ping();
virtual BOOL progress();
protected:
DWORD m_type; // type of site
char m_name[MAX_PATH + 1]; // name of site
DWORD m_flags; // options
char m_rpath[MAX_PATH + 1]; // relative path from node
char m_file[MAX_PATH + 1]; // name of file
char m_spath[MAX_PATH + 1]; // source file path
char m_tpath[MAX_PATH + 1]; // fully qualified target file path
char m_epath[MAX_PATH + 1]; // save last existing node of a path being created
LONGLONG m_size; // size of file
LONGLONG m_bytes; // amount of bytes copied
DWORD m_tic; // last tic count for timing counters
public:
char *name() {return m_name;}
};
class StoreUNC : public Store
{
public:
virtual BOOL init() {return true;}
virtual BOOL get(PCSTR trg);
virtual BOOL copy(PCSTR rpath, PCSTR file, PCSTR trg);
virtual BOOL ping();
};
class StoreInet : public Store
{
public:
StoreInet()
{
*m_name = 0;
m_type = 0;
m_flags = 0;
m_hsite = 0;
}
~StoreInet()
{
if (m_hsite)
InternetCloseHandle(m_hsite);
}
virtual BOOL init();
virtual BOOL open(PCSTR rpath, PCSTR file);
virtual BOOL copy(PCSTR rpath, PCSTR file, PCSTR trg);
virtual BOOL ping();
protected:
HINTERNET m_hsite;
INTERNET_PORT m_port;
DWORD m_iflags;
DWORD m_service;
DWORD m_context;
char m_site[MAX_PATH + 1];
char m_srpath[MAX_PATH + 1];
};
class StoreHTTP : public StoreInet
{
public:
~StoreHTTP()
{
if (m_file)
InternetCloseHandle(m_hfile);
if (m_hsite)
InternetCloseHandle(m_hsite);
}
virtual BOOL init();
virtual BOOL open(PCSTR rpath, PCSTR file);
virtual VOID close();
virtual BOOL get(PCSTR trg);
virtual BOOL progress();
HINTERNET hsite() {return m_hsite;}
HINTERNET hfile() {return m_hfile;}
protected:
HINTERNET m_hfile;
DWORD request();
DWORD prompt(HINTERNET hreq, DWORD err);
DWORD fileinfo();
};
// these manage the list of store objects
Store *GetStore(PCSTR name);
Store *FindStore(PCSTR name);
Store *AddStore(PCSTR name);
// utility functions
#ifdef __cplusplus
extern "C" {
#endif
void SetParentWindow(HWND hwnd);
void setproxy(char *proxy);
void setdstore(char *proxy);
void SetStoreOptions(UINT_PTR opts);
void setdprint(DBGPRINT fndprint);
DWORD GetStoreType(LPCSTR sz);
BOOL ReadFilePtr(LPSTR path, DWORD size);
BOOL UncompressFile(LPCSTR Source, LPCSTR Target);
BOOL ParsePath(LPCSTR ipath, LPSTR site, LPSTR path, LPSTR file, BOOL striptype);
#ifdef __cplusplus
};
#endif