/* --- 解析HTTP报文头,并与目标服务器建立连接 --- */ int HttpConnect(int nLocalSock, int *nRemoteSock) { char szIp[30], buf[4096]; int nread; memset(buf,0,sizeof(buf)); /* 接收网页浏览端发送的数据请求 */ while ((nread = read(nLocalSock, buf, sizeof(buf))) < 0) { if (errno != EINTR) /* 信号导致read中断,继续接收 */ { perror("read"); /* 其它错,结束子进程 */ return 1; } } memset(szIp, 0, sizeof(szIp)); /* 解析HTTP报文,简单验证报文,并获取目标服务器的IP地址 */ if (GetObjectIp(buf, szIp) != 0) return 2; /* 连接目标服务器,端口80(网页浏览端口) */ if (!VERIFY(ConnectSock(nRemoteSock, 80, szIp) == 0)) { PrintLog(stderr, "Connect Server Fail,Addr[%s]", szIp); return 3; /* 连接目标端失败,结束子进程 */ } if (WriteFile(*nRemoteSock, buf, nread) != 0) /* 转发数据 */ { PrintLog(stderr, "Write message to server error[%d]", nread); perror("write"); /* 数据转发失败,结束子进程 */ return 4; } return 0; /* 成功返回 */ }
/*! \brief opTIMER_READY byte code * */ void cTimerReady(void) { IP TmpIp; DSPSTAT DspStat = BUSYBREAK; TmpIp = GetObjectIp(); if (*(ULONG*)PrimParPointer() <= cTimerGetmS()) { DspStat = NOBREAK; } if (DspStat == BUSYBREAK) { // Rewind IP SetObjectIp(TmpIp - 1); } SetDispatchStatus(DspStat); }