示例#1
0
文件: http.c 项目: metux/wwwoffle
int HTTP_ReadHead(Header **reply_head)
{
 ParseReply(server,reply_head);

 return(server);
}
示例#2
0
//--------------------------------------------------------------------------------
//      ParseInput
//--------------------------------------------------------------------------------
void TIASClient::ParseInput()
{
    UByte ctrlByte;
    Boolean lastFrame;
    Boolean ackedFrame;
    IrDAErr result;

    // A reply frame has been received - parse it and decide what to do with it

    fGetPutBuffer->Seek(0, kPosBeg);
    ctrlByte = fGetPutBuffer->Get();
    lastFrame = ctrlByte & kIASFrameLstBit;
    ackedFrame = ctrlByte & kIASFrameAckBit;

    XTRACE(kParseInputEvent, ctrlByte, fReceiveState);

    switch(fReceiveState) {
	case kIASClientReceiveReply:
	    if (ackedFrame) {
		// The peer device is acking (unnecessary/optionally) my single frame request
		// It should have the lst bit on
		XASSERT(lastFrame);
		// Keep waiting for the actual reply
		GetStart();
	    }
	    else {
		if (ctrlByte == (kIASOpGetValueByClass | kIASFrameLstBit)) {
		    result = ParseReply();
		    LookupComplete(result);
		}
		else if (lastFrame) {
		    LookupComplete(kIrDAErrGeneric);    // ***FIXME: Better error code
		}
		else {
		    fReceiveState = kIASClientReceiveWaitFinal;
		}
	    }
	    break;

	case kIASClientReceiveWaitFinal:
	    // I don't accept multi-frame replies, so all I want to do is get the
	    // final frame of the reply so I can complete the lookup request with an error.
	    XASSERT(!ackedFrame);
	    if (lastFrame) {
		// Reset the receive state
		fReceiveState = kIASClientReceiveReply;
		LookupComplete(kIrDAErrGeneric);    // ***FIXME: Better error code
	    }
	    break;

	default:
	    break;
    }

    // Ack the frame I don't want/care about
    if (fReceiveState == kIASClientReceiveWaitFinal) {
	fGetPutBuffer->Seek(0, kPosBeg);
	fGetPutBuffer->Put(kIASOpGetValueByClass | kIASFrameAckBit);
	PutStart();
    }

} // TIASClient::ParseInput