void CTcpClientDlg::OnGetSource() 
{
	 CSocket s;
	 
	 if(!s.Create()) {
		 AfxMessageBox("소켓 생성 실패");
		 return;
	 }

	 if(!s.Connect("www.google.com", 80)) {
		 AfxMessageBox("접속 실패!");
		 return ;
	 }

	 //GET 명령으로 데이터를 얻어옴
	 //GET 명령 형식 : GET 대상URL HTTP/1.0 <enter><enter>
	 char * cmd = "GET / HTTP/1.0\r\n\r\n";

	 s.Send(cmd, strlen(cmd));

	 char buf[100];
	 ZeroMemory(buf, 100);
	 while(s.Receive(buf, 1000)) {
		 AfxMessageBox(buf);
		 ZeroMemory(buf, 1000);
	 }
}
Exemplo n.º 2
0
/**
 * listens and accepts connections on the server
 */
BOOL maliciousot::ConnectionManagerServer::setup_connection() {
    
    int num_connections = m_num_of_threads+1;

    cerr << "ConnectionManagerServer->setup_connection() started." << endl;
    
    // try to bind() and then listen
    if ((!m_sockets[0].Socket()) || 
	(!m_sockets[0].Bind(m_port, m_address)) ||
	(!m_sockets[0].Listen()) ) {
	goto listen_failure;
    }
    
    for(int i = 0; i<num_connections; i++) { //twice the actual number, due to double sockets for OT
	CSocket sock;
      
	// try: CSocket sock = accept()
	if(!m_sockets[0].Accept(sock)) {
	    cerr << "Error in accept" << endl;
	    goto listen_failure;
	}

	// cerr << "Server: accept succeded i = " << i << endl;
    
	// receive the other side thread id (the first thing that is sent on the socket)
	UINT threadID;
	sock.Receive(&threadID, sizeof(int));

	// cerr << "Server: received threadID = " << threadID << endl;
    
	// ??
	if(threadID >= num_connections) {
	    // cerr << "Server: threadID >= num_connections, num_connections = " << num_connections << endl;
	    sock.Close();
	    i--;
	    continue;
	}

	// locate the socket appropriately
	// cerr << "Server: attaching socket to threadID = " << threadID << endl;
	m_sockets[threadID].AttachFrom(sock);
	sock.Detach();
    }

    cerr << "ConnectionManagerServer->setup_connection() ended." << endl;
    
    return TRUE;

 listen_failure:
    cerr << "Listen failed" << endl;
    return FALSE;
}
Exemplo n.º 3
0
BOOL Listen() {
#ifndef BATCH
    cout << "Listening: " << m_nAddr << ":" << m_nPort
         << ", with size: " << m_nNumOTThreads << endl;
#endif
    if (!m_vSocket->Socket()) {
        goto listen_failure;
    }
    if (!m_vSocket->Bind(m_nPort, m_nAddr)) {
        goto listen_failure;
    }
    if (!m_vSocket->Listen()) {
        goto listen_failure;
    }

    for (int i = 0; i < 1;
         i++) // twice the actual number, due to double sockets for OT
    {
        CSocket sock;
        // cout << "New round! " << endl;
        if (!m_vSocket->Accept(sock)) {
            cerr << "Error in accept" << endl;
            goto listen_failure;
        }

        UINT threadID;
        sock.Receive(&threadID, sizeof(int));

        if (threadID >= 1) {
            sock.Close();
            i--;
            continue;
        }

#ifndef BATCH
        cout << " (" << m_nPID << ") (" << threadID << ") connection accepted"
             << endl;
#endif
        // locate the socket appropriately
        m_vSocket->AttachFrom(sock);
        sock.Detach();
    }

#ifndef BATCH
    cout << "Listening finished" << endl;
#endif
    return TRUE;

listen_failure:
    cout << "Listen failed" << endl;
    return FALSE;
}
Exemplo n.º 4
0
uint32_t set_up_parameters(role_type role, uint32_t myneles, uint32_t* mybytelen,
	uint8_t** elements, uint8_t** pelements, CSocket& sock, crypto* crypt) {

	uint32_t pneles, nintersections, offset;

	//Exchange meta-information and equalize byte-length
	sock.Send(&myneles, sizeof(uint32_t));
	sock.Receive(&pneles, sizeof(uint32_t));

	if(role == SERVER) {
		sock.Send(mybytelen, sizeof(uint32_t));
	} else {
		sock.Receive(mybytelen, sizeof(uint32_t));
	}
	*elements = (uint8_t*) malloc(myneles * *mybytelen);
	*pelements = (uint8_t*) malloc(pneles * *mybytelen);

	crypt->gen_rnd(*elements, myneles * *mybytelen);

	//Exchange elements for later check
	if(role == SERVER) {
		sock.Send(*elements, myneles * *mybytelen);
		sock.Receive(*pelements, pneles * *mybytelen);
	} else { //have the client use some of the servers values s.t. the intersection is not disjoint
		sock.Receive(*pelements, pneles * *mybytelen);
		nintersections = rand() % min(myneles, pneles);
		offset = myneles / nintersections;

		for(uint32_t i = 0; i < nintersections; i++) {
			memcpy(*elements + i * offset * *mybytelen, *pelements + i * *mybytelen, *mybytelen);
		}
		sock.Send(*elements, myneles * *mybytelen);
	}

	return pneles;
}
Exemplo n.º 5
0
BOOL CServerSocket::RecvData(CSocket& client,
											BYTE* pData, long nLen)
{
	BYTE* pTmpData=pData;
  long nLeft=nLen;//剩余的还没有的接收的数据的长度
	while (nLeft>0)
	{
		int nRecv=client.Receive(pTmpData,nLeft);
		if (nRecv==SOCKET_ERROR)
		{
			return FALSE;
		}
		nLeft-=nRecv;
    pTmpData+=nRecv;
	}
	return TRUE;
}
Exemplo n.º 6
0
void main()
{
	AfxSocketInit();
	CSocket sock;
	int n = sock.Create(PORT1);
	if(!n)
	{
		cout << "创建句柄失败:" << GetLastError() << endl;
		return;
	}
	sock.Listen();

	while (true)
	{
		
		CSocket socka;
		n = sock.Accept(socka);
		if(!n)
		{
			cout << "接受对方连接失败:" << GetLastError() << endl;
			return;
		}
		while (true)
		{
			char s[256];
			n = socka.Receive(s,sizeof(s));
			if(SOCKET_ERROR == n)
			{
				cout << "接收数据失败:" << GetLastError() << endl;
				break;
			}
			if(!n)
			{
				cout << "结束接收数据,句柄关闭!" << endl;
				break;
			}
			cout << s <<endl;
		}
		socka.Close();

	}
}
Exemplo n.º 7
0
BOOL CServerSocket::RecvData(CSocket & client, 
							 BYTE* pData,DWORD nLen)
{
   LPBYTE pTmpData=pData;//当前要存放数据的缓冲区地址
   DWORD nLeft=nLen;//当前未接收的数据的长度
   while(nLeft>0)
   {
	   //接收剩余数据,并返回当次接收的实际数据长度
	   int nRecv=client.Receive(pTmpData,nLeft);
	   if (nRecv==SOCKET_ERROR)
	   {
		   return FALSE;
	   }
	   //重新计算剩余的数据长度
       nLeft=nLeft-nRecv;
	   //将数据指针偏移已经接受的数据量
	   pTmpData=pTmpData+nRecv;
   }
   return TRUE;


}
Exemplo n.º 8
0
boolean CDNSClient::Resolve (const char *pHostname, CIPAddress *pIPAddress)
{
	assert (pHostname != 0);

	if ('1' <= *pHostname && *pHostname <= '9')
	{
		return FALSE;
	}

	assert (m_pNetSubSystem != 0);
	CIPAddress DNSServer (m_pNetSubSystem->GetConfig ()->GetDNSServer ()->Get ());
	
	CSocket Socket (m_pNetSubSystem, IPPROTO_UDP);
	if (Socket.Connect (DNSServer, 53) != 0)
	{
		return FALSE;
	}

	u8 Buffer[DNS_MAX_MESSAGE_SIZE];
	memset (Buffer, 0, sizeof Buffer);
	TDNSHeader *pDNSHeader = (TDNSHeader *) Buffer;

	u16 nXID = s_nXID++;

	pDNSHeader->nID      = le2be16 (nXID);
	pDNSHeader->nFlags   = BE (DNS_FLAGS_OPCODE_QUERY | DNS_FLAGS_RD);
	pDNSHeader->nQDCount = BE (1);

	u8 *pQuery = Buffer + sizeof (TDNSHeader);

	char Hostname[MAX_HOSTNAME_SIZE];
	strncpy (Hostname, pHostname, MAX_HOSTNAME_SIZE-1);
	Hostname[MAX_HOSTNAME_SIZE-1] = '\0';

	char *pSavePtr;
	size_t nLength;
	char *pLabel = strtok_r (Hostname, ".", &pSavePtr);
	while (pLabel != 0)
	{
		nLength = strlen (pLabel);
		if (   nLength > 255
		    || (int) (nLength+1+1) >= DNS_MAX_MESSAGE_SIZE-(pQuery-Buffer))
		{
			return FALSE;
		}

		*pQuery++ = (u8) nLength;

		strcpy ((char *) pQuery, pLabel);
		pQuery += nLength;

		pLabel = strtok_r (0, ".", &pSavePtr);
	}

	*pQuery++ = '\0';

	TDNSQueryTrailer QueryTrailer;
	QueryTrailer.nQType  = BE (DNS_QTYPE_A);
	QueryTrailer.nQClass = BE (DNS_QCLASS_IN);

	if ((int) (sizeof QueryTrailer) > DNS_MAX_MESSAGE_SIZE-(pQuery-Buffer))
	{
		return FALSE;
	}
	memcpy (pQuery, &QueryTrailer, sizeof QueryTrailer);
	pQuery += sizeof QueryTrailer;
	
	int nSize = pQuery - Buffer;
	assert (nSize <= DNS_MAX_MESSAGE_SIZE);

	unsigned char RecvBuffer[DNS_MAX_MESSAGE_SIZE];
	int nRecvSize;

	unsigned nTry = 1;
	do
	{
		if (   nTry++ > 3
		    || Socket.Send (Buffer, nSize, 0) != nSize)
		{
			return FALSE;
		}

		CScheduler::Get ()->MsSleep (1000);

		nRecvSize = Socket.Receive (RecvBuffer, DNS_MAX_MESSAGE_SIZE, MSG_DONTWAIT);
		assert (nRecvSize < DNS_MAX_MESSAGE_SIZE);
	}
	while (nRecvSize < (int) (sizeof (TDNSHeader)+sizeof (TDNSResourceRecordTrailerAIN)));

	pDNSHeader = (TDNSHeader *) RecvBuffer;
	if (   pDNSHeader->nID != le2be16 (nXID)
	    ||    (pDNSHeader->nFlags & BE (  DNS_FLAGS_QR
	                                    | DNS_FLAGS_OPCODE
	                                    | DNS_FLAGS_TC
	                                    | DNS_FLAGS_RCODE))
	       != BE (DNS_FLAGS_QR | DNS_FLAGS_OPCODE_QUERY | DNS_RCODE_SUCCESS)
	    || pDNSHeader->nQDCount != BE (1)
	    || pDNSHeader->nANCount == BE (0))
	{
		return FALSE;
	}

	u8 *pResponse = RecvBuffer + sizeof (TDNSHeader);

	// parse the query section
	while ((nLength = *pResponse++) > 0)
	{
		pResponse += nLength;
		if (pResponse-RecvBuffer >= nRecvSize)
		{
			return FALSE;
		}
	}

	pResponse += sizeof (TDNSQueryTrailer);
	if (pResponse-RecvBuffer >= nRecvSize)
	{
		return FALSE;
	}

	TDNSResourceRecordTrailerAIN RRTrailer;

	// parse the answer section
	while (1)
	{
		nLength = *pResponse++;
		if ((nLength & 0xC0) == 0xC0)		// check for compression
		{
			pResponse++;
		}
		else
		{
			if (pResponse-RecvBuffer >= nRecvSize)
			{
				return FALSE;
			}

			while ((nLength = *pResponse++) > 0)
			{
				pResponse += nLength;
				if (pResponse-RecvBuffer >= nRecvSize)
				{
					return FALSE;
				}
			}
		}

		if (pResponse-RecvBuffer > (int) (nRecvSize-sizeof RRTrailer))
		{
			return FALSE;
		}

		memcpy (&RRTrailer, pResponse, sizeof RRTrailer);

		if (   RRTrailer.nType     == BE (DNS_QTYPE_A)
		    && RRTrailer.nClass    == BE (DNS_QCLASS_IN)
		    && RRTrailer.nRDLength == BE (DNS_RDLENGTH_AIN))
		{
			break;
		}

		pResponse += DNS_RR_TRAILER_HEADER_LENGTH + BE (RRTrailer.nRDLength);
		if (pResponse-RecvBuffer >= nRecvSize)
		{
			return FALSE;
		}
	}

	assert (pIPAddress != 0);
	pIPAddress->Set (RRTrailer.RData);

	return TRUE;
}
Exemplo n.º 9
0
void CIPServer::OnAccept(int nErrorCode)
{
	CCardSwipeServiceApp* pApp = (CCardSwipeServiceApp*)AfxGetApp();
	CSocket newSocket;
	SOCKADDR saddr;
	char ch[96];
	CString sAddress;
	CString sIPAddress, sError;
	long nCardReaderId = -1;
	int iReturn;

	this->Accept(newSocket);
	memset(&saddr,0,sizeof(SOCKADDR));
	int iLen = sizeof(saddr);
	newSocket.GetSockName(&saddr,&iLen);
	// get dotted ip address
	lstrcpyA(ch,inet_ntoa(((SOCKADDR_IN*)&saddr)->sin_addr));
	sIPAddress = ch;
	sAddress.Format("%s:%d",ch,((SOCKADDR_IN*)&saddr)->sin_port);

	// is this address in the database?
	OysterClassLibrary::IOysterPtr pOyster;
	OysterClassLibrary::ICardReaderPtr pCardReader;

	HRESULT hr = pOyster.CreateInstance(OysterClassLibrary::CLSID_Oyster);
	if (hr != ERROR_SUCCESS)
	{
		GetLastErrorString(sError,hr);
		throw CGeneralException("CIPServer::OnAccept","Could not create OysterClassLibrary object (%d): %s",hr,sError);
	}

	memset(ch,0,sizeof(ch));
	iReturn = newSocket.Receive(ch,sizeof(ch));
	if (iReturn <= 0)
	{
		// either closed or an error occured
		GetError(sError,iReturn);
		throw CGeneralException("CIPServer::OnAccept","Receive function failed (%d): %s",iReturn,sError);
	}
	nCardReaderId = (long)&ch[0];
	pCardReader = pOyster->GetCardReaderById(nCardReaderId);
	if (pCardReader)
	{
		CVirtualCardReaderSocket* pNewSocket = new CVirtualCardReaderSocket(nCardReaderId);
		pNewSocket->Attach(newSocket.m_hSocket);
		newSocket.Detach();
		pNewSocket->Send(ECMD_COMMANDSTRING[ECMD_CONNECTSUCCESS],strlen(ECMD_COMMANDSTRING[ECMD_CONNECTSUCCESS]));
		pApp->m_mapCardSwipeIdToCardSwipe
		pApp->m_vClients.push_back(pNewSocket);
		DebugTell(_T("New client connection from %s\n"),(LPCTSTR)sAddress);
	}
	else
	{
		// invalid connection, send notification
		newSocket.Send(ECMD_COMMANDSTRING[ECMD_ERRORCONNECT],strlen(ECMD_COMMANDSTRING[ECMD_ERRORCONNECT]));
	}
	pOyster.Release();

	UNREFERENCED_PARAMETER(nErrorCode);

	CSocket::OnAccept(nErrorCode);
}
Exemplo n.º 10
0
int CPayment::SendPaymentData(LPCTSTR sfxm,LONG Money,LPCTSTR bz)
{
	bool bIsStand = true;

	szPayState = "3";//请求正在处理

	//组包
	CIso8583Package *package = new CIso8583Package();
	if (package == NULL) 
	{
		szPayState = "E7";
		return -1;   //不成功,返回错误码
	}
	char c48Field[255];
	memset(c48Field,0,sizeof(c48Field));

	if( strcmp(sfxm,"3001") == 0)
	{
		bIsStand = false;
		const char *split = "|"; 
		char *pTemp = new char[128];
		strcpy(pTemp,bz);
		char *pToken = strtok (pTemp,split); 
		if( pToken == NULL ) return -1;
		int nOffset = strlen(pToken);
		memcpy(c48Field,pToken,strlen(pToken));
		pToken = strtok(NULL,"|");
		if( pToken == NULL ) return -1;
		memcpy(c48Field + nOffset,pToken,strlen(pToken));
		nOffset += strlen(pToken);
		pToken = strtok(NULL,"|");
		if( pToken == NULL ) return -1;
		memcpy(c48Field + nOffset,pToken,strlen(pToken));
		nOffset += strlen(pToken);
		pToken = strtok(NULL,"|");
		if( pToken == NULL ) return -1;
		memcpy(c48Field + nOffset,pToken,strlen(pToken));
		nOffset += strlen(pToken);

		package->SetFieldData(48,nOffset,(BYTE *)c48Field);//48域,目前随便填写,银联无法处理该业务

	}
	else
	{//处理其他收费项目
		int nOffset = 0;
		nOffset = strlen(sfxm);
		memcpy(c48Field,sfxm,nOffset);
		memcpy(c48Field + nOffset,bz,strlen(bz));
		nOffset += strlen(bz);
		package->SetFieldData(48,nOffset,(BYTE *)c48Field);//48域,目前随便填写,银联无法处理该业务
	}

	int iRes = BuildPackage(package,Money);
	if (iRes != 0) 
	{
		szPayState = "E7";
		return iRes;   //组包不成功,返回错误码
	}

	BYTE cHeader[30];
	int nOffset = 0;
	AscToBcd(cHeader + nOffset,(unsigned char *)szTPDU.GetBuffer(),szTPDU.GetLength());
	nOffset += szTPDU.GetLength() / 2;
	AscToBcd(cHeader + nOffset,(unsigned char *)szHeader.GetBuffer(),szHeader.GetLength());
	nOffset += szHeader.GetLength() / 2;
	cHeader[nOffset] = 0x02;
	nOffset += 1;
	cHeader[nOffset] = 0x00;
	nOffset += 1;

	BYTE cData[512];
	memset(cData,0,512);

	unsigned int nLen = package->GetData(cData,512,cHeader,nOffset,false);
	delete package;

	char cLen[5] = {'\0'};
	itoa_hex(nLen,cLen,2);
	unsigned char cDataLen[3] = {'\0'};
	AscToBcd(cDataLen,(unsigned char *)cLen,4);
	BYTE cPackageData[512];
	memset(cPackageData,0,sizeof(cPackageData));
	memcpy(cPackageData,cDataLen,2);
	memcpy(cPackageData + 2,cData,nLen);

	TCHAR szCurPath[MAX_PATH];
	GetCurrentDirectory(sizeof(szCurPath),szCurPath);
	_tcscat(szCurPath,TEXT("\\Reversal.ini"));

	CSocket client;
	if( client.InitSocket() == FALSE)
	{
		szPayState = "E7";
		return -1;
	}
	if( client.Connect(szServerIP,atoi(szPort)) == false)
	{
		szPayState = "E7";
		return -1;
	}
	gLog.Log(cPackageData,nLen + 2);
	client.Send(cPackageData,nLen + 2);
	BYTE RecvData[1024];
	memset(RecvData,0,1024);
	nLen = client.Receive(RecvData,1024);
	if(nLen != 0)
	{
		gLog.Log(RecvData,nLen);
		CIso8583Parse *receivePackage = new CIso8583Parse();
		char cResult[128];
		memset(cResult,0,128);
		Read8583Package(receivePackage,RecvData,39,2,(BYTE *)cResult);
		delete receivePackage;

		LONG lProCode = atol(szTraceCode.GetBuffer()) + 1;
		unsigned char cAsciiBuff[12];
		memset(cAsciiBuff,0,sizeof(cAsciiBuff));
		BinToAsc(cAsciiBuff,lProCode,6);
		WritePrivateProfileString(TEXT("TraceCode"),TEXT("TraceCode"),(char *)cAsciiBuff,szCurPath);
		if(strcmp(cResult,"A0") == 0) //根据银联网络的说法,MAC错误也需要冲正
		{
			WritePrivateProfileString(TEXT("Reversal"),TEXT("Ack"),"A0",szCurPath);
			WritePrivateProfileString(TEXT("Reversal"),TEXT("Flag"),"0",szCurPath);//0 -- 未处理
			CReversalTransaction transaction;
			transaction.SendReversalTransactionData();//冲正处理
		}
		else if( strcmp(cResult,"05") == 0)
		{//认证失败
			szPayState = "E2";
			return -1;
		}
		else if( strcmp(cResult,"51") == 0)
		{
			szPayState = "E5";
			return -1;
		}
		else if( strcmp(cResult, "55") == 0)
		{
			szPayState = "E2";
			return -1;
		}
		else if( strcmp(cResult, "75") == 0)
		{
			szPayState = "E1";
			return -1;
		}
		szPayState = "1";//交易成功
	}
	else
	{//网络原因,消费冲正
		szPayState = "E6";
		WritePrivateProfileString(TEXT("Reversal"),TEXT("Ack"),"98",szCurPath);//POS终端在时限内未能收到POS中心的应答消息而引发
		WritePrivateProfileString(TEXT("Reversal"),TEXT("Flag"),"0",szCurPath);//0 -- 未处理
		CReversalTransaction transaction;
		transaction.SendReversalTransactionData();//冲正处理
	}

	return 1;//交易成功
}
Exemplo n.º 11
0
	void CServerHandshake::Run()
	{
		VERIFY(AfxSocketInit());

		CSocket socket; // führen Handshake innerhalb des Threads synchron aus
		socket.Attach(m_hSocket);

		clock_t end = clock() + HANDSHAKE_TIMEOUT * CLOCKS_PER_SEC;

		// (1.) auf eingehenden Identifizierungs-String (HANDSHAKE_CLIENTID) + Versionsnummer
		// vom Client warten
		UINT nCount = strlen(HANDSHAKE_CLIENTID) + 1 + sizeof(UINT) + 1;
		if (!RequestData(socket, nCount, end))
		{
			DEBUG_MSG("client timed out, disconnected");
			SetExitCode(1);
			return;
		}

		// Daten in Puffer übertragen
		BYTE *lpBuf = new BYTE[nCount];
		int nDone = socket.Receive(lpBuf, nCount);
		if (nDone == SOCKET_ERROR) goto sockerror;
		else if (nDone < nCount) goto error;

		// Pufferinhalt prüfen
		if (memcmp(lpBuf, HANDSHAKE_CLIENTID, strlen(HANDSHAKE_CLIENTID)) != 0
			|| lpBuf[strlen(HANDSHAKE_CLIENTID)] != 0
			|| lpBuf[nCount - 1] != 0)
		{
			DEBUG_MSG("client is not a BotE client, disconnected");
			delete[] lpBuf;
			SetExitCode(1);
			return;
		}

		// Puffer erfolgreich geprüft, Versionsnummer extrahieren
		UINT nClientVersion;
		memcpy(&nClientVersion, lpBuf + (strlen(HANDSHAKE_CLIENTID) + 1), sizeof(UINT));
		TRACE("server: client has version %u\n", nClientVersion);
		delete[] lpBuf;
		lpBuf = NULL;

		// abbrechen, wenn andere Versionsnummer
		if (nClientVersion != m_nServerVersion)
		{
			DEBUG_MSG("client has incompatible version, disconnected");
			SetExitCode(1);
			return;
		}

		// (2.) Server-Identifizierung + Versionsnummer senden
		nDone = socket.Send(HANDSHAKE_SERVERID, strlen(HANDSHAKE_SERVERID));
		if (nDone == SOCKET_ERROR) goto sockerror;
		else if (nDone < strlen(HANDSHAKE_SERVERID)) goto error;

		lpBuf = new BYTE[nCount = 1 + sizeof(UINT) + 1];
		lpBuf[0] = lpBuf[nCount - 1] = 0;
		memcpy(&lpBuf[1], &m_nServerVersion, sizeof(UINT));

		nDone = socket.Send(lpBuf, nCount);
		if (nDone == SOCKET_ERROR) goto sockerror;
		else if (nDone < nCount) goto error;

		delete[] lpBuf;
		lpBuf = NULL;

		// (3.a) Bestätigung vom Client abwarten
		int nLen = 3 + sizeof(UINT);
		if (!RequestData(socket, nLen, end))
		{
			DEBUG_MSG("client timed out, disconnected");
			SetExitCode(1);
			return;
		}

		// Bestätigung prüfen
		lpBuf = new BYTE[3];
		nDone = socket.Receive(lpBuf, 3);
		if (nDone == SOCKET_ERROR) goto sockerror;
		else if (nDone < 3) goto error;

		if (memcmp(lpBuf, "OK\0", 3) != 0)
		{
			DEBUG_MSG("client did not confirm, disconnected");
			delete[] lpBuf;
			SetExitCode(1);
			return;
		}

		delete[] lpBuf;

		// Länge des Benutzernamens ermitteln
		lpBuf = new BYTE[sizeof(UINT)];
		nDone = socket.Receive(lpBuf, sizeof(UINT));
		if (nDone == SOCKET_ERROR) goto sockerror;
		else if (nDone < sizeof(UINT)) goto error;

		UINT nStrLen = 0;
		memcpy(&nStrLen, lpBuf, sizeof(UINT));

		delete[] lpBuf;

		// (3.b) Benutzername empfangen
		if (!RequestData(socket, nStrLen, end))
		{
			DEBUG_MSG("client timed out, disconnected");
			SetExitCode(1);
			return;
		}

		// Benutzername lesen
		lpBuf = new BYTE[nStrLen + 1];
		nDone = socket.Receive(lpBuf, nStrLen);
		if (nDone == SOCKET_ERROR) goto sockerror;
		else if (nDone < nStrLen) goto error;

		{
			lpBuf[nStrLen] = 0;
			CString strUserName((char *)lpBuf);
			strUserName.Trim();

			// dem Server einen neuen Client melden; verwenden kleinere Versionsnummer zur
			// Kommunikation
			server.OnNewClient(socket.Detach(), min(m_nServerVersion, nClientVersion), strUserName);
		}

		delete[] lpBuf;
		return;

	sockerror:
		server.OnSocketError(socket.GetLastError());
	error:
		if (lpBuf) delete[] lpBuf;
		SetExitCode(1);
	}
