📄 dyndns95.c
字号:
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Updating IP", 1);
if(UpdateIP(hDlg, uname, passwd, domain, IP))
{
ToUpdate=IPCheckDelay;
sprintf(scratchpad, "%.2d:%.2d:%.2d", ToUpdate/3600, ToUpdate/60, ToUpdate%60);
MySetDlgItemText(hDlg, IDC_STATIC_ToUpdate, scratchpad, 0);
SinceUpdate=0;
sprintf(scratchpad, "%.2d:%.2d:%.2d", SinceUpdate/3600, SinceUpdate/60, SinceUpdate%60);
MySetDlgItemText(hDlg, IDC_STATIC_SinceUpdate, scratchpad, 0);
RunningUpdate=0;
}
else
{
ToUpdate=RetryDelay;
sprintf(scratchpad, "%.2d:%.2d:%.2d", ToUpdate/3600, ToUpdate/60, ToUpdate%60);
MySetDlgItemText(hDlg, IDC_STATIC_ToUpdate, scratchpad, 0);
RunningUpdate=0;
}
}
else
{
ToUpdate=IPCheckDelay;
sprintf(scratchpad, "%.2d:%.2d:%.2d", ToUpdate/3600, ToUpdate/60, ToUpdate%60);
MySetDlgItemText(hDlg, IDC_STATIC_ToUpdate, scratchpad, 0);
RunningUpdate=0;
}
if(!ToUpdate)
{
RunningUpdate=1;
}
}
break;
}
break;
case WM_COMMAND:
switch(wParam)
{
case IDC_HIDE:
ShowWindow(hDlg, SW_HIDE);
hidden=0;
break;
case IDC_SETUP:
DialogBox(gInstance, MAKEINTRESOURCE(IDD_DynDNSSetup), hDlg, DynDNSSetupProc);
if(!strncmp("postmaster", uname, 10))
{
sprintf(fulldomain, "%s", domain);
}
else
{
sprintf(fulldomain, "%s.%s", uname, domain);
}
MySetDlgItemText(hDlg, IDC_STATIC_DOMAIN, fulldomain, 0);
MySetDlgItemText(hDlg, IDC_STATIC_IP, IP, 0);
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Setup Complete", 1);
break;
case IDC_UPDATE:
ToUpdate=1;
update=1;
break;
case IDC_QUIT:
closesocket(s_dyndns);
closesocket(s_internal_connect);
closesocket(s_internal_bind);
WSACleanup();
Shell_NotifyIcon(NIM_DELETE, &tnid);
exit(0);
break;
case IDC_INFO:
sprintf(bigpad, "DYNDNS.COM IP Updater Version %s\n\nCopyright 2000 DYNDNS.COM\n\nRunning Dot50 Protocol\nConfiguration Stored in Registry (Software\\DynDNS2000)\n\nReport bugs to %s\n", VERSION, CONTACT);
MessageBox(hDlg, bigpad, "DYNDNS.COM IP Updater", MB_OK);
break;
}
break;
case WM_NOTIFYICON:
switch(lParam)
{
case WM_LBUTTONDBLCLK:
hidden = 1;
ShowWindow(hDlg, SW_SHOW);
SetForegroundWindow(mDlg);
break;
}
break;
default:
return(FALSE);
break;
}
return(TRUE);
}
char FAR *Name2Addr(char *nm)
{
LPHOSTENT lphe;
char FAR *IAD;
if(!(lphe = gethostbyname(nm)))
{
return NULL;
}
IAD = inet_ntoa(*(LPIN_ADDR)*(lphe->h_addr_list));
return(IAD);
}
int IPCurrent(HWND hDlg)
{
SOCKADDR_IN in_sin, out_sin;
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Creating bind() socket", 1);
if((s_internal_bind=socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET)
{
/**/ sprintf(scratchpad, "Can't create bind() socket (%d)", WSAGetLastError());
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, scratchpad, 1);
return 0;
}
in_sin.sin_family = AF_INET;
in_sin.sin_addr.s_addr=INADDR_ANY;
in_sin.sin_port=htons(DUMMYPORT);
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Binding bind() socket", 1);
if(bind(s_internal_bind, (struct sockaddr FAR*) &in_sin, sizeof(in_sin)) == SOCKET_ERROR)
{
/**/ sprintf(scratchpad, "Can't bind() socket (%d)", WSAGetLastError());
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, scratchpad, 1);
return 0;
}
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Listening to bind() socket", 1);
if(listen(s_internal_bind, 1) == SOCKET_ERROR)
{
/**/ sprintf(scratchpad, "Can't listen() socket (%d)", WSAGetLastError());
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, scratchpad, 1);
return 0;
}
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Creating connect() socket", 1);
if((s_internal_connect=socket(AF_INET, SOCK_STREAM,0)) == INVALID_SOCKET)
{
/**/ sprintf(scratchpad, "Can't create connect() socket (%d)", WSAGetLastError());
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, scratchpad, 1);
return 0;
}
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Resolving our IP", 1);
out_sin.sin_family = AF_INET;
sprintf(scratchpad, "%s", Name2Addr(fulldomain));
// strncpy(scratchpad, "127.0.0.1", 20); // Use this line for local testing
out_sin.sin_addr.s_addr=inet_addr(scratchpad);;
out_sin.sin_port=htons(DUMMYPORT);
if(!out_sin.sin_addr.s_addr)
{
/**/ sprintf(scratchpad, "Can't resolve our IP (%d)", WSAGetLastError() );
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, scratchpad, 1);
return 0;
}
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Connecting to ourself", 1);
if(connect(s_internal_connect, (struct sockaddr*) &out_sin, sizeof(SOCKADDR_IN)) < 0)
{
/**/ sprintf(scratchpad, "Can't connect to ourself (%d)", WSAGetLastError() );
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, scratchpad, 1);
return 0;
}
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "IP is up to date", 1);
closesocket(s_internal_bind);
closesocket(s_internal_connect);
return 1;
}
int UpdateIP(HWND hDlg, char *uname, char *passwd, char *domain, char *IP)
{
struct CliData
{
char UName[20];
char PWord[20];
char NewIP[16];
char Doman[64];
};
struct CliData *Datum;
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons( REMOTEPORT );
sin.sin_addr.s_addr = inet_addr(Name2Addr(REMOTEHOST));
Datum = malloc(sizeof(struct CliData));
strcpy(Datum->NewIP, IP);
strcpy(Datum->UName, uname);
strcpy(Datum->PWord, passwd);
strcpy(Datum->Doman, domain);
if ((s_dyndns = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Socket Creation Error", 1);
return 0;
}
if (connect(s_dyndns, (struct sockaddr *)&sin, sizeof(sin))==SOCKET_ERROR)
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Connect Error", 1);
return 0;
}
send(s_dyndns, (char *)Datum, sizeof(struct CliData), 0);
recv(s_dyndns, MBuf, 8192, 0);
closesocket(s_dyndns);
if(DEBUG2)
{
MessageBox(hDlg, MBuf, "Server Response", MB_OK);
}
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, MBuf, 1);
if(strstr(MBuf, "Authorization"))
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Invalid Login", 1);
return 0;
}
else
if(strstr(MBuf, "Internal"))
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Server Error", 1);
return 0;
}
else
if(strstr(MBuf, "Invalid"))
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Invalid Domain", 1);
return 0;
}
else
if(strstr(MBuf, "SUCCES"))
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Update Successful", 1);
return 1;
}
else
{
MySetDlgItemText(hDlg, IDC_STATIC_STATUS, "Unknown Response", 1);
return 0;
}
}
BOOL MySetDlgItemText(HWND hDlg, int nIDDlgItem, LPCTSTR lpString, BOOL rec)
{
char tBuf[1536];
if(rec)
{
sprintf(MRec, "%s\n%s", MRec, lpString);
if(strlen(MRec)>1536)
{
strncpy(tBuf, MRec+512, 1536);
strncpy(MRec, tBuf, 1536);
}
}
return SetDlgItemText(hDlg, nIDDlgItem, lpString);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -