void TypeCompiler::generateConstructor(FunctionLiteral *function, ConstructorInfo *constructor) { currentMethod = constructor; currentFunctionLiteral = function; CompilationUnit *cunit = cls->pkgDecl->compilationUnit; CodeState codeState; FuncState funcState; initCodeState(&codeState, &funcState, cunit->filename); cs = &codeState; parList(function, true); declareLocalVariables(function); visitStatementArray(function->statements); closeCodeState(&codeState); constructor->setByteCode(generateByteCode(funcState.f)); currentMethod = NULL; }
void TypeCompiler::functionBody(ExpDesc *e, FunctionLiteral *flit, int line) { FuncState new_fs; BC::openFunction(cs, &new_fs); new_fs.f->linedefined = line; parList(flit, false); // setup closure info here so it is captured as an upvalue char funcinfo[256]; snprintf(funcinfo, 250, "__ls_funcinfo_numargs_%i", flit->childIndex); ExpDesc finfo; BC::singleVar(cs, &finfo, funcinfo); declareLocalVariables(flit); chunk(flit->statements); new_fs.f->lastlinedefined = flit->lineNumber; BC::closeFunction(cs); BC::pushClosure(cs, &new_fs, e); }
void freettcn::TM::CTestManagement::TestCaseStarted(const TciTestCaseIdType &testCaseId, const TciParameterListType ¶meterList, double timer) { _tc = &TestCaseGet(testCaseId.objectName); _tc->Started(parameterList, timer); if (Logging() && LogMask().Get(freettcn::CLogMask::CMD_TM_TC_STARTED)) { TriComponentId comp = { { 0 } }; comp.compName = nullptr; comp.compType.moduleName = nullptr; comp.compType.objectName = nullptr; TciParameterListType parList(parameterList); tliTcStarted(0, TimeStampMgr().Get(), 0, 0, comp, testCaseId, parList, timer); } }
void freettcn::TM::CTestManagement::TestCaseTerminated(const VerdictValue &verdict, const TciParameterListType ¶meterList) { if (_tc) { if (Logging() && LogMask().Get(freettcn::CLogMask::CMD_TM_TC_TERMINATED)) { TriComponentId comp = { { 0 } }; comp.compName = nullptr; comp.compType.moduleName = nullptr; comp.compType.objectName = nullptr; TciParameterListType parList(parameterList); tliTcTerminated(0, TimeStampMgr().Get(), 0, 0, comp, _tc->Id(), parList, verdict); } _tc->Terminated(verdict, parameterList); _tc = 0; } if (_status == RUNNING_TEST_CASE) _status = NOT_RUNNING; }
void TypeCompiler::generateMethod(FunctionLiteral *function, MethodInfo *method) { currentMethod = method; currentMethodCoroutine = function->isCoroutine; currentFunctionLiteral = function; CompilationUnit *cunit = cls->pkgDecl->compilationUnit; CodeState codeState; FuncState funcState; initCodeState(&codeState, &funcState, cunit->filename); cs = &codeState; parList(function, !function->isStatic); declareLocalVariables(function); // we insert a yield to account for argument passing if (function->isCoroutine) { ExpDesc yield; insertYield(&yield); } visitStatementArray(function->statements); closeCodeState(&codeState); method->setByteCode(generateByteCode(funcState.f)); currentMethod = NULL; currentMethodCoroutine = false; }
QTSS_Error DoDescribe(QTSS_StandardRTSP_Params* inParams) { //解析命令 char* theFullPathStr = NULL; QTSS_Error theErr = QTSS_GetValueAsString(inParams->inRTSPRequest, qtssRTSPReqFileName, 0, &theFullPathStr); Assert(theErr == QTSS_NoErr); QTSSCharArrayDeleter theFullPathStrDeleter(theFullPathStr); if (theErr != QTSS_NoErr) return NULL; StrPtrLen theFullPath(theFullPathStr); if (theFullPath.Len != sRelaySuffix.Len ) return NULL; StrPtrLen endOfPath2(&theFullPath.Ptr[theFullPath.Len - sRelaySuffix.Len], sRelaySuffix.Len); if (!endOfPath2.Equal(sRelaySuffix)) { return NULL; } //解析查询字符串 char* theQueryStr = NULL; theErr = QTSS_GetValueAsString(inParams->inRTSPRequest, qtssRTSPReqQueryString, 0, &theQueryStr); Assert(theErr == QTSS_NoErr); QTSSCharArrayDeleter theQueryStringDeleter(theQueryStr); if (theErr != QTSS_NoErr) return NULL; StrPtrLen theQueryString(theQueryStr); QueryParamList parList(theQueryStr); const char* sName = parList.DoFindCGIValueForParam(QUERY_STREAM_NAME); const char* sChannel = parList.DoFindCGIValueForParam(QUERY_STREAM_CHANNEL); if(sName == NULL && sChannel == NULL) { return NULL; } char szChannelURL[256] = {0,}; char szUsername[32] = {0,}; char szPassword[32] = {0,}; const char* sURL = NULL; char sPushServerAddr[256] = {0,}; if (NULL != sChannel) { //find channel info GetChannelInfoById( (char*)sChannel, szChannelURL, sizeof(szChannelURL), szUsername, sizeof(szUsername), szPassword, sizeof(szPassword), sPushServerAddr, sizeof(sPushServerAddr)); if ( (int)strlen(szChannelURL) < 1 ) return NULL; //not found the channel //sURL = "rtsp://192.168.1.186:8557"; sURL = szChannelURL; } else { sURL = parList.DoFindCGIValueForParam(QUERY_STREAM_URL); } //if(sURL == NULL) return NULL; const char* sCMD = parList.DoFindCGIValueForParam(QUERY_STREAM_CMD); bool bStop = false; if(sCMD) { if(::strcmp(sCMD,QUERY_STREAM_CMD_STOP) == 0) bStop = true; } StrPtrLen streamName(NULL!=sName?(char*)sName:(char*)sChannel); //从接口获取信息结构体 EasyRelaySession* session = NULL; //首先查找Map里面是否已经有了对应的流 OSRef* sessionRef = sRelaySessionMap->Resolve(&streamName); if(sessionRef != NULL) { session = (EasyRelaySession*)sessionRef->GetObject(); } else { if(bStop) return NULL; if(sURL == NULL) return NULL; session = NEW EasyRelaySession((char*)sURL, EasyRelaySession::kRTSPTCPClientType, NULL!=sName?(char*)sName:(char*)sChannel, sPushServerAddr); QTSS_Error theErr = session->RelaySessionStart(); if(theErr == QTSS_NoErr) { OS_Error theErr = sRelaySessionMap->Register(session->GetRef()); Assert(theErr == QTSS_NoErr); } else { session->Signal(Task::kKillEvent); return QTSSModuleUtils::SendErrorResponse(inParams->inRTSPRequest, qtssClientNotFound, 0); } //增加一次对RelaySession的无效引用,后面会统一释放 OSRef* debug = sRelaySessionMap->Resolve(&streamName); Assert(debug == session->GetRef()); } sRelaySessionMap->Release(session->GetRef()); if(bStop) { sRelaySessionMap->UnRegister(session->GetRef()); session->Signal(Task::kKillEvent); return QTSSModuleUtils::SendErrorResponse(inParams->inRTSPRequest, qtssSuccessOK, 0); } QTSS_RTSPStatusCode statusCode = qtssRedirectPermMoved; QTSS_SetValue(inParams->inRTSPRequest, qtssRTSPReqStatusCode, 0, &statusCode, sizeof(statusCode)); // Get the ip addr out of the prefs dictionary UInt16 thePort = 554; UInt32 theLen = sizeof(UInt16); theErr = QTSServerInterface::GetServer()->GetPrefs()->GetValue(qtssPrefsRTSPPorts, 0, &thePort, &theLen); Assert(theErr == QTSS_NoErr); //构造本地URL char url[QTSS_MAX_URL_LENGTH] = { 0 }; qtss_sprintf(url,"rtsp://%s:%d/%s.sdp", sLocal_IP_Addr, thePort, NULL!=sName?(char*)sName:(char*)sChannel); StrPtrLen locationRedirect(url); Bool16 sFalse = false; (void)QTSS_SetValue(inParams->inRTSPRequest, qtssRTSPReqRespKeepAlive, 0, &sFalse, sizeof(sFalse)); QTSS_AppendRTSPHeader(inParams->inRTSPRequest, qtssLocationHeader, locationRedirect.Ptr, locationRedirect.Len); return QTSSModuleUtils::SendErrorResponse(inParams->inRTSPRequest, qtssRedirectPermMoved, 0); }