bool InboundRTMPSDiscriminatorProtocol::BindSSL(IOBuffer &buffer) { //1. Create the RTMP protocol BaseProtocol *pRTMP = new InboundRTMPProtocol(); if (!pRTMP->Initialize(GetCustomParameters())) { FATAL("Unable to create RTMP protocol"); pRTMP->EnqueueForDelete(); return false; } //2. Destroy the link BaseProtocol *pFar = _pFarProtocol; pFar->ResetNearProtocol(); ResetFarProtocol(); //3. Create the new links pFar->SetNearProtocol(pRTMP); pRTMP->SetFarProtocol(pFar); //4. Set the application pRTMP->SetApplication(GetApplication()); //5. Enqueue for delete this protocol EnqueueForDelete(); //6. Process the data if (!pRTMP->SignalInputData(buffer)) { FATAL("Unable to process data"); pRTMP->EnqueueForDelete(); } return true; }
bool InboundHTTP4RTMP::ProcessSend(vector<string> &parts) { BaseProtocol *pProtocol = Bind(parts[2]); if (pProtocol == NULL) { FATAL("Unable to bind protocol"); return false; } if (!pProtocol->SignalInputData(_inputBuffer)) { FATAL("Unable to call upper protocol"); return false; } _outputBuffer.ReadFromByte(1); IOBuffer *pBuffer = pProtocol->GetOutputBuffer(); if (pBuffer != NULL) { _outputBuffer.ReadFromBuffer(GETIBPOINTER(*pBuffer), GETAVAILABLEBYTESCOUNT(*pBuffer)); pBuffer->IgnoreAll(); } return BaseProtocol::EnqueueForOutbound(); }