summaryrefslogtreecommitdiff
path: root/plugins/!NotAdopted/mDynDNS/mDynDNS.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/!NotAdopted/mDynDNS/mDynDNS.cpp')
-rw-r--r--plugins/!NotAdopted/mDynDNS/mDynDNS.cpp990
1 files changed, 576 insertions, 414 deletions
diff --git a/plugins/!NotAdopted/mDynDNS/mDynDNS.cpp b/plugins/!NotAdopted/mDynDNS/mDynDNS.cpp
index 807e755d67..102ce286bb 100644
--- a/plugins/!NotAdopted/mDynDNS/mDynDNS.cpp
+++ b/plugins/!NotAdopted/mDynDNS/mDynDNS.cpp
@@ -2,6 +2,7 @@
Komentarz
*/
#include "mDynDNS.h"
+#include "Windowsx.h"
// Prototypes ///////////////////////////////////////////////////////////////////////////
@@ -20,20 +21,27 @@ PLUGININFOEX pluginInfo={
MIID_MDYNDNS
};
+MM_INTERFACE mmi;
HINSTANCE hInst; //!< Global reference to the application
PLUGINLINK *pluginLink; //!< Link between Miranda and this plugin
-HANDLE hNetlibUser;
+HANDLE hNetlibUser; //!< Netlib Register User
HANDLE hKAThread;
+HICON hDynDnsIcon; //!< DynDNS icon
-BOOL closing = FALSE;
+BOOL closing = FALSE;
+int delay = 10; //!< requirement by DynDns (Client must not query CheckIP more than once every 10 minutes.)
void DoIPCheck();
static BOOL CALLBACK mdyndns_optsdlgproc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
static BOOL CALLBACK DnsPopupsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+static void DnsPopupPreview(HWND hwndDlg);
unsigned long __stdcall KeepAliveThread(LPVOID param);
void WakeThread(HANDLE hThread);
+void NetlibInit(void);
+void NetlibClose(void);
+static int SystemPShutdown(WPARAM wParam, LPARAM lParam);
static int OnModulesLoaded(WPARAM wParam, LPARAM lParam);
-int mdyndns_options_init(WPARAM wParam, LPARAM lParam);
+static int mdyndns_options_init(WPARAM wParam, LPARAM lParam);
// Functions ////////////////////////////////////////////////////////////////////////////
@@ -76,12 +84,24 @@ extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
pluginLink = link;
- DWORD tid;
- closing = FALSE;
- hKAThread = CreateThread(0, 0, KeepAliveThread, 0, 0, &tid);
- HookEvent( ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
+ mmi.cbSize = sizeof(mmi);
+ mir_getMMI(&mmi);
+ closing = FALSE;
+
+ // set first delay for IP check on miranda start
+ DWORD dwTime, dwDiff, dwLastTs;
+ dwLastTs = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_LASTIPCHECK, 0);
+ dwTime = (DWORD)time(0);
+ dwDiff = (dwTime - dwLastTs);
+ if (dwDiff < (DWORD)(delay * 60)) delay = ((delay * 60 - dwDiff + 59) / 60) + delay;
+
+ HookEvent( ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
HookEvent( ME_OPT_INITIALISE, mdyndns_options_init);
+ //HookEvent( ME_SYSTEM_OKTOEXIT, OkToExit);
+ HookEvent( ME_SYSTEM_PRESHUTDOWN, SystemPShutdown);
+ hDynDnsIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1));
+ //hDynDnsIcon = LoadImage(hInst,MAKEINTRESOURCE(IDI_ICON1),IMAGE_ICON,0,0,LR_DEFAULTSIZE);
return 0;
}
@@ -90,22 +110,40 @@ extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
*/
extern "C" int __declspec(dllexport) Unload(void)
{
+ UnhookEvent(SystemPShutdown);
+ DestroyIcon(hDynDnsIcon);
+
+ return 0;
+}
+
+static int SystemPShutdown(WPARAM wParam, LPARAM lParam)
+{
closing = TRUE;
+ UnhookEvent(OnModulesLoaded);
+ UnhookEvent(mdyndns_options_init);
+
+ // close Thread
WakeThread(hKAThread);
WaitForSingleObject(hKAThread, INFINITE);
CloseHandle(hKAThread);
- return 0;
+
+ // Netlib unregister
+ NetlibClose();
+
+ return 0;
}
unsigned long __stdcall KeepAliveThread(LPVOID param)
{
- int delay = 10;
CallService(MS_SYSTEM_THREAD_PUSH, 0, 0);
while(!Miranda_Terminated())
{
- SleepEx(60000, TRUE); //Wait 60sec util first check
+ SleepEx(60000*(delay-9), TRUE); //Wait 60sec util check ( + extra sec on mirandastart)
+ if (closing) break;
+ delay = 10;
DoIPCheck();
- SleepEx(60000*(delay-1), TRUE); //Wait 10 min until next check
+ if (closing) break;
+ SleepEx(60000*(delay-1), TRUE); //Wait 10 min until next check
}
CallService(MS_SYSTEM_THREAD_POP, 0, 0);
return 0;
@@ -113,18 +151,51 @@ unsigned long __stdcall KeepAliveThread(LPVOID param)
void WINAPI NullAPC (DWORD dwData) { }
+void WakeThread(HANDLE hThread)
+{
+ QueueUserAPC(NullAPC, hThread, 0);
+}
+
+// Netlib
+void NetlibInit(void)
+{
+ NETLIBUSER nlu = {0};
+ nlu.cbSize = sizeof(nlu);
+ nlu.szSettingsModule = (char*)PLUGNAME;
+ nlu.szDescriptiveName = Translate("mDynDNS HTTP connections");
+ nlu.flags = NUF_OUTGOING|NUF_HTTPCONNS; //|NUF_NOHTTPSOPTION;
+ hNetlibUser = (HANDLE)CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM)&nlu);
+}
+
+void NetlibClose(void)
+{
+ Netlib_CloseHandle(hNetlibUser);
+}
+
+// Plugin
static int OnModulesLoaded(WPARAM wParam, LPARAM lParam)
{
+ // Netlib register
+ NetlibInit();
+
+ // create Thread
+ DWORD tid;
+ hKAThread = CreateThread(0, 0, KeepAliveThread, 0, 0, &tid);
+
// finally register for updater
if(ServiceExists(MS_UPDATE_REGISTER)) {
Update update = {0};
char szVersion[16];
update.cbSize = sizeof(Update);
update.szComponentName = pluginInfo.shortName;
- update.pbVersion = (BYTE *)CreateVersionString(pluginInfo.version, szVersion);
+ update.pbVersion = (BYTE *)CreateVersionStringPluginEx(&pluginInfo, szVersion);
update.cpbVersion = (int)strlen((char *)update.pbVersion);
- update.szUpdateURL = UPDATER_AUTOREGISTER;
+ update.szVersionURL = __FLVersionURL;
+ update.pbVersionPrefix = (BYTE *)__FLVersionPrefix;
+ update.cpbVersionPrefix = (int)strlen((char *)update.pbVersionPrefix);
+ update.szUpdateURL = __FLUpdateURL;
+ // update.szUpdateURL = UPDATER_AUTOREGISTER;
update.szBetaVersionURL = __BetaVersionURL;
// bytes occuring in VersionURL before the version, used to locate the version information within the URL data
@@ -139,82 +210,14 @@ static int OnModulesLoaded(WPARAM wParam, LPARAM lParam)
}
// install known modules strings to database
DBWriteContactSettingString(NULL, "KnownModules", PLUGNAME, PLUGNAME);
- return 0;
-}
-// Popup
-static void DnsPopupPreview(DWORD colorBack, DWORD colorText, char *title, char *emailInfo, int delay)
-{
- POPUPDATAEX ppd;
- char * lpzContactName;
- char * lpzText;
-
- lpzContactName = title;
- lpzText = emailInfo;
- ZeroMemory(&ppd, sizeof(ppd));
- ppd.lchContact = NULL;
- ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
- lstrcpy(ppd.lpzContactName, lpzContactName);
- lstrcpy(ppd.lpzText, lpzText);
- ppd.colorBack = colorBack;
- ppd.colorText = colorText;
- ppd.PluginWindowProc = NULL;
- ppd.PluginData=NULL;
- if ( ServiceExists( MS_POPUP_ADDPOPUPEX )) {
- ppd.iSeconds = delay;
- CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
- }
- else if ( ServiceExists( MS_POPUP_ADDPOPUP )) {
- CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
- }
+ return 0;
}
-
-static void DnsPopup(BOOL err,char *mesg)
+static int PluginMenuCommand(WPARAM wParam,LPARAM lParam)
{
- POPUPDATAEX ppd;
- char * lpzContactName;
- int delay = 0;
- BYTE delayMode = 0;
-
- if (!DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPENAB, TRUE)) {
- return;
- }
-
- if (err && !DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPUPD, TRUE)) {
- return;
- }
-
- if ( err == TRUE )
- lpzContactName = MDYNDNS_ERROR_TITLE;
- else
- lpzContactName = PLUGNAME;
- ZeroMemory(&ppd, sizeof(ppd));
- ppd.lchContact = NULL;
- ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
- lstrcpy(ppd.lpzContactName, lpzContactName);
- lstrcpy(ppd.lpzText, mesg);
- ppd.colorBack = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPBACK, 0);
- ppd.colorText = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPTEXT, 0);
- ppd.PluginWindowProc = NULL;
- ppd.PluginData=NULL;
- if ( ServiceExists( MS_POPUP_ADDPOPUPEX )) {
- delayMode = DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELM, 0);
- if (delayMode==1) {
- delay = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELAY, 4);
- } else if (delayMode==2) {
- delay = -1;
- }
- ppd.iSeconds = delay;
- CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
-
- }
- else if ( ServiceExists( MS_POPUP_ADDPOPUP )) {
- CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
- }
+ return 0;
}
-
-
// Options Page : Init
static int mdyndns_options_init(WPARAM wParam, LPARAM lParam)
{
@@ -225,8 +228,8 @@ static int mdyndns_options_init(WPARAM wParam, LPARAM lParam)
odp.cbSize = sizeof(odp);
odp.position = 1003000;
odp.hInstance = hInst;
- odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT_MDYNDNS);
odp.pszGroup = Translate("Services");
+ odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT_MDYNDNS);
odp.pszTitle = title;
odp.pfnDlgProc = mdyndns_optsdlgproc;
odp.flags = ODPF_BOLDGROUPS;
@@ -239,10 +242,10 @@ static int mdyndns_options_init(WPARAM wParam, LPARAM lParam)
odp.hInstance = hInst;
odp.pszGroup = Translate("PopUps");
odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT_POPUPS);
- odp.pszTitle = PLUGNAME;
- odp.flags=ODPF_BOLDGROUPS;
+ odp.pszTitle = title; //PLUGNAME;
odp.pfnDlgProc = DnsPopupsDlgProc;
- odp.nIDBottomSimpleControl = 0;
+ odp.flags=ODPF_BOLDGROUPS;
+ //odp.nIDBottomSimpleControl = 0;
CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
}
@@ -251,60 +254,60 @@ static int mdyndns_options_init(WPARAM wParam, LPARAM lParam)
static BOOL CALLBACK mdyndns_optsdlgproc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
- switch (msg)
- {
- case WM_INITDIALOG:
- {
- DBVARIANT dbv;
+ switch (msg)
+ {
+ case WM_INITDIALOG:
+ {
+ DBVARIANT dbv;
- TranslateDialogDefault(hwndDlg);
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_USERNAME, &dbv)) {
- SetDlgItemText(hwndDlg, IDC_USERNAME, dbv.pszVal);
- DBFreeVariant(&dbv);
- }
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_USERNAME, &dbv)) {
+ SetDlgItemText(hwndDlg, IDC_USERNAME, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_PASSWORD, &dbv)) {
- CallService(MS_DB_CRYPT_DECODESTRING, strlen(dbv.pszVal) + 1, (LPARAM) dbv.pszVal);
- SetDlgItemText(hwndDlg, IDC_PASSWORD, dbv.pszVal);
- DBFreeVariant(&dbv);
- }
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_PASSWORD, &dbv)) {
+ CallService(MS_DB_CRYPT_DECODESTRING, strlen(dbv.pszVal) + 1, (LPARAM) dbv.pszVal);
+ SetDlgItemText(hwndDlg, IDC_PASSWORD, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_DOMAIN, &dbv)) {
- SetDlgItemText(hwndDlg, IDC_DOMAIN, dbv.pszVal);
- DBFreeVariant(&dbv);
- }
- }
- break;
- case WM_COMMAND:
- {
- switch (LOWORD(wParam))
- {
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_DOMAIN, &dbv)) {
+ SetDlgItemText(hwndDlg, IDC_DOMAIN, dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ TranslateDialogDefault(hwndDlg);
+ }
+ break;
+ case WM_COMMAND:
+ {
+ switch (LOWORD(wParam))
+ {
case IDC_DOMAIN:
case IDC_USERNAME:
- case IDC_PASSWORD:
- if ((HWND)lParam==GetFocus() && HIWORD(wParam)==EN_CHANGE)
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
+ case IDC_PASSWORD:
+ if ((HWND)lParam==GetFocus() && HIWORD(wParam)==EN_CHANGE)
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
case IDC_CREATEACCOUNT:
- CallService(MS_UTILS_OPENURL, 1, (LPARAM)URL_DYNDNS);
- break;
- default:
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
+ CallService(MS_UTILS_OPENURL, 1, (LPARAM)URL_DYNDNS);
+ break;
+ default:
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
}
}
break;
case WM_NOTIFY:
- {
+ {
switch (((LPNMHDR) lParam)->code)
{
case PSN_APPLY:
{
- char str[128];
+ char str[128];
// Write Dyndns username
GetDlgItemText(hwndDlg, IDC_USERNAME, str, sizeof(str));
- DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_USERNAME, str);
+ DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_USERNAME, str);
// Write Dyndns Password
GetDlgItemText(hwndDlg, IDC_PASSWORD, str, sizeof(str));
CallService(MS_DB_CRYPT_ENCODESTRING, sizeof(str), (LPARAM) str);
@@ -315,278 +318,429 @@ static BOOL CALLBACK mdyndns_optsdlgproc(HWND hwndDlg, UINT msg, WPARAM wParam,
}
break;
}
- }
- break;
- }
- return FALSE;
+ }
+ break;
+ }
+ return FALSE;
}
static BOOL CALLBACK DnsPopupsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
- switch (msg) {
- case WM_INITDIALOG:
- {
- BYTE delayMode;
- TranslateDialogDefault(hwndDlg);
- CheckDlgButton(hwndDlg, IDC_ENABLEPOPUP, DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPENAB, TRUE));
- CheckDlgButton(hwndDlg, IDC_ENABLEUPDATEPOPUP, DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPUPD, TRUE));
- SendDlgItemMessage(hwndDlg, IDC_COLORBKG, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPBACK, POPUP_DEFAULT_COLORBKG));
- SendDlgItemMessage(hwndDlg, IDC_COLORTXT, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPTEXT, POPUP_DEFAULT_COLORTXT));
- SetDlgItemInt(hwndDlg, IDC_DELAY, DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELAY, 4), FALSE);
- delayMode = DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELM, 0);
- if (delayMode==1) {
- CheckDlgButton(hwndDlg, IDC_DELAY_CUSTOM, TRUE);
- } else if (delayMode==2) {
- CheckDlgButton(hwndDlg, IDC_DELAY_PERMANENT, TRUE);
+ switch (msg)
+ {
+ case WM_INITDIALOG: {
+
+ BYTE delayMode, colorMode;
+ // general
+ CheckDlgButton(hwndDlg, IDC_ENABLEPOPUP, DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPENAB, TRUE));
+ CheckDlgButton(hwndDlg, IDC_ENABLEUPDATEPOPUP, DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPUPD, TRUE));
+ // color
+ SendDlgItemMessage(hwndDlg, IDC_COLOR_BKG, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPBACK, POPUP_DEFAULT_COLORBKG));
+ SendDlgItemMessage(hwndDlg, IDC_COLOR_TXT, CPM_SETCOLOUR, 0, DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPTEXT, POPUP_DEFAULT_COLORTXT));
+ colorMode = DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPCOLM, 0);
+ if (colorMode==1) {
+ CheckDlgButton(hwndDlg, IDC_COLOR_CUSTOM, TRUE);
+ } else {
+ if (colorMode==2) {
+ CheckDlgButton(hwndDlg, IDC_COLOR_OS, TRUE);
} else {
- CheckDlgButton(hwndDlg, IDC_DELAY_POPUP, TRUE);
+ CheckDlgButton(hwndDlg, IDC_COLOR_POPUP, TRUE);
}
- return TRUE;
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COLOR_BKG), IsDlgButtonChecked(hwndDlg, IDC_COLOR_CUSTOM) == BST_CHECKED ? TRUE : FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COLOR_TXT), IsDlgButtonChecked(hwndDlg, IDC_COLOR_CUSTOM) == BST_CHECKED ? TRUE : FALSE);
}
- case WM_COMMAND:
- switch (LOWORD(wParam)) {
- case IDC_COLORTXT:
- case IDC_COLORBKG:
- case IDC_ENABLEPOPUP:
- case IDC_ENABLEUPDATEPOPUP:
- case IDC_DELAY:
- case IDC_DELAY_POPUP:
- case IDC_DELAY_CUSTOM:
- case IDC_DELAY_PERMANENT:
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- case IDC_PREVIEW:
- {
- int delay;
- if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_POPUP)) {
- delay=0;
- } else if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_PERMANENT)) {
- delay=-1;
- } else {
- delay=GetDlgItemInt(hwndDlg, IDC_DELAY, NULL, FALSE);
- }
- DnsPopupPreview((DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORBKG,CPM_GETCOLOUR,0,0),
- (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORTXT,CPM_GETCOLOUR,0,0),
- PLUGNAME,
- Translate("Your IP on dyndns.org account, has been updated."),
- delay);
- }
-
+ // delay
+ delayMode = DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELM, 0);
+ if (delayMode==1) {
+ CheckDlgButton(hwndDlg, IDC_DELAY_CUSTOM, TRUE);
+ } else if (delayMode==2) {
+ CheckDlgButton(hwndDlg, IDC_DELAY_PERMANENT, TRUE);
+ } else {
+ CheckDlgButton(hwndDlg, IDC_DELAY_POPUP, TRUE);
}
- break;
+ SetDlgItemInt(hwndDlg, IDC_DELAY, DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELAY, 4), FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), IsDlgButtonChecked(hwndDlg, IDC_DELAY_CUSTOM) == BST_CHECKED ? TRUE : FALSE);
+ TranslateDialogDefault(hwndDlg);
+ } // end: case WM_INITDIALOG
+ break;
+ case WM_COMMAND: {
+ switch (LOWORD(wParam)) {
+ case IDC_ENABLEPOPUP:
+ case IDC_ENABLEUPDATEPOPUP:
+ // color
+ case IDC_COLOR_CUSTOM:
+ case IDC_COLOR_TXT:
+ case IDC_COLOR_BKG:
+ case IDC_COLOR_OS:
+ case IDC_COLOR_POPUP:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COLOR_BKG), IsDlgButtonChecked(hwndDlg, IDC_COLOR_CUSTOM) == BST_CHECKED ? TRUE : FALSE);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_COLOR_TXT), IsDlgButtonChecked(hwndDlg, IDC_COLOR_CUSTOM) == BST_CHECKED ? TRUE : FALSE);
+ // enable the 'apply' button
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ // delay
+ case IDC_DELAY:
+ if (Edit_GetModify(GetDlgItem(hwndDlg, IDC_DELAY))) {
+ // enable the 'apply' button
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+ break;
+ case IDC_DELAY_CUSTOM:
+ case IDC_DELAY_PERMANENT:
+ case IDC_DELAY_POPUP:
+ EnableWindow(GetDlgItem(hwndDlg, IDC_DELAY), IsDlgButtonChecked(hwndDlg, IDC_DELAY_CUSTOM) == BST_CHECKED ? TRUE : FALSE);
+ // enable the 'apply' button
+ SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ break;
+ case IDC_PREVIEW: {
+ DnsPopupPreview (hwndDlg);
+ } // end: case IDC_PREVIEW:
+ } //end: switch (LOWORD(wParam))
+ } //end: WM_COMMAND
+ break;
- case WM_NOTIFY:
+ case WM_NOTIFY: {
switch (((LPNMHDR) lParam)->code) {
- case PSN_APPLY:
- {
- BYTE delayMode;
- DBWriteContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPENAB, (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ENABLEPOPUP));
- DBWriteContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPUPD, (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ENABLEUPDATEPOPUP));
- DBWriteContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPBACK, (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORBKG,CPM_GETCOLOUR,0,0));
- DBWriteContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPTEXT, (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLORTXT,CPM_GETCOLOUR,0,0));
- DBWriteContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELAY, (DWORD) GetDlgItemInt(hwndDlg,IDC_DELAY, NULL, FALSE));
- delayMode=0;
+ case PSN_APPLY: {
+ BYTE delayMode, colorMode;
+ // general
+ DBWriteContactSettingByte (NULL, PLUGNAME, MDYNDNS_KEY_POPUPENAB, (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ENABLEPOPUP));
+ DBWriteContactSettingByte (NULL, PLUGNAME, MDYNDNS_KEY_POPUPUPD, (BYTE) IsDlgButtonChecked(hwndDlg, IDC_ENABLEUPDATEPOPUP));
+ // color
+ DBWriteContactSettingDword (NULL, PLUGNAME, MDYNDNS_KEY_POPUPBACK, (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLOR_BKG,CPM_GETCOLOUR,0,0));
+ DBWriteContactSettingDword (NULL, PLUGNAME, MDYNDNS_KEY_POPUPTEXT, (DWORD) SendDlgItemMessage(hwndDlg,IDC_COLOR_TXT,CPM_GETCOLOUR,0,0));
+ if (IsDlgButtonChecked(hwndDlg, IDC_COLOR_CUSTOM)) {
+ colorMode=1;
+ } else if (IsDlgButtonChecked(hwndDlg, IDC_COLOR_OS)) {
+ colorMode=2;
+ } else {
+ colorMode=0;
+ }
+ DBWriteContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPCOLM, colorMode);
+ // delay
+ DBWriteContactSettingDword (NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELAY,(DWORD) GetDlgItemInt(hwndDlg,IDC_DELAY, NULL, FALSE));
if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_CUSTOM)) {
delayMode=1;
} else if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_PERMANENT)) {
delayMode=2;
-
+ } else {
+ delayMode=0;
}
DBWriteContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELM, delayMode);
- return TRUE;
- }
- }
+ } //PSN_APPLY end
+ break;
+ } //switch (((LPNMHDR) lParam)->code): end
+ } //WM_NOTIFY end
+ break;
+ } // switch (msg): end
+ return FALSE;
+}
+
+// Popup
+static void DnsPopupPreview(HWND hwndDlg)
+{
+ POPUPDATAEX ppd;
+
+ ZeroMemory(&ppd, sizeof(ppd));
+ ppd.lchContact = NULL;
+ ppd.PluginWindowProc = NULL;
+ ppd.PluginData=NULL;
+ strcat(ppd.lpzContactName,PLUGNAME);
+ strcat(ppd.lpzText,Translate("Your IP on dyndns.org account, has been updated."));
+ // icon
+ ppd.lchIcon = hDynDnsIcon;
+ //ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
+ // color
+ if (IsDlgButtonChecked(hwndDlg, IDC_COLOR_CUSTOM)) {
+ ppd.colorBack = SendDlgItemMessage(hwndDlg,IDC_COLOR_BKG,CPM_GETCOLOUR,0,0);
+ ppd.colorText = SendDlgItemMessage(hwndDlg,IDC_COLOR_TXT,CPM_GETCOLOUR,0,0);
+ } else if (IsDlgButtonChecked(hwndDlg, IDC_COLOR_OS)) {
+ ppd.colorBack = GetSysColor(COLOR_BTNFACE);
+ ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
+ } else {
+ ppd.colorBack = ppd.colorText = 0;
+ }
+
+ if ( ServiceExists( MS_POPUP_ADDPOPUPEX )) {
+ if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_CUSTOM)) {
+ ppd.iSeconds = (int) GetDlgItemInt(hwndDlg,IDC_DELAY, NULL, FALSE);
+ } else if (IsDlgButtonChecked(hwndDlg, IDC_DELAY_PERMANENT)) {
+ ppd.iSeconds = -1;
+ } else {
+ ppd.iSeconds = 0;
+ }
+ CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
+ }
+ else if ( ServiceExists( MS_POPUP_ADDPOPUP )) {
+ CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
+ }
+}
+
+
+static void DnsPopup(BOOL err,char *mesg)
+{
+ POPUPDATAEX ppd;
+ char *lpzContactName;
+
+ if (!DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPENAB, TRUE)) {
+ return;
+ }
+
+ if (err && !DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPUPD, TRUE)) {
+ return;
+ }
+
+ if ( err == TRUE )
+ lpzContactName = MDYNDNS_ERROR_TITLE;
+ else
+ lpzContactName = PLUGNAME;
+
+ ZeroMemory(&ppd, sizeof(ppd));
+ ppd.lchContact = NULL;
+ ppd.PluginWindowProc = NULL;
+ ppd.PluginData=NULL;
+ lstrcpy(ppd.lpzContactName, lpzContactName);
+ lstrcpy(ppd.lpzText, mesg);
+ // icon
+ ppd.lchIcon = hDynDnsIcon;
+ //ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
+ // color
+ switch (DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPCOLM, 0)) {
+ case MODE_OWN1:
+ ppd.colorBack = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPBACK, 0);
+ ppd.colorText = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPTEXT, 0);
+ break;
+ case MODE_OWN2:
+ ppd.colorBack = GetSysColor(COLOR_BTNFACE);
+ ppd.colorText = GetSysColor(COLOR_WINDOWTEXT);
+ break;
+ case MODE_POPUP:
+ default:
+ ppd.colorBack = ppd.colorText = 0;
break;
+ }
+ if ( ServiceExists( MS_POPUP_ADDPOPUPEX )) {
+ // delay (Custom delay time in seconds. -1 means "forever", 0 means "default time")
+ switch (DBGetContactSettingByte(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELM, 0)) {
+ case MODE_OWN1:
+ ppd.iSeconds = DBGetContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_POPUPDELAY, 4);
+ break;
+ case MODE_OWN2:
+ ppd.iSeconds = -1;
+ break;
+ case MODE_POPUP:
+ default:
+ ppd.iSeconds = 0;
+ break;
+ }
+ CallService(MS_POPUP_ADDPOPUPEX, (WPARAM)&ppd, 0);
+ }
+ else if ( ServiceExists( MS_POPUP_ADDPOPUP )) {
+ CallService(MS_POPUP_ADDPOPUP, (WPARAM)&ppd, 0);
}
- return FALSE;
}
+
+// Error handler
static int PrintError(int err_num)
{
- char *err = "Unknown Error.";
+ char *err = "Unknown Error.";
switch (err_num)
{
//Failed to register NetLib user
case 1:
- err = "Netlib Error.";
- break;
+ err = "Netlib Error.";
+ break;
//Failed to connect with Netlib.
- case 2:
- err = "Netlib Connection Error.";
- break;
- //Error in parsing server response.
- case 3:
- err = "Error in parsing server respose.";
- break;
- case 4:
- err = "Miranda mDynDns plugin has been blocked on server for not following specifications - it won't work anymore :(";
- break;
- case 5:
- err = "The username or password specified in options are incorrect. Please check your account details.";
- break;
- case 6:
- err = "The domain alias specified in options has incorect format. Should be 'yourdomain.dyndns.org'.";
- break;
- case 7:
- err = "The domain alias specified in options does not exist. Please check your account details.";
- break;
- case 8:
- err = "The domain alias specified in options exists, but you are not it's owner.";
- break;
- case 9:
- err = "DNS error encountered.";
- break;
- case 10:
- err = "There is a serious problem with the dyndns.org server";
- break;
- case 11:
- err = "There was a serious problem with updating domain alias to it's previous IP. In order not to get abuse the mDynDns plugin will stop working. To get additional information please refer to the readme.txt.";
- break;
- case 12:
- err = "The specified hostname has been blocked becouse of update abuse. In order not to get situation worse the mDynDns plugin will stop working. To get additional information please refer to the readme.txt.";
- break;
- case 13:
- err = "Due to some errors mDynDNS plugin has been turned off to prevent blocking on server.";
- break;
- default:
- err = "Unknown Error.";
- break;
- }
- err = Translate(err);
+ case 2:
+ err = "Netlib Connection Error.";
+ break;
+ //Error in parsing server response.
+ case 3:
+ err = "Error in parsing server respose.";
+ break;
+ case 4:
+ err = "Miranda mDynDns plugin has been blocked on server for not following specifications - it won't work anymore :(";
+ break;
+ case 5:
+ err = "The username or password specified in options are incorrect. Please check your account details.";
+ break;
+ case 6:
+ err = "The domain alias specified in options has incorect format. Should be 'yourdomain.dyndns.org'.";
+ break;
+ case 7:
+ err = "The domain alias specified in options does not exist. Please check your account details.";
+ break;
+ case 8:
+ err = "The domain alias specified in options exists, but you are not it's owner.";
+ break;
+ case 9:
+ err = "DNS error encountered.";
+ break;
+ case 10:
+ err = "There is a serious problem with the dyndns.org server";
+ break;
+ case 11:
+ err = "There was a serious problem with updating domain alias to it's previous IP. In order not to get abuse the mDynDns plugin will stop working. To get additional information please refer to the readme.txt.";
+ break;
+ case 12:
+ err = "The specified hostname has been blocked becouse of update abuse. In order not to get situation worse the mDynDns plugin will stop working. To get additional information please refer to the readme.txt.";
+ break;
+ case 13:
+ err = "Due to some errors mDynDNS plugin has been turned off to prevent blocking on server.";
+ break;
+ default:
+ err = "Unknown Error.";
+ break;
+ }
+ err = Translate(err);
if(( ServiceExists( MS_POPUP_ADDPOPUPEX )) || ( ServiceExists( MS_POPUP_ADDPOPUP )))
- DnsPopup(TRUE, err);
- else
- MessageBox(NULL,err,MDYNDNS_ERROR_TITLE,MB_OK);
+ DnsPopup(TRUE, err);
+ else
+ MessageBox(NULL,err,MDYNDNS_ERROR_TITLE,MB_OK);
return 1;
}
+// DynDNS stuff
char *GetHostIP(char *name)
{
- static char Ip[17];
- char hostname[25];
- WSADATA wsaData;
- struct hostent *pHostEnt;
- struct sockaddr_in tmpSockAddr;
+ DBVARIANT dbv;
+ char *Ip = (char*)malloc(17); //static char Ip[17];
+ // get IP from DB
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_LASTIP, &dbv)) {
+ strcpy(Ip,dbv.pszVal);
+ DBFreeVariant(&dbv);
+ return Ip;
+ }
+ // get IP from DNS query if no IP store in DB
+ char hostname[25];
+ WSADATA wsaData;
+ struct hostent *pHostEnt;
+ struct sockaddr_in tmpSockAddr;
char FAR *pszIp;
- WSAStartup(MAKEWORD(2,0),&wsaData);
- strcpy(hostname,name);
- pHostEnt = gethostbyname(hostname);
- if(!pHostEnt)
- {
- PrintError(2);
- return MDYNDNS_ERROR_CODE;
- }
- memcpy(&tmpSockAddr.sin_addr,pHostEnt->h_addr,pHostEnt->h_length);
- pszIp = inet_ntoa(tmpSockAddr.sin_addr);
- if (!pszIp) PrintError(5);
- else strcpy (Ip, pszIp);
- WSACleanup();
- return Ip;
+ WSAStartup(MAKEWORD(2,0),&wsaData);
+ strcpy(hostname,name);
+ pHostEnt = gethostbyname(hostname);
+ if(!pHostEnt){
+ PrintError(2);
+ strcpy (Ip, (char*)MDYNDNS_ERROR_CODE);
+ return Ip;
+ }
+ memcpy(&tmpSockAddr.sin_addr,pHostEnt->h_addr,pHostEnt->h_length);
+ pszIp = inet_ntoa(tmpSockAddr.sin_addr);
+ if (!pszIp) PrintError(5);
+ else strcpy (Ip, pszIp);
+ WSACleanup();
+ DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_LASTIP, Ip);
+ return Ip;
}
void Block_plugin(BOOL blok)
{
- if(blok == TRUE)
- DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_BLOCKED, MDYNDNS_BLOCK_CODE);
- else
- DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_BLOCKED, MDYNDNS_UNBLOCK_CODE);
+ if(blok == TRUE)
+ DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_BLOCKED, MDYNDNS_BLOCK_CODE);
+ else
+ DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_BLOCKED, MDYNDNS_UNBLOCK_CODE);
}
void UpdateIP(char *ip_num)
{
- DBVARIANT dbv;
- NETLIBBASE64 nlb64;
- NETLIBHTTPREQUEST nlhr, *nlreply;
- NETLIBUSER nlu = { 0 };
- NETLIBHTTPHEADER headers[4];
+ DBVARIANT dbv;
+ NETLIBBASE64 nlb64;
+ NETLIBHTTPREQUEST nlhr = {0};
+ NETLIBHTTPREQUEST *nlreply;
+
char szUrl[500] = "";
- int ip1 = 0, ip2 = 0, ip3 = 0, ip4 = 0, count;
+ int ip1 = 0, ip2 = 0, ip3 = 0, ip4 = 0, count;
char username[64] = "";
char passwd[64] = "";
char domain[128] = "";
char str[128] = "";
char encd[128] = "";
char auth[150] = "";
- char newip[128] = "";
+ char newip[128] = "";
char return_code[256] = "";
char *notf = "";
-
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_USERNAME, &dbv))
- {
- strcpy(username,dbv.pszVal);
- DBFreeVariant(&dbv);
- }
- else
- return;
+ char szAgent[100] = "";
+ char szVersion[16];
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_PASSWORD, &dbv))
- {
- CallService(MS_DB_CRYPT_DECODESTRING, strlen(dbv.pszVal) + 1, (LPARAM) dbv.pszVal);
- strcpy(passwd,dbv.pszVal);
- DBFreeVariant(&dbv);
- }
- else
- return;
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_USERNAME, &dbv))
+ {
+ strcpy(username,dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ else
+ return;
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_DOMAIN, &dbv))
- {
- strcpy(domain,dbv.pszVal);
- DBFreeVariant(&dbv);
- }
- else
- return;
-
- count = sscanf(ip_num , "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);
- if (count != 4 || ip1 <= 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||
- ip3 < 0 || ip3 > 255 || ip4 < 0 || ip4 > 255 )
- return;
-
- strcat(str, username);
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_PASSWORD, &dbv))
+ {
+ CallService(MS_DB_CRYPT_DECODESTRING, strlen(dbv.pszVal) + 1, (LPARAM) dbv.pszVal);
+ strcpy(passwd,dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ else
+ return;
+
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_DOMAIN, &dbv))
+ {
+ strcpy(domain,dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ else
+ return;
+
+ count = sscanf(ip_num , "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);
+ if (count != 4 || ip1 <= 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||
+ ip3 < 0 || ip3 > 255 || ip4 < 0 || ip4 > 255 )
+ return;
+
+ strcat(str, username);
strcat(str, ":");
strcat(str, passwd);
-
- nlb64.pbDecoded = (PBYTE) str;
- nlb64.cbDecoded = strlen(str);
- nlb64.pszEncoded = encd;
- nlb64.cchEncoded = 128;
- (HANDLE) CallService(MS_NETLIB_BASE64ENCODE, 0, (LPARAM)(NETLIBBASE64*)&nlb64);
-
- strcat(auth, "Basic ");
- strcat(auth, encd);
-
+
+ nlb64.pbDecoded = (PBYTE) str;
+ nlb64.cbDecoded = strlen(str);
+ nlb64.pszEncoded = encd;
+ nlb64.cchEncoded = 128;
+ (HANDLE) CallService(MS_NETLIB_BASE64ENCODE, 0, (LPARAM)(NETLIBBASE64*)&nlb64);
+
+ strcat(auth, "Basic ");
+ strcat(auth, encd);
+
strcat(szUrl,"http://members.dyndns.org/nic/update?");
- strcat(szUrl,"&hostname=");
+ strcat(szUrl,"hostname=");
strcat(szUrl,domain);
strcat(szUrl,"&myip=");
strcat(szUrl,ip_num);
-
- nlu.cbSize = sizeof(nlu);
- nlu.flags = NUF_OUTGOING | NUF_HTTPCONNS;
- nlu.szSettingsModule = SETTINGS_MODULE;
- nlu.szDescriptiveName = DESCRIPTIVE_NAME;
- hNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM) & nlu);
-
- headers[0].szName = "User-Agent";
- headers[0].szValue = "MirandaIM (mDynDns plugin/0.0.1.0)";
- headers[1].szName="Host";
- headers[1].szValue="members.dyndns.org";
- headers[2].szName="Authorization";
- headers[2].szValue = auth;
-
- ZeroMemory(&nlhr, sizeof(nlhr));
- nlhr.cbSize = sizeof(nlhr);
- nlhr.requestType = REQUEST_GET;
- nlhr.flags = NLHRF_DUMPASTEXT;
- nlhr.szUrl = szUrl;
- nlhr.headersCount = 3;
- nlhr.headers = headers;
-
- nlreply = (NETLIBHTTPREQUEST *) CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM) hNetlibUser, (LPARAM) & nlhr);
+ strcat(szUrl,"&wildcard=NOCHG");
+ strcat(szUrl,"&mx=NOCHG");
+ strcat(szUrl,"&backmx=NOCHG");
+
+ strcat(szAgent,"MirandaIM - ");
+ strcat(szAgent,__PLUGIN_NAME);
+ strcat(szAgent," plugin - ");
+ strcat(szAgent,CreateVersionStringPluginEx(&pluginInfo, szVersion));
+
+ // initialize the netlib request
+ nlhr.cbSize = sizeof(nlhr);
+ nlhr.requestType = REQUEST_GET;
+ nlhr.flags = NLHRF_DUMPASTEXT;
+ nlhr.szUrl = (char*)szUrl;
+ nlhr.headersCount = 3;
+ nlhr.headers=(NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)*nlhr.headersCount);
+ nlhr.headers[0].szName = "Host";
+ nlhr.headers[0].szValue = "members.dyndns.org";
+ nlhr.headers[1].szName = "Authorization";
+ nlhr.headers[1].szValue = auth; //Basic base-64-authorization
+ nlhr.headers[2].szName = "User-Agent";
+ nlhr.headers[2].szValue = szAgent; //__USER_AGENT_STRING;
+
+ nlreply = (NETLIBHTTPREQUEST *) CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM) hNetlibUser, (LPARAM) & nlhr);
if( nlreply )
{
if( nlreply->resultCode >= 200 && nlreply->resultCode < 300 )
@@ -599,9 +753,10 @@ void UpdateIP(char *ip_num)
PrintError(5);
if (strncmp (return_code,"good",4) == 0)
{
- notf = "Your IP on dyndns.org account, has been updated.";
- notf = Translate(notf) ;
- DnsPopup(FALSE,notf);
+ DBWriteContactSettingString(NULL, PLUGNAME, MDYNDNS_KEY_LASTIP, ip_num);
+ notf = "Your IP on dyndns.org account, has been updated.";
+ notf = Translate(notf) ;
+ DnsPopup(FALSE,notf);
}
if (strncmp (return_code,"nochg",5) == 0)
{
@@ -626,99 +781,106 @@ void UpdateIP(char *ip_num)
}
CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM) nlreply);
}
- Netlib_CloseHandle(hNetlibUser);
+ mir_free(nlhr.headers);
}
char *GetExternIP()
{
+ if( !hNetlibUser ) {
+ PrintError(1);
+ return 0;
+ }
+ char szAgent[100] = "";
+ char szVersion[16];
+ char *ip_str = (char*)malloc(17);
+ char szUrl[ 500 ] = DYN_DNS_SERVER;
int ip1 = 0, ip2 = 0, ip3 = 0, ip4 = 0, count;
- NETLIBHTTPREQUEST nlhr, *nlreply;
+ bool result = FALSE;
+ NETLIBHTTPREQUEST nlhr = {0};
+ NETLIBHTTPREQUEST *nlreply;
ZeroMemory(&nlhr, sizeof(nlhr));
- char szUrl[ 500 ] = DYN_DNS_SERVER;
- char *ip_str = (char*)malloc(17);
- nlhr.cbSize = sizeof(nlhr);
- nlhr.requestType = REQUEST_GET;
- nlhr.flags = NLHRF_DUMPASTEXT;
- nlhr.szUrl = (char*)szUrl;
- NETLIBUSER nlu = { 0 };
- nlu.cbSize = sizeof(nlu);
- nlu.flags = NUF_OUTGOING | NUF_HTTPCONNS;
- nlu.szSettingsModule = SETTINGS_MODULE;
- nlu.szDescriptiveName = DESCRIPTIVE_NAME;
-
- hNetlibUser = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM) & nlu);
- if( !hNetlibUser ) {PrintError(1); return 0;}
- nlreply = (NETLIBHTTPREQUEST *) CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM) hNetlibUser, (LPARAM) & nlhr);
- if( nlreply && nlreply->resultCode >= 200 && nlreply->resultCode < 300 )
- {
+
+ strcat(szAgent,"MirandaIM - ");
+ strcat(szAgent,__PLUGIN_NAME);
+ strcat(szAgent," plugin - ");
+ strcat(szAgent,CreateVersionStringPluginEx(&pluginInfo, szVersion));
+
+ // initialize the netlib request
+ nlhr.cbSize = sizeof(nlhr);
+ nlhr.requestType = REQUEST_GET;
+ nlhr.flags = NLHRF_DUMPASTEXT;
+ nlhr.szUrl = (char*)szUrl;
+ nlhr.headersCount = 1;
+ nlhr.headers=(NETLIBHTTPHEADER*)mir_alloc(sizeof(NETLIBHTTPHEADER)*nlhr.headersCount);
+ nlhr.headers[0].szName = "User-Agent";
+ nlhr.headers[0].szValue = szAgent;
+
+ nlreply = (NETLIBHTTPREQUEST *) CallService(MS_NETLIB_HTTPTRANSACTION, (WPARAM) hNetlibUser, (LPARAM) &nlhr);
+ if( nlreply && nlreply->resultCode >= 200 && nlreply->resultCode < 300 ) {
nlreply->pData[nlreply->dataLength] = 0;// make sure its null terminated
count = sscanf(nlreply->pData , RESPONSE_PATTERN, &ip1, &ip2, &ip3, &ip4);
- if (count != 4 || ip1 <= 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 ||
- ip3 < 0 || ip3 > 255 || ip4 < 0 || ip4 > 255 )
- {PrintError(3); return 0;}
- sprintf(ip_str, "%d.%d.%d.%d", ip1, ip2, ip3, ip4);
+ if (count != 4 || ip1 <= 0 || ip1 > 255 || ip2 < 0 || ip2 > 255 || ip3 < 0 || ip3 > 255 || ip4 < 0 || ip4 > 255 ){
+ PrintError(3);
+ }
+ else {
+ sprintf(ip_str, "%d.%d.%d.%d", ip1, ip2, ip3, ip4);
+ result = TRUE;
+ }
}
- else {PrintError(2); return 0;}
-
- CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM) nlreply);
- Netlib_CloseHandle(hNetlibUser);
- return ip_str;
+ else {
+ PrintError(2);
+ }
+ DBWriteContactSettingDword(NULL, PLUGNAME, MDYNDNS_KEY_LASTIPCHECK, (DWORD)time(0));
+ mir_free(nlhr.headers);
+ if (!result) free(ip_str);
+ if (nlreply) CallService(MS_NETLIB_FREEHTTPREQUESTSTRUCT, 0, (LPARAM) nlreply);
+ return result ? ip_str : 0;
}
void DoIPCheck()
-{
- DBVARIANT dbv;
- char blok[3] = "";
- char *myIP = "";
- char *myExtIP = "";
- char *notf = "";
+{
+ DBVARIANT dbv;
+ char blok[3] = "";
+ char *myIP = "";
+ char *myExtIP = "";
+ char *notf = "";
char domain[128] = "";
- if (closing == TRUE)
- return ;
-
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_DOMAIN, &dbv))
- {
- strcpy(domain,dbv.pszVal);
- DBFreeVariant(&dbv);
- }
- else
- return;
-
- if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_BLOCKED, &dbv))
- {
- strcpy(blok,dbv.pszVal);
- DBFreeVariant(&dbv);
- if(blok == MDYNDNS_BLOCK_CODE)
- {
- PrintError(13);
- return;
- }
- }
-
- myIP = GetHostIP(domain);
- if(myIP && (blok != MDYNDNS_BLOCK_CODE) && (myIP != MDYNDNS_ERROR_CODE))
- {
- myExtIP = GetExternIP();
- if(myExtIP)
- {
- if(strncmp(myIP,myExtIP,15) == 0 )
- { ;} //Do nothing
- else
- UpdateIP(myExtIP);
- free(myExtIP);
- }
- free(myIP);
- }
-}
+ if (closing == TRUE){
+ return ;
+ }
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_DOMAIN, &dbv)) {
+ strcpy(domain,dbv.pszVal);
+ DBFreeVariant(&dbv);
+ }
+ else {
+ return ;
+ }
+ if (!DBGetContactSetting(NULL, PLUGNAME, MDYNDNS_KEY_BLOCKED, &dbv)) {
+ strcpy(blok,dbv.pszVal);
+ DBFreeVariant(&dbv);
+ if(blok == MDYNDNS_BLOCK_CODE){
+ PrintError(13);
+ return ;
+ }
+ }
-static int PluginMenuCommand(WPARAM wParam,LPARAM lParam)
-{
- return 0;
+ myIP = GetHostIP(domain);
+ if(myIP && (blok != MDYNDNS_BLOCK_CODE) && (myIP != MDYNDNS_ERROR_CODE)){
+ myExtIP = GetExternIP();
+ if(myExtIP){
+ if(strncmp(myIP,myExtIP,15) == 0 ){
+ ; //Do nothing
+ }
+ else {
+ UpdateIP(myExtIP);
+ }
+ free(myExtIP);
+ }
+ }
+ if(myIP) free(myIP);
}
-void WakeThread(HANDLE hThread)
-{
- QueueUserAPC(NullAPC, hThread, 0);
-}
+
+