int HTTP_ReadHead(Header **reply_head) { ParseReply(server,reply_head); return(server); }
//-------------------------------------------------------------------------------- // 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