コード例 #1
0
void KAsyncFetchObject::handleSendPost(KHttpRequest *rq,int got)
{
	if (got<=0) {
		handleConnectError(rq,STATUS_SERVER_ERROR,"cann't send post data to remote server");
		return;
	}
	assert(rq->left_read>=0);
	bool continueSendPost = false;
	if (rq->pre_post_length>0) {
		rq->left_read -= got;
		assert(got<=rq->parser.bodyLen);
		rq->parser.body += got;
		rq->parser.bodyLen -= got;
		rq->pre_post_length -= got;
		continueSendPost = rq->pre_post_length>0;
	} else {
		continueSendPost = buffer.readSuccess(got);
		if (!continueSendPost) {
			//重置buffer,准备下一次post
			buffer.destroy();
		}
	}
	if (continueSendPost) {
		client->upstream_write(rq,resultUpstreamSendPost,bufferUpstreamSendPost);
	} else {
		//try to read post
		if (rq->left_read==0) {
			startReadHead(rq);
			return;
		}
		readPost(rq);
	}
}
コード例 #2
0
QIrSocket::SocketState QIrSocketEngine::connect(int fd,
        const QByteArray &service, quint32 remote)
{
    struct sockaddr_irda addr;
    memset(&addr, 0, sizeof(addr));
    addr.sir_family = AF_IRDA;
    addr.sir_addr = remote;
    strncpy(addr.sir_name, service.constData(), 25);

    if (::connect(fd, reinterpret_cast<sockaddr *>(&addr), sizeof(addr)) < 0) {
        if (errno != EINPROGRESS && errno != EALREADY && errno != EISCONN)
            qWarning("QIrSocketPrivate::initiateConnect: error during connect: %d, %s",
                     errno, strerror(errno));

        if (errno == EISCONN) {
            return QIrSocket::ConnectedState;
        }
        else if (errno == EINPROGRESS || errno == EALREADY) {
            return QIrSocket::ConnectingState;
        }
        else {
            handleConnectError(errno);
            return QIrSocket::UnconnectedState;
        }
    }

    return QIrSocket::ConnectedState;
}
コード例 #3
0
void KAsyncFetchObject::handleConnectResult(KHttpRequest *rq,int got)
{
	if (got==-1) {
		handleConnectError(rq,STATUS_GATEWAY_TIMEOUT,"connect to remote host time out");
		return;
	}
/////////[394]
	sendHead(rq);
}
コード例 #4
0
void KAsyncFetchObject::handleSpdySendHead(KHttpRequest *rq,int got)
{
	if (got<0) {
		handleConnectError(rq,STATUS_SERVER_ERROR,"Cann't Send head to remote server");
		return;
	}
	assert(got==0);
	//发送成功,进入发送成功阶段,此阶段禁止重试
	badStage = BadStage_SendSuccess;
	sendHeadSuccess(rq);
}
コード例 #5
0
void KAsyncFetchObject::handleSendHead(KHttpRequest *rq,int got)
{
	if (got<=0) {
		handleConnectError(rq,STATUS_SERVER_ERROR,"Cann't Send head to remote server");
		return;
	}
	//发送成功,进入发送成功阶段,此阶段禁止重试
	badStage = BadStage_SendSuccess;
	if(buffer.readSuccess(got)){
		//continue send head
		client->upstream_write(rq,resultUpstreamSendHead,bufferUpstreamSendHead);
		return;
	}
	sendHeadSuccess(rq);
}
コード例 #6
0
bool QIrSocketEngine::testConnected(int fd)
{
    int error = 0;
    socklen_t len = sizeof(error);

    if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
        m_error = QIrSocket::UnknownError;
        return false;
    }
    else {
        if (error) {
            handleConnectError(error);
            return false;
        }
    }

    return true;
}
コード例 #7
0
void KAsyncFetchObject::handleReadHead(KHttpRequest *rq,int got)
{
	char *buf = hot;
	if (got<=0) {
		handleConnectError(rq,STATUS_GATEWAY_TIMEOUT,"cann't recv head from remote server");
		return;
	}
	assert(hot);
	hot += got;
	switch(parseHead(rq,buf,got)){
		case Parse_Success:
			client->isGood();
			handleUpstreamRecvedHead(rq);
			break;
		case Parse_Failed:
			handleError(rq,STATUS_GATEWAY_TIMEOUT,"cann't parse upstream protocol");
			break;
		case Parse_Continue:
			client->upstream_read(rq,resultUpstreamReadHead,bufferUpstreamReadHead);
			break;
	}
	
}