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
|
#include "getip.h"
const char* data_prefix = "Current IP Address: ";
const int data_prefix_len = 20;
bool RetreiveIP() {
NETLIBHTTPREQUEST *resp = 0;
NETLIBHTTPREQUEST req = {0};
req.cbSize = sizeof(req);
req.requestType = REQUEST_GET;
req.szUrl = "http://checkip.dyndns.org";
req.flags = NLHRF_DUMPASTEXT;
resp = (NETLIBHTTPREQUEST *)CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM)hNetlibUser, (LPARAM)&req);
if(!resp) {
DBWriteContactSettingString(0, MODULE, "ExternalIP", Translate("Unknown"));
return false;
}
if(resp->resultCode != 200) {
DBWriteContactSettingString(0, MODULE, "ExternalIP", Translate("Unknown"));
return false;
}
int i1 = 0, i2 = 0;
char *ip = 0;
while(i1 < resp->dataLength) {
while(i1 + i2 < resp->dataLength && resp->pData[i1 + i2] == data_prefix[i2] && i2 < data_prefix_len) i2++;
if(i2 == data_prefix_len) {
// found prefix
i1 += i2;
ip = &resp->pData[i1];
i2 = 0;
while(resp->pData[i1 + i2] != '<' && i1 + i2 < resp->dataLength) i2++;
if(resp->pData[i1 + i2] == '<') resp->pData[i1 + i2] = 0;
// ip now points to ip address
DBWriteContactSettingString(0, MODULE, "ExternalIP", ip);
break;
}
i1++;
}
if(!ip) DBWriteContactSettingString(0, MODULE, "ExternalIP", Translate("Unknown"));
CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM)resp);
return true;
}
|