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; }
void BaseOutRecording::SignalVideoStreamCapabilitiesChanged( StreamCapabilities *pCapabilities, VideoCodecInfo *pOld, VideoCodecInfo *pNew) { if ((pOld == NULL)&&(pNew != NULL)) return; EnqueueForDelete(); }
void RTSPProtocol::SetApplication(BaseClientApplication *pApplication) { BaseProtocol::SetApplication(pApplication); if (pApplication != NULL) { _pProtocolHandler = (BaseRTSPAppProtocolHandler *) pApplication->GetProtocolHandler(GetType()); if (_pProtocolHandler == NULL) { FATAL("Protocol handler not found"); EnqueueForDelete(); } } else { _pProtocolHandler = NULL; } }
void BaseOutRecording::SignalAudioStreamCapabilitiesChanged( StreamCapabilities *pCapabilities, AudioCodecInfo *pOld, AudioCodecInfo *pNew) { if ((pOld == NULL)&&(pNew != NULL)) return; WARN("Codecs changed and the recordings does not support it. Closing recording"); if (pOld != NULL) FINEST("pOld: %s", STR(*pOld)); if (pNew != NULL) FINEST("pNew: %s", STR(*pNew)); else FINEST("pNew: NULL"); EnqueueForDelete(); }
void ProtocolManager::Shutdown() { while (_activeProtocols.size() > 0) { EnqueueForDelete(MAP_VAL(_activeProtocols.begin())); } }
void IOHandlerManager::ShutdownIOHandlers() { FOR_MAP(_activeIOHandlers, uint32_t, IOHandler *, i) { EnqueueForDelete(MAP_VAL(i)); }
bool InboundHTTP4RTMP::SignalInputData(IOBuffer &buffer) { //1. Get the HTTP far protool and test to see if it has ContentLength InboundHTTPProtocol *pHTTP = (InboundHTTPProtocol *) _pFarProtocol; if (pHTTP == NULL || pHTTP->GetContentLength() == 0) { FATAL("Invalid HTTP request"); return false; } //2. Test it and see if all the data was transfered if (!pHTTP->TransferCompleted()) { return true; } //3. Get the HTTP request Variant request = pHTTP->GetHeaders(); //4. Is this a keep-alive? pHTTP->SetDisconnectAfterTransfer( request[HTTP_HEADERS][HTTP_HEADERS_CONNECTION] != HTTP_HEADERS_CONNECTION_KEEP_ALIVE); DeleteNearProtocol(false); //4. Get the URL string url = request[HTTP_FIRST_LINE][HTTP_URL]; //5. split it in meaningful parts vector<string> parts; split(url, "/", parts); if (parts.size() < 2) { FATAL("Invalid request:\n%s", STR(request.ToString())); return false; } //7. Do the dammage bool result; if (parts[1] == "fcs") { result = ProcessFcs(parts); buffer.Ignore(pHTTP->GetContentLength()); } else if (parts[1] == "open") { result = ProcessOpen(parts); buffer.Ignore(pHTTP->GetContentLength()); } else if (parts[1] == "idle") { result = ProcessIdle(parts); buffer.Ignore(pHTTP->GetContentLength()); } else if (parts[1] == "send") { if (GETAVAILABLEBYTESCOUNT(buffer) < 1) return false; _inputBuffer.ReadFromBuffer(GETIBPOINTER(buffer), pHTTP->GetContentLength()); buffer.Ignore(pHTTP->GetContentLength()); result = ProcessSend(parts); } else { FATAL("Invalid command: %s", STR(parts[1])); result = false; } //8. Cleanup if (!result) { DeleteNearProtocol(true); EnqueueForDelete(); } //9. Done return result; }