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); } }
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; }
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); }
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); }
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); }
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; }
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; } }