aboutsummaryrefslogtreecommitdiffstats
path: root/modules/windows-sens/evolution-windows-sens.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/windows-sens/evolution-windows-sens.c')
-rw-r--r--modules/windows-sens/evolution-windows-sens.c626
1 files changed, 0 insertions, 626 deletions
diff --git a/modules/windows-sens/evolution-windows-sens.c b/modules/windows-sens/evolution-windows-sens.c
deleted file mode 100644
index f3110b2fcc..0000000000
--- a/modules/windows-sens/evolution-windows-sens.c
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * evolution-windows-sens.c
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- */
-
-#ifdef __cplusplus
-#error This file cannot be built with C++ compiler
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#define INITGUID
-#include <windows.h>
-#include <rpc.h>
-
-#ifdef HAVE_EVENTSYS_H
-#include <eventsys.h>
-#else
-
-#include <libebackend/e-extension.h>
-
-/* Extract relevant typedefs from mingw-w64 headers */
-
-typedef struct IEnumEventObject IEnumEventObject;
-
-const IID IID_IEnumEventObject;
-typedef struct IEnumEventObjectVtbl {
- BEGIN_INTERFACE
- HRESULT (WINAPI *QueryInterface)(IEnumEventObject *This,REFIID riid,PVOID *ppvObject);
- ULONG (WINAPI *AddRef)(IEnumEventObject *This);
- ULONG (WINAPI *Release)(IEnumEventObject *This);
- HRESULT (WINAPI *Clone)(IEnumEventObject *This,IEnumEventObject **ppInterface);
- HRESULT (WINAPI *Next)(IEnumEventObject *This,ULONG cReqElem,IUnknown **ppInterface,ULONG *cRetElem);
- HRESULT (WINAPI *Reset)(IEnumEventObject *This);
- HRESULT (WINAPI *Skip)(IEnumEventObject *This,ULONG cSkipElem);
- END_INTERFACE
-} IEnumEventObjectVtbl;
-struct IEnumEventObject {
- CONST_VTBL struct IEnumEventObjectVtbl *lpVtbl;
-};
-
-typedef struct IEventObjectCollection IEventObjectCollection;
-
-const IID IID_IEventObjectCollection;
-typedef struct IEventObjectCollectionVtbl {
- BEGIN_INTERFACE
- HRESULT (WINAPI *QueryInterface)(IEventObjectCollection *This,REFIID riid,PVOID *ppvObject);
- ULONG (WINAPI *AddRef)(IEventObjectCollection *This);
- ULONG (WINAPI *Release)(IEventObjectCollection *This);
- HRESULT (WINAPI *GetTypeInfoCount)(IEventObjectCollection *This,UINT *pctinfo);
- HRESULT (WINAPI *GetTypeInfo)(IEventObjectCollection *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
- HRESULT (WINAPI *GetIDsOfNames)(IEventObjectCollection *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
- HRESULT (WINAPI *Invoke)(IEventObjectCollection *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
- HRESULT (WINAPI *get__NewEnum)(IEventObjectCollection *This,IUnknown **ppUnkEnum);
- HRESULT (WINAPI *get_Item)(IEventObjectCollection *This,BSTR objectID,VARIANT *pItem);
- HRESULT (WINAPI *get_NewEnum)(IEventObjectCollection *This,IEnumEventObject **ppEnum);
- HRESULT (WINAPI *get_Count)(IEventObjectCollection *This,long *pCount);
- HRESULT (WINAPI *Add)(IEventObjectCollection *This,VARIANT *item,BSTR objectID);
- HRESULT (WINAPI *Remove)(IEventObjectCollection *This,BSTR objectID);
- END_INTERFACE
-} IEventObjectCollectionVtbl;
-struct IEventObjectCollection {
- CONST_VTBL struct IEventObjectCollectionVtbl *lpVtbl;
-};
-
-typedef struct IEventSystem IEventSystem;
-
-const IID IID_IEventSystem;
-typedef struct IEventSystemVtbl {
- BEGIN_INTERFACE
- HRESULT (WINAPI *QueryInterface)(IEventSystem *This,REFIID riid,PVOID *ppvObject);
- ULONG (WINAPI *AddRef)(IEventSystem *This);
- ULONG (WINAPI *Release)(IEventSystem *This);
- HRESULT (WINAPI *GetTypeInfoCount)(IEventSystem *This,UINT *pctinfo);
- HRESULT (WINAPI *GetTypeInfo)(IEventSystem *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
- HRESULT (WINAPI *GetIDsOfNames)(IEventSystem *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
- HRESULT (WINAPI *Invoke)(IEventSystem *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
- HRESULT (WINAPI *Query)(IEventSystem *This,BSTR progID,BSTR queryCriteria,int *errorIndex,IUnknown **ppInterface);
- HRESULT (WINAPI *Store)(IEventSystem *This,BSTR ProgID,IUnknown *pInterface);
- HRESULT (WINAPI *Remove)(IEventSystem *This,BSTR progID,BSTR queryCriteria,int *errorIndex);
- HRESULT (WINAPI *get_EventObjectChangeEventClassID)(IEventSystem *This,BSTR *pbstrEventClassID);
- HRESULT (WINAPI *QueryS)(IEventSystem *This,BSTR progID,BSTR queryCriteria,IUnknown **ppInterface);
- HRESULT (WINAPI *RemoveS)(IEventSystem *This,BSTR progID,BSTR queryCriteria);
- END_INTERFACE
-} IEventSystemVtbl;
-struct IEventSystem {
- CONST_VTBL struct IEventSystemVtbl *lpVtbl;
-};
-
-typedef struct IEventSubscription IEventSubscription;
-
-const IID IID_IEventSubscription;
-typedef struct IEventSubscriptionVtbl {
- BEGIN_INTERFACE
- HRESULT (WINAPI *QueryInterface)(IEventSubscription *This,REFIID riid,PVOID *ppvObject);
- ULONG (WINAPI *AddRef)(IEventSubscription *This);
- ULONG (WINAPI *Release)(IEventSubscription *This);
- HRESULT (WINAPI *GetTypeInfoCount)(IEventSubscription *This,UINT *pctinfo);
- HRESULT (WINAPI *GetTypeInfo)(IEventSubscription *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
- HRESULT (WINAPI *GetIDsOfNames)(IEventSubscription *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
- HRESULT (WINAPI *Invoke)(IEventSubscription *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
- HRESULT (WINAPI *get_SubscriptionID)(IEventSubscription *This,BSTR *pbstrSubscriptionID);
- HRESULT (WINAPI *put_SubscriptionID)(IEventSubscription *This,BSTR bstrSubscriptionID);
- HRESULT (WINAPI *get_SubscriptionName)(IEventSubscription *This,BSTR *pbstrSubscriptionName);
- HRESULT (WINAPI *put_SubscriptionName)(IEventSubscription *This,BSTR bstrSubscriptionName);
- HRESULT (WINAPI *get_PublisherID)(IEventSubscription *This,BSTR *pbstrPublisherID);
- HRESULT (WINAPI *put_PublisherID)(IEventSubscription *This,BSTR bstrPublisherID);
- HRESULT (WINAPI *get_EventClassID)(IEventSubscription *This,BSTR *pbstrEventClassID);
- HRESULT (WINAPI *put_EventClassID)(IEventSubscription *This,BSTR bstrEventClassID);
- HRESULT (WINAPI *get_MethodName)(IEventSubscription *This,BSTR *pbstrMethodName);
- HRESULT (WINAPI *put_MethodName)(IEventSubscription *This,BSTR bstrMethodName);
- HRESULT (WINAPI *get_SubscriberCLSID)(IEventSubscription *This,BSTR *pbstrSubscriberCLSID);
- HRESULT (WINAPI *put_SubscriberCLSID)(IEventSubscription *This,BSTR bstrSubscriberCLSID);
- HRESULT (WINAPI *get_SubscriberInterface)(IEventSubscription *This,IUnknown **ppSubscriberInterface);
- HRESULT (WINAPI *put_SubscriberInterface)(IEventSubscription *This,IUnknown *pSubscriberInterface);
- HRESULT (WINAPI *get_PerUser)(IEventSubscription *This,WINBOOL *pfPerUser);
- HRESULT (WINAPI *put_PerUser)(IEventSubscription *This,WINBOOL fPerUser);
- HRESULT (WINAPI *get_OwnerSID)(IEventSubscription *This,BSTR *pbstrOwnerSID);
- HRESULT (WINAPI *put_OwnerSID)(IEventSubscription *This,BSTR bstrOwnerSID);
- HRESULT (WINAPI *get_Enabled)(IEventSubscription *This,WINBOOL *pfEnabled);
- HRESULT (WINAPI *put_Enabled)(IEventSubscription *This,WINBOOL fEnabled);
- HRESULT (WINAPI *get_Description)(IEventSubscription *This,BSTR *pbstrDescription);
- HRESULT (WINAPI *put_Description)(IEventSubscription *This,BSTR bstrDescription);
- HRESULT (WINAPI *get_MachineName)(IEventSubscription *This,BSTR *pbstrMachineName);
- HRESULT (WINAPI *put_MachineName)(IEventSubscription *This,BSTR bstrMachineName);
- HRESULT (WINAPI *GetPublisherProperty)(IEventSubscription *This,BSTR bstrPropertyName,VARIANT *propertyValue);
- HRESULT (WINAPI *PutPublisherProperty)(IEventSubscription *This,BSTR bstrPropertyName,VARIANT *propertyValue);
- HRESULT (WINAPI *RemovePublisherProperty)(IEventSubscription *This,BSTR bstrPropertyName);
- HRESULT (WINAPI *GetPublisherPropertyCollection)(IEventSubscription *This,IEventObjectCollection **collection);
- HRESULT (WINAPI *GetSubscriberProperty)(IEventSubscription *This,BSTR bstrPropertyName,VARIANT *propertyValue);
- HRESULT (WINAPI *PutSubscriberProperty)(IEventSubscription *This,BSTR bstrPropertyName,VARIANT *propertyValue);
- HRESULT (WINAPI *RemoveSubscriberProperty)(IEventSubscription *This,BSTR bstrPropertyName);
- HRESULT (WINAPI *GetSubscriberPropertyCollection)(IEventSubscription *This,IEventObjectCollection **collection);
- HRESULT (WINAPI *get_InterfaceID)(IEventSubscription *This,BSTR *pbstrInterfaceID);
- HRESULT (WINAPI *put_InterfaceID)(IEventSubscription *This,BSTR bstrInterfaceID);
- END_INTERFACE
-} IEventSubscriptionVtbl;
-struct IEventSubscription {
- CONST_VTBL struct IEventSubscriptionVtbl *lpVtbl;
-};
-
-#define PROGID_EventSubscription OLESTR("EventSystem.EventSubscription")
-
-#endif
-
-#ifdef HAVE_SENSEVTS_H
-#include <sensevts.h>
-#else
-
-/* Extract relevant typedefs from mingw-w64 headers */
-
-typedef struct {
- DWORD dwSize;
- DWORD dwFlags;
- DWORD dwOutSpeed;
- DWORD dwInSpeed;
-} *LPSENS_QOCINFO;
-
-typedef struct ISensNetwork ISensNetwork;
-
-const IID IID_ISensNetwork;
-typedef struct ISensNetworkVtbl {
- BEGIN_INTERFACE
- HRESULT (WINAPI *QueryInterface)(ISensNetwork *This,REFIID riid,PVOID *ppvObject);
- ULONG (WINAPI *AddRef)(ISensNetwork *This);
- ULONG (WINAPI *Release)(ISensNetwork *This);
- HRESULT (WINAPI *GetTypeInfoCount)(ISensNetwork *This,UINT *pctinfo);
- HRESULT (WINAPI *GetTypeInfo)(ISensNetwork *This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo);
- HRESULT (WINAPI *GetIDsOfNames)(ISensNetwork *This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId);
- HRESULT (WINAPI *Invoke)(ISensNetwork *This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr);
- HRESULT (WINAPI *ConnectionMade)(ISensNetwork *This,BSTR bstrConnection,ULONG ulType,LPSENS_QOCINFO lpQOCInfo);
- HRESULT (WINAPI *ConnectionMadeNoQOCInfo)(ISensNetwork *This,BSTR bstrConnection,ULONG ulType);
- HRESULT (WINAPI *ConnectionLost)(ISensNetwork *This,BSTR bstrConnection,ULONG ulType);
- HRESULT (WINAPI *DestinationReachable)(ISensNetwork *This,BSTR bstrDestination,BSTR bstrConnection,ULONG ulType,LPSENS_QOCINFO lpQOCInfo);
- HRESULT (WINAPI *DestinationReachableNoQOCInfo)(ISensNetwork *This,BSTR bstrDestination,BSTR bstrConnection,ULONG ulType);
- END_INTERFACE
-} ISensNetworkVtbl;
-struct ISensNetwork {
- CONST_VTBL struct ISensNetworkVtbl *lpVtbl;
-};
-
-#endif
-
-#include <shell/e-shell.h>
-
-/* 4E14FB9F-2E22-11D1-9964-00C04FBBB345 */
-DEFINE_GUID (IID_IEventSystem, 0x4E14FB9F, 0x2E22, 0x11D1, 0x99, 0x64, 0x00, 0xC0, 0x4F, 0xBB, 0xB3, 0x45);
-
-/* 4A6B0E15-2E38-11D1-9965-00C04FBBB345 */
-DEFINE_GUID (IID_IEventSubscription, 0x4A6B0E15, 0x2E38, 0x11D1, 0x99, 0x65, 0x00, 0xC0, 0x4F, 0xBB, 0xB3, 0x45);
-
-/* d597bab1-5b9f-11d1-8dd2-00aa004abd5e */
-DEFINE_GUID (IID_ISensNetwork, 0xd597bab1, 0x5b9f, 0x11d1, 0x8d, 0xd2, 0x00, 0xaa, 0x00, 0x4a, 0xbd, 0x5e);
-
-/* 4E14FBA2-2E22-11D1-9964-00C04FBBB345 */
-DEFINE_GUID (CLSID_CEventSystem, 0x4E14FBA2, 0x2E22, 0x11D1, 0x99, 0x64, 0x00, 0xC0, 0x4F, 0xBB, 0xB3, 0x45);
-
-/* 7542e960-79c7-11d1-88f9-0080c7d771bf */
-DEFINE_GUID (CLSID_CEventSubscription, 0x7542e960, 0x79c7, 0x11d1, 0x88, 0xf9, 0x00, 0x80, 0xc7, 0xd7, 0x71, 0xbf);
-
-/* Standard GObject macros */
-#define E_TYPE_WINDOWS_SENS \
- (e_windows_sens_get_type ())
-#define E_WINDOWS_SENS(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST \
- ((obj), E_TYPE_WINDOWS_SENS, EWindowsSENS))
-
-typedef struct _EWindowsSENS EWindowsSENS;
-typedef struct _EWindowsSENSClass EWindowsSENSClass;
-
-struct _EWindowsSENS {
- EExtension parent;
-};
-
-struct _EWindowsSENSClass {
- EExtensionClass parent_class;
-};
-
-/* Module Entry Points */
-void e_module_load (GTypeModule *type_module);
-void e_module_unload (GTypeModule *type_module);
-
-/* Forward Declarations */
-GType e_windows_sens_get_type (void);
-
-G_DEFINE_DYNAMIC_TYPE (EWindowsSENS, e_windows_sens, E_TYPE_EXTENSION)
-
-static EShell *
-windows_sens_get_shell (EWindowsSENS *extension)
-{
- EExtensible *extensible;
-
- extensible = e_extension_get_extensible (E_EXTENSION (extension));
-
- return E_SHELL (extensible);
-}
-
-/* Object to receive the ISensNetwork events */
-
-typedef struct ESensNetworkListener {
- ISensNetworkVtbl *lpVtbl;
- long ref;
- EWindowsSENS *ews_ptr;
-} ESensNetworkListener;
-
-static void e_sens_network_listener_init (ESensNetworkListener **,EWindowsSENS *);
-
-/* Functions to implement ISensNetwork interface */
-
-static HRESULT WINAPI e_sens_network_listener_queryinterface (ISensNetwork *,REFIID,PVOID *);
-static ULONG WINAPI e_sens_network_listener_addref (ISensNetwork *);
-static ULONG WINAPI e_sens_network_listener_release (ISensNetwork *);
-static HRESULT WINAPI e_sens_network_listener_gettypeinfocount (ISensNetwork *, UINT *);
-static HRESULT WINAPI e_sens_network_listener_gettypeinfo (ISensNetwork *,UINT,LCID,ITypeInfo **);
-static HRESULT WINAPI e_sens_network_listener_getidsofnames (ISensNetwork *,REFIID,LPOLESTR *,UINT,LCID, DISPID *);
-static HRESULT WINAPI e_sens_network_listener_invoke (ISensNetwork *,DISPID,REFIID,LCID,WORD,DISPPARAMS *,VARIANT *,EXCEPINFO *,UINT *);
-static HRESULT WINAPI e_sens_network_listener_connectionmade (ISensNetwork *,BSTR,ULONG,LPSENS_QOCINFO);
-static HRESULT WINAPI e_sens_network_listener_connectionmadenoqocinfo (ISensNetwork *,BSTR,ULONG);
-static HRESULT WINAPI e_sens_network_listener_connectionlost (ISensNetwork *,BSTR,ULONG);
-static HRESULT WINAPI e_sens_network_listener_destinationreachable (ISensNetwork *,BSTR,BSTR,ULONG,LPSENS_QOCINFO);
-static HRESULT WINAPI e_sens_network_listener_destinationreachablenoqocinfo (ISensNetwork *,BSTR,BSTR,ULONG);
-
-/* Initializing the VTable of our ESensNetworkListener object */
-
-static ISensNetworkVtbl ESensNetworkListenerVtbl = {
- e_sens_network_listener_queryinterface,
- e_sens_network_listener_addref,
- e_sens_network_listener_release,
- e_sens_network_listener_gettypeinfocount,
- e_sens_network_listener_gettypeinfo,
- e_sens_network_listener_getidsofnames,
- e_sens_network_listener_invoke,
- e_sens_network_listener_connectionmade,
- e_sens_network_listener_connectionmadenoqocinfo,
- e_sens_network_listener_connectionlost,
- e_sens_network_listener_destinationreachable,
- e_sens_network_listener_destinationreachablenoqocinfo
-};
-
-static HRESULT WINAPI
-e_sens_network_listener_queryinterface (ISensNetwork *This,
- REFIID iid,
- gpointer *ppv)
-{
- if (IsEqualIID (iid, &IID_IUnknown) || IsEqualIID (iid, &IID_IDispatch) || IsEqualIID (iid, &IID_ISensNetwork)) {
- *ppv = This;
- ((LPUNKNOWN) * ppv)->lpVtbl->AddRef ((LPUNKNOWN) * ppv);
- return S_OK;
- }
- *ppv = NULL;
- return E_NOINTERFACE;
-}
-
-static ULONG WINAPI
-e_sens_network_listener_addref (ISensNetwork *This)
-{
- ESensNetworkListener *esnl_ptr = (ESensNetworkListener *) This;
- return InterlockedIncrement (&(esnl_ptr->ref));
-}
-
-static ULONG WINAPI
-e_sens_network_listener_release (ISensNetwork *This)
-{
- ESensNetworkListener *esnl_ptr = (ESensNetworkListener *) This;
- ULONG tmp = InterlockedDecrement (&(esnl_ptr->ref));
- return tmp;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_gettypeinfocount (ISensNetwork *This,
- UINT *pctinfo)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_gettypeinfo (ISensNetwork *This,
- UINT iTInfo,
- LCID lcid,
- ITypeInfo **ppTInfo)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_getidsofnames (ISensNetwork *This,
- REFIID riid,
- LPOLESTR *rgszNames,
- UINT cNames,
- LCID lcid,
- DISPID *rgDispId)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_invoke (ISensNetwork *This,
- DISPID dispIdMember,
- REFIID riid,
- LCID lcid,
- WORD wFlags,
- DISPPARAMS *pDispParams,
- VARIANT *pVarResult,
- EXCEPINFO *pExcepInfo,
- UINT *puArgErr)
-{
- return E_NOTIMPL;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_connectionmade (ISensNetwork *This,
- BSTR bstrConnection,
- ULONG ulType,
- LPSENS_QOCINFO lpQOCInfo)
-{
- if (ulType) {
- ESensNetworkListener *esnl_ptr = (ESensNetworkListener *) This;
- EShell *shell = windows_sens_get_shell (esnl_ptr->ews_ptr);
- /* Wait a second so that the connection stabilizes */
- g_usleep (G_USEC_PER_SEC);
- e_shell_set_network_available (shell, TRUE);
- }
- return S_OK;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_connectionmadenoqocinfo (ISensNetwork *This,
- BSTR bstrConnection,
- ULONG ulType)
-{
- return S_OK;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_connectionlost (ISensNetwork *This,
- BSTR bstrConnection,
- ULONG ulType)
-{
- if (ulType) {
- ESensNetworkListener *esnl_ptr = (ESensNetworkListener *) This;
- EShell *shell = windows_sens_get_shell (esnl_ptr->ews_ptr);
- e_shell_set_network_available (shell, FALSE);
- }
- return S_OK;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_destinationreachable (ISensNetwork *This,
- BSTR bstrDestination,
- BSTR bstrConnection,
- ULONG ulType,
- LPSENS_QOCINFO lpQOCInfo)
-{
- if (ulType) {
- ESensNetworkListener *esnl_ptr = (ESensNetworkListener *) This;
- EShell *shell = windows_sens_get_shell (esnl_ptr->ews_ptr);
- /* Wait a second so that the connection stabilizes */
- g_usleep (G_USEC_PER_SEC);
- e_shell_set_network_available (shell, TRUE);
- }
- return S_OK;
-}
-
-static HRESULT WINAPI
-e_sens_network_listener_destinationreachablenoqocinfo (ISensNetwork *This,
- BSTR bstrDestination,
- BSTR bstrConnection,
- ULONG ulType)
-{
- return S_OK;
-}
-
-static void
-e_sens_network_listener_init (ESensNetworkListener **esnl_ptr,
- EWindowsSENS *ews)
-{
- (*esnl_ptr) = g_new0 (ESensNetworkListener,1);
- (*esnl_ptr)->lpVtbl = &ESensNetworkListenerVtbl;
- (*esnl_ptr)->ews_ptr = ews;
- (*esnl_ptr)->ref = 1;
-}
-
-static BSTR
-_mb2wchar (const gchar *a)
-{
- static WCHAR b[64];
- MultiByteToWideChar (0, 0, a, -1, b, 64);
- return b;
-}
-
-static const gchar * add_curly_braces_to_uuid (const gchar * string_uuid)
-{
- static gchar curly_braced_uuid_string[64];
- gint i;
- if (!string_uuid)
- return NULL;
- lstrcpy(curly_braced_uuid_string,"{");
- i = strlen (curly_braced_uuid_string);
- lstrcat (curly_braced_uuid_string + i,string_uuid);
- i = strlen (curly_braced_uuid_string);
- lstrcat(curly_braced_uuid_string+i,"}");
- return curly_braced_uuid_string;
-}
-
-#define SENSAPI_DLL "sensapi.dll"
-
-static void
-windows_sens_constructed (GObject *object)
-{
- HRESULT res;
- static IEventSystem *pEventSystem =0;
- static IEventSubscription * pEventSubscription = 0;
- static ESensNetworkListener *pESensNetworkListener = 0;
- static const gchar * eventclassid="{D5978620-5B9F-11D1-8DD2-00AA004ABD5E}";
- static const gchar * methods[]={
- "ConnectionMade",
- "ConnectionMadeNoQOCInfo",
- "ConnectionLost",
- "DestinationReachable",
- "DestinationReachableNoQOCInfo"
- };
- static const gchar * names[]={
- "EWS_ConnectionMade",
- "EWS_ConnectionMadeNoQOCInfo",
- "EWS_ConnectionLost",
- "EWS_DestinationReachable",
- "EWS_DestinationReachableNoQOCInfo"
- };
- guchar * subids[] = { 0, 0, 0, 0, 0 };
-
- EWindowsSENS *extension = (E_WINDOWS_SENS (object));
- e_sens_network_listener_init (&pESensNetworkListener, extension);
-
- CoInitialize (0);
-
- res = CoCreateInstance (&CLSID_CEventSystem, 0,CLSCTX_SERVER,&IID_IEventSystem,(LPVOID *) &pEventSystem);
-
- if (res == S_OK && pEventSystem) {
-
- guint i;
-
- for (i = 0; i < G_N_ELEMENTS (methods); i++) {
-
- res = CoCreateInstance (&CLSID_CEventSubscription, 0, CLSCTX_SERVER, &IID_IEventSubscription, (LPVOID *) &pEventSubscription);
-
- if (res == S_OK && pEventSubscription) {
- UUID tmp_uuid;
- UuidCreate (&tmp_uuid);
- UuidToString (&tmp_uuid, &subids[i]);
- res = pEventSubscription->lpVtbl->put_SubscriptionID (pEventSubscription, _mb2wchar (add_curly_braces_to_uuid ((gchar *) subids[i])));
- if (res) {
- RpcStringFree (&subids[i]);
- break;
- }
- RpcStringFree (&subids[i]);
- res = pEventSubscription->lpVtbl->put_SubscriptionName (pEventSubscription, _mb2wchar (names[i]));
- if (res)
- break;
- res = pEventSubscription->lpVtbl->put_MethodName (pEventSubscription, _mb2wchar (methods[i]));
- if (res)
- break;
- res = pEventSubscription->lpVtbl->put_EventClassID (pEventSubscription, _mb2wchar (eventclassid));
- if (res)
- break;
- res = pEventSubscription->lpVtbl->put_SubscriberInterface (pEventSubscription, (IUnknown *) pESensNetworkListener);
- if (res)
- break;
- /* Make the subscription receive the event only if the owner of the subscription
- * is logged on to the same computer as the publisher. This makes this module
- * work with normal user account without administrative privileges.
- */
- res = pEventSubscription->lpVtbl->put_PerUser (pEventSubscription, TRUE);
- if (res)
- break;
-
- res = pEventSystem->lpVtbl->Store (pEventSystem, (BSTR) PROGID_EventSubscription, (IUnknown *) pEventSubscription);
- if (res)
- break;
- pEventSubscription->lpVtbl->Release (pEventSubscription);
- pEventSubscription = 0;
- }
- }
- if (pEventSubscription)
- pEventSubscription->lpVtbl->Release (pEventSubscription);
- }
-
- /* Do not try to get initial state when we are sure we will not get system events.
- * Like that we don't get stuck with Disconnected status if we were disconnected
- * on start.
- */
- if (res == S_OK) {
-
- typedef BOOL (WINAPI * IsNetworkAlive_t) (LPDWORD);
- BOOL alive = TRUE;
- EShell *shell = windows_sens_get_shell (extension);
-
- IsNetworkAlive_t pIsNetworkAlive = NULL;
-
- gchar *buf = NULL;
- gchar dummy;
- gint n, k;
- HMODULE hDLL = NULL;
-
- n = GetSystemDirectory (&dummy, 0);
-
- if (n <= 0)
- goto cleanup;
-
- buf = g_malloc (n + 1 + strlen (SENSAPI_DLL));
- k = GetSystemDirectory (buf, n);
-
- if (k == 0 || k > n)
- goto cleanup;
-
- if (!G_IS_DIR_SEPARATOR (buf[strlen (buf) -1]))
- strcat (buf, G_DIR_SEPARATOR_S);
- strcat (buf, SENSAPI_DLL);
-
- hDLL = LoadLibrary (buf);
-
- if ((pIsNetworkAlive=(IsNetworkAlive_t) GetProcAddress (hDLL, "IsNetworkAlive"))) {
- DWORD Network;
- alive = pIsNetworkAlive (&Network);
- }
-
- FreeLibrary (hDLL);
-
- e_shell_set_network_available (shell, alive);
-
-cleanup:
- g_free (buf);
- }
-
- /* Chain up to parent's constructed() method. */
- G_OBJECT_CLASS (e_windows_sens_parent_class)->constructed (object);
-}
-
-static void
-e_windows_sens_class_init (EWindowsSENSClass *_class)
-{
- GObjectClass *object_class;
- EExtensionClass *extension_class;
-
- object_class = G_OBJECT_CLASS (_class);
- object_class->constructed = windows_sens_constructed;
-
- extension_class = E_EXTENSION_CLASS (_class);
- extension_class->extensible_type = E_TYPE_SHELL;
-}
-
-static void
-e_windows_sens_class_finalize (EWindowsSENSClass *_class)
-{
-}
-
-static void
-e_windows_sens_init (EWindowsSENS *extension)
-{
-}
-
-G_MODULE_EXPORT void
-e_module_load (GTypeModule *type_module)
-{
- e_windows_sens_register_type (type_module);
-}
-
-G_MODULE_EXPORT void
-e_module_unload (GTypeModule *type_module)
-{
-}
-