コード例 #1
0
void CNetwork::OnWinsock(WPARAM wParam, LPARAM lParam)
{
	CSingleLock pLock( &m_pSection, TRUE );

	LPBYTE pBuffer = NULL;
	if ( ! m_pLookups.Lookup( (LPVOID)wParam, (LPVOID&)pBuffer ) ) return;
	m_pLookups.RemoveKey( (LPVOID)wParam );

	CString* psHost	= *(CString**)pBuffer;
	WORD nPort		= *(WORD*)(pBuffer + 4);
	BYTE nProtocol	= *(BYTE*)(pBuffer + 6);
	BYTE nCommand	= *(BYTE*)(pBuffer + 7);
	HOSTENT* pHost	= (HOSTENT*)(pBuffer + 8);

	if ( WSAGETASYNCERROR(lParam) == 0 )
	{
		if ( nCommand == 0 )
		{
			HostCache.ForProtocol( nProtocol )->Add( (IN_ADDR*)pHost->h_addr, nPort );
		}
		else
		{
			Neighbours.ConnectTo( (IN_ADDR*)pHost->h_addr, nPort, nProtocol, FALSE, nCommand == 2 );
		}
	}
	else if ( nCommand > 0 )
	{
		theApp.Message( MSG_ERROR, IDS_NETWORK_RESOLVE_FAIL, (LPCTSTR)*psHost );
	}
	
	delete psHost;
	free( pBuffer );
}
コード例 #2
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);
}
コード例 #3
0
ファイル: pal.c プロジェクト: mixtile/xskit
int xsPalHandleGetAddrByName(UINT message, WPARAM wParam, LPARAM lParam)
{
	int tagId = message - WM_XS_RESOLVE_MSG;
	DWORD dwError, dwBufLen;
	xsResolveTag *tag;
	struct hostent *he;
	xsSysEvent evt;

	dwError = WSAGETASYNCERROR(lParam);
	dwBufLen = WSAGETASYNCBUFLEN(lParam);

	tag = &g_xsResolveTags[tagId];
	he = (struct hostent *)tag->buf;

	if (dwError == 0)
	{
		memcpy(evt.data.resolve.addr.addr.b, he->h_addr_list[0], 4);
		evt.data.resolve.success = XS_TRUE;
	}
	else
	{
		evt.data.resolve.addr.addr.n = -1;
		evt.data.resolve.success = XS_FALSE;
	}

	xsFreeNative(tag->buf);

	evt.type = XS_EVT_RESOLVE;
	evt.data.resolve.tag = tagId;
	xsSysEventHandler(&evt);

 	return 0;
}
コード例 #4
0
ファイル: WAsyncSocket.cpp プロジェクト: vdrive/TrapperKeeper
//
// Message Window Functions
//
void WAsyncSocket::GotHostByNameMessage(WPARAM wparam,LPARAM lparam)
{
int error_code=WSAGETASYNCERROR(lparam);

	if(error_code!=0)
	{
		Close();
		return;
	}
	
	sockaddr_in addr;
	memset(&addr,0,sizeof(sockaddr_in));
	addr.sin_family=AF_INET;
	hostent *ptr=(HOSTENT *)m_hostent_buf;
	addr.sin_addr.S_un.S_addr=*((unsigned long *)ptr->h_addr_list[0]);
	addr.sin_port=htons(m_port);

	// Connect the socket to the listening server socket
	int ret=WSAConnect(m_hSocket,(sockaddr *)&addr,sizeof(sockaddr_in),NULL,NULL,NULL,NULL);
	
	if(ret==SOCKET_ERROR)
	{
		int error=GetLastError();

		if(error!=WSAEWOULDBLOCK)
		{
#ifdef _DEBUG
			char buf[128];
			sprintf(buf,"WSAConnect() error %u in WAsyncSocket::GotHostByNameMessage()\n",error);
			OutputDebugString(buf);
#endif
		}
	}
}
コード例 #5
0
ファイル: XProc_DeleteCharacter.cpp プロジェクト: F5000/spree
void XProc_DeleteCharacter::OnUserMessage_Socket(  UINT message, WPARAM wparam, LPARAM lparam )
{
	if (WSAGETASYNCERROR(lparam) != 0) 
	{		
		g_NetworkKernel.ProcessNetworkError();
		return;
	}

	switch (WSAGETSELECTEVENT(lparam)) 
	{	
	case FD_READ :
		g_NetworkKernel.ReadSocket();
		break;
	case FD_CLOSE :
		//_XDWINPRINT( "SERVER MESSAGE : Socket close message" );
		g_NetworkKernel.ProcessNetworkError();
		g_NetworkKernel.DisconnectServer();
		g_NetworkKernel.ReleaseNetwork();
		
		((CEmperorOfDragonsApp*)gApp)->m_proc_loginserver.m_PrevProcess_SelectCharacter = TRUE;
		((CEmperorOfDragonsApp*)gApp)->m_ProcessManager.ChangeProcess( 
			&((CEmperorOfDragonsApp*)gApp)->m_proc_loginserver );		
		
		break;
	}
}
コード例 #6
0
ファイル: Resolver.cpp プロジェクト: hacker/pumpkin
LRESULT CResolver::OnResolved(WPARAM wP,LPARAM lP)
{
	if(WSAGETASYNCERROR(lP))
		socket->OnFailedToResolve();
	else
		socket->OnResolved();
	return 0;
}
コード例 #7
0
void CTCPClientSocketImpl::FireEvent ( bool bIsResolveEvent, uint uiResolveId, LPARAM lType )
{
    // Check this is the correct thingmy #1
    if ( bIsResolveEvent != m_bIsResolvingHost )
        return;

    // Are we resolving host? If so, we got this event from WSAAsyncGetHostByName
    if ( m_bIsResolvingHost )
    {
        // Check this is the correct thingmy #2
        if ( uiResolveId != (uint)m_pAsyncHostResolving )
            return;

        m_bIsResolvingHost = false;

        // Get error code
        unsigned short usError = WSAGETASYNCERROR ( lType );
        // Succeeded? Continue
        if ( !usError )
        {
            ConnectContinue ();
        }
        else
        {
            strcpy ( m_szLastError, "Unable to resolve" );
        }
        return;
    }

    // Check event type
    switch ( WSAGETSELECTEVENT ( lType ) )
    {
        case FD_READ:
            if ( m_pEventRead )
                m_pEventRead ( this, m_pClass );
            break;
        case FD_WRITE:
            if ( m_pEventWrite )
                m_pEventWrite ( this, m_pClass );
            break;
        case FD_CONNECT:    // Client only
            if ( m_pEventConnect )
                m_pEventConnect ( this, m_pClass );
            break;
        case FD_CLOSE:
            if ( m_pEventClose )
                m_pEventClose ( this, m_pClass );
            break;
        /*
        case FD_ACCEPT:     // Server only
            break;
        */
    }
}
コード例 #8
0
void LLAsyncHostByName::handleMessage( const MSG& msg )
{
	if( (HANDLE)msg.wParam != mRequestHandle ) 
	{
		llwarns << "LL_WM_HOST_RESOLVED received for request we weren't waiting for.  Ignored." << llendl;
		return;
	}
	llinfos << "LL_WM_HOST_RESOLVED" << llendl;

	BOOL success = FALSE;
	U32 ip = 0;
	S32 error = WSAGETASYNCERROR( msg.lParam );
	if( error )
	{
		if( error == WSANO_DATA) 
		{
			llwarns << "Unknown host" << llendl;
		} 
		else 
		{
			llwarns << "Resolve host error" << WSAGetLastError () << llendl;
		}
	}
	else
	{
		HOSTENT* he = (HOSTENT*) mOutputBuffer;
		char** addr_list = he->h_addr_list;
		if (!addr_list)
		{
			llwarns << "Bad HOSTENT in LLAsyncHostByName" << llendl;
			return;
		}
		char* first_addr = addr_list[0];
		if (!first_addr)
		{
			llwarns << "Bad address in HOSTENT in LLAsyncHostByName" << llendl;
			return;
		}
		ip = *(U32*)first_addr;
		success = TRUE;
	}

	if( mCallback )
	{
		mCallback( success, mDomainName, ip, mUserdata );
	}
	mCallback = NULL;
	mUserdata = NULL;
	mRequestHandle = 0;
	mDomainName.clear();
}
コード例 #9
0
ファイル: TCPFighter.cpp プロジェクト: EomJaeWoong/TCPFighter
//
//  함수: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  목적:  주 창의 메시지를 처리합니다.
//
//  WM_COMMAND	- 응용 프로그램 메뉴를 처리합니다.
//  WM_PAINT	- 주 창을 그립니다.
//  WM_DESTROY	- 종료 메시지를 게시하고 반환합니다.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;

	switch (message)
	{
	// 프로그램 비활성화 체크
	case WM_ACTIVATEAPP :
		g_bActiveApp = (BOOL)wParam;
		break;
		
	//네트워크 메시지
	case WM_NETWORK :
		if (WSAGETASYNCERROR(lParam))
			MessageBox(g_hWnd, L"WM_NETWORK", NULL, NULL);

		switch (WSAGETSELECTEVENT(lParam))
		{
		case FD_CONNECT :
			break;

		case FD_CLOSE :
			MessageBox(g_hWnd, L"close", NULL, NULL);
			break;

		case FD_READ :
			ReadProc();
			break;

		case FD_WRITE :
			WriteProc();
			break;
		}
		break;

	case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		// TODO: 여기에 그리기 코드를 추가합니다.
		EndPaint(hWnd, &ps);
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;

	timeBeginPeriod(1);
}
コード例 #10
0
LRESULT COptionTab10::ProxySearch(int id,WPARAM wParam,LPARAM lParam) {
  int errcode=WSAGETASYNCERROR(lParam);
  int bufflen=WSAGETASYNCBUFLEN(lParam);

  if ((id>=0) && (id<10)) {
    if (!errcode) {
      //HOSTENT* host=(HOSTENT*) ProxyDetectBuff[id];
      //if (host->h_name) {
      m_ctl_prox.AddString(ProxyDetectName[id]);
      //}
    }
  }

  return 0;
}
コード例 #11
0
	bool HandleMessage( UINT msg, WPARAM wParam, LPARAM lParam )
	{
		if( msg == WM_USER )
		{
			m_iResult = WSAGETASYNCERROR( lParam );
			StopRunning();
			return true;
		}

		if( msg == WM_USER+1 )
		{
			m_iResult = 0;
			StopRunning();
			return true;
		}

		return false;
	}