Exemplo n.º 12
0
int CReversalTransaction::SendReversalTransactionData(char *pAccount,LONG Money,char *cTraceCode,char *cAck)
{
	//组包
	CIso8583Package *package = new CIso8583Package();
	int iRes = BuildPackage(package,pAccount,Money,cTraceCode,cAck);
	if (iRes != 0) return iRes;   //组包不成功,返回错误码

	BYTE cHeader[30];
	int nOffset = 0;
	AscToBcd(cHeader + nOffset,(unsigned char *)szTPDU.GetBuffer(),szTPDU.GetLength());
	nOffset += szTPDU.GetLength() / 2;
	AscToBcd(cHeader + nOffset,(unsigned char *)szHeader.GetBuffer(),szHeader.GetLength());
	nOffset += szHeader.GetLength() / 2;
	cHeader[nOffset] = 0x04;
	nOffset += 1;
	cHeader[nOffset] = 0x00;
	nOffset += 1;

	BYTE cData[512];
	memset(cData,0,512);
	unsigned int nLen = package->GetData(cData,512,cHeader,nOffset,false);
	delete package;

	char cLen[5] = {'\0'};
	itoa_hex(nLen,cLen,2);
	unsigned char cDataLen[3] = {'\0'};
	AscToBcd(cDataLen,(unsigned char *)cLen,4);
	BYTE cPackageData[512];
	memset(cPackageData,0,sizeof(cPackageData));
	memcpy(cPackageData,cDataLen,2);
	memcpy(cPackageData + 2,cData,nLen);

	CSocket client;
	if( client.InitSocket() == FALSE) return -1;
	if( client.Connect(szServerIP,atoi(szPort)) == false) return -1;
	gLog.Log(cData,nLen);
	client.Send(cData,nLen);
	BYTE RecvData[1024];
	memset(RecvData,0,1024);
	nLen = client.Receive(RecvData,1024);
	if(nLen != 0)
	{
		gLog.Log(RecvData,nLen);
		CIso8583Parse *receivePackage = new CIso8583Parse();
		char cResult[128];
		memset(cResult,0,128);
		Read8583Package(receivePackage,RecvData,39,2,(BYTE *)cResult);
		delete receivePackage;
		if(strcmp(cResult,"00") == 0)
		{
			TCHAR szCurPath[MAX_PATH];
			GetCurrentDirectory(sizeof(szCurPath),szCurPath);
			_tcscat(szCurPath,TEXT("\\Reversal.ini"));
			WritePrivateProfileString(TEXT("Reversal"),TEXT("Account"),"",szCurPath);
			WritePrivateProfileString(TEXT("Reversal"),TEXT("TraceCode"),"",szCurPath);
			WritePrivateProfileString(TEXT("Reversal"),TEXT("Money"),"",szCurPath);
			WritePrivateProfileString(TEXT("Reversal"),TEXT("Ack"),"",szCurPath);
			WritePrivateProfileString(TEXT("Reversal"),TEXT("Flag"),"1",szCurPath);//1 -- 已处理
		}
	}

	return 1;
}
Exemplo n.º 13
0
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;

	HMODULE hModule = ::GetModuleHandle(NULL);

	if (hModule != NULL)
	{
		// initialize MFC and print and error on failure
		if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
		{
			// TODO: change error code to suit your needs
			_tprintf(_T("Fatal Error: MFC initialization failed\n"));
			nRetCode = 1;
		}
		else
		{
			// TODO: code your application's behavior here.
			cout << "\t\t\t#################  << CHIEC NON KY DIEU >>  ################# " << endl << endl;
			KNClient x;
			x.InitChat();
			x.RegisterName();

			cout << "\n\n\t\t ***************** < Luat Choi > *****************\n";
			cout << "1. Nguoi choi phai trai qua cac vong choi tuong duong voi so cau hoi cua chuong trinh.\n";
			cout << "2. Khi den luot choi :\n \tdoan dung 1 chu cai -> nhan duoc so diem tuong duong so diem quay duoc.\n ";
			cout << "\tdoan dung o chu bi mat -> nhan duoc so diem x3.\n";
			cout << "\n\t -----> nhan phim bat ky de bat dau tro choi : ";
			char k;
			cin >> k;
			fflush(stdin);
			system("cls");
			cout << "\t\t\t#################  << CHIEC NON KY DIEU >>  ################# " << endl << endl;


			CSocket Client;
			char *str_r = new char[200];
			Client.Receive(str_r, 200, 0);
			str_r[strlen(str_r)] = 0;
			if (strstr(str_r, "Exit"))
			{
				Client.Close();
				return 0;
			}
			else
			{

				do
				{
	
					if (x.recieve()) //nếu trả về true mới được trl
						x.Answer();
					else
						break;
				} while (1);
			}

		}
	}
	else
	{
Exemplo n.º 14
0
unsigned CNTPClient::GetTime (CIPAddress &rServerIP)
{
	assert (m_pNetSubSystem != 0);
	CSocket Socket (m_pNetSubSystem, IPPROTO_UDP);
	if (Socket.Connect (rServerIP, 123) != 0)
	{
		return 0;
	}

	u8 NTPPacket[NTP_PACKET_SIZE];
	memset (NTPPacket, 0, sizeof NTPPacket);
	NTPPacket[0] = 0xE3;			// leap indicator: unknown, version: 4, mode: client
	NTPPacket[1] = 0;			// stratum: unspecified
	NTPPacket[2] = 10;			// poll: 1024 seconds
	NTPPacket[3] = 0;			// precision: 1 second
	memcpy (NTPPacket+12, "XCIR", 4);

	unsigned char RecvPacket[NTP_PACKET_SIZE];

	unsigned nTry;
	for (nTry = 1; nTry <= 3; nTry++)
	{
		if (Socket.Send (NTPPacket, sizeof NTPPacket, 0) != sizeof NTPPacket)
		{
			CLogger::Get ()->Write (FromNTPClient, LogError, "Send failed");

			return 0;
		}

		CScheduler::Get ()->MsSleep (1000);

		int nResult = Socket.Receive (RecvPacket, sizeof RecvPacket, MSG_DONTWAIT);
		if (nResult < 0)
		{
			CLogger::Get ()->Write (FromNTPClient, LogError, "Receive failed");

			return 0;
		}

		if (nResult >= 44)
		{
			break;
		}
	}

	if (nTry > 3)
	{
		CLogger::Get ()->Write (FromNTPClient, LogError, "Invalid or no response");

		return 0;
	}

	unsigned nSecondsSince1900;
	nSecondsSince1900  =   (unsigned) RecvPacket[40] << 24
			     | (unsigned) RecvPacket[41] << 16
			     | (unsigned) RecvPacket[42] << 8
			     | (unsigned) RecvPacket[43];

	if (nSecondsSince1900 < SEVENTY_YEARS)
	{
		return 0;
	}

	unsigned nTime = nSecondsSince1900 - SEVENTY_YEARS;
	
	return nTime;
}