181 lines
3.9 KiB
C++
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
|
|
|
|
|