コード例 #1
0
ファイル: sntp.c プロジェクト: h16o2u9u/rtoss
/*---------------------------------------------------
	called when the window received WSOCK_GETHOST.
	get IP address and send data.
---------------------------------------------------*/
void OnGetHost(HWND hwnd, WPARAM wParam, LPARAM lParam)
{
	struct hostent *pHostEnt;
	unsigned long serveraddr;

	if(g_hGetHost == NULL) return;

	// success ?
	if(WSAGETASYNCERROR(lParam) != 0)
	{
		SocketClose(hwnd, "failed to get IP address");
		return;
	}

	// valid handle ?
	if(g_hGetHost != (HANDLE)wParam) return;

	// get IP address
	pHostEnt = (struct hostent *)g_pGetHost;
	serveraddr =  *((unsigned long *)((pHostEnt->h_addr_list)[0]));
	free(g_pGetHost); g_pGetHost = NULL;
	g_hGetHost = NULL;

	// send data
	SNTPSend(hwnd, serveraddr);
}
コード例 #2
0
ファイル: sntp.c プロジェクト: k-takata/TClockLight
/*---------------------------------------------------
  start SNTP session
---------------------------------------------------*/
BOOL SNTPStart(HWND hwndSNTP)
{
	char servername[BUFSIZE_SERVER];
	unsigned long serveraddr;
	
	if(m_socket != INVALID_SOCKET || m_hGetHost != NULL) return FALSE;
	
	// get server name and port
	m_port = GetServerPort(m_servername, servername);
	if(m_port == -1)
	{
		Log(hwndSNTP, "invalid server name"); return FALSE;
	}
	
	// make a socket
	m_socket = socket(PF_INET, SOCK_DGRAM, 0);
	if(m_socket == INVALID_SOCKET)
	{
		Log(hwndSNTP, "socket() failed");
		return FALSE;
	}
	
	serveraddr = inet_addr(servername);
	// if server name is not "XXX.XXX.XXX.XXX"
	if(serveraddr == INADDR_NONE)
	{
		// request IP address
		m_pGetHost = malloc(MAXGETHOSTSTRUCT);
		m_hGetHost = WSAAsyncGetHostByName(hwndSNTP, WSOCK_GETHOST,
			servername, m_pGetHost, MAXGETHOSTSTRUCT);
		if(m_hGetHost == NULL)
		{
			free(m_pGetHost); m_pGetHost = NULL;
			SocketClose(hwndSNTP, "WSAAsyncGetHostByName() failed");
			return FALSE;
		}
		return TRUE;
	}
	
	// send data
	SNTPSend(hwndSNTP, serveraddr);
	return TRUE;
}
コード例 #3
0
ファイル: sntp.c プロジェクト: h16o2u9u/rtoss
/*---------------------------------------------------
	start SNTP session
---------------------------------------------------*/
void SNTPStart(HWND hwnd, char *buf)
{
	char servername[256];
	unsigned long serveraddr;

	if(g_socket != -1 || g_hGetHost != NULL) return;

	// get server name and port
	g_port = GetServerPort(buf, servername);
	if(g_port == -1)
	{
		Log("invalid server name"); return;
	}

	// make a socket
	g_socket = socket(PF_INET, SOCK_DGRAM, 0);
	if(g_socket == INVALID_SOCKET)
	{
		Log("socket() failed");
		g_socket = (SOCKET)-1; return;
	}

	serveraddr = inet_addr((char*)servername);
	// if server name is not "XXX.XXX.XXX.XXX"
	if(serveraddr == -1)
	{
		// request IP address
		g_pGetHost = malloc(MAXGETHOSTSTRUCT);
		g_hGetHost = WSAAsyncGetHostByName(hwnd, WSOCK_GETHOST,
			servername, g_pGetHost, MAXGETHOSTSTRUCT);
		if(g_hGetHost == 0)
		{
			SocketClose(hwnd, "WSAAsyncGetHostByName() failed");
			return;
		}
		dwTickCountOnGetHost = GetTickCount();
		return;
	}

	// send data
	SNTPSend(hwnd, serveraddr);
}