Ejemplo n.º 1
0
/***************************************************
CUT_WSThread
    purpose
        Constructor
    params
        None
    return
        None
****************************************************/
CUT_WSThread::CUT_WSThread() : 
		m_lSendTimeOut(0),				    // Initialize send timeout
		m_lReceiveTimeOut(0),			    // Initialize receive timeout
		m_bBlockingMode(FALSE),				// Set non blocking mode
		m_nShutDownFlag(FALSE)				// Clear shutdown flag
{

// The send/receive time out values are use with the WINSOCK ver 2.0 or later
#ifdef _WINSOCK_2_0_
    SetSendTimeOut(30000);
    SetReceiveTimeOut(30000);
#endif
	m_clientSocket = INVALID_SOCKET;
	m_nSockType = 0;
}
Ejemplo n.º 2
0
/*Test Recplayer  UDP    Demo*/
static int RecPlayProcess(int *puserIndex)
{
	int nLen;
	MsgHeader header, *pheader, sd_header;
	unsigned char szData[1280];
	int fileflags;

	int userIndex = *puserIndex;

	if(userIndex >= gLiveMaxUserNum || userIndex < 0) {
		printf("Exit RecPlayProcess Thread!!!!\n");
		pthread_detach(pthread_self());
		return 0;
	}

	LIVE_SOCKET socket = getRecuserTcpSocket(userIndex);

	printf("enter live RecPlayProcess() function!!\n");
	SetSendTimeOut(socket, 10);
	SetRecvTimeOut(socket, 10);
	memset(&header, 0, sizeof(header));
	pheader = &header;
	sd_header.sLen = htons(sizeof(MsgHeader));
	sd_header.sVer = MSG_VER;
	sd_header.sMsgType = MSG_TYPE_PASSWORD;

	if((fileflags = fcntl(socket, F_GETFL, 0)) == -1) {
		printf("fcntl F_GETFL error:%d,error msg: = %s\n", errno, strerror(errno));
		return -1;
	}

	if(fcntl(socket, F_SETFL, fileflags & (~O_NONBLOCK)) == -1) {
		printf("fcntl F_SETFL error:%d,error msg: = %s\n", errno, strerror(errno));
		return -1;
	}

	//	fcntl(socket, F_SETFL, O_NONBLOCK); 		// 是否为阻塞版本的socket

	while(liveplayTaskStatus == RUNNING) {
		memset(szData, 0, 1280);
		nLen = recv(socket, szData, HEAD_LEN, 0);

		if(nLen < HEAD_LEN || nLen == -1)	{
			printf("nLen < HEAD_LEN  errno = %d  nLen = %d\n", errno, nLen);
			goto EXITTHREAD;
		}

		memcpy(&header, szData, HEAD_LEN);

		pheader->sLen = ntohs(pheader->sLen);

		if(pheader->sLen - HEAD_LEN > 0) {
			nLen = recv(socket, szData + HEAD_LEN, pheader->sLen - HEAD_LEN, 0);

			if(nLen < pheader->sLen - HEAD_LEN)	{
				fprintf(stderr, "nLen < nMsgLen -HEAD_LEN\n");
				goto EXITTHREAD;
			}
		}



		switch(pheader->sMsgType) {
			case MSG_TYPE_PASSWORD:					// 判断密码
				if(!(strncmp(LIVE_CONNECT_KEY_1, (char *)(szData + HEAD_LEN), pheader->sLen - HEAD_LEN)) ||
				   !(strncmp(LIVE_CONNECT_KEY_2, (char *)(szData + HEAD_LEN), pheader->sLen - HEAD_LEN))) {
					int ln = strlen(LIVE_SERVER_VERSION) + strlen(LIVE_MINPLAYER_VERSION) + 4;
					char bver[40], buffer[100];
					int userID = 0;
					time_t timep;

					sprintf(bver, "%s %s", LIVE_SERVER_VERSION, LIVE_MINPLAYER_VERSION);
					sd_header.sData = 0; //密码正确
					sd_header.sLen = htons(sizeof(MsgHeader) + ln - 2);
					send(socket, &sd_header, sizeof(MsgHeader), 0);
					send(socket, bver, ln - 2, 0);
					sd_header.sLen = htons(sizeof(MsgHeader) + 4);
					sd_header.sVer = MSG_VER;
					sd_header.sMsgType = MSG_TYPE_ID;

					time(&timep);
					userID = (int)timep;
					fprintf(stderr, "------ userId = %x\n", userID);
					recplayEnv.recUser[userIndex].userID = userID;
					memcpy(buffer, &sd_header, sizeof(MsgHeader));
					memcpy(buffer + sizeof(MsgHeader), &userID, 4);
					send(socket, buffer, sizeof(MsgHeader) + 4, 0);
				} else {
					sd_header.sData = 1; //密码错误
					printf("passwd error!!!\n");
					send(socket, &sd_header, sizeof(MsgHeader), 0);
					goto EXITTHREAD;
				}

				break;

			case MSG_TYPE_HEART:
				DEBUG(DL_DEBUG, gLiveDebug_Level, "liveplay Heat  OK!!\n");
				break;

			case MSG_TYPE_USEINFO:
				DEBUG(DL_DEBUG, gLiveDebug_Level, "MSG_TYPE_USEINFO\n");
				break;

			case MSG_TYPE_ID:
				DEBUG(DL_DEBUG, gLiveDebug_Level, "MSG_TYPE_ID \n");
				break;

			case MSG_TYPE_BDPROXY:
				DEBUG(DL_DEBUG, gLiveDebug_Level, "MSG_TYPE_BDPROXY \n");
				break;

			case MSG_TYPE_CTRL: {
#if 0
				printf("MSG_TYPE_CTRL");
				unsigned char type, speed, num;
				type = *(szData + HEAD_LEN);
				speed = *(szData + HEAD_LEN + 1);
				num = *(szData + HEAD_LEN + 2);
				CameraControl((int)type, (int)speed);
#endif
			}
			break;

			default:
				DEBUG(DL_DEBUG, gLiveDebug_Level, "default Exit !!! pheader->sMsgType  = %d \n", pheader->sMsgType);
				break;
		}

	}

EXITTHREAD:
	close(socket);
	setUserLogout(userIndex);
	removeRecuserIndex(userIndex);
	clearRecuserNum();
	printf("(((((((((((((((((((((((((((((Exit RecPlayProcess Thread!!!!))))))))))))))))))))))))))))\n");
	pthread_detach(pthread_self());
	return 0;
}
Ejemplo n.º 3
0
/***********************************************
Connect
    Connects to a specified port
Params
    port		- port to connect to
    address		- address to connect to (ex."204.64.75.73")
	[timeout]	- time to wait for connection
    [family]	- protocol family: AF_INET, AF_AF_IPX, etc. Default AF_INET
    [sockType]	- SOCK_STREAM (TCP) or SOCK_DGRAM (UDP) Default is SOCK_STREAM
Return
    UTE_SOCK_ALREADY_OPEN	- socket already open or in use
    UTE_SOCK_CREATE_FAILED	- socket creation failed
    UTE_SOCK_CONNECT_FAILED - socket connection failed
	UTE_INVALID_ADDRESS		- invalid address
    UTE_SUCCESS				- success
	UTE_CONNECT_TIMEOUT		- connect time out
************************************************/
int CUT_WSThread::Connect(unsigned int port, LPCSTR address, long timeout, int family, int sockType) 
{
	int	nError = UTE_SUCCESS;

    if(m_clientSocket != INVALID_SOCKET)
        return OnError(UTE_SOCK_ALREADY_OPEN);

    //copy the params
    //check to see if the domain is a name or address

	if (inet_addr(address) == INADDR_NONE){
        if(GetAddressFromName(address, m_szAddress, sizeof(m_szAddress)) != UTE_SUCCESS)
            return OnError(UTE_INVALID_ADDRESS);
		}
    else 
		strncpy(m_szAddress, address, sizeof(m_szAddress));

	//m_nFamily    = family;
	m_nSockType  = sockType;

    //Set up the SockAddr structure
    memset(&m_clientSocketAddr, 0, sizeof(m_clientSocketAddr));				//clear all
    m_clientSocketAddr.sin_port         = (unsigned short) htons((u_short   )port);				//port
    m_clientSocketAddr.sin_family       = (short) family;					//family
    m_clientSocketAddr.sin_addr.s_addr  = inet_addr(m_szAddress);   //address

    //create a socket

	m_clientSocket = socket(family, sockType, 0);
    if(m_clientSocket == INVALID_SOCKET)
		return OnError(UTE_SOCK_CREATE_FAILED);

    
	// switch to nonblocking mode to support timeout
	if(timeout >= 0) 
		SetBlockingMode(CUT_NONBLOCKING);

    if( connect(m_clientSocket,(LPSOCKADDR)&m_clientSocketAddr,sizeof(m_clientSocketAddr))==SOCKET_ERROR){
		if(WSAGetLastError() == WSAEWOULDBLOCK ) {
			if(timeout >= 0) {
				if(WaitForSend(timeout, 0) != CUT_SUCCESS) {
					SocketClose(m_clientSocket);
					m_clientSocket = INVALID_SOCKET;
					return OnError(UTE_CONNECT_TIMEOUT);
					}

				SetBlockingMode(CUT_BLOCKING);
				}
			
			//set up the default send are receive time-outs
//			SetReceiveTimeOut(m_lRecvTimeOut);
//			SetSendTimeOut(m_lSendTimeOut);

            // save the remote port
     //       m_nRemotePort = ntohs(m_clientSocketAddr.sin_port);

            // save the local port
            SOCKADDR_IN sa;
            int len = sizeof(SOCKADDR_IN);
            getsockname(m_clientSocket, (SOCKADDR*) &sa, &len);
 //           m_nLocalPort = ntohs(sa.sin_port);

			// Call socket connection notification
			if((nError = SocketOnConnected(m_clientSocket, address)) != UTE_SUCCESS)
			{
				SocketClose(m_clientSocket);
				m_clientSocket = INVALID_SOCKET;
			}

			return OnError(nError);
			}
		else {
			// did not have these two lines prior to Feb 11 1999 
			SocketClose(m_clientSocket);
			m_clientSocket = INVALID_SOCKET;
			}

        return OnError(UTE_SOCK_CONNECT_FAILED);		// ERROR: connect unsuccessful 
    }

    // set up the default send are receive time-outs
//    SetReceiveTimeOut(m_lRecvTimeOut);
    SetSendTimeOut(m_lSendTimeOut);

	// Call socket connection notification
	if((nError = SocketOnConnected(m_clientSocket, address)) != UTE_SUCCESS)
	{
		SocketClose(m_clientSocket);
		m_clientSocket = INVALID_SOCKET;
	}


	return OnError(nError);
}