Esempio n. 1
0
BOOLEAN HttpcOpen(PCHAR pServerIP)
{
	_pHttpcTcb = TcpOpen(pServerIP, GetProvPort(), 0, HTTP_BANK_OFFSET, (USHORT)HttpcRun);
	if (_pHttpcTcb)
	{
		TcpSetTimeout(_pHttpcTcb, HTTP_ACTIVE_TIMEOUT);
		return TRUE;
	}
	else
	{
		UdpDebugString("Can't open Prov TCP");
		return FALSE;
	}
}
Esempio n. 2
0
void *tcp_rcvTask(void *argc)
{
    int  ret, i;
    int  numEvents;
    unsigned char buf[MAX_DATA_LENGTH*1000]; /* NEXT_CHECK by icecom 110823 */

    ThreadAlive[PTASK0] = TRUE;

    pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
    pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
    pthread_cleanup_push(ThreadCleanUp, (void *)NULL);

    memset(buf, 0x0, sizeof(buf));

    FD_ZERO(&allset);

    tlink.ListenFD = TcpOpen(&tlink);

    if (tlink.ListenFD <= 0) {
        if (tlink.mode == LINK_MODE_SERVER) {
            xprint(FMS_HST | FMS_ERROR, "%s : S-TCP TcpOpen failed\n", __func__);
        } else if (tlink.mode == LINK_MODE_CLIENT) {
            xprint(FMS_HST | FMS_ERROR, "%s : client mode\n", __func__);
        } else {
            xprint(FMS_HST | FMS_ERROR, "%s : unknown socket mode\n", __func__);
        }
        /* NEXT_CHECK error processing, by icecom */
    } else {
        FD_SET(tlink.ListenFD, &allset);
        compareMaxfd(tlink.ListenFD);
        if (tlink.mode == LINK_MODE_CLIENT) {
        } else {
            TcpInfo();
        }
    }

    for (;;) {
        if (ThreadAlive[PTASK0] != TRUE) {
            break;
        }

        rset = allset;
        if (0 > (numEvents = recv_extendedPoll(200, &rset))) {
            xprint(FMS_HST | FMS_ERROR, "%s(%d) : recv_extendedPoll (reason=%s)\n",
                    __func__, __LINE__, strerror(errno));
            if (errno == EINTR) {
                continue;
            } else if (errno == EBADF || errno == EPIPE || errno == EIO) {
                xprint(FMS_HST | FMS_ERROR, "select at ProcessEvent(%s) EXIT !!\n", strerror(errno));
            } else {
                xprint(FMS_HST | FMS_ERROR, "select at ProcessEvent(%s) EXIT !!\n", strerror(errno));
            }
        } else if (numEvents == 0) {
            /* Time out 인 경우 정상처리 한다. */
            continue;
        } else {
            if (tlink.mode == LINK_MODE_SERVER) {
                if (tlink.ListenFD > 0) {
                    if (FD_ISSET(tlink.ListenFD, &rset)) {
                        xprint(FMS_HST | FMS_INFO1, "%s(%d) :: TcpAccept Start\n", __func__, __LINE__);

                        pthread_mutex_lock(&TcpMutex);
                        i = TcpAccept(tlink.ListenFD);
                        pthread_mutex_unlock(&TcpMutex);

                        if (i == MAX_LISTENQ) {
                            xprint(FMS_HST | FMS_ERROR, "%s(%d) :: TcpAccept error\n", __func__, __LINE__);
                            continue;
                        } else {
                            pthread_mutex_lock(&TcpMutex);
                            if (alist[i].AcceptFD > 0) {
                                FD_SET(alist[i].AcceptFD, &allset);
                                compareMaxfd(alist[i].AcceptFD);
#if 0
                                /* 20140723, by jeon */
                                TcpInfo();
#endif
                            } else {
                                xprint(FMS_HST | FMS_ERROR, "TcpAccept fail(fd=%d)\n", alist[i].AcceptFD);
                                pthread_mutex_unlock(&TcpMutex);
                                continue;
                            }
                            pthread_mutex_unlock(&TcpMutex);

                        }
                    }
                }

                pthread_mutex_lock(&TcpMutex);
                for (i = 0; i < MAX_LISTENQ; i++) {
                    if (alist[i].AcceptFD > 0) {
                        if (FD_ISSET(alist[i].AcceptFD, &rset)) {
                            if ((ret = TcpRecv(i, alist[i].AcceptFD, buf)) > 0) {

                                /* 20140723, by jeon */
                                if (hostConf.vmc_system[i].systemport == 0) {
                                    vm_proc_state_msg *hb  = (vm_proc_state_msg *)&buf[DEFAULT_TCP_COMHDR_LENGTH];

                                    alist[i].sysinfo.systemaddr = NBO_NTOHL(hb->vm_ipaddress);
                                    sprintf(alist[i].sysinfo.systemname, "VM-%s", addr2ntoa(alist[i].sysinfo.systemaddr));

                                    hostConf.vmc_system[i].systemaddr = alist[i].sysinfo.systemaddr;
                                    sprintf(hostConf.vmc_system[i].systemname, "%s", alist[i].sysinfo.systemname);

                                    hostConf.vmc_system[i].systemport = alist[i].sysinfo.port;

                                    TcpInfo();
                                }

                                TcpdSock_Event(i, buf);
                            }
                        }
                    }
                }
                pthread_mutex_unlock(&TcpMutex);
            } else if (tlink.mode == LINK_MODE_CLIENT) {
            }
        }
    }

    ThreadAlive[PTASK0] = FALSE;
    ThreadFlags[PTASK0] = FALSE;

    /* pthread mgnt */
    pthread_cleanup_pop(1);

    return(NULL);
}