void RTSPServer ::RTSPClientConnection::handleCmd_REGISTER(char const* cmd/*"REGISTER" or "DEREGISTER"*/, char const* url, char const* urlSuffix, char const* fullRequestStr, Boolean reuseConnection, Boolean deliverViaTCP, char const* proxyURLSuffix) { char* responseStr; if (fOurRTSPServer.weImplementREGISTER(cmd, proxyURLSuffix, responseStr)) { // The "REGISTER"/"DEREGISTER" command - if we implement it - may require access control: if (!authenticationOK(cmd, urlSuffix, fullRequestStr)) return; // We implement the "REGISTER"/"DEREGISTER" command by first replying to it, then actually // handling it (in a separate event-loop task, that will get called after the reply has // been done). // Hack: If we're going to reuse the command's connection for subsequent RTSP commands, then we // delay the actual handling of the command slightly, to make it less likely that the first // subsequent RTSP command (e.g., "DESCRIBE") will end up in the client's reponse buffer before // the socket (at the far end) gets reused for RTSP command handling. setRTSPResponse(responseStr == NULL ? "200 OK" : responseStr); delete[] responseStr; ParamsForREGISTER* registerParams = new ParamsForREGISTER(cmd, this, url, urlSuffix, reuseConnection, deliverViaTCP, proxyURLSuffix); envir().taskScheduler().scheduleDelayedTask(reuseConnection ? DELAY_USECS_AFTER_REGISTER_RESPONSE : 0, (TaskFunc*)continueHandlingREGISTER, registerParams); } else if (responseStr != NULL) { setRTSPResponse(responseStr); delete[] responseStr; } else { handleCmd_notSupported(); } }
void RTSPServer ::RTSPClientConnection::handleCmd_REGISTER(char const* cmd/*"REGISTER" or "DEREGISTER"*/, char const* url, char const* urlSuffix, char const* fullRequestStr, Boolean reuseConnection, Boolean deliverViaTCP, char const* proxyURLSuffix) { char* responseStr; if (fOurRTSPServer.weImplementREGISTER(cmd, proxyURLSuffix, responseStr)) { // The "REGISTER"/"DEREGISTER" command - if we implement it - may require access control: if (!authenticationOK(cmd, urlSuffix, fullRequestStr)) return; // We implement the "REGISTER"/"DEREGISTER" command by first replying to it, then actually handling it // (in a separate event-loop task, that will get called after the reply has been done): setRTSPResponse(responseStr == NULL ? "200 OK" : responseStr); delete[] responseStr; ParamsForREGISTER* registerParams = new ParamsForREGISTER(cmd, this, url, urlSuffix, reuseConnection, deliverViaTCP, proxyURLSuffix); envir().taskScheduler().scheduleDelayedTask(0, (TaskFunc*)continueHandlingREGISTER, registerParams); } else if (responseStr != NULL) { setRTSPResponse(responseStr); delete[] responseStr; } else { handleCmd_notSupported(); } }