コード例 #12
0
ファイル: WAsyncSocket.cpp プロジェクト: vdrive/TrapperKeeper
void WAsyncSocket::GotHostByNameMessage(WPARAM wparam,LPARAM lparam)
{
	int error_code=WSAGETASYNCERROR(lparam);

	if(error_code!=0)
	{
		OnClose(0);
		return;
	}
	
	sockaddr_in addr;
	memset(&addr,0,sizeof(sockaddr_in));
	addr.sin_family=AF_INET;
	hostent *ptr=(HOSTENT *)m_hostent_buf;
	addr.sin_addr.S_un.S_addr=*((unsigned long *)ptr->h_addr_list[0]);
	addr.sin_port=htons(m_port);

	// Connect the socket to the listening server socket
	WSAConnect(m_hSocket,(sockaddr *)&addr,sizeof(sockaddr_in),NULL,NULL,NULL,NULL);
}
コード例 #13
0
ファイル: LBaseSock.cpp プロジェクト: japgo/mygithub
/*========================================================================================
	FUNCTION: LBaseSock::WindowProc()
	DESCRIPT: Event handler window procedure.
	RETURN	:
	ARGUMENT:
		uMsg  : (i)Message ID
		wParam: (i)Message parameter 1
		lParam: (i)Message parameter 2
	UPDATE	: 2004/07/01, In-hyeok Paek; First work!
========================================================================================*/
LRESULT LBaseSock::WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) 
{
	int		nErr;	//	Socket error code
	
	if( uMsg == WM_SOCK_SOCKET ) {
		nErr =  WSAGETASYNCERROR( lParam );
		switch( WSAGETSELECTEVENT( lParam ) ) {
			case FD_ACCEPT:
				OnAccept( nErr );
				break;
			case FD_CONNECT: 
				::KillTimer( m_hWnd, IDT_SOCK_CONNECT );
				OnConnect( nErr ); 
				break;
			case FD_CLOSE:
				OnClose( nErr );
				break;
			case FD_READ:
				OnReceive( nErr );
				break;
			case FD_WRITE:
				OnSend( nErr );
				break;
		}
		return 0L;
	}
	else if( uMsg == WM_TIMER ) {
		if( wParam == IDT_SOCK_CONNECT ) {
			if( m_Sock != INVALID_SOCKET ) {
				closesocket( m_Sock );
				m_Sock = INVALID_SOCKET;
			}
			m_nLastErr = WSAETIMEDOUT;
			OnConnect( WSAETIMEDOUT );
			return 0L;
		}
		
	}

	return ::DefWindowProc( m_hWnd, uMsg, wParam, lParam );
}
コード例 #14
0
ファイル: NetUtility.cpp プロジェクト: fffonion/V8
	static LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
	{
		if(message == GETHOSTBYNAME_MSG)
		{
			LONG lData = GetWindowLong(hWnd, GWL_USERDATA);

			wchar_t sz[100]={0};

			if(lData > 0)
			{
				AsyncGetHostByNameData* pData = (AsyncGetHostByNameData*)lData;

				int nErrorCode = WSAGETASYNCERROR(lParam);

				hostent* pHostent = NULL;

				if(nErrorCode == 0)
				{
					pHostent = (hostent*)pData->cHostent;
				}

				(*pData->pCallBack)((HANDLE)wParam, nErrorCode, pHostent, pData->pContext);
				
				wsprintf(sz, L"%s_%d", GETHOSTBYNAME_WND_CLASSNAME, (int)pData->pContext);

				delete pData;
			}

			DestroyWindow(hWnd);

			UnregisterClass(sz, GetModuleHandle(0));

			return 0;
		}

		return DefWindowProc(hWnd, message, wParam, lParam);
	}
