Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
6defcbe3
Commit
6defcbe3
authored
Sep 02, 2015
by
Hans Leidekker
Committed by
Alexandre Julliard
Sep 02, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
netprofm: Add a stub implementation of INetwork.
parent
b09e98da
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
292 additions
and
0 deletions
+292
-0
list.c
dlls/netprofm/list.c
+292
-0
No files found.
dlls/netprofm/list.c
View file @
6defcbe3
...
...
@@ -51,6 +51,16 @@ static inline BOOL heap_free( void *mem )
return
HeapFree
(
GetProcessHeap
(),
0
,
mem
);
}
struct
network
{
INetwork
INetwork_iface
;
LONG
refs
;
struct
list
entry
;
GUID
id
;
VARIANT_BOOL
connected_to_internet
;
VARIANT_BOOL
connected
;
};
struct
connection
{
INetworkConnection
INetworkConnection_iface
;
...
...
@@ -67,6 +77,7 @@ struct list_manager
INetworkCostManager
INetworkCostManager_iface
;
IConnectionPointContainer
IConnectionPointContainer_iface
;
LONG
refs
;
struct
list
networks
;
struct
list
connections
;
};
...
...
@@ -235,6 +246,271 @@ static HRESULT connection_point_create(
return
S_OK
;
}
static
inline
struct
network
*
impl_from_INetwork
(
INetwork
*
iface
)
{
return
CONTAINING_RECORD
(
iface
,
struct
network
,
INetwork_iface
);
}
static
HRESULT
WINAPI
network_QueryInterface
(
INetwork
*
iface
,
REFIID
riid
,
void
**
obj
)
{
struct
network
*
network
=
impl_from_INetwork
(
iface
);
TRACE
(
"%p, %s, %p
\n
"
,
network
,
debugstr_guid
(
riid
),
obj
);
if
(
IsEqualIID
(
riid
,
&
IID_INetwork
)
||
IsEqualIID
(
riid
,
&
IID_IDispatch
)
||
IsEqualIID
(
riid
,
&
IID_IUnknown
))
{
*
obj
=
iface
;
INetwork_AddRef
(
iface
);
return
S_OK
;
}
else
{
WARN
(
"interface not supported %s
\n
"
,
debugstr_guid
(
riid
)
);
*
obj
=
NULL
;
return
E_NOINTERFACE
;
}
}
static
ULONG
WINAPI
network_AddRef
(
INetwork
*
iface
)
{
struct
network
*
network
=
impl_from_INetwork
(
iface
);
TRACE
(
"%p
\n
"
,
network
);
return
InterlockedIncrement
(
&
network
->
refs
);
}
static
ULONG
WINAPI
network_Release
(
INetwork
*
iface
)
{
struct
network
*
network
=
impl_from_INetwork
(
iface
);
LONG
refs
;
TRACE
(
"%p
\n
"
,
network
);
if
(
!
(
refs
=
InterlockedDecrement
(
&
network
->
refs
)))
{
list_remove
(
&
network
->
entry
);
heap_free
(
network
);
}
return
refs
;
}
static
HRESULT
WINAPI
network_GetTypeInfoCount
(
INetwork
*
iface
,
UINT
*
count
)
{
FIXME
(
"
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_GetTypeInfo
(
INetwork
*
iface
,
UINT
index
,
LCID
lcid
,
ITypeInfo
**
info
)
{
FIXME
(
"
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_GetIDsOfNames
(
INetwork
*
iface
,
REFIID
riid
,
LPOLESTR
*
names
,
UINT
count
,
LCID
lcid
,
DISPID
*
dispid
)
{
FIXME
(
"
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_Invoke
(
INetwork
*
iface
,
DISPID
member
,
REFIID
riid
,
LCID
lcid
,
WORD
flags
,
DISPPARAMS
*
params
,
VARIANT
*
result
,
EXCEPINFO
*
excep_info
,
UINT
*
arg_err
)
{
FIXME
(
"
\n
"
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_GetName
(
INetwork
*
iface
,
BSTR
*
pszNetworkName
)
{
FIXME
(
"%p, %p
\n
"
,
iface
,
pszNetworkName
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_SetName
(
INetwork
*
iface
,
BSTR
szNetworkNewName
)
{
FIXME
(
"%p, %s
\n
"
,
iface
,
debugstr_w
(
szNetworkNewName
)
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_GetDescription
(
INetwork
*
iface
,
BSTR
*
pszDescription
)
{
FIXME
(
"%p, %p
\n
"
,
iface
,
pszDescription
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_SetDescription
(
INetwork
*
iface
,
BSTR
szDescription
)
{
FIXME
(
"%p, %s
\n
"
,
iface
,
debugstr_w
(
szDescription
)
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_GetNetworkId
(
INetwork
*
iface
,
GUID
*
pgdGuidNetworkId
)
{
struct
network
*
network
=
impl_from_INetwork
(
iface
);
TRACE
(
"%p, %p
\n
"
,
iface
,
pgdGuidNetworkId
);
*
pgdGuidNetworkId
=
network
->
id
;
return
S_OK
;
}
static
HRESULT
WINAPI
network_GetDomainType
(
INetwork
*
iface
,
NLM_DOMAIN_TYPE
*
pDomainType
)
{
FIXME
(
"%p, %p
\n
"
,
iface
,
pDomainType
);
*
pDomainType
=
NLM_DOMAIN_TYPE_NON_DOMAIN_NETWORK
;
return
S_OK
;
}
static
HRESULT
WINAPI
network_GetNetworkConnections
(
INetwork
*
iface
,
IEnumNetworkConnections
**
ppEnumNetworkConnection
)
{
FIXME
(
"%p, %p
\n
"
,
iface
,
ppEnumNetworkConnection
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_GetTimeCreatedAndConnected
(
INetwork
*
iface
,
DWORD
*
pdwLowDateTimeCreated
,
DWORD
*
pdwHighDateTimeCreated
,
DWORD
*
pdwLowDateTimeConnected
,
DWORD
*
pdwHighDateTimeConnected
)
{
FIXME
(
"%p, %p, %p, %p, %p
\n
"
,
iface
,
pdwLowDateTimeCreated
,
pdwHighDateTimeCreated
,
pdwLowDateTimeConnected
,
pdwHighDateTimeConnected
);
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
network_get_IsConnectedToInternet
(
INetwork
*
iface
,
VARIANT_BOOL
*
pbIsConnected
)
{
struct
network
*
network
=
impl_from_INetwork
(
iface
);
TRACE
(
"%p, %p
\n
"
,
iface
,
pbIsConnected
);
*
pbIsConnected
=
network
->
connected_to_internet
;
return
S_OK
;
}
static
HRESULT
WINAPI
network_get_IsConnected
(
INetwork
*
iface
,
VARIANT_BOOL
*
pbIsConnected
)
{
struct
network
*
network
=
impl_from_INetwork
(
iface
);
TRACE
(
"%p, %p
\n
"
,
iface
,
pbIsConnected
);
*
pbIsConnected
=
network
->
connected
;
return
S_OK
;
}
static
HRESULT
WINAPI
network_GetConnectivity
(
INetwork
*
iface
,
NLM_CONNECTIVITY
*
pConnectivity
)
{
FIXME
(
"%p, %p
\n
"
,
iface
,
pConnectivity
);
*
pConnectivity
=
NLM_CONNECTIVITY_IPV4_INTERNET
;
return
S_OK
;
}
static
HRESULT
WINAPI
network_GetCategory
(
INetwork
*
iface
,
NLM_NETWORK_CATEGORY
*
pCategory
)
{
FIXME
(
"%p, %p
\n
"
,
iface
,
pCategory
);
*
pCategory
=
NLM_NETWORK_CATEGORY_PUBLIC
;
return
S_OK
;
}
static
HRESULT
WINAPI
network_SetCategory
(
INetwork
*
iface
,
NLM_NETWORK_CATEGORY
NewCategory
)
{
FIXME
(
"%p, %u
\n
"
,
iface
,
NewCategory
);
return
E_NOTIMPL
;
}
static
const
struct
INetworkVtbl
network_vtbl
=
{
network_QueryInterface
,
network_AddRef
,
network_Release
,
network_GetTypeInfoCount
,
network_GetTypeInfo
,
network_GetIDsOfNames
,
network_Invoke
,
network_GetName
,
network_SetName
,
network_GetDescription
,
network_SetDescription
,
network_GetNetworkId
,
network_GetDomainType
,
network_GetNetworkConnections
,
network_GetTimeCreatedAndConnected
,
network_get_IsConnectedToInternet
,
network_get_IsConnected
,
network_GetConnectivity
,
network_GetCategory
,
network_SetCategory
};
static
struct
network
*
create_network
(
const
GUID
*
id
)
{
struct
network
*
ret
;
if
(
!
(
ret
=
heap_alloc
(
sizeof
(
*
ret
)
)))
return
NULL
;
ret
->
INetwork_iface
.
lpVtbl
=
&
network_vtbl
;
ret
->
refs
=
1
;
ret
->
id
=
*
id
;
ret
->
connected
=
VARIANT_FALSE
;
ret
->
connected_to_internet
=
VARIANT_FALSE
;
list_init
(
&
ret
->
entry
);
return
ret
;
}
static
HRESULT
WINAPI
cost_manager_QueryInterface
(
INetworkCostManager
*
iface
,
REFIID
riid
,
...
...
@@ -374,6 +650,12 @@ static ULONG WINAPI list_manager_Release(
TRACE
(
"destroying %p
\n
"
,
mgr
);
while
((
ptr
=
list_head
(
&
mgr
->
networks
)))
{
struct
network
*
network
=
LIST_ENTRY
(
ptr
,
struct
network
,
entry
);
list_remove
(
&
network
->
entry
);
INetwork_Release
(
&
network
->
INetwork_iface
);
}
while
((
ptr
=
list_head
(
&
mgr
->
connections
)))
{
struct
connection
*
connection
=
LIST_ENTRY
(
ptr
,
struct
connection
,
entry
);
...
...
@@ -821,6 +1103,7 @@ static void init_networks( struct list_manager *mgr )
ULONG
ret
,
flags
=
GAA_FLAG_SKIP_ANYCAST
|
GAA_FLAG_SKIP_MULTICAST
|
GAA_FLAG_SKIP_DNS_SERVER
|
GAA_FLAG_INCLUDE_ALL_GATEWAYS
;
list_init
(
&
mgr
->
networks
);
list_init
(
&
mgr
->
connections
);
ret
=
GetAdaptersAddresses
(
WS_AF_UNSPEC
,
flags
,
NULL
,
NULL
,
&
size
);
...
...
@@ -832,22 +1115,31 @@ static void init_networks( struct list_manager *mgr )
memset
(
&
id
,
0
,
sizeof
(
id
)
);
for
(
aa
=
buf
;
aa
;
aa
=
aa
->
Next
)
{
struct
network
*
network
;
struct
connection
*
connection
;
id
.
Data1
=
aa
->
IfIndex
;
/* assume a one-to-one mapping between networks and connections */
if
(
!
(
network
=
create_network
(
&
id
)))
goto
done
;
if
(
!
(
connection
=
create_connection
(
&
id
)))
{
INetwork_Release
(
&
network
->
INetwork_iface
);
goto
done
;
}
if
(
aa
->
FirstUnicastAddress
)
{
network
->
connected
=
VARIANT_TRUE
;
connection
->
connected
=
VARIANT_TRUE
;
}
if
(
aa
->
FirstGatewayAddress
)
{
network
->
connected_to_internet
=
VARIANT_TRUE
;
connection
->
connected_to_internet
=
VARIANT_TRUE
;
}
list_add_tail
(
&
mgr
->
networks
,
&
network
->
entry
);
list_add_tail
(
&
mgr
->
connections
,
&
connection
->
entry
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment