ServerPacket* BasicPacketFlow::HXPacketToServerPacket(IHXPacket* pPacket) { ServerPacket* pServerPacket; // This is a travesty of justice, but it's REALLY fast if (pPacket->QueryInterface(IID_ServerPacket,(void **)0xffffd00d) == HXR_OK) { pServerPacket = (ServerPacket *)pPacket; } else { IHXRTPPacket *pRTPPacket; PANIC(("Old-Style IHXPacket Wrapping Used\n")); if (pPacket->QueryInterface(IID_IHXRTPPacket, (void**) &pRTPPacket) == HXR_OK) { pServerPacket = new ServerRTPPacket(); pRTPPacket->Release(); } else { pServerPacket = new (m_pProc->pc->mem_cache) ServerPacket(); } pServerPacket->SetPacket(pPacket); } // set the TSD flag UINT16 unRule = pPacket->GetASMRuleNumber(); PacketStream* pStream = &m_pStreams[pPacket->GetStreamNumber()]; BOOL bIsTSD = pStream->m_pRules[unRule].m_bTimeStampDelivery; pServerPacket->SetTSD(bIsTSD); return pServerPacket; }