/
win.cpp
executable file
·146 lines (118 loc) · 4.78 KB
/
win.cpp
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include "include/cef.h"
#include "include/cef_runnable.h"
#ifdef WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
CefRefPtr<CefV8Value> getNetworkInterface()
{
return CefV8Value::CreateNull();
}
/*
CefRefPtr<CefV8Value> getNetworkInterface()
{
SOCKET sd = WSASocket(AF_INET, SOCK_DGRAM, 0, 0, 0, 0);
if (sd == SOCKET_ERROR) {
return CefV8Value::CreateNull();
}
INTERFACE_INFO InterfaceList[20];
unsigned long nBytesReturned;
if (WSAIoctl(sd, SIO_GET_INTERFACE_LIST, 0, 0, &InterfaceList,
sizeof(InterfaceList), &nBytesReturned, 0, 0) == SOCKET_ERROR) {
closesocket(sd);
return CefV8Value::CreateNull();
}
CefRefPtr<CefV8Value> arr = CefV8Value::CreateArray();
int nNumInterfaces = nBytesReturned / sizeof(INTERFACE_INFO);
for (int i = 0; i < nNumInterfaces; ++i) {
CefRefPtr<CefV8Value> v = CefV8Value::CreateObject(NULL);
arr->SetValue(i, v);
v->SetValue("name", CefV8Value::CreateString(pCurrAddresses->FriendlyName), V8_PROPERTY_ATTRIBUTE_NONE);
sockaddr_in *pAddress;
pAddress = (sockaddr_in *) & (InterfaceList[i].iiAddress);
v->SetValue("ip", CefV8Value::CreateString(inet_ntoa(pAddress->sin_addr)), V8_PROPERTY_ATTRIBUTE_NONE);
pAddress = (sockaddr_in *) & (InterfaceList[i].iiBroadcastAddress);
v->SetValue("broadcast", CefV8Value::CreateString(inet_ntoa(pAddress->sin_addr)), V8_PROPERTY_ATTRIBUTE_NONE);
pAddress = (sockaddr_in *) & (InterfaceList[i].iiNetmask);
v->SetValue("netmask", CefV8Value::CreateString(inet_ntoa(pAddress->sin_addr)), V8_PROPERTY_ATTRIBUTE_NONE);
cout << " Iface is ";
u_long nFlags = InterfaceList[i].iiFlags;
if (nFlags & IFF_UP) cout << "up";
else cout << "down";
if (nFlags & IFF_POINTTOPOINT) cout << ", is point-to-point";
if (nFlags & IFF_LOOPBACK) cout << ", is a loopback iface";
cout << ", and can do: ";
if (nFlags & IFF_BROADCAST) cout << "bcast ";
if (nFlags & IFF_MULTICAST) cout << "multicast ";
cout << endl;
}
return arr;
}
CefRefPtr<CefV8Value> getNetworkInterface()
{
PIP_ADAPTER_ADDRESSES pAddresses = NULL;
DWORD dwRetVal = 0;
ULONG Iterations = 0;
ULONG outBufLen = WORKING_BUFFER_SIZE; // Allocate a 15 KB buffer to start with.
do {
pAddresses = (IP_ADAPTER_ADDRESSES *) MALLOC(outBufLen);
if (pAddresses == NULL) {
return CefV8Value::CreateNull();
}
dwRetVal = GetAdaptersAddresses(AF_UNSPEC, GAA_FLAG_INCLUDE_PREFIX, NULL, pAddresses, &outBufLen);
if (dwRetVal == ERROR_BUFFER_OVERFLOW) {
FREE(pAddresses);
pAddresses = NULL;
} else {
break;
}
Iterations++;
} while ((dwRetVal == ERROR_BUFFER_OVERFLOW) && (Iterations < MAX_TRIES));
if (dwRetVal != NO_ERROR) {
if (pAddresses)
FREE(pAddresses);
return CefV8Value::CreateNull();
}
CefRefPtr<CefV8Value> arr = CefV8Value::CreateArray();
int index = 0;
PIP_ADAPTER_ADDRESSES pCurrAddresses = pAddresses;
while (pCurrAddresses) {
CefRefPtr<CefV8Value> v = CefV8Value::CreateObject(NULL);
v->SetValue("name", CefV8Value::CreateString(pCurrAddresses->FriendlyName), V8_PROPERTY_ATTRIBUTE_NONE);
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = pCurrAddresses->FirstUnicastAddress;
if (pUnicast) {
char buff[100] = {0};
if (pUnicast->Address.lpSockaddr->sa_family == AF_INET) {
sockaddr_in *sa_in = (sockaddr_in *)pUnicast->Address.lpSockaddr;
v->SetValue("ip", CefV8Value::CreateString(inet_ntop(AF_INET,&(sa_in->sin_addr),buff,sizeof(buff) - 1)), V8_PROPERTY_ATTRIBUTE_NONE);
}
else if (pUnicast->Address.lpSockaddr->sa_family == AF_INET6)
{
sockaddr_in6 *sa_in6 = (sockaddr_in6 *)pUnicast->Address.lpSockaddr;
v->SetValue("ip", CefV8Value::CreateString(inet_ntop(AF_INET6,&(sa_in6->sin6_addr),buff,sizeof(buff) - 1)), V8_PROPERTY_ATTRIBUTE_NONE);
}
v->SetValue("netmask", CefV8Value::CreateString("up"), V8_PROPERTY_ATTRIBUTE_NONE);
}
PIP_ADAPTER_GATEWAY_ADDRESS_LH pGateway = pCurrAddresses->FirstGatewayAddress;
if (pGateway) {
v->SetValue("broadcast", CefV8Value::CreateString(inet_ntoa(*(struct in_addr*)pGateway->Address.lpSockaddr)), V8_PROPERTY_ATTRIBUTE_NONE);
}
switch (pCurrAddresses->OperStatus) {
case IfOperStatusUp:
v->SetValue("status", CefV8Value::CreateString("up"), V8_PROPERTY_ATTRIBUTE_NONE);
break;
case IfOperStatusDown:
v->SetValue("status", CefV8Value::CreateString("down"), V8_PROPERTY_ATTRIBUTE_NONE);
break;
default:
v->SetValue("status", CefV8Value::CreateString("other"), V8_PROPERTY_ATTRIBUTE_NONE);
}
pCurrAddresses = pCurrAddresses->Next;
arr->SetValue(index++, v);
}
if (pAddresses) {
FREE(pAddresses);
}
return arr;
}
*/
#endif //win32