コード例 #1
0
ファイル: bxrshc.c プロジェクト: grtlinux/TAIN_IB2
/*----------------------------------------------------------------------------*/
BOOL SendDataEDI(int cSock, char* sMsgCls)
/*----------------------------------------------------------------------------*/
{
	BOOL flag = TRUE;

	if (flag)
	{
		pLine = (MSG_LINE*) &sSendEdiLine;

		if (flag)
		{

			/*
			 * 송신길이를 구한다.
			 */
			iSendEdiLen = sizeof(MSG_HDR) + strlen(sDataLine);

			/*
			 * 송신전문을 세팅한다.
			 */

			sprintf(sSendEdiLine, "%04d%3.3s%04d%2.2s%4.4s%1.1s%1.1s%-8.8s%3.3s%s"
				, iSendEdiLen - 4
				, "EFT"
				, iSendEdiLen - 4
				, "02"
				, sMsgCls
				, "S"
				, "C"
				, sFileId
				, "000"
				, sDataLine);

			if (!flag) LOG(_FL_, 0, 0, "[SendDataEDI]...[%s] ", sSendEdiLine);
		}

		if (flag)
		{
			/*
			 * 송신한다. :       MSG_HDR + sDataLine ->
			 */
			int ret = SockSend(cSock, sSendEdiLine, iSendEdiLen);
			if (ret <= 0)
			{
				CSockFDCLR(cSock);
				return FALSE;
			}

			if (flag)
			{
				LOG(_FL_, 0, 0, "SEND(%d): EDI_HDR+DATA [%*.*s][%s]"
					, cSock, sizeof(MSG_HDR), sizeof(MSG_HDR), (char*)&pLine->stHdr
					, sDataLine);
			}
		}
	}

	return TRUE;
}
コード例 #2
0
int SSClient::SendMsg( Packet & packet )
{

	DataBuffer * buff = packet.GetBuffer();
	int iRet = SockSend( buff->GetReadPtr(), buff->GetDataSize());
	if(iRet < 0)
		return -1;
		
	return 0;
}
コード例 #3
0
ファイル: fginstDlg.cpp プロジェクト: big3k/oneway
bool GetUrlFileSize(LPCSTR host, USHORT port, LPCSTR obj, unsigned long &FileSize, CString cookie)
{
    SOCKADDR_IN sin;
    SOCKET sock = INVALID_SOCKET;
    CString csHead, tmp;
    int err;
    char bBuf[MAX_BUFFER_SIZE] = {0};
    int cbBuf = MAX_BUFFER_SIZE;
    int cbRead = 0;
    bool result = false;

    SockGetAddr(host, port, sin);

    sock = INVALID_SOCKET;
    sock = SockConnect((LPSOCKADDR)&sin, REGULAR_CONN_TIMEOUT);
    if (sock != INVALID_SOCKET) {

        tmp.Format(HTTP_RANGE1, 0, 1); //only first 1 byte for test
        if (cookie != "") {
            csHead.Format(HTTP_HEADER, obj, host, tmp, USER_AGENT, host, "Cookie: ", cookie);
        } else {
            csHead.Format(HTTP_HEADER, obj, host, tmp, USER_AGENT, host, "", "");
        }

        SockSend(sock, csHead, csHead.GetLength(), err);

        if (SockReadable(sock, REGULAR_CONN_TIMEOUT * 2)) {
            memset(bBuf, 0, cbBuf);
            cbRead = recv(sock, bBuf, cbBuf, 0);
            if(cbRead > 0) {
                if(strstr(bBuf, "HTTP/1.1 206")  && strstr(bBuf, "\r\n\r\n")) {
                    char *p = strstr(bBuf, "Content-Range: bytes ");
                    if (p) {
                        p += strlen("Content-Range: bytes 0-1/");
                        sscanf(p, "%d", &FileSize);
                        result = true;
                    }
                } else {
                    //LOG_ERR("GetUrlFileSize Error:  obj=%s recvsize=%d.",  obj, cbRead);
                }
            } else {
                //LOG_ERR("GetUrlFileSize recv Error:  obj=%s",  obj);
            }
        }
        closesocket(sock);
    } else {
        //LOG_ERR("GetUrlFileSize sockconnect error.");
    }

    return result;
}
コード例 #4
0
ファイル: nssock.c プロジェクト: 0xabad1dea/aolserver
static int
SockProc(Ns_DriverCmd cmd, Ns_Sock *sock, struct iovec *bufs, int nbufs)
{
    int n;

    switch (cmd) {
    case DriverRecv:
	n = SockRecv(sock->sock, bufs, nbufs);
	if (n < 0
	    && ns_sockerrno == EWOULDBLOCK
	    && Ns_SockWait(sock->sock, NS_SOCK_READ, sock->driver->recvwait) == NS_OK) {
	    n = SockRecv(sock->sock, bufs, nbufs);
	}
	break;

    case DriverSend:
	n = SockSend(sock->sock, bufs, nbufs);
	if (n < 0
	    && ns_sockerrno == EWOULDBLOCK
	    && Ns_SockWait(sock->sock, NS_SOCK_WRITE, sock->driver->sendwait) == NS_OK) {
	    n = SockSend(sock->sock, bufs, nbufs);
	}
	break;

    case DriverKeep:
    case DriverClose:
	/* NB: Nothing to do. */
	n = 0;
	break;

    default:
	/* Unsupported command. */
	n = -1;
	break;
    }
    return n;
}
コード例 #5
0
ファイル: fginstDlg.cpp プロジェクト: big3k/oneway
BOOL GetNetworkTime()
{
    SOCKADDR_IN sin;
    SOCKET sock = INVALID_SOCKET;
    CString csHead, tmp;
    CBuffer reqBuf, respBuf;
    int err;//, len = 0;
    char bBuf[MAX_BUFFER_SIZE] = {0};
    int cbBuf = MAX_BUFFER_SIZE;
    int cbRead = 0;
    BOOL re = false;
//nTodayDay=10;return TRUE;
    SockGetAddr(option.time_server, 80, sin);
    sock = INVALID_SOCKET;
    sock = SockConnect((LPSOCKADDR)&sin, REGULAR_CONN_TIMEOUT);
    if (sock != INVALID_SOCKET) {
        csHead.Format(HTTP_HEADER, "/", option.time_server, tmp, USER_AGENT, option.time_server, "", "");
        SockSend(sock, csHead, csHead.GetLength(), err);

        if (SockReadable(sock, REGULAR_CONN_TIMEOUT * 2)) {
            //get the 1st recv buf
            memset(bBuf, 0, cbBuf);
            cbRead = recv(sock, bBuf, cbBuf, 0);
            if(cbRead > 0) {
                if(strstr(bBuf, "\r\n\r\n")) {
                    if(strstr(bBuf, "Date:")) {
                        char *sDate = strstr(bBuf, "Date: ") + 10;
                        if(sDate) {
                            sscanf(sDate, "%d", &nTodayDay);
                            nTodayDay = nTodayDay % option.link_count;
                            re = true;
                        }
                    }
                }
            }

        }
        closesocket(sock);
    }

    return re;
}
コード例 #6
0
ファイル: proxy.c プロジェクト: egall/Networking
//
// thread which handles a single http request
//
static int proxy_handlereq(SOCKET sock_client)
{
	SOCKET sock_server;

	char buf[65536];
	char header_line[1024];
	char host[256];
	int		serverPort = 80;
    struct sockaddr     serverSockAddr;

	int gotHeader = 0;
	int count;
	int Status;
	unsigned long nbParm = 0L;
	char newline = '\n';
	fd_set rfds;
	int n, maxfd;

	int one = 1;

	buf[0] = '\0';
	host[0] = '\0';

	// set client socket non-blocking
	if ((Status = SockBlock(sock_client, 0)) < 0)
	{
		SockError("proxy_handlereq(): Failed to clear non-block mode on socket");
		return 1;
	}

	// now get headers from client
	while ((count = proxy_sockgets(sock_client, header_line, 1024)) > 0)
	{
		gotHeader = 1;

		// look for 'Host:' header
		if (!Strnicmp(header_line, "host: ", 6))
		{
			char *pPort;

			strcpy(host, header_line + 6);
			if ((pPort = strchr(host, ':')) != NULL)
			{
				*pPort++ = '\0';
				serverPort = atoi(pPort);
			}
		}

		//MessageBox(0, header_line, "Req header", MB_SYSTEMMODAL);
		strcat(buf, header_line);
		strcat(buf, "\n");
	}

	// add second line terminator to mark end of header
	strcat(buf, "\n");

	// bail if nothing came through
	if (!gotHeader)
	{
		SockClose(sock_client);
		return 1;
	}

	// did we get a host address?
	if (host[0] == '\0')
	{
		char err400[] = "HTTP/1.0 400 Invalid header received from browser\n\n";
		SockSend(sock_client, err400, strlen(err400));
		SockClose(sock_client);
		SockError("proxy_handlereq(): host missing from http header");
		return 1;
	}

	// allow callback function to intercept
	if (proxy_callback_fn != NULL)
		if ((*proxy_callback_fn)(host, buf, sock_client) != 0)
		{
			// callback took over
			SockClose(sock_client);
			return 0;
		}

	//MessageBox(0, buf, "Header", MB_SYSTEMMODAL);

	// change host and portnum if using downstream proxy
	if (proxy_extproxyaddr != NULL)
	{
		strcpy(host, proxy_extproxyaddr);
		serverPort = proxy_extproxyport;
	}

	// try to find server
    if (proxy_getaddr(host, serverPort, &serverSockAddr) == 0)
	{
		SockSend(sock_client, "404 Host Not Found\n\n", 20);
		SockClose(sock_client);
		return 1;
	}

    sock_server = socket(AF_INET, SOCK_STREAM, 0);
#ifdef WINDOWS
	setsockopt(sock_server, IPPROTO_TCP, TCP_NODELAY, (char * ) &one, sizeof (int));
#endif

	// try to connect to server
    if ((Status = connect(sock_server, &serverSockAddr, sizeof(serverSockAddr))) < 0)
	{
		SockSend(sock_client, "404 Host Not Found\n\n", 20);
		SockClose(sock_client);
		return 1;
	}

	// send client's req to server
	SockSend(sock_server, buf, strlen(buf));

	//
	// now loop around relaying stuff between server and client
	//

	maxfd = (sock_client > sock_server ) ? sock_client : sock_server;
	for(;;)
	{
		FD_ZERO(&rfds);
		FD_SET(sock_client, &rfds);
		FD_SET(sock_server, &rfds);

		if ((n = select(maxfd+1, &rfds, NULL, NULL, NULL)) < 0)
		{
			SockError("proxy_handlereq(): select() failed while handling http req");
			//fprintf(logfp, "%s: select() failed!: ", prog);
			//fperror(logfp, "");
			return 1;
		}

		// got data from client - relay to server
		if(FD_ISSET(sock_client, &rfds))
		{
			if ((n = SockReceive(sock_client, buf, sizeof(buf))) <= 0)
				break;  // end of request

			if (SockSend(sock_server, buf, n) != n)
			{
				//fprintf(logfp, "%s: write to: %s failed: ",	prog, http->host);
				//fperror(logfp, "");
				return 1;
			}
			continue;
		}

		// got data from server - relay to client
		if (FD_ISSET(sock_server, &rfds))
		{
			if ((n = SockReceive(sock_server, buf, sizeof(buf))) < 0)
			{
				//fprintf(logfp, "%s: read from: %s failed: ", prog, http->host);
				//fperror(logfp, "");

//				eno = safe_strerror(errno);
//				sprintf(buf, CFAIL, http->hostport, eno);
//				freez(eno);
				//write_socket(m_SockClient, buf, strlen(buf), 0);
				return 1;
			}

			if (n == 0)
				break;		// got all from server

			/* just write */
			if (SockSend(sock_client, buf, n) != n)
			{
				//fprintf(logfp, "%s: write to client failed: ",	prog);
				//fperror(logfp, "");
				return 1;
			}
			continue;

		}	// 'if (got something from server)'
	}		// 'for (;;)' - relaying data between client and server

	// all done - close sockets and terminate this thread
	SockClose(sock_client);
	SockClose(sock_server);

	// see you later
	return 0;

}		// 'proxy_handlereq()'
コード例 #7
0
ファイル: fginstDlg.cpp プロジェクト: big3k/oneway
UINT _DownloadUrlRange(LPVOID p)
{
    DownloadRangeStruct *pDownloadRange = (DownloadRangeStruct *)(long)p;
    int nBlockIndex = pDownloadRange->nBlockIndex;
    if(nBlockIndex < 0 || nBlockIndex >= MAXBLOCKNUMBER) {
        //error
        return 0;
    }

    int nDownloadTimes = 0;

    SOCKADDR_IN sin;
    SOCKET sock = INVALID_SOCKET;
    CString csHead, tmp;
    CBuffer reqBuf, respBuf;
    int err;//, len = 0;
    char bBuf[MAX_BUFFER_SIZE] = {0};
    int cbBuf = MAX_BUFFER_SIZE;
    int cbRead = 0;
    int nFPPos = 0;

    SockGetAddr(pDownloadRange->host, pDownloadRange->port, sin);

    pDownloadRange->bFinished[nBlockIndex] = FALSE;
startDownload:
    nDownloadTimes ++;

    if(pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex] >=
            pDownloadRange->DownloadRangeFileInfo.nBlockLength[nBlockIndex]) {
        //finish this block
        pDownloadRange->bFinished[nBlockIndex] = TRUE;
        return 1;
    }

    //not finished, ...
    sock = INVALID_SOCKET;
    sock = SockConnect((LPSOCKADDR)&sin, REGULAR_CONN_TIMEOUT);
    if (sock != INVALID_SOCKET) {

        nFPPos = pDownloadRange->DownloadRangeFileInfo.nStartPos[nBlockIndex]
                 + pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex];

        if(pDownloadRange->DownloadRangeFileInfo.nEndPos[nBlockIndex] != 0) {
            tmp.Format(HTTP_RANGE1, nFPPos, pDownloadRange->DownloadRangeFileInfo.nEndPos[nBlockIndex]);
        } else {
            tmp.Format(HTTP_RANGE2, nFPPos);
        }

        if(pDownloadRange->cookie != "") {
            csHead.Format(HTTP_HEADER, pDownloadRange->obj, pDownloadRange->host, tmp, USER_AGENT, pDownloadRange->host, "Cookie: ", pDownloadRange->cookie);
        } else {
            csHead.Format(HTTP_HEADER, pDownloadRange->obj, pDownloadRange->host, tmp, USER_AGENT, pDownloadRange->host, "", "");
        }

        SockSend(sock, csHead, csHead.GetLength(), err);

        if (SockReadable(sock, REGULAR_CONN_TIMEOUT)) {
            //get the 1st recv buf
            memset(bBuf, 0, cbBuf);
            cbRead = recv(sock, bBuf, cbBuf, 0);
            if(cbRead > 0) {
                if(strstr(bBuf, "HTTP/1.1 206")  && strstr(bBuf, "\r\n\r\n")) {

                    pDownloadRange->DownloadFileCS.Lock();
                    fseek(pDownloadRange->filepointer, nFPPos, 0);
                    char *s = strstr(bBuf, "\r\n\r\n");
                    int nHeaderLen = s - bBuf + 4;
                    fwrite(s + 4,   1,  cbRead - nHeaderLen, pDownloadRange->filepointer);

                    nFPPos += cbRead - nHeaderLen;
                    pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex] += cbRead - nHeaderLen;
                    UpdateFinishedInfo(pDownloadRange->filepointer, pDownloadRange->DownloadRangeFileInfo.nFileLength, nBlockIndex, &pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex]);

                    fflush(pDownloadRange->filepointer);
                    pDownloadRange->DownloadFileCS.Unlock();

                    memset(bBuf, 0, cbBuf);

                    while(cbRead = recv(sock, bBuf, cbBuf, 0), cbRead > 0) {
                        pDownloadRange->DownloadFileCS.Lock();
                        fseek(pDownloadRange->filepointer, nFPPos, 0);
                        fwrite(bBuf,   1,  cbRead, pDownloadRange->filepointer);

                        nFPPos += cbRead;
                        pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex] += cbRead;
                        UpdateFinishedInfo(pDownloadRange->filepointer, pDownloadRange->DownloadRangeFileInfo.nFileLength, nBlockIndex, &pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex]);

                        fflush(pDownloadRange->filepointer);
                        pDownloadRange->DownloadFileCS.Unlock();

                        Sleep(1);
                        memset(bBuf, 0, cbBuf);

                        if(pDownloadRange->DownloadRangeFileInfo.nFinishedLength[nBlockIndex] >= pDownloadRange->DownloadRangeFileInfo.nBlockLength[nBlockIndex]) {
                            break;
                        }
                    }
                }
            }

        }
        closesocket(sock);
    } else {
        Sleep(500);
    }


    if(nDownloadTimes  < MAX_RETRY_TIMES) {
        Sleep(200);
        goto startDownload;
    }

    pDownloadRange->bFinished[nBlockIndex] = TRUE;
    return 0;
}
コード例 #8
0
ファイル: fginstDlg.cpp プロジェクト: big3k/oneway
BOOL DownloadUrl_wiki(LPCSTR host, USHORT port, LPCSTR objPath, LPCTSTR objName, CString &csNewURL, CString &csCookie)
{
    SOCKADDR_IN sin;
    SOCKET sock = INVALID_SOCKET;
    CString csHead, tmp, csPostStr;
    CBuffer reqBuf, respBuf;
    int err;
    char bBuf[MAX_BUFFER_SIZE] = {0};
    int cbBuf = MAX_BUFFER_SIZE;
    int cbRead = 0;
    char *s = NULL;
    BOOL re = false;

    csCookie = "";
    csNewURL = "";
    SockGetAddr(host, port, sin);
    sock = INVALID_SOCKET;
    sock = SockConnect((LPSOCKADDR)&sin, REGULAR_CONN_TIMEOUT);
    if (sock != INVALID_SOCKET) {
        csHead.Format(WIKI_HTTP_GET,
                      objPath, USER_AGENT, host);
        SockSend(sock, csHead, csHead.GetLength(), err);

        if (SockReadable(sock, REGULAR_CONN_TIMEOUT)) {
            memset(bBuf, 0, cbBuf);
            cbRead = recv(sock, bBuf, cbBuf, 0);
            if(cbRead > 0) {
                if(strstr(bBuf, "HTTP/1.1 200")  && strstr(bBuf, "\r\n\r\n")) {
                    s = strstr(bBuf, "Set-Cookie: ");
                    char *sEnd = strstr(s, ";");
                    if(sEnd) {
                        csCookie = CString(s + 12, sEnd - s -12);
                    } else {
                        sEnd = strstr(s, "\r\n");
                        csCookie = CString(s + 12, sEnd - s - 12);
                    }
                }
            }
        }
        closesocket(sock);
    }

    if (csCookie == "") {
        goto Error;
    }

    sock = INVALID_SOCKET;
    sock = SockConnect((LPSOCKADDR)&sin, REGULAR_CONN_TIMEOUT);
    if (sock != INVALID_SOCKET) {
        CString csRef;
        unsigned long nID = 0;
        sscanf(objPath, "/%d", &nID);
        csPostStr.Format(WIKI_POST_STRING, nID, objName);
        int nActLen = csPostStr.GetLength();

        csRef.Format("http://%s%s", host, objPath);
        csHead.Format(WIKI_HTTP_POST,
                      objPath, csRef, USER_AGENT, host, nActLen, csCookie, csPostStr);
        SockSend(sock, csHead, csHead.GetLength(), err);

        csCookie += "; ";
        if (SockReadable(sock, REGULAR_CONN_TIMEOUT)) {
            memset(bBuf, 0, cbBuf);
            cbRead = recv(sock, bBuf, cbBuf, 0);
            if(cbRead > 0) {
                if(strstr(bBuf, "HTTP/1.1 ")  && strstr(bBuf, "\r\n\r\n")) {

                    s = strstr(bBuf, "Set-Cookie: ");
                    char *sEnd = strstr(s, ";");
                    if(sEnd) {
                        csCookie += CString(s + 12, sEnd - s -12);
                    } else {
                        sEnd = strstr(s, "\r\n");
                        csCookie += CString(s + 12, sEnd - s - 12);
                    }

                    s = strstr(bBuf, "Location: ");
                    sEnd = strstr(s, "\r\n");
                    csNewURL = CString(s + 10, sEnd - s -10);
                    re =  true;
                }
            }
        }
        closesocket(sock);
    }

Error:

    return re;

}
コード例 #9
0
ファイル: fginstDlg.cpp プロジェクト: big3k/oneway
BOOL DownloadUrl_live(LPCSTR host, USHORT port, LPCSTR objPath, CString csName, CString &csNewURL)
{
    SOCKADDR_IN sin;
    SOCKET sock = INVALID_SOCKET;
    CString csHead;
    CBuffer reqBuf;
    int err;
    char bBuf[MAX_BUFFER_SIZE + 1] = {0};
    int cbBuf = MAX_BUFFER_SIZE;
    int cbRead = 0;
    char *s = NULL;
    BOOL re = false;
    CString url;
    CString csContent = "";

    csNewURL = "";
    SockGetAddr(host, port, sin);
    sock = INVALID_SOCKET;
    sock = SockConnect((LPSOCKADDR)&sin, REGULAR_CONN_TIMEOUT);
    if (sock != INVALID_SOCKET) {
        csHead.Format(LIVE_HTTP_GET,
                      objPath, USER_AGENT, host);
        SockSend(sock, csHead, csHead.GetLength(), err);

        if (SockReadable(sock, REGULAR_CONN_TIMEOUT)) {
            memset(bBuf, 0, cbBuf);
            cbRead = recv(sock, bBuf, cbBuf, 0);
            if(cbRead > 0) {
                if(strstr(bBuf, "HTTP/1.1 200")  && strstr(bBuf, "\r\n\r\n")) { // && strstr(bBuf, "downloadUrl:")){
                    s = strstr(bBuf, "\r\n\r\n");
                    csContent = s;

                    CString str;
                    str.Format("%s\\x3fdownload\\x26psid\\x3d1', downloadUrl: '", csName);
                    while(SockReadable(sock, REGULAR_CONN_TIMEOUT)) {
                        if(cbRead = recv(sock, bBuf, cbBuf, 0), cbRead > 0) {
                            bBuf[cbRead] = 0x00;
                            csContent += bBuf;
                            if(csContent.Find(str) != -1) {
                                url = csContent.Mid(csContent.Find(str) + str.GetLength());
                                if((url.Find("http") != -1) && (url.Find("\\x3fdownload") != -1)) {
                                    //MessageBox(0,url, csName, 0);
                                    break;
                                }
                            }
                        }
                    }

                    if(csContent.Find(str) != -1) {
                        url = csContent.Mid(csContent.Find(str) + str.GetLength());
                        url = url.Mid(url.Find("http"));
                        url = url.Left(url.Find("\\x3fdownload"));
                        url.Replace("\\x3a", ":");
                        url.Replace("\\x2f", "/");
                        csNewURL = url;
                        re = true;
                    }
                }
            }
        }
        closesocket(sock);
    }

    return re;
}