⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dyndns95.c

📁 动态域名解析服务器
💻 C
📖 第 1 页 / 共 2 页
字号:
					{
					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 + -