コード例 #15
0
ファイル: commlib.c プロジェクト: pakls/teraterm-ttssh2
void CommOpen(HWND HW, PTTSet ts, PComVar cv)
{
#ifdef NO_INET6
	int Err;
#endif /* NO_INET6 */
	char ErrMsg[21+256];
	char P[50+256];

	MSG Msg;
#ifndef NO_INET6
	ADDRINFO hints;
	char pname[NI_MAXSERV];
#else
	char HEntBuff[MAXGETHOSTSTRUCT];
	u_long addr;
	SOCKADDR_IN saddr;
#endif /* NO_INET6 */

	BOOL InvalidHost;
#ifdef NO_INET6
	BOOL BBuf;
#endif /* NO_INET6 */

	char uimsg[MAX_UIMSG];

	// ホスト名が名前付きパイプかどうかを調べる。
	if (ts->PortType == IdTCPIP) {
		if (CheckNamedPipeFormat(ts->HostName, strlen(ts->HostName)) == 0) {
			ts->PortType = IdNamedPipe;
		}
	}

	/* initialize ComVar */
	cv->InBuffCount = 0;
	cv->InPtr = 0;
	cv->OutBuffCount = 0;
	cv->OutPtr = 0;
	cv->HWin = HW;
	cv->Ready = FALSE;
	cv->Open = FALSE;
	cv->PortType = ts->PortType;
	cv->ComPort = 0;
	cv->RetryCount = 0;
#ifndef NO_INET6
	cv->RetryWithOtherProtocol = TRUE;
#endif /* NO_INET6 */
	cv->s = INVALID_SOCKET;
	cv->ComID = INVALID_HANDLE_VALUE;
	cv->CanSend = TRUE;
	cv->RRQ = FALSE;
	cv->SendKanjiFlag = FALSE;
	cv->SendCode = IdASCII;
	cv->EchoKanjiFlag = FALSE;
	cv->EchoCode = IdASCII;
	cv->Language = ts->Language;
	cv->CRSend = ts->CRSend;
	cv->KanjiCodeEcho = ts->KanjiCode;
	cv->JIS7KatakanaEcho = ts->JIS7Katakana;
	cv->KanjiCodeSend = ts->KanjiCodeSend;
	cv->JIS7KatakanaSend = ts->JIS7KatakanaSend;
	cv->KanjiIn = ts->KanjiIn;
	cv->KanjiOut = ts->KanjiOut;
	cv->RussHost = ts->RussHost;
	cv->RussClient = ts->RussClient;
	cv->DelayFlag = TRUE;
	cv->DelayPerChar = ts->DelayPerChar;
	cv->DelayPerLine = ts->DelayPerLine;
	cv->TelBinRecv = FALSE;
	cv->TelBinSend = FALSE;
	cv->TelFlag = FALSE;
	cv->TelMode = FALSE;
	cv->IACFlag = FALSE;
	cv->TelCRFlag = FALSE;
	cv->TelCRSend = FALSE;
	cv->TelCRSendEcho = FALSE;
	cv->TelAutoDetect = ts->TelAutoDetect; /* TTPLUG */
	cv->Locale = ts->Locale;
	cv->locale = _create_locale(LC_ALL, cv->Locale);
	cv->CodePage = &ts->CodePage;
	cv->ConnetingTimeout = &ts->ConnectingTimeout;
	cv->LastSendTime = time(NULL);
	cv->LineModeBuffCount = 0;
	cv->Flush = FALSE;
	cv->FlushLen = 0;
	cv->TelLineMode = FALSE;

	if ((ts->PortType!=IdSerial) && (strlen(ts->HostName)==0))
	{
		PostMessage(cv->HWin, WM_USER_COMMNOTIFY, 0, FD_CLOSE);
		return;
	}

	switch (ts->PortType) {
		case IdTCPIP:
			cv->TelFlag = (ts->Telnet > 0);
			if (ts->EnableLineMode) {
				cv->TelLineMode = TRUE;
			}
			if (! LoadWinsock()) {
				if (cv->NoMsg==0) {
					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
					get_lang_msg("MSG_WINSOCK_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot use winsock", ts->UILanguageFile);
					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
				}
				InvalidHost = TRUE;
			}
			else {
				TTXOpenTCP(); /* TTPLUG */
				cv->Open = TRUE;
#ifndef NO_INET6
				/* resolving address */
				memset(&hints, 0, sizeof(hints));
				hints.ai_family = ts->ProtocolFamily;
				hints.ai_socktype = SOCK_STREAM;
				hints.ai_protocol = IPPROTO_TCP;
				_snprintf_s(pname, sizeof(pname), _TRUNCATE, "%d", ts->TCPPort);

				HAsync = PWSAAsyncGetAddrInfo(HW, WM_USER_GETHOST,
				                             ts->HostName, pname, &hints, &cv->res0);
				if (HAsync == 0)
					InvalidHost = TRUE;
				else {
					cv->ComPort = 1; // set "getting host" flag
					                 //  (see CVTWindow::OnSysCommand())
					do {
						if (GetMessage(&Msg,0,0,0)) {
							if ((Msg.hwnd==HW) &&
							    ((Msg.message == WM_SYSCOMMAND) &&
							     ((Msg.wParam & 0xfff0) == SC_CLOSE) ||
							     (Msg.message == WM_COMMAND) &&
							     (LOWORD(Msg.wParam) == ID_FILE_EXIT) ||
							     (Msg.message == WM_CLOSE))) { /* Exit when the user closes Tera Term */
								PWSACancelAsyncRequest(HAsync);
								CloseHandle(HAsync);
								HAsync = 0;
								cv->ComPort = 0; // clear "getting host" flag
								PostMessage(HW,Msg.message,Msg.wParam,Msg.lParam);
								return;
							}
							if (Msg.message != WM_USER_GETHOST) { /* Prosess messages */
								TranslateMessage(&Msg);
								DispatchMessage(&Msg);
							}
						}
						else {
							return;
						}
					} while (Msg.message!=WM_USER_GETHOST);
					cv->ComPort = 0; // clear "getting host" flag
					CloseHandle(HAsync);
					HAsync = 0;
					InvalidHost = WSAGETASYNCERROR(Msg.lParam) != 0;
				}
			} /* if (!LoadWinsock()) */

			if (InvalidHost) {
				if (cv->NoMsg==0) {
					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
					get_lang_msg("MSG_INVALID_HOST_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Invalid host", ts->UILanguageFile);
					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
				}
				goto BreakSC;
			}
			for (cv->res = cv->res0; cv->res; cv->res = cv->res->ai_next) {
				cv->s =  OpenSocket(cv);
				if (cv->s == INVALID_SOCKET) {
					CloseSocket(cv->s);
					continue;
				}
				/* start asynchronous connect */
				AsyncConnect(cv);
				break; /* break for-loop immediately */
			}
			break;
#else
	if ((ts->HostName[0] >= 0x30) && (ts->HostName[0] <= 0x39))
	{
	  addr = Pinet_addr(ts->HostName);
	  InvalidHost = (addr == 0xffffffff);
	}
	else {
	  HAsync = PWSAAsyncGetHostByName(HW,WM_USER_GETHOST,
	  ts->HostName,HEntBuff,sizeof(HEntBuff));
	  if (HAsync == 0)
	    InvalidHost = TRUE;
	  else {
	    cv->ComPort = 1; // set "getting host" flag
			     //  (see CVTWindow::OnSysCommand())
	    do {
	      if (GetMessage(&Msg,0,0,0))
	      {
		if ((Msg.hwnd==HW) &&
		    ((Msg.message == WM_SYSCOMMAND) &&
		     ((Msg.wParam & 0xfff0) == SC_CLOSE) ||
		     (Msg.message == WM_COMMAND) &&
		     (LOWORD(Msg.wParam) == ID_FILE_EXIT) ||
		     (Msg.message == WM_CLOSE)))
		{ /* Exit when the user closes Tera Term */
		  PWSACancelAsyncRequest(HAsync);
		  HAsync = 0;
		  cv->ComPort = 0; // clear "getting host" flag
		  PostMessage(HW,Msg.message,Msg.wParam,Msg.lParam);
		  return;
		}
		if (Msg.message != WM_USER_GETHOST)
		{ /* Prosess messages */
		  TranslateMessage(&Msg);
		  DispatchMessage(&Msg);
		}
	      }
	      else {
		return;
	      }
	    } while (Msg.message!=WM_USER_GETHOST);
	    cv->ComPort = 0; // clear "getting host" flag
	    HAsync = 0;
	    InvalidHost = WSAGETASYNCERROR(Msg.lParam) != 0;
	    if (! InvalidHost)
	    {
	      if (((PHOSTENT)HEntBuff)->h_addr_list != NULL)
		memcpy(&addr,
		  ((PHOSTENT)HEntBuff)->h_addr_list[0],sizeof(addr));
	      else
		InvalidHost = TRUE;
	    }
	  }

	}

	if (InvalidHost)
	{
	  if (cv->NoMsg==0) {
	    get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
	    get_lang_msg("MSG_INVALID_HOST_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Invalid host", ts->UILanguageFile);
	    MessageBox(cv->HWin, ts->UIMsg, uimsg, MB_TASKMODAL | MB_ICONEXCLAMATION);
	  }
	}
	else {
	  cv->s= Psocket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	  if (cv->s==INVALID_SOCKET)
	  {
	    InvalidHost = TRUE;
	    if (cv->NoMsg==0) {
	      get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
	      get_lang_msg("MSG_COMM_TIMEOUT_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot connect the host", ts->UILanguageFile);
	      MessageBox(cv->HWin, ts->UIMsg, uimsg, MB_TASKMODAL | MB_ICONEXCLAMATION);
	    }
	  }
	  else {
	    BBuf = TRUE;
	    Psetsockopt(cv->s,(int)SOL_SOCKET,SO_OOBINLINE,(char FAR *)&BBuf,sizeof(BBuf));

	    PWSAAsyncSelect(cv->s,cv->HWin,WM_USER_COMMOPEN, FD_CONNECT);
	    saddr.sin_family = AF_INET;
	    saddr.sin_port = Phtons(ts->TCPPort);
	    saddr.sin_addr.s_addr = addr;
	    memset(saddr.sin_zero,0,8);

	    Err = Pconnect(cv->s,(LPSOCKADDR)&saddr,sizeof(saddr));
	    if (Err!=0 ) Err = PWSAGetLastError();
	    if (Err==WSAEWOULDBLOCK )
	    {
	      /* Do nothing */
	    }
	    else if (Err!=0 )
	      PostMessage(cv->HWin, WM_USER_COMMOPEN,0,
			  MAKELONG(FD_CONNECT,Err));
	  }
	}
      }
      break;
#endif /* NO_INET6 */

		case IdSerial:
			InitFileIO(IdSerial);  /* TTPLUG */
			TTXOpenFile(); /* TTPLUG */
			_snprintf_s(P, sizeof(P), _TRUNCATE, "COM%d", ts->ComPort);
			strncpy_s(ErrMsg, sizeof(ErrMsg),P, _TRUNCATE);
			strncpy_s(P, sizeof(P),"\\\\.\\", _TRUNCATE);
			strncat_s(P, sizeof(P),ErrMsg, _TRUNCATE);
			cv->ComID =
			PCreateFile(P,GENERIC_READ | GENERIC_WRITE,
			            0,NULL,OPEN_EXISTING,
			            FILE_FLAG_OVERLAPPED,NULL);
			if (cv->ComID == INVALID_HANDLE_VALUE ) {
				get_lang_msg("MSG_CANTOEPN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s", ts->UILanguageFile);
				_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]);

				if (cv->NoMsg==0) {
					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
					MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
				}
				InvalidHost = TRUE;
			}
			else {
				cv->Open = TRUE;
				cv->ComPort = ts->ComPort;
				CommResetSerial(ts, cv, ts->ClearComBuffOnOpen);
				if (!ts->ClearComBuffOnOpen) {
					cv->RRQ = TRUE;
				}

				/* notify to VT window that Comm Port is open */
				PostMessage(cv->HWin, WM_USER_COMMOPEN, 0, 0);
				InvalidHost = FALSE;

				SetCOMFlag(ts->ComPort);
			}
			break; /* end of "case IdSerial:" */

		case IdFile:
			InitFileIO(IdFile);  /* TTPLUG */
			TTXOpenFile(); /* TTPLUG */
			cv->ComID = PCreateFile(ts->HostName,GENERIC_READ,0,NULL,
			                        OPEN_EXISTING,0,NULL);
			InvalidHost = (cv->ComID == INVALID_HANDLE_VALUE);
			if (InvalidHost) {
				if (cv->NoMsg==0) {
					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
					get_lang_msg("MSG_CANTOEPN_FILE_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open file", ts->UILanguageFile);
					MessageBox(cv->HWin,ts->UIMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
				}
			}
			else {
				cv->Open = TRUE;
				PostMessage(cv->HWin, WM_USER_COMMOPEN, 0, 0);
			}
			break;

		case IdNamedPipe:
			InitFileIO(IdNamedPipe);  /* TTPLUG */
			TTXOpenFile(); /* TTPLUG */
			
			memset(P, 0, sizeof(P));
			strncpy_s(P, sizeof(P), ts->HostName, _TRUNCATE);

			// 名前付きパイプが正しい書式かをチェックする。
			if (CheckNamedPipeFormat(P, strlen(P)) < 0) {
				InvalidHost = TRUE;

				_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, 
					"Invalid pipe name\n\n"
					"A valid pipe name has the form\n"
					"\"\\\\<ServerName>\\pipe\\<PipeName>\"", 
					GetLastError());
				get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
				MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
				break;
			}

			cv->ComID =
			PCreateFile(P,GENERIC_READ | GENERIC_WRITE,
			            0,NULL,OPEN_EXISTING,
			            0,  // ブロッキングモードにする(FILE_FLAG_OVERLAPPED は指定しない)
						NULL);
			if (cv->ComID == INVALID_HANDLE_VALUE ) {
				get_lang_msg("MSG_CANTOEPN_ERROR", ts->UIMsg, sizeof(ts->UIMsg), "Cannot open %s", ts->UILanguageFile);
				_snprintf_s(ErrMsg, sizeof(ErrMsg), _TRUNCATE, ts->UIMsg, &P[4]);

				if (cv->NoMsg==0) {
					get_lang_msg("MSG_TT_ERROR", uimsg, sizeof(uimsg), "Tera Term: Error", ts->UILanguageFile);
					MessageBox(cv->HWin,ErrMsg,uimsg,MB_TASKMODAL | MB_ICONEXCLAMATION);
				}
				InvalidHost = TRUE;
			}
			else {
				cv->Open = TRUE;
				PostMessage(cv->HWin, WM_USER_COMMOPEN, 0, 0);
				InvalidHost = FALSE;
			}
			break; /* end of "case IdNamedPipe:" */

	} /* end of "switch" */
