vb@0
|
1 |
// CpEpEngine.h : Declaration of the CpEpEngine
|
vb@0
|
2 |
|
vb@0
|
3 |
#pragma once
|
vb@0
|
4 |
#include "resource.h" // main symbols
|
vb@0
|
5 |
|
vb@0
|
6 |
#include "pEpComServerAdapter_i.h"
|
vb@0
|
7 |
#include "_IpEpEngineEvents_CP.h"
|
vb@0
|
8 |
#include "locked_queue.hh"
|
vb@0
|
9 |
#include "utf8_helper.h"
|
vb@33
|
10 |
#include "pEp_utility.h"
|
vb@0
|
11 |
|
vb@0
|
12 |
|
vb@0
|
13 |
#if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
|
vb@0
|
14 |
#error "Single-threaded COM objects are not properly supported on Windows CE platform, such as the Windows Mobile platforms that do not include full DCOM support. Define _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA to force ATL to support creating single-thread COM object's and allow use of it's single-threaded COM object implementations. The threading model in your rgs file was set to 'Free' as that is the only threading model supported in non DCOM Windows CE platforms."
|
vb@0
|
15 |
#endif
|
vb@0
|
16 |
|
vb@0
|
17 |
using namespace ATL;
|
vb@0
|
18 |
using namespace utility;
|
vb@10
|
19 |
using namespace pEp::utility;
|
vb@0
|
20 |
|
vb@0
|
21 |
// CpEpEngine
|
vb@0
|
22 |
|
vb@0
|
23 |
class ATL_NO_VTABLE CpEpEngine :
|
vb@3
|
24 |
public CComObjectRootEx<CComObjectThreadModel>,
|
vb@0
|
25 |
public CComCoClass<CpEpEngine, &CLSID_pEpEngine>,
|
vb@0
|
26 |
public ISupportErrorInfo,
|
vb@0
|
27 |
public IConnectionPointContainerImpl<CpEpEngine>,
|
vb@0
|
28 |
public CProxy_IpEpEngineEvents<CpEpEngine>,
|
vb@15
|
29 |
public IpEpEngine
|
vb@0
|
30 |
{
|
vb@28
|
31 |
protected:
|
vb@28
|
32 |
static int examine_identity(pEp_identity *ident, void *management);
|
vb@28
|
33 |
|
vb@0
|
34 |
public:
|
vb@24
|
35 |
CpEpEngine() : keymanagement_thread(NULL), identity_queue(NULL)
|
vb@0
|
36 |
{
|
vb@0
|
37 |
PEP_STATUS status = ::init(&m_session);
|
vb@0
|
38 |
assert(status == PEP_STATUS_OK);
|
vb@28
|
39 |
::register_examine_function(m_session, CpEpEngine::examine_identity, (void *)this);
|
vb@0
|
40 |
::log_event(m_session, "Startup", "pEp COM Adapter", NULL, NULL);
|
vb@0
|
41 |
}
|
vb@24
|
42 |
|
vb@0
|
43 |
~CpEpEngine()
|
vb@0
|
44 |
{
|
vb@26
|
45 |
stop_keyserver_lookup();
|
vb@0
|
46 |
::log_event(m_session, "Shutdown", "pEp COM Adapter", NULL, NULL);
|
vb@0
|
47 |
::release(m_session);
|
vb@0
|
48 |
}
|
vb@0
|
49 |
|
vb@0
|
50 |
DECLARE_REGISTRY_RESOURCEID(IDR_PEPENGINE)
|
vb@0
|
51 |
|
vb@0
|
52 |
DECLARE_NOT_AGGREGATABLE(CpEpEngine)
|
vb@0
|
53 |
|
vb@0
|
54 |
BEGIN_COM_MAP(CpEpEngine)
|
vb@5
|
55 |
COM_INTERFACE_ENTRY(IpEpEngine)
|
vb@5
|
56 |
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
vb@5
|
57 |
COM_INTERFACE_ENTRY(IConnectionPointContainer)
|
vb@0
|
58 |
END_COM_MAP()
|
vb@0
|
59 |
|
vb@0
|
60 |
BEGIN_CONNECTION_POINT_MAP(CpEpEngine)
|
vb@0
|
61 |
CONNECTION_POINT_ENTRY(__uuidof(_IpEpEngineEvents))
|
vb@0
|
62 |
END_CONNECTION_POINT_MAP()
|
vb@0
|
63 |
// ISupportsErrorInfo
|
vb@0
|
64 |
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
|
vb@0
|
65 |
|
vb@0
|
66 |
|
vb@0
|
67 |
DECLARE_PROTECT_FINAL_CONSTRUCT()
|
vb@0
|
68 |
|
vb@0
|
69 |
HRESULT FinalConstruct()
|
vb@0
|
70 |
{
|
vb@0
|
71 |
return S_OK;
|
vb@0
|
72 |
}
|
vb@0
|
73 |
|
vb@0
|
74 |
void FinalRelease()
|
vb@0
|
75 |
{
|
vb@0
|
76 |
}
|
vb@0
|
77 |
|
vb@0
|
78 |
|
vb@0
|
79 |
protected:
|
vb@0
|
80 |
class session
|
vb@0
|
81 |
{
|
vb@0
|
82 |
private:
|
vb@0
|
83 |
CpEpEngine *me;
|
vb@0
|
84 |
|
vb@0
|
85 |
public:
|
vb@0
|
86 |
session(CpEpEngine *myself)
|
vb@0
|
87 |
{
|
vb@0
|
88 |
me = myself;
|
vb@0
|
89 |
me->session_mutex.lock();
|
vb@0
|
90 |
}
|
vb@0
|
91 |
|
vb@0
|
92 |
~session()
|
vb@0
|
93 |
{
|
vb@0
|
94 |
me->session_mutex.unlock();
|
vb@0
|
95 |
}
|
vb@0
|
96 |
|
vb@0
|
97 |
operator PEP_SESSION const ()
|
vb@0
|
98 |
{
|
vb@0
|
99 |
return me->m_session;
|
vb@0
|
100 |
}
|
vb@0
|
101 |
};
|
vb@0
|
102 |
|
vb@0
|
103 |
session get_session()
|
vb@0
|
104 |
{
|
vb@0
|
105 |
return session(this);
|
vb@0
|
106 |
}
|
vb@0
|
107 |
|
vb@0
|
108 |
typedef locked_queue<pEp_identity_cpp> identity_queue_t;
|
vb@0
|
109 |
static ::pEp_identity * retrieve_next_identity(void *management);
|
vb@0
|
110 |
HRESULT error(_bstr_t msg);
|
vb@0
|
111 |
|
vb@0
|
112 |
private:
|
vb@0
|
113 |
PEP_SESSION m_session;
|
vb@0
|
114 |
mutex session_mutex;
|
vb@25
|
115 |
atomic< identity_queue_t * > identity_queue;
|
vb@0
|
116 |
thread *keymanagement_thread;
|
vb@0
|
117 |
|
vb@0
|
118 |
public:
|
vb@0
|
119 |
STDMETHOD(log)(BSTR title, BSTR entity, BSTR description, BSTR comment);
|
vb@0
|
120 |
STDMETHOD(decrypt)(BSTR ctext, BSTR * ptext, LPSAFEARRAY * key_list, pEp_STATUS * decrypt_status);
|
vb@0
|
121 |
STDMETHOD(decrypt_b)(BSTR ctext, LPSAFEARRAY * ptext, LPSAFEARRAY * key_list, pEp_STATUS * decrypt_status);
|
vb@0
|
122 |
STDMETHOD(encrypt)(SAFEARRAY * key_list, BSTR ptext, BSTR * ctext, pEp_STATUS * status);
|
vb@0
|
123 |
STDMETHOD(encrypt_b)(SAFEARRAY * key_list, SAFEARRAY * ptext, BSTR * ctext, pEp_STATUS * status);
|
vb@17
|
124 |
STDMETHOD(trustword)(LONG value, BSTR lang, BSTR * word);
|
vb@17
|
125 |
STDMETHOD(trustwords)(BSTR fpr, BSTR lang, LONG max_words, BSTR * words);
|
vb@0
|
126 |
STDMETHOD(get_identity)(BSTR address, pEp_identity_s * ident);
|
vb@0
|
127 |
STDMETHOD(set_identity)(pEp_identity_s * ident);
|
vb@0
|
128 |
STDMETHOD(generate_keypair)(pEp_identity_s * ident, BSTR * fpr);
|
vb@0
|
129 |
STDMETHOD(delete_keypair)(BSTR fpr);
|
vb@0
|
130 |
STDMETHOD(import_key)(BSTR key_data);
|
vb@0
|
131 |
STDMETHOD(import_key_b)(SAFEARRAY * key_data);
|
vb@0
|
132 |
STDMETHOD(export_key)(BSTR fpr, BSTR * key_data);
|
vb@0
|
133 |
STDMETHOD(recv_key)(BSTR pattern);
|
vb@0
|
134 |
STDMETHOD(find_keys)(BSTR pattern, LPSAFEARRAY * key_list);
|
vb@0
|
135 |
STDMETHOD(send_key)(BSTR pattern);
|
vb@11
|
136 |
|
vb@11
|
137 |
// keymanagement API
|
vb@11
|
138 |
|
vb@24
|
139 |
STDMETHOD(start_keyserver_lookup)();
|
vb@24
|
140 |
STDMETHOD(stop_keyserver_lookup)();
|
vb@24
|
141 |
|
vb@0
|
142 |
STDMETHOD(examine_identity)(pEp_identity_s * ident);
|
vb@0
|
143 |
STDMETHOD(verify)(BSTR text, BSTR signature, LPSAFEARRAY * key_list, pEp_STATUS * verify_status);
|
vb@0
|
144 |
STDMETHOD(myself)(struct pEp_identity_s *ident, struct pEp_identity_s *result);
|
vb@0
|
145 |
STDMETHOD(update_identity)(struct pEp_identity_s *ident, struct pEp_identity_s *result);
|
vb@4
|
146 |
STDMETHOD(key_compromized)(BSTR fpr);
|
vb@12
|
147 |
|
vb@12
|
148 |
// Message API
|
vb@12
|
149 |
|
vb@37
|
150 |
STDMETHOD(encrypt_message)(text_message * src, text_message * dst, SAFEARRAY * extra);
|
vb@37
|
151 |
STDMETHOD(decrypt_message)(text_message * src, text_message * dst, SAFEARRAY ** keylist, pEp_color *rating);
|
vb@33
|
152 |
STDMETHOD(outgoing_message_color)(text_message *msg, pEp_color * pVal);
|
vb@18
|
153 |
STDMETHOD(identity_color)(pEp_identity_s * ident, pEp_color * pVal);
|
vb@18
|
154 |
|
vb@0
|
155 |
};
|
vb@0
|
156 |
|
vb@0
|
157 |
OBJECT_ENTRY_AUTO(__uuidof(pEpEngine), CpEpEngine)
|