1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#ifndef NULLSOFT_AUTH_LOGINRESULT_WEBAUTH_HEADER
#define NULLSOFT_AUTH_LOGINRESULT_WEBAUTH_HEADER
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
#include "./loginResult.h"
#include "./browserEvent.h"
#include "../omBrowser/ifc_omservice.h"
#include "../omBrowser/ifc_omservicecommand.h"
#include "../../nu/dispatchTable.h"
#include <bfc/multipatch.h>
class LoginData;
class LoginCredentials;
class ExternalManager;
class obj_ombrowser;
#define MPIID_OMSVC 10
#define MPIID_OMSVCCOMMAND 20
class LoginResultWebAuth : public LoginResult,
public IDispatch,
public BrowserEvent,
public MultiPatch<MPIID_OMSVC, ifc_omservice>,
public MultiPatch<MPIID_OMSVCCOMMAND, ifc_omservicecommand>
{
public:
typedef enum
{
DISPID_LOGINCOMPLETE = 700,
DISPID_GETPAGERECT = 701,
DISPID_GETBOXRECT = 702,
DISPID_SETSTATUS = 703,
DISPID_NAVIGATE = 704,
DISPID_GETSTRING = 705,
} DispatchCodes;
protected:
LoginResultWebAuth(obj_ombrowser *pManager, LPCWSTR pszTargetUrl, LoginData *pInput, Callback fnCallback, void *pUser);
~LoginResultWebAuth();
public:
static HRESULT CreateInstance(LPCWSTR targetUrl, LoginData *input, Callback callback, void *user, LoginResultWebAuth **instance);
public:
/* IUnknown */
STDMETHOD(QueryInterface)(REFIID riid, PVOID *ppvObject);
STDMETHOD_(ULONG, AddRef)(void);
STDMETHOD_(ULONG, Release)(void);
/* IDispatchable */
DISPTABLE_INCLUDE();
DISPHANDLER_REGISTER(OnLoginComplete);
DISPHANDLER_REGISTER(OnGetPageRect);
DISPHANDLER_REGISTER(OnGetBoxRect);
DISPHANDLER_REGISTER(OnSetStatus);
DISPHANDLER_REGISTER(OnNavigate);
DISPHANDLER_REGISTER(OnGetString);
/* LoignResult */
HRESULT GetWaitHandle(HANDLE *handle);
HRESULT GetUser(void **pUser);
HRESULT RequestAbort(BOOL fDrop);
HRESULT IsCompleted();
HRESULT IsAborting();
HRESULT GetLoginData(LoginData **loginData);
/* BrowserEvent */
STDMETHOD_(void, Event_BrowserReady)(HWND hBrowser);
STDMETHOD_(void, Event_DocumentReady)(HWND hBrowser);
STDMETHOD_(void, Event_BrowserClosing)(HWND hBrowser);
STDMETHOD_(void, Event_InvokeApc)(HWND hBrowser, LPARAM param);
protected:
/* Dispatchable */
size_t Wasabi_AddRef();
size_t Wasabi_Release();
int Wasabi_QueryInterface(GUID iid, void **object);
/* ifc_omservice */
unsigned int GetId();
HRESULT GetName(wchar_t *pszBuffer, int cchBufferMax);
HRESULT GetUrl(wchar_t *pszBuffer, int cchBufferMax);
HRESULT GetExternal(IDispatch **ppDispatch);
/* ifc_omservicecommand */
HRESULT QueryState(HWND hBrowser, const GUID *commandGroup, UINT commandId);
HRESULT Exec(HWND hBrowser, const GUID *commandGroup, UINT commandId, ULONG_PTR commandArg);
public:
HRESULT GetResult(INT *authCode, LoginCredentials **credentials);
private:
static HRESULT InitBrowserManager(obj_ombrowser **browserMngr);
HRESULT Start();
HRESULT Finish();
void NotifyComplete();
HRESULT DispParamsToCredentials(WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, UINT FAR *puArgErr, HRESULT *errorEx, LPWSTR *finishUrl);
protected:
ULONG ref;
LoginData *input;
Callback callback;
void *user;
LoginCredentials *credentials;
INT authCode;
obj_ombrowser *browserMngr;
LPWSTR targetUrl;
HWND hView;
CRITICAL_SECTION lock;
HANDLE completed;
ExternalManager *external;
DISPID dispId;
BOOL connectionVerified;
LPWSTR readyUrl;
protected:
RECVS_MULTIPATCH;
};
#endif //NULLSOFT_AUTH_LOGINRESULT_WEBAUTH_HEADER
|