From 157d18bbf8b25c9b5e3082f162576c0d4e8e09c5 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Tue, 4 Nov 2008 11:35:07 +0100 Subject: [PATCH] inetcomm: Advertise support for a couple more interfaces. --- dlls/inetcomm/inetcomm_main.c | 21 ++++++++++++++++- dlls/inetcomm/inetcomm_private.h | 4 ++++ dlls/inetcomm/mimeole.c | 40 ++++++++++++++++++++------------ dlls/inetcomm/regsvr.c | 12 ++++++++++ include/imnxport.idl | 1 + include/mimeole.idl | 2 ++ 6 files changed, 64 insertions(+), 16 deletions(-) diff --git a/dlls/inetcomm/inetcomm_main.c b/dlls/inetcomm/inetcomm_main.c index cd412d2cdab..1d71877782d 100644 --- a/dlls/inetcomm/inetcomm_main.c +++ b/dlls/inetcomm/inetcomm_main.c @@ -137,6 +137,8 @@ static const struct IClassFactoryVtbl cf_vtbl = static cf mime_body_cf = { &cf_vtbl, MimeBody_create }; static cf mime_allocator_cf = { &cf_vtbl, MimeAllocator_create }; +static cf mime_message_cf = { &cf_vtbl, MimeMessage_create }; +static cf mime_security_cf = { &cf_vtbl, MimeSecurity_create }; /*********************************************************************** * DllGetClassObject (INETCOMM.@) @@ -147,10 +149,27 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv) TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv ); + if (IsEqualCLSID(rclsid, &CLSID_ISMTPTransport)) + return SMTPTransportCF_Create(iid, ppv); + + if (IsEqualCLSID(rclsid, &CLSID_ISMTPTransport2)) + return SMTPTransportCF_Create(iid, ppv); + if (IsEqualCLSID(rclsid, &CLSID_IIMAPTransport)) return IMAPTransportCF_Create(iid, ppv); - if( IsEqualCLSID( rclsid, &CLSID_IMimeBody )) + if (IsEqualCLSID(rclsid, &CLSID_IPOP3Transport)) + return POP3TransportCF_Create(iid, ppv); + + if ( IsEqualCLSID( rclsid, &CLSID_IMimeSecurity )) + { + cf = (IClassFactory*) &mime_security_cf.lpVtbl; + } + else if( IsEqualCLSID( rclsid, &CLSID_IMimeMessage )) + { + cf = (IClassFactory*) &mime_message_cf.lpVtbl; + } + else if( IsEqualCLSID( rclsid, &CLSID_IMimeBody )) { cf = (IClassFactory*) &mime_body_cf.lpVtbl; } diff --git a/dlls/inetcomm/inetcomm_private.h b/dlls/inetcomm/inetcomm_private.h index 7752d69f4fc..589f92c3950 100644 --- a/dlls/inetcomm/inetcomm_private.h +++ b/dlls/inetcomm/inetcomm_private.h @@ -75,7 +75,11 @@ void InternetTransport_UnregisterClass(HINSTANCE hInstance); HRESULT MimeBody_create(IUnknown *outer, void **obj); HRESULT MimeAllocator_create(IUnknown *outer, void **obj); +HRESULT MimeMessage_create(IUnknown *outer, void **obj); +HRESULT MimeSecurity_create(IUnknown *outer, void **obj); HRESULT MimeInternational_Construct(IMimeInternational **internat); +HRESULT SMTPTransportCF_Create(REFIID riid, LPVOID *ppv); HRESULT IMAPTransportCF_Create(REFIID riid, LPVOID *ppv); +HRESULT POP3TransportCF_Create(REFIID riid, LPVOID *ppv); diff --git a/dlls/inetcomm/mimeole.c b/dlls/inetcomm/mimeole.c index 10c66850356..07aa6bd0de7 100644 --- a/dlls/inetcomm/mimeole.c +++ b/dlls/inetcomm/mimeole.c @@ -2540,22 +2540,19 @@ static const IMimeMessageVtbl MimeMessageVtbl = MimeMessage_GetRootMoniker, }; -/*********************************************************************** - * MimeOleCreateMessage (INETCOMM.@) - */ -HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessage) +HRESULT MimeMessage_create(IUnknown *outer, void **obj) { MimeMessage *This; - TRACE("(%p, %p)\n", pUnkOuter, ppMessage); + TRACE("(%p, %p)\n", outer, obj); - if (pUnkOuter) + if (outer) { FIXME("outer unknown not supported yet\n"); return E_NOTIMPL; } - *ppMessage = NULL; + *obj = NULL; This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); if (!This) return E_OUTOFMEMORY; @@ -2566,10 +2563,19 @@ HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessag list_init(&This->body_tree); This->next_hbody = (HBODY)1; - *ppMessage = (IMimeMessage *)&This->lpVtbl; + *obj = (IMimeMessage *)&This->lpVtbl; return S_OK; } +/*********************************************************************** + * MimeOleCreateMessage (INETCOMM.@) + */ +HRESULT WINAPI MimeOleCreateMessage(IUnknown *pUnkOuter, IMimeMessage **ppMessage) +{ + TRACE("(%p, %p)\n", pUnkOuter, ppMessage); + return MimeMessage_create(NULL, (void **)ppMessage); +} + /*********************************************************************** * MimeOleSetCompatMode (INETCOMM.@) */ @@ -2754,16 +2760,13 @@ static const IMimeSecurityVtbl MimeSecurityVtbl = MimeSecurity_GetCertData }; -/*********************************************************************** - * MimeOleCreateSecurity (INETCOMM.@) - */ -HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity) +HRESULT MimeSecurity_create(IUnknown *outer, void **obj) { MimeSecurity *This; - TRACE("(%p)\n", ppSecurity); + *obj = NULL; - *ppSecurity = NULL; + if (outer) return CLASS_E_NOAGGREGATION; This = HeapAlloc(GetProcessHeap(), 0, sizeof(*This)); if (!This) return E_OUTOFMEMORY; @@ -2771,10 +2774,17 @@ HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity) This->lpVtbl = &MimeSecurityVtbl; This->refs = 1; - *ppSecurity = (IMimeSecurity *)&This->lpVtbl; + *obj = (IMimeSecurity *)&This->lpVtbl; return S_OK; } +/*********************************************************************** + * MimeOleCreateSecurity (INETCOMM.@) + */ +HRESULT WINAPI MimeOleCreateSecurity(IMimeSecurity **ppSecurity) +{ + return MimeSecurity_create(NULL, (void **)ppSecurity); +} typedef struct { diff --git a/dlls/inetcomm/regsvr.c b/dlls/inetcomm/regsvr.c index a21b85b7de9..4c7310cc172 100644 --- a/dlls/inetcomm/regsvr.c +++ b/dlls/inetcomm/regsvr.c @@ -404,6 +404,12 @@ static struct regsvr_coclass const coclass_list[] = { "inetcomm.dll", "Both" }, + { &CLSID_ISMTPTransport2, + "CLSID_ISMTPTransport2", + NULL, + "inetcomm.dll", + "Both" + }, { &CLSID_IPOP3Transport, "CLSID_IPOP3Transport", NULL, @@ -452,6 +458,12 @@ static struct regsvr_coclass const coclass_list[] = { "inetcomm.dll", "Both" }, + { &CLSID_IMimeSecurity, + "CLSID_IMimeSecurity", + NULL, + "inetcomm.dll", + "Both" + }, { NULL } /* list terminator */ }; diff --git a/include/imnxport.idl b/include/imnxport.idl index 3b0e1c806fd..ef4f8ac4019 100644 --- a/include/imnxport.idl +++ b/include/imnxport.idl @@ -27,6 +27,7 @@ interface IIMAPTransport; cpp_quote("DEFINE_GUID(CLSID_IInternetMessageUrl, 0xca30cc91, 0xb1b3, 0x11d0, 0x85, 0xd0, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport, 0xfd853ce6, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") +cpp_quote("DEFINE_GUID(CLSID_ISMTPTransport2, 0xdf2c7eC, 0x3435, 0x11d0, 0x81, 0xd0, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IPOP3Transport, 0xfd853ce7, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_INNTPTransport, 0xfd853ce8, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IRASTransport, 0xfd853ce9, 0x7f86, 0x11d0, 0x82, 0x52, 0x00, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") diff --git a/include/mimeole.idl b/include/mimeole.idl index 487b9fc80a6..d74cdb591fa 100644 --- a/include/mimeole.idl +++ b/include/mimeole.idl @@ -32,6 +32,8 @@ interface IMimeEnumProperties; cpp_quote("DEFINE_GUID(CLSID_IMimeBody, 0xfd853cdb, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IMimeAllocator, 0xfd853cdd, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("DEFINE_GUID(CLSID_IMimeMessage, 0xfd853ce3, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") +cpp_quote("DEFINE_GUID(CLSID_IMimeSecurity, 0xfd853cde, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") +cpp_quote("DEFINE_GUID(CLSID_IVirtualStream, 0xfd853cdf, 0x7f86, 0x11d0, 0x82, 0x52, 0x0, 0xc0, 0x4f, 0xd8, 0x5a, 0xb4);") cpp_quote("#define MIME_E_REG_CREATE_KEY 0x800cce01") cpp_quote("#define MIME_E_REG_QUERY_INFO 0x800cce02")