コード例 #16
0
ファイル: telnet.c プロジェクト: FarazShaikh/LikewiseSMB2
/*
 * FUNCTION: MainWndProc(HWND, UINT, WPARAM, LPARAM)
 *
 * PURPOSE:  Processes messages
 *
 * MESSAGES:
 *
 * WM_COMMAND    - application menu (About dialog box)
 * WM_DESTROY    - destroy window
 */
LRESULT CALLBACK
MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  HGLOBAL hBuffer;
  LPSTR lpBuffer; 
  int iEvent, cnt, ret;
  char *tmpCommaLoc;
  struct sockaddr_in remote_addr;
  struct hostent *remote_host;
	
  switch (message) {
  case WM_MYSCREENCHANGEBKSP:
    if (!con)
      break;
    con->backspace = wParam;
    if (con->backspace == VK_BACK) {
      con->ctrl_backspace = 0x7f;
      WritePrivateProfileString(INI_TELNET, INI_BACKSPACE, 
				INI_BACKSPACE_BS, TELNET_INI);
    }
    else {
      con->ctrl_backspace = VK_BACK;
      WritePrivateProfileString(INI_TELNET, INI_BACKSPACE, 
				INI_BACKSPACE_DEL, TELNET_INI);
    }
    GetPrivateProfileString(INI_HOSTS, INI_HOST "0", "", buf, 128, TELNET_INI);
    tmpCommaLoc = strchr(buf, ',');
    if (tmpCommaLoc == NULL) {
      strcat (buf, ",");
      tmpCommaLoc = strchr(buf, ',');
    }
    if (tmpCommaLoc) {
      tmpCommaLoc++;
      if (con->backspace == VK_BACK)
	strcpy(tmpCommaLoc, INI_HOST_BS);
      else
	strcpy(tmpCommaLoc, INI_HOST_DEL);
    }
    WritePrivateProfileString(INI_HOSTS, INI_HOST "0", buf, TELNET_INI);
    break;

  case WM_MYSCREENCHAR:
    {
      unsigned char c;

      if (!con)
	break;
      if (wParam == VK_BACK)
	c = con->backspace;
      else if (wParam == 0x7f)
	c = con->ctrl_backspace;
      else if (wParam == VK_SPACE && GetKeyState(VK_CONTROL) < 0)
	c = 0;
      else
	c = wParam;
      TelnetSend(con->ks, &c, 1, 0);
    }
  break;

  case WM_MYCURSORKEY:
    /* Acts as a send through: buffer is lParam and length in wParam */
    if (!con)
      break;
    memcpy(buf, (char *)lParam, wParam);
    TelnetSend (con->ks, buf, wParam, 0);
    break;

  case WM_MYSCREENBLOCK:
    if (!con)
      break;
    hBuffer = (HGLOBAL) wParam;
    lpBuffer = GlobalLock(hBuffer);
    TelnetSend(con->ks, lpBuffer, lstrlen(lpBuffer), 0);
    GlobalUnlock(hBuffer);
    break;

  case WM_MYSCREENCLOSE:
#if 0
    if (con)
    {
	kstream_destroy(con->ks);
	con->ks = NULL;
    }
#endif
    DestroyWindow(hWnd);
    break;        

  case WM_QUERYOPEN:
    return(0);
    break;

  case WM_DESTROY:          /* message: window being destroyed */
    if (con)
    {
	kstream_destroy(con->ks);
	free(con);
	WSACleanup();
    }
    PostQuitMessage(0);
    break;

  case WM_NETWORKEVENT: 
    iEvent = WSAGETSELECTEVENT(lParam);

    switch (iEvent) {    	

    case FD_READ:
      if (con == NULL)
	break;
      cnt = kstream_read(con->ks, buf, 1500);
      buf[cnt] = 0;
      parse((CONNECTION *)con, (unsigned char *)buf, cnt);
      ScreenEm(buf, cnt, con->pScreen);
      break;

    case FD_CLOSE:
      kstream_destroy(con->ks);
      free(con);
      con = NULL;
      WSACleanup();
      PostQuitMessage(0);
      break;

    case FD_CONNECT:
      ret = WSAGETSELECTERROR(lParam);
      if (ret) {
	wsprintf(buf, "Error %d on Connect", ret);
	MessageBox(NULL, buf, NULL, MB_OK | MB_ICONEXCLAMATION);
	kstream_destroy(con->ks);
	free(con);
	WSACleanup();
	PostQuitMessage(0);
	break;
      }
      start_negotiation(con->ks);
      break;		
    }

    break;  	        

  case WM_HOSTNAMEFOUND:
    ret = WSAGETASYNCERROR(lParam);
    if (ret) {
      wsprintf(buf, "Error %d on GetHostbyName", ret);
      MessageBox(NULL, buf, NULL, MB_OK | MB_ICONEXCLAMATION);
      kstream_destroy(con->ks);
      free(con);
      WSACleanup();
      PostQuitMessage(0);
      break;
    }

    remote_host = (struct hostent *)hostdata;
    remote_addr.sin_family = AF_INET;
    memcpy(&(remote_addr.sin_addr), &(remote_host->h_addr[0]), 4);
    remote_addr.sin_port = htons(port_no);

    connect(con->socket, (struct sockaddr *)&remote_addr, sizeof(struct sockaddr));
    break;

  case WM_MYSCREENSIZE:
    con->width = LOWORD(lParam);		/* width in characters */
    con->height = HIWORD(lParam);		/* height in characters */
    if (con->bResizeable && con->ks)
      send_naws(con);
    wsprintf(buf, "%d", con->height);
    WritePrivateProfileString(INI_TELNET, INI_HEIGHT, buf, TELNET_INI);
    wsprintf(buf, "%d", con->width);
    WritePrivateProfileString(INI_TELNET, INI_WIDTH, buf, TELNET_INI);
    break;
		
  default:              		/* Passes it on if unproccessed */
    return(DefWindowProc(hWnd, message, wParam, lParam));
  }
  return (0);
}
コード例 #17
0
ファイル: wsdata.c プロジェクト: chunhualiu/OpenNT
BOOL
WWS32PostAsyncGetHost (
    HWND hWnd,
    UINT Msg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    PWINSOCK_ASYNC_CONTEXT_BLOCK context;
    BOOL ret;
    PVOID buffer16;
    DWORD bytesRequired;

    context = WWS32FindAndRemoveAsyncContext( (HANDLE)wParam );
    ASSERT( context != NULL );

    //
    // If the call was successful, copy the 32-bit buffer to the
    // 16-bit buffer specified by the application.
    //

    if ( WSAGETASYNCERROR( lParam ) == 0 ) {

        //
        // Copy the 32-bit structure to 16-bit buffer.
        //

        GETVDMPTR( context->vBuffer16, context->Buffer16Length, buffer16 );

        bytesRequired = CopyHostent32To16(
                            buffer16,
                            context->vBuffer16,
                            context->Buffer16Length,
                            context->Buffer32
                            );

        //
        // If the application's buffer was too small, return an error
        // and information aqbout the buffer size required.
        //

        if ( bytesRequired > context->Buffer16Length ) {
            lParam = WSAMAKEASYNCREPLY( (WORD)bytesRequired, WSAENOBUFS );
        }
    }

    //
    // Post the completion message to the 16-bit application.
    //

    ret = PostMessage(
              hWnd,
              Msg >> 16,
              context->AsyncTaskHandle16,
              lParam
              );

    //
    // Free resources and return.
    //

    free_w( context->Buffer32 );
    free_w( (PVOID)context );

    return ret;

} // WWS32PostAsyncGetHost
コード例 #18
0
ファイル: s_bsd_win32.c プロジェクト: ahf/oftc-hybrid
/*
 * Handler for Win32 messages.
 */
static LRESULT CALLBACK
hybrid_wndproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch (uMsg)
  {
    case WM_SOCKET:
    {
      fde_t *F = lookup_fd((int) wParam);
      PF *hdl;

      if (F != NULL && F->flags.open)
        switch (WSAGETSELECTEVENT(lParam))
	{
	  case FD_ACCEPT:
	  case FD_CLOSE:
	  case FD_READ:
	    if ((hdl = F->read_handler) != NULL)
	    {
	      F->read_handler = NULL;
              hdl(F, F->read_data);
	      if (F->flags.open)
	        comm_setselect(F, 0, NULL, NULL, 0);
	    }
	    break;

          case FD_CONNECT:
          case FD_WRITE:
	    if ((hdl = F->write_handler) != NULL)
	    {
	      F->write_handler = NULL;
	      hdl(F, F->write_data);
	      if (F->flags.open)
	        comm_setselect(F, 0, NULL, NULL, 0);
	    }
        }

      return 0;
    }

    case WM_DNS:
    {
      dlink_node *ptr;

      DLINK_FOREACH(ptr, dns_queries.head)
        if (((struct DNSQuery *) ptr->data)->handle == wParam)
	{
	  struct DNSQuery *query = ptr->data;
	  struct DNSReply *reply = NULL;

          dlinkDelete(&query->node, &dns_queries);

          if (WSAGETASYNCERROR(lParam) == 0)
	  {
	    struct hostent *h = (struct hostent *) &query->reply;
	    static struct DNSReply _reply;
	    reply = &_reply;

            reply->h_name = h->h_name;
	    reply->addr.ss.ss_family = h->h_addrtype;

	    switch (h->h_addrtype)
	    {
	      case AF_INET:
	        memcpy(&((struct sockaddr_in *) &reply->addr)->sin_addr,
		       h->h_addr_list[0], h->h_length);
		break;

#ifdef IPV6
              case AF_INET6:
	        memcpy(&((struct sockaddr_in6 *) &reply->addr)->sin6_addr,
		       h->h_addr_list[0], h->h_length);
		break;
#endif

              default:  /* shouldn't happen */
	        reply = NULL;
	    }
	  }

          query->callback(query->ptr, reply);
	  return 0;
	}

      return 0;
    }

    case WM_REHASH:
      dorehash = 1;
      return 0;

    case WM_REMOTD:
      doremotd = 1;
      return 0;

    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;

    default:
      return DefWindowProc(hwnd, uMsg, wParam, lParam);
  }
}
コード例 #19
0
LONG CHiddenFrame::OnFoundDNS(WPARAM wParam, LONG lParam) 
{
	int iError = WSAGETASYNCERROR(lParam);

	//  Go through the DNS cache, find the correct task ID.
	//  The find should always be successful.
    //  Be sure to initalize values.
	POSITION pos = NULL;
	CString key;
	CDNSObj *obj = NULL;
	int i_found = 0;
	LONG return_value = 1;

	for(pos = DNSCacheMap.GetStartPosition(); pos != NULL;) {
		DNSCacheMap.GetNextAssoc(pos, key, (CObject *&)obj);
                
		if(!obj)
			return return_value;
		// Since the handle is not unique for the session only
		// compare handles that are currently in use (i.e. active entries)
		if(!obj->i_finished && obj->m_handle == (HANDLE)wParam) {
	  		i_found = 1;
	  		break;
		}

        //  Clear out object if we didn't break.
        //  That way we don't retain value if we leave the loop.
        obj = NULL;
	}

	if(!obj)
		return return_value;
  
	TRACE("%s error=%d h_name=%d task=%d\n", obj->m_host, iError,
		(obj->m_hostent->h_name != NULL) ? 1 : 0, obj->m_handle);

	//  If by chance we couldn't find it, we have a problem.
	//
	ASSERT(i_found == 1);

	/* temp fix */
	if(!i_found)
		return return_value;

	//  Mark this as completed.
	//
	obj->i_finished = 1;
  
	//  If there was an error, set it.
	if (iError) {
		TRACE("DNS Lookup failed! \n"); 
		obj->m_iError = iError;
		return_value = 0;
	}
  	
	/* call ProcessNet for each socket in the list */
	/* use a for loop so that we don't reference the "obj"
	 * after our last call to processNet.  We need to do
	 * this because the "obj" can get free'd by the call
	 * chain after all the sockets have been removed from
	 * sock_list
	 */
	PRFileDesc *tmp_sock;
	int count = XP_ListCount(obj->m_sock_list);
	for(; count; count--) {

		tmp_sock = (PRFileDesc *) XP_ListRemoveTopObject(obj->m_sock_list);

		//    Make sure we call into the Netlib on this socket in particular,
		//    	NET_SOCKET_FD type.
        OnForceIOSelect((WPARAM)SocketSelect, (LPARAM)tmp_sock);
	}

	return(return_value);
}
コード例 #20
0
ファイル: ServerSocket.cpp プロジェクト: BeL1kOFF/SHATE
void CServerSocet::AddClient(LPARAM lParam)
{
	try
	{
		if (sokClientSocket == NULL)
		{
			WriteToLog(_T("Не инициализированы клиенты"));
			return;
		}

		int i;
		i=0;
	
		while (sokClientSocket[i]!=NULL)
		{
			if(sokClientSocket[i]->sUserIP != _T(""))
				i++;
			else
				break;
		}

		if (i >= iMaxCol)
		{
			WriteToLog(_T("Привышенно колличество клиентов!"));
			return;	
		}

		
		
		if (WSAGETASYNCERROR(lParam))
		{
			return;
		}

		if (WSAGETSELECTEVENT(lParam) == FD_ACCEPT)
		{
			int length=sizeof(SOCKADDR);
			SOCKADDR_IN socketclientaddr;	

			if(sokClientSocket[i]->sok == NULL)
			{
				sokClientSocket[i]->sok = new SOCKET;
			}
			*sokClientSocket[i]->sok=accept(sokServerSocket,(LPSOCKADDR)&socketclientaddr, (LPINT) &length);
			socketclientaddr.sin_addr;
		
			CString sIP;
			sIP=inet_ntoa(socketclientaddr.sin_addr);
			int j=0;
			while(iMaxCol>j)
			{
				if(sokClientSocket[j]->sUserIP == sIP)
				{
					if(sokClientSocket[j]->dBase != NULL)
					{
						if(sokClientSocket[j]->dBase->IsOpen())
							sokClientSocket[j]->dBase->Close();
						delete(sokClientSocket[j]->dBase);
						sokClientSocket[j]->dBase = NULL;
					}

					if(sokClientSocket[j]->hThread != 0)
					{
						TerminateThread(sokClientSocket[j]->hThread,0);
					}

					if(sokClientSocket[j]->sok != NULL)
					{
						shutdown(*sokClientSocket[j]->sok, 0);
						LINGER linger = { 1, 0 };
						setsockopt(*sokClientSocket[j]->sok, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(linger));
						closesocket(*sokClientSocket[j]->sok);
						delete(sokClientSocket[j]->sok);
						sokClientSocket[j]->sok = NULL;
					}
					sokClientSocket[j]->sUserIP = _T("");
				}
				j++;
			}

			sokClientSocket[i]->sUserIP = sIP;
			if (*sokClientSocket[i]->sok == INVALID_SOCKET)
			{
				return;
			}

			DWORD dwThreadID; 
			CurrSocet* stCurrSocet;
			stCurrSocet = new CurrSocet;
			stCurrSocet->sSocet = this;
			stCurrSocet->CurrPos = i;
			
			if(sokClientSocket[i]->dBase == NULL)
				sokClientSocket[i]->dBase = new(CDatabase);
			sokClientSocket[i]->hThread = CreateThread (NULL, NULL, (LPTHREAD_START_ROUTINE)*m_ClientTread, (void*)stCurrSocet, NULL, &dwThreadID); 
		}
	}
	catch(CException *except)
	{
		CString sError;
		except->GetErrorMessage((LPTSTR)&sError,255,0);
		except->Delete();
		WriteToLog(sError);
	}
}
コード例 #21
0
ファイル: interface.c プロジェクト: Shaijan/Meridian59
long WINAPI InterfaceWindowProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
{
	char buf[40];
	
	switch (message)
	{
	case WM_CREATE :
		InterfaceCreate(hwnd,wParam,lParam);
		break;
		
		HANDLE_MSG(hwnd,WM_COMMAND,InterfaceCommand);
		
	case WM_DESTROY :
		SetQuit();
		PostQuitMessage(0);
		return 0;
		
	case WM_CLOSE :
		if (MessageBox(hwnd,"Are you sure you want to exit?",BlakServNameString(),
			MB_YESNO | MB_DEFBUTTON2 | MB_ICONQUESTION) == IDYES)
		{
			DestroyWindow(hwnd);
		}
		break;
		
	case WM_TIMER :
		KillTimer(hwndMain,WIN_TIMER_ID);
		SendDlgItemMessage(hwndMain,IDS_STATUS_WINDOW,SB_SETTEXT,0,(LPARAM)"");
		break;
		
	case WM_NOTIFY: 
		switch (((LPNMHDR) lParam)->code)
		{	 
		case TTN_NEEDTEXT: 
			{ 
				LPTOOLTIPTEXT lpttt; 
				
				lpttt = (LPTOOLTIPTEXT) lParam; 
				lpttt->hinst = hInst; 
				
				/* Specify the resource identifier of the descriptive 
				text for the given button. */
				switch (lpttt->hdr.idFrom)
				{ 
				case IDM_FILE_EXIT : 
					lpttt->lpszText = "Exit";
					break; 
				case IDM_FILE_SAVE :
					lpttt->lpszText = "Save Game";
					break; 
				case IDM_FILE_RELOADSYSTEM :
					lpttt->lpszText = "Reload System";
					break; 
				case IDM_MESSAGES_MESSAGEOFTHEDAY :
					lpttt->lpszText = "Message of the Day";
					break;
				case IDM_HELP_ABOUT :
					lpttt->lpszText = "About";
					break; 
				} 
				break;
			} 
			break;
			
		case TCN_SELCHANGE :
			InterfaceTabChange();
			break;
		case TCN_SELCHANGING :
			return FALSE; /* means we'll allow it to change */
			break;
			
		}
		break;
		
		case WM_BLAK_NEW_INFO :
			InterfaceDrawText(hwnd);
			break;
			
		case WM_BLAK_LOGON :
			sessions_logged_on++;
			/*
			sprintf(buf,"Connections: %i",sessions_logged_on);
			SetDlgItemText(HWND_STATUS,IDC_CONNECTIONS_BORDER,buf);
			*/
			sprintf(buf,"%3i",sessions_logged_on);
			SendDlgItemMessage(hwndMain,IDS_STATUS_WINDOW,SB_SETTEXT,1,(LPARAM)buf);
			
			InterfaceAddList(lParam);
			break;
			
		case WM_BLAK_LOGOFF :
			sessions_logged_on--;
			if (sessions_logged_on < 0)
				eprintf("InterfaceWindowProc sessions_logged_on just went negative!\n");
				/*
				sprintf(buf,"Connections: %i",sessions_logged_on);
				SetDlgItemText(HWND_STATUS,IDC_CONNECTIONS_BORDER,buf);
			*/
			sprintf(buf,"%3i",sessions_logged_on);
			SendDlgItemMessage(hwndMain,IDS_STATUS_WINDOW,SB_SETTEXT,1,(LPARAM)buf);
			
			InterfaceRemoveList(lParam);
			
			break;
			
		case WM_BLAK_UPDATE_SESSION :
			InterfaceUpdateList(lParam);
			break;
			
		case WM_BLAK_UPDATE_CHANNEL :
			InterfaceCheckChannels();
			break;
			
		case WM_BLAK_UPDATE_ADMIN :
			InterfaceUpdateAdmin();
			break;
			
		case WM_BLAK_SIGNAL_CONSOLE :
			if (PlaySound("signal",hInst,SND_RESOURCE | SND_ASYNC) == FALSE)
			{
				MessageBeep(MB_OK);
				break;
			}
			FlashWindow(hwnd,TRUE);
			Sleep(200);
			FlashWindow(hwnd,TRUE);
			break;
			
		case WM_BLAK_SOCKET_ACCEPT :
			AsyncSocketAccept(wParam,WSAGETSELECTEVENT(lParam),WSAGETSELECTERROR(lParam),
				SOCKET_PORT);
			break;
			
		case WM_BLAK_SOCKET_MAINTENANCE_ACCEPT :
			AsyncSocketAccept(wParam,WSAGETSELECTEVENT(lParam),WSAGETSELECTERROR(lParam),
				SOCKET_MAINTENANCE_PORT);
			break;
			
		case WM_BLAK_SMTP_SOCKET_ACCEPT :
			AsyncSMTPSocketAccept(wParam,WSAGETSELECTEVENT(lParam),WSAGETSELECTERROR(lParam));
			break;
			
		case WM_BLAK_SOCKET_NAME_LOOKUP :
			AsyncNameLookup((HANDLE)wParam,WSAGETASYNCERROR(lParam));
			break;
			
		case WM_BLAK_SOCKET_SELECT :
			AsyncSocketSelect(wParam,WSAGETSELECTEVENT(lParam),WSAGETSELECTERROR(lParam));
			break;
			
		default :
			return DefWindowProc(hwnd,message,wParam,lParam);    
   }
   return TRUE;
}
コード例 #22
0
ファイル: casynnet.cpp プロジェクト: muromec/qtopia-ezx
//	Message handler for PWM_ASYNC_DNS
//	Notifies the client win_net object that DNS has completed or
//	returned w/ an error.
LRESULT CAsyncSockN::OnAsyncDNS(WPARAM wParam, LPARAM lParam)
{
    void*	    handle	= (void*) (HANDLE) wParam;
    void*	    pVoid	= 0;
    win_net*	    pClient	= 0;
    DNS_REQUEST*    pDNSRequest	= NULL;

    // Bail if the client map has been previously deleted, this
    // is a sure sign of us already being cleaned up!
    if(!m_ClientHandlesMap)
    {
	return(TRUE);
    }

    DEBUGOUTSTR( "AsyncDNS come back\r\n" );

    // Based on the handle returned, find our client!
    // Note it might be missing from the map if we canceled
    // the DNS!
    if (m_ClientHandlesMap->Lookup(handle, pVoid))
    {
	*((ULONG32 *)&pClient) = (ULONG32)pVoid;

	// We should already have an async operation active on this socket!
#ifdef _DEBUG
	if ((void *)pClient->m_hAsyncHandle != handle)
	{
	    char szMessage[256]; /* Flawfinder: ignore */
	    sprintf(szMessage,"pClient->m_hAsyncHandle = %#lx\nhandle = %#lx", /* Flawfinder: ignore */
				pClient->m_hAsyncHandle,
				handle
			    );
	    MessageBox(NULL,szMessage,"Oops!",MB_OK);
	}
	HX_ASSERT((void *)pClient->m_hAsyncHandle == handle);
#endif

	// Tell win_net object to forget the Async handle
	pClient->m_hAsyncHandle = NULL;

	pClient->CB_DNSComplete(!WSAGETASYNCERROR(lParam));

	// If async DNS is done, then we can forget the Async handle
	if (m_ClientHandlesMap->RemoveKey(handle))
	{
	    DecrementHandlesClientCount();
	}
    }

#ifdef _DEBUG
    if (m_ClientHandlesMap->GetCount() != m_cbNumHandlesClients)
    {
	char szMessage[256]; /* Flawfinder: ignore */
	sprintf(szMessage,"m_ClientHandlesMap->GetCount() = %d\nm_cbNumHandlesClients = %d", /* Flawfinder: ignore */
			    m_ClientHandlesMap->GetCount(),
			    m_cbNumHandlesClients
			);
	MessageBox(NULL,szMessage,"Oops!",MB_OK);
    }
    HX_ASSERT(m_ClientHandlesMap->GetCount() == m_cbNumHandlesClients);
#endif

    if (sockGlobals.m_bWinSock2Suck)
    {
	pDNSRequest = (DNS_REQUEST*) sockGlobals.m_DNSQueue.RemoveHead();
	HX_DELETE(pDNSRequest);
    }

    // check to see if we are still in use.
    CheckClients();
    return (TRUE);
}
コード例 #23
0
ファイル: AsyncSocket.cpp プロジェクト: cotodama/NicoJK
// ウィンドウメッセージを処理してデータを受信する
// 受信データはrecvBufに追記される
// 戻り値: 負値=切断した(-2=正常,-1=中断), 0=正常に処理した
int CAsyncSocket::ProcessRecv(WPARAM wParam, LPARAM lParam, std::vector<char> *recvBuf)
{
	UINT imAddr = INADDR_NONE;

	if (bReady_) {
		// 待機中
		if (wParam || lParam) {
			return 0;
		}
		bReady_ = false;
		if (bShutdown_) {
			bShutdown_ = false;
			return -1;
		}
		if ((imAddr = inet_addr(name_)) == INADDR_NONE) {
			hGethost_ = WSAAsyncGetHostByName(hwnd_, msg_, name_, hostBuf_, sizeof(hostBuf_));
			return hGethost_ ? 0 : -1;
		}
		// IPアドレス即値(名前解決を省略)

	} else if (hGethost_) {
		// 名前解決中
		bool bValid = wParam == (WPARAM)hGethost_ && WSAGETASYNCERROR(lParam) == 0;
		hGethost_ = NULL;
		if (bShutdown_) {
			bShutdown_ = false;
			return -1;
		}
		if (!bValid || (imAddr = *(UINT*)((HOSTENT*)hostBuf_)->h_addr) == INADDR_NONE) {
			return -1;
		}
	}

	if (imAddr != INADDR_NONE) {
		// 接続
		if ((soc_ = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
			return -1;
		}
		WSAAsyncSelect(soc_, hwnd_, msg_, FD_WRITE | FD_READ | FD_CLOSE);
		struct sockaddr_in addr = {0};
		addr.sin_family = AF_INET;
		addr.sin_addr.s_addr = imAddr;
		addr.sin_port = htons(port_);
		if (connect(soc_, (struct sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK) {
			closesocket(soc_);
			soc_ = INVALID_SOCKET;
			return -1;
		}
		return 0;
	}

	if (soc_ != INVALID_SOCKET) {
		// 送受信中
		if (wParam == (WPARAM)soc_) {
			switch(WSAGETSELECTEVENT(lParam)) {
			case FD_WRITE:
				if (!bShutdown_) {
					while (!sendBuf_.empty()) {
						int wrote = send(soc_, &sendBuf_.front(), (int)sendBuf_.size(), 0);
						if (wrote == SOCKET_ERROR) {
							// WSAEWOULDBLOCK時はつぎのFD_WRITEに先送り
							if (WSAGetLastError() != WSAEWOULDBLOCK) {
								Shutdown();
							}
							break;
						}
						sendBuf_.erase(sendBuf_.begin(), sendBuf_.begin() + wrote);
					}
					if (sendBuf_.empty() && !bKeepSession_ && bDoHalfClose_) {
						// ハーフクローズ
						// Bitdefender環境で受信が中断する不具合を確認(2013-10-28)
						shutdown(soc_, SD_SEND);
					}
				}
				return 0;
			case FD_READ:
				for (;;) {
					char buf[2048];
					int read = recv(soc_, buf, sizeof(buf), 0);
					if (read == SOCKET_ERROR || read <= 0) {
						// FD_CLOSEで拾うので無視
						return 0;
					}
					recvBuf->insert(recvBuf->end(), &buf[0], &buf[read]);
				}
				break;
			case FD_CLOSE:
				if (WSAGETSELECTERROR(lParam) != 0) {
					Close();
					return -1;
				}
				for (;;) {
					char buf[2048];
					int read = recv(soc_, buf, sizeof(buf), 0);
					if (read == SOCKET_ERROR || read <= 0) {
						Close();
						return read == 0 ? -2 : -1;
					}
					recvBuf->insert(recvBuf->end(), &buf[0], &buf[read]);
				}
				break;
			}
		}
		return 0;
	}
	return -1;
}