kern_return_t RollLogNow(QTSLogRollRec* theRollLogRec) { if (theRollLogRec->rollTransferLog) (void)QTSS_DoService(sRollAccessLog, NULL); if (theRollLogRec->rollErrorLog) (void)QTSS_DoService(sRollErrorLog, NULL); return SCNoError; }
QTSS_Error StateChange(QTSS_StateChange_Params* stateChangeParams) { if (stateChangeParams->inNewState == qtssIdleState) { WriteShutdownMessage(); } else if (stateChangeParams->inNewState == qtssRunningState) { // Always force our preferences to be reread when we change // the server's state back to the start -- [sfu] QTSS_ServiceID id; (void) QTSS_IDForService(QTSS_REREAD_PREFS_SERVICE, &id); (void) QTSS_DoService(id, NULL); WriteStartupMessage(); } return QTSS_NoErr; }
void APITests_DEBUG() { if (0) { qtss_printf("QTSSAdminModule start tests \n"); if (0) { qtss_printf("admin called locked \n"); const int ksleeptime = 15; qtss_printf("sleeping for %d seconds \n",ksleeptime); sleep(ksleeptime); qtss_printf("done sleeping \n"); qtss_printf("QTSS_GlobalUnLock \n"); (void) QTSS_GlobalUnLock(); qtss_printf("again sleeping for %d seconds \n",ksleeptime); sleep(ksleeptime); } if (0) { qtss_printf(" GET VALUE PTR TEST \n"); QTSS_Object *sessionsPtr = NULL; UInt32 paramLen = sizeof(sessionsPtr); UInt32 numValues = 0; QTSS_Error err = 0; err = QTSS_GetNumValues (sServer, qtssSvrClientSessions, &numValues); err = QTSS_GetValuePtr(sServer, qtssSvrClientSessions, 0, (void**)&sessionsPtr, ¶mLen); qtss_printf("Admin Module Num Sessions = %"_U32BITARG_" sessions[0] = %"_S32BITARG_" err = %"_S32BITARG_" paramLen =%"_U32BITARG_"\n", numValues, (SInt32) *sessionsPtr,err,paramLen); UInt32 numAttr = 0; if (sessionsPtr) { err = QTSS_GetNumAttributes (*sessionsPtr, &numAttr); qtss_printf("Admin Module Num attributes = %"_U32BITARG_" sessions[0] = %"_S32BITARG_" err = %"_S32BITARG_"\n", numAttr, (SInt32) *sessionsPtr,err); QTSS_Object theAttributeInfo; char nameBuff[128]; UInt32 len = 127; for (UInt32 i = 0; i < numAttr; i++) { err = QTSS_GetAttrInfoByIndex(*sessionsPtr, i, &theAttributeInfo); nameBuff[0] = 0;len = 127; err = QTSS_GetValue (theAttributeInfo, qtssAttrName,0, nameBuff,&len); nameBuff[len] = 0; qtss_printf("found %s \n",nameBuff); } } } if (0) { qtss_printf(" GET VALUE TEST \n"); QTSS_Object sessions = NULL; UInt32 paramLen = sizeof(sessions); UInt32 numValues = 0; QTSS_Error err = 0; err = QTSS_GetNumValues (sServer, qtssSvrClientSessions, &numValues); err = QTSS_GetValue(sServer, qtssSvrClientSessions, 0, (void*)&sessions, ¶mLen); qtss_printf("Admin Module Num Sessions = %"_U32BITARG_" sessions[0] = %"_S32BITARG_" err = %"_S32BITARG_" paramLen = %"_U32BITARG_"\n", numValues, (SInt32) sessions,err, paramLen); if (sessions) { UInt32 numAttr = 0; err = QTSS_GetNumAttributes (sessions, &numAttr); qtss_printf("Admin Module Num attributes = %"_U32BITARG_" sessions[0] = %"_S32BITARG_" err = %"_S32BITARG_"\n", numAttr,(SInt32) sessions,err); QTSS_Object theAttributeInfo; char nameBuff[128]; UInt32 len = 127; for (UInt32 i = 0; i < numAttr; i++) { err = QTSS_GetAttrInfoByIndex(sessions, i, &theAttributeInfo); nameBuff[0] = 0;len = 127; err = QTSS_GetValue (theAttributeInfo, qtssAttrName,0, nameBuff,&len); nameBuff[len] = 0; qtss_printf("found %s \n",nameBuff); } } } if (0) { qtss_printf("----------------- Start test ----------------- \n"); qtss_printf(" GET indexed pref TEST \n"); QTSS_Error err = 0; UInt32 numAttr = 1; err = QTSS_GetNumAttributes (sModulePrefs, &numAttr); qtss_printf("Admin Module Num preference attributes = %"_U32BITARG_" err = %"_S32BITARG_"\n", numAttr, err); QTSS_Object theAttributeInfo; char valueBuff[512]; char nameBuff[128]; QTSS_AttributeID theID; UInt32 len = 127; UInt32 i = 0; qtss_printf("first pass over preferences\n"); for ( i = 0; i < numAttr; i++) { err = QTSS_GetAttrInfoByIndex(sModulePrefs, i, &theAttributeInfo); nameBuff[0] = 0;len = 127; err = QTSS_GetValue (theAttributeInfo, qtssAttrName,0, nameBuff,&len); nameBuff[len]=0; theID = qtssIllegalAttrID; len = sizeof(theID); err = QTSS_GetValue (theAttributeInfo, qtssAttrID,0, &theID,&len); qtss_printf("found preference=%s \n",nameBuff); } valueBuff[0] = 0;len = 512; err = QTSS_GetValue (sModulePrefs, theID,0, valueBuff,&len);valueBuff[len] = 0; qtss_printf("Admin Module QTSS_GetValue name = %s id = %"_S32BITARG_" value=%s err = %"_S32BITARG_"\n", nameBuff,theID, valueBuff, err); err = QTSS_SetValue (sModulePrefs,theID,0, valueBuff,len); qtss_printf("Admin Module QTSS_SetValue name = %s id = %"_S32BITARG_" value=%s err = %"_S32BITARG_"\n", nameBuff,theID, valueBuff, err); { QTSS_ServiceID id; (void) QTSS_IDForService(QTSS_REREAD_PREFS_SERVICE, &id); (void) QTSS_DoService(id, NULL); } valueBuff[0] = 0;len = 512; err = QTSS_GetValue (sModulePrefs, theID,0, valueBuff,&len);valueBuff[len] = 0; qtss_printf("Admin Module QTSS_GetValue name = %s id = %"_S32BITARG_" value=%s err = %"_S32BITARG_"\n", nameBuff,theID, valueBuff, err); err = QTSS_SetValue (sModulePrefs,theID,0, valueBuff,len); qtss_printf("Admin Module QTSS_SetValue name = %s id = %"_S32BITARG_" value=%s err = %"_S32BITARG_"\n", nameBuff,theID, valueBuff, err); qtss_printf("second pass over preferences\n"); for ( i = 0; i < numAttr; i++) { err = QTSS_GetAttrInfoByIndex(sModulePrefs, i, &theAttributeInfo); nameBuff[0] = 0;len = 127; err = QTSS_GetValue (theAttributeInfo, qtssAttrName,0, nameBuff,&len); nameBuff[len]=0; theID = qtssIllegalAttrID; len = sizeof(theID); err = QTSS_GetValue (theAttributeInfo, qtssAttrID,0, &theID,&len); qtss_printf("found preference=%s \n",nameBuff); } qtss_printf("----------------- Done test ----------------- \n"); } } }
QTSS_Error FilterRequest(QTSS_Filter_Params* inParams) { if (NULL == inParams || NULL == inParams->inRTSPSession || NULL == inParams->inRTSPRequest) { Assert(0); return QTSS_NoErr; } OSMutexLocker locker(sAdminMutex); //check to see if we should handle this request. Invokation is triggered //by a "GET /" request QTSS_Error err = QTSS_NoErr; QTSS_RTSPRequestObject theRequest = inParams->inRTSPRequest; UInt32 paramLen = sizeof(sSessID); err = QTSS_GetValue(inParams->inRTSPSession, qtssRTSPSesID, 0, (void*)&sSessID, ¶mLen); if (err != QTSS_NoErr) return QTSS_NoErr; StrPtrLen theFullRequest; err = QTSS_GetValuePtr(theRequest, qtssRTSPReqFullRequest, 0, (void**)&theFullRequest.Ptr, &theFullRequest.Len); if (err != QTSS_NoErr) return QTSS_NoErr; StringParser fullRequest(&theFullRequest); if ( !IsAdminRequest(&fullRequest) ) return QTSS_NoErr; if ( !AcceptSession(inParams->inRTSPSession) ) { (void)QTSS_Write(inParams->inRTSPRequest, sPermissionDeniedHeader, ::strlen(sPermissionDeniedHeader), NULL, 0); (void)QTSS_Write(inParams->inRTSPRequest, sHTMLBody, ::strlen(sHTMLBody), NULL, 0); KeepSession(theRequest,false); return QTSS_NoErr; } if(!GetRequestAuthenticatedState(inParams)) // must authenticate before handling { if(QTSS_IsGlobalLocked()) // must NOT be global locked return QTSS_RequestFailed; if (!IsAuthentic(inParams,&fullRequest)) { (void)QTSS_Write(inParams->inRTSPRequest, sUnauthorizedResponseHeader, ::strlen(sUnauthorizedResponseHeader), NULL, 0); (void)QTSS_Write(inParams->inRTSPRequest, sHTMLBody, ::strlen(sHTMLBody), NULL, 0); KeepSession(theRequest,false); return QTSS_NoErr; } } if (GetRequestFlushState(inParams)) { StillFlushing(inParams,true); return QTSS_NoErr; } if (!QTSS_IsGlobalLocked()) { if (InWaitInterval(inParams)) return QTSS_NoErr; //qtss_printf("New Request Wait for GlobalLock session=%"_U32BITARG_"\n",sSessID); (void)QTSS_RequestGlobalLock(); KeepSession(theRequest,true); return QTSS_NoErr; } //qtss_printf("Handle request session=%"_U32BITARG_"\n",sSessID); APITests_DEBUG(); if (sQueryPtr != NULL) { delete sQueryPtr; sQueryPtr = NULL; } sQueryPtr = NEW QueryURI(&theFullRequest); if (sQueryPtr == NULL) return QTSS_NoErr; ShowQuery_DEBUG(); if (sAdminPtr != NULL) { delete sAdminPtr; sAdminPtr = NULL; } UInt32 result = sQueryPtr->EvalQuery(NULL, NULL); if (result == 0) do { if( ElementNode_CountPtrs() > 0) { ElementNode_ShowPtrs(); Assert(0); } GetQueryData(theRequest); SendResult(theRequest); delete sAdminPtr; sAdminPtr = NULL; if (sQueryPtr && !sQueryPtr->QueryHasReponse()) { UInt32 err = 404; (void) sQueryPtr->EvalQuery(&err,NULL); ReportErr(inParams, err); break; } if (sQueryPtr && sQueryPtr->QueryHasReponse()) { ReportErr(inParams, sQueryPtr->GetEvaluResult()); } if (sQueryPtr->fIsPref && sQueryPtr->GetEvaluResult() == 0) { QTSS_ServiceID id; (void) QTSS_IDForService(QTSS_REREAD_PREFS_SERVICE, &id); (void) QTSS_DoService(id, NULL); } } while(false); else { SendHeader(theRequest); ReportErr(inParams, sQueryPtr->GetEvaluResult()); } if (sQueryPtr != NULL) { delete sQueryPtr; sQueryPtr = NULL; } (void) StillFlushing(inParams,true); return QTSS_NoErr; }
kern_return_t RereadPreferences() { //Just tell the prefs object to reread. This is totally thread safe. (void)QTSS_DoService(sRereadPreferences, NULL); return SCNoError; }