Ejemplo n.º 1
0
sys_result  comm_receive(modem_socket_t * socket)
{
	sys_result result;

	if(socket->state_handle.state == COMM_RECEIVE_RX) {

		if(socket->state_handle.substate == COMM_RECEIVE_INVOKE) {

#ifdef LOG_COMMRECEIVE
			printf("socket(%d) receive...\r\n", socket->socket_id);
#endif

			// prepare the socket receive buffer
			memset(socket->rx_buffer, '\0', SOCKET_BUFFER_LEN+1);
			socket->bytes_received = 0;

			socket_entersubstate(socket, COMM_RECEIVE_WAITREPLY);

			socket_settimeout(socket, DEFAULT_COMM_SOCKETRECEIVE_TIMEOUT);

			result = SYS_OK;
		} else if(socket->state_handle.substate == COMM_RECEIVE_WAITREPLY) {

			// if we receive bytes we need to copy the data and signal the
			// function to return
//			if(socket->bytes_received > 0) {
//				socket->event_handler->on_datareceive(socket->rx_buffer, socket->bytes_received);
//				memset(socket->rx_buffer, '\0', SOCKET_BUFFER_LEN+1);
//				xSemaphoreGive(tcp_receive_signal);
//			}

			// wait up to n seconds.
			if(socket_timeout(socket)) {
				socket->socket_error = SCK_ERR_TIMEOUT;

#ifdef LOG_COMMRECEIVE
				printf("socket(%d) receive timeout\r\n", socket->socket_id);
#endif

				// TODO: review for proper transition after receive
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_receive_signal);
				result = SYS_OK;

			}

//			// if we receive bytes we need to copy the data and signal the
//			// function to return
			if(socket->bytes_received > 0) {
				socket->event_handler->on_datareceive(socket->rx_buffer, socket->bytes_received);
				memset(socket->rx_buffer, '\0', SOCKET_BUFFER_LEN+1);
				xSemaphoreGive(tcp_receive_signal);
			}
			result = SYS_OK;
		}
	}

	return result;
}
Ejemplo n.º 2
0
sys_result  comm_close(modem_socket_t * socket)
{
	sys_result result;

	if(socket->state_handle.state == COMM_CLOSE_CONNECTION) {

		if(socket->state_handle.substate == COMM_CLOSE_INVOKE) {
			printf("socket(%d) close...\r\n", socket->socket_id);

			modem_socketclose(socket);
			socket_entersubstate(socket, COMM_CLOSE_WAITREPLY);
			socket_settimeout(socket, DEFAULT_COMM_SOCKETCLOSE_TIMEOUT);
			result = SYS_OK;

		} else if(socket->state_handle.substate  == COMM_CLOSE_WAITREPLY) {

			if(socket_timeout(socket)) {
				printf("socket(%d) close timeout.\r\n", socket->socket_id);
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			}
			result = modem_handle_socketclose(socket);

			if(result == SYS_AT_OK) {
				socket->socket_status = SCK_CLOSED;
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			} else if (result == SYS_ERR_AT_NOCARRIER) {
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			}else if (result == SYS_ERR_AT_TIMEOUT) {
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			}
		}

		return result;
	}

	return result;
}
Ejemplo n.º 3
0
sys_result  comm_idle(modem_socket_t * socket)
{
	sys_result result;

	if(socket->state_handle.state == COMM_IDLE_SETTIMEOUT) {

		printf("socket(%d) idle.\r\n", socket->socket_id);
		printf("wait %d sec.\r\n", DEFAULT_COMM_IDLE_TIMEOUT/1000);

		socket_enterstate(socket, COMM_IDLE_WAITTIMEOUT);
		socket_settimeout(socket, DEFAULT_COMM_IDLE_TIMEOUT);
		result = SYS_OK;

	} else if(socket->state_handle.state == COMM_IDLE_WAITTIMEOUT) {

		if(socket_timeout(socket)) {
			socket_enterstate(socket, COMM_IDLE_SETTIMEOUT);
			result = SYS_OK;
		}
	}

	return result;

}
Ejemplo n.º 4
0
//OpenID
int CInputAuth::auth_OpenID(const char *authKey, const char *ipAddr, char *rID)
{
    //return value
    //0 : normal execution
    //1 : cannot connect to openid auth server
    //2 : socket_write failed
    //3 : openid auth server not reply
    //4 : Reply Error
    //5 : Incorrect auth key.

    extern char openid_host[256];
    extern char openid_uri[256];

    int		port	= 80;

    socket_t fd = socket_connect(openid_host, port);
    if (fd < 0)
    {
        sys_err("[auth_OpenID] : could not connect to OpenID server(%s)", openid_host);
        return 1;
    }

    socket_block(fd);
    socket_timeout(fd, 3, 0);

    // send request
    {
        char request[512];
        int len = snprintf(request, sizeof(request),
                           //"GET /kyw/gameauth.php?auth_key=%s&ip=%s HTTP/1.1\r\n"
                           "GET %s?auth_key=%s&ip=%s HTTP/1.1\r\n"
                           "Host: %s\r\n"
                           "Connection: Close\r\n\r\n",
                           //openid_uri, authKey,ipAddr);//"aaaaa", "202.31.212.73");
                           //authKey,ipAddr);
                           //"/kyw/gameauth.php", authKey, ipAddr);
                           openid_uri, authKey, ipAddr, openid_host);

//#ifndef __WIN32__
//		if (write(fd, request, len) < 0)
//#else
        if (socket_write(fd, request, len) < 0)
//#endif
        {
            sys_err("[auth_OpenID] : could not send auth-request (%s)", authKey);
            socket_close(fd);
            return 2;
        }
    }

    // read reply
    char reply[1024] = {0};
    int len;
//#ifndef __WIN32__
//	len = read(fd, reply, sizeof(reply));
//#else
    len = socket_read(fd, reply, sizeof(reply));
//#endif
    socket_close(fd);

    if (len <= 0)
    {
        sys_err("[auth_OpenID] : could not recv auth-reply (%s)", authKey);
        return 3;
    }

    //결과값 파싱
    char buffer[1024];
    strcpy(buffer, reply);

    const char *delim = "\r\n";
    char *last = 0;
    char *v = strtok(buffer, delim);
    char *result = 0;

    while (v)
    {
        result = v;
        v = strtok(NULL, delim);
    }


    char *id = strtok(result, "%");
    char *success = strtok(NULL, "%");

    if (!*id || !*success)
    {
        sys_err("[auth_OpenID] : OpenID AuthServer Reply Error (%s)", reply);
        return 4;
    }

    if (0 != strcmp("OK", success))		//에러 처리
    {
        int returnNumber = 0;
        str_to_number(returnNumber, id);
        switch (returnNumber)
        {
        case 1:
            sys_err("[auth_OpenID] : AuthKey incorrect");
            break;
        case 2:
            sys_err("[auth_OpenID] : ip incorrect");
            break;
        case 3:
            sys_err("[auth_OpenID] : used AuthKey");
            break;
        case 4:
            sys_err("[auth_OpenID] : AuthKey not delivered");
            break;
        case 5:
            sys_err("[auth_OpenID] : ip not delivered");
            break;
        case 6:
            sys_err("[auth_OpenID] : AuthKey time over");
            break;
        default:
            break;

            return 5;
        }
    }

    strcpy(rID, id);

    return 0;
}
Ejemplo n.º 5
0
socket_t socket_connect(const char* host, WORD port)
{
    socket_t            s = 0;
    struct sockaddr_in  server_addr;
    int                 rslt;

    /* 소켓주소 구조체 초기화 */
    memset(&server_addr, 0, sizeof(server_addr));

    if (isdigit(*host))
	server_addr.sin_addr.s_addr = inet_addr(host);
    else
    {
	struct hostent *hp;

	if ((hp = gethostbyname(host)) == NULL)
	{
	    sys_err("socket_connect(): can not connect to %s:%d", host, port);
	    return -1;
	}

	thecore_memcpy((char* ) &server_addr.sin_addr, hp->h_addr, sizeof(server_addr.sin_addr));
    }

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);

    if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
	perror("socket");
	return -1;
    }

    socket_keepalive(s);
    socket_sndbuf(s, 233016);
    socket_rcvbuf(s, 233016);
    socket_timeout(s, 10, 0);
    socket_lingeron(s);

    /*  연결요청 */
    if ((rslt = connect(s, (struct sockaddr *) &server_addr, sizeof(server_addr))) < 0)
    {
	socket_close(s);

#ifdef __WIN32__
	switch (WSAGetLastError())
#else
	    switch (rslt)
#endif
	    {
#ifdef __WIN32__
		case WSAETIMEDOUT:
#else
		case EINTR:
#endif
		    sys_err("HOST %s:%d connection timeout.", host, port);
		    break;
#ifdef __WIN32__
		case WSAECONNREFUSED:
#else
		case ECONNREFUSED:
#endif
		    sys_err("HOST %s:%d port is not opened. connection refused.", host, port);
		    break;
#ifdef __WIN32__
		case WSAENETUNREACH:
#else
		case ENETUNREACH:
#endif
		    sys_err("HOST %s:%d is not reachable from this host.", host, port);
		    break;

		default:
		    sys_err("HOST %s:%d, could not connect.", host, port);
		    break;
	    }

	perror("connect");
	return (-1);
    }

    return (s);
}