ANSC_STATUS Bmc2EnvcoAddCommandProperty ( ANSC_HANDLE hThisObject, ANSC_HANDLE hCommandProperty, ANSC_HANDLE hCommandInsertBefore ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBMC2_ENV_CONTROLLER_OBJECT pMyObject = (PBMC2_ENV_CONTROLLER_OBJECT )hThisObject; PBMC2_ENV_CONTROLLER_PROPERTY pProperty = (PBMC2_ENV_CONTROLLER_PROPERTY)&pMyObject->Property; PBMC2_COMMAND_PROPERTY pBmc2CommandProperty = (PBMC2_COMMAND_PROPERTY )hCommandProperty; PBMC2_COMMAND_PROPERTY pBmc2CommandPropRef = (PBMC2_COMMAND_PROPERTY )hCommandInsertBefore; ULONG ulHashIndex = AnscHashString(pBmc2CommandProperty->CommandName, AnscSizeOfString(pBmc2CommandProperty->CommandName), BMC2_ENVCO_COMPO_TABLE_SIZE); AnscAcquireLock (&pMyObject->CompoTableLock); if ( !pBmc2CommandPropRef ) { AnscQueuePushEntry(&pMyObject->CompoTable[ulHashIndex], &pBmc2CommandProperty->Linkage); } else { /* This makes sure that the command property with more specific domain pattern name appears before those * with less specific name. So when the command is issued, framework always tries to match domain * with longer domain name, therefore there will be no mismatch. */ AnscQueuePushEntryBefore(&pMyObject->CompoTable[ulHashIndex], &pBmc2CommandProperty->Linkage, &pBmc2CommandPropRef->Linkage); } AnscReleaseLock (&pMyObject->CompoTableLock); return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE HttpFcoGetFormElement ( ANSC_HANDLE hThisObject, char* name ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_FORM_CONTENT_OBJECT pMyObject = (PHTTP_FORM_CONTENT_OBJECT)hThisObject; PHTTP_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PHTTP_FORM_ELEMENT pFormElement = NULL; PSINGLE_LINK_ENTRY pSLinkEntry = NULL; ULONG ulHashIndex = AnscHashString(name, AnscSizeOfString(name), HTTP_FCO_FEO_TABLE_SIZE); AnscAcquireLock(&pMyObject->FeoTableLock); pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->FeoTable[ulHashIndex]); while ( pSLinkEntry ) { pFormElement = ACCESS_HTTP_FORM_ELEMENT(pSLinkEntry); pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry); if ( AnscEqualString(pFormElement->Name, name, TRUE) ) { AnscReleaseLock(&pMyObject->FeoTableLock); return (ANSC_HANDLE)pFormElement; } } AnscReleaseLock(&pMyObject->FeoTableLock); return (ANSC_HANDLE)NULL; }
ANSC_STATUS HttpFcoAddFormElement ( ANSC_HANDLE hThisObject, ANSC_HANDLE hFeo ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PHTTP_FORM_CONTENT_OBJECT pMyObject = (PHTTP_FORM_CONTENT_OBJECT)hThisObject; PHTTP_HFP_INTERFACE pHfpIf = (PHTTP_HFP_INTERFACE )pMyObject->hHfpIf; PHTTP_FORM_ELEMENT pFormElement = (PHTTP_FORM_ELEMENT )hFeo; ULONG ulHashIndex = 0; ulHashIndex = AnscHashString ( pFormElement->Name, AnscSizeOfString(pFormElement->Name), HTTP_FCO_FEO_TABLE_SIZE ); pFormElement->FormIndex = pMyObject->FormIndex++; pFormElement->HashIndex = ulHashIndex; AnscAcquireLock (&pMyObject->FeoTableLock); AnscQueuePushEntry(&pMyObject->FeoTable[ulHashIndex], &pFormElement->Linkage); AnscReleaseLock (&pMyObject->FeoTableLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS AnscLpccoAddPartyAddr ( ANSC_HANDLE hThisObject, ANSC_HANDLE party_addr ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_LPC_CONNECTOR_OBJECT pMyObject = (PANSC_LPC_CONNECTOR_OBJECT)hThisObject; PANSC_LPC_PARTY_ADDR pPartyAddr = (PANSC_LPC_PARTY_ADDR )party_addr; char* pPartyName = (char* )pPartyAddr->PartyName; ULONG ulHashIndex = AnscHashString(pPartyName, AnscSizeOfString(pPartyName), ANSC_LPCCO_PARTY_TABLE_SIZE); if ( pMyObject->GetPartyAddr ( (ANSC_HANDLE)pMyObject, pPartyName ) != (ANSC_HANDLE)NULL ) { AnscTrace ( "[AnscLpccoAddPartyAddr] collison found, failed to add party <%s> from %d.%d.%d.%d (%d)\n", pPartyAddr->PartyName, pPartyAddr->PartyAddr.Dot[0], pPartyAddr->PartyAddr.Dot[1], pPartyAddr->PartyAddr.Dot[2], pPartyAddr->PartyAddr.Dot[3], pPartyAddr->PartyPort ); return ANSC_STATUS_COLLISION; } AnscAcquireLock (&pMyObject->PartyTableLock); AnscQueuePushEntry(&pMyObject->PartyTable[ulHashIndex], &pPartyAddr->Linkage); AnscReleaseLock (&pMyObject->PartyTableLock); AnscTrace ( "[AnscLpccoAddPartyAddr] party <%s> from %d.%d.%d.%d (%d) has been added.\n", pPartyAddr->PartyName, pPartyAddr->PartyAddr.Dot[0], pPartyAddr->PartyAddr.Dot[1], pPartyAddr->PartyAddr.Dot[2], pPartyAddr->PartyAddr.Dot[3], pPartyAddr->PartyPort ); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS AnscLpccoDelPartyAddr ( ANSC_HANDLE hThisObject, char* party_name ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PANSC_LPC_CONNECTOR_OBJECT pMyObject = (PANSC_LPC_CONNECTOR_OBJECT)hThisObject; PANSC_LPC_PARTY_ADDR pPartyAddr = (PANSC_LPC_PARTY_ADDR )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; ULONG ulHashIndex = AnscHashString(party_name, AnscSizeOfString(party_name), ANSC_LPCCO_PARTY_TABLE_SIZE); AnscAcquireLock(&pMyObject->PartyTableLock); pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->PartyTable[ulHashIndex]); while ( pSLinkEntry ) { pPartyAddr = ACCESS_ANSC_LPC_PARTY_ADDR(pSLinkEntry); pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry); if ( AnscEqualString ( pPartyAddr->PartyName, party_name, FALSE ) ) { AnscQueuePopEntryByLink(&pMyObject->PartyTable[ulHashIndex], &pPartyAddr->Linkage); AnscFreeMemory(pPartyAddr); break; } } AnscReleaseLock(&pMyObject->PartyTableLock); return ANSC_STATUS_SUCCESS; }
ANSC_STATUS BwrmPmoDelPage ( ANSC_HANDLE hThisObject, char* root_path, char* file_path ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBWRM_PAGE_MANAGER_OBJECT pMyObject = (PBWRM_PAGE_MANAGER_OBJECT )hThisObject; PBWRM_PAGE_MANAGER_PROPERTY pProperty = (PBWRM_PAGE_MANAGER_PROPERTY )&pMyObject->Property; PANSC_TIMER_DESCRIPTOR_OBJECT pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject; PBWRM_COOKED_PAGE_OBJECT pCookedPage = (PBWRM_COOKED_PAGE_OBJECT )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; ULONG ulHashIndex = (ULONG )AnscHashString(file_path, AnscSizeOfString(file_path), BWRM_PMO_CPO_TABLE_SIZE); AnscAcquireLock(&pMyObject->CpoTableLock); pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->CpoTable[ulHashIndex]); while ( pSLinkEntry ) { pCookedPage = ACCESS_BWRM_COOKED_PAGE_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); if ( pCookedPage->MatchPath ( (ANSC_HANDLE)pCookedPage, root_path, file_path ) ) { AnscSListPopEntryByLink(&pMyObject->CpoTable[ulHashIndex], &pCookedPage->Linkage); pCookedPage->Remove((ANSC_HANDLE)pCookedPage); break; } } AnscReleaseLock(&pMyObject->CpoTableLock); if ( pMyObject->GetPageCount((ANSC_HANDLE)pMyObject) == 0 ) { pCacheTimerObject->Stop((ANSC_HANDLE)pCacheTimerObject); } return ANSC_STATUS_SUCCESS; }
ANSC_STATUS BwrmPmoAddPage ( ANSC_HANDLE hThisObject, char* root_path, char* file_path, ANSC_HANDLE hCookedPage ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBWRM_PAGE_MANAGER_OBJECT pMyObject = (PBWRM_PAGE_MANAGER_OBJECT )hThisObject; PBWRM_PAGE_MANAGER_PROPERTY pProperty = (PBWRM_PAGE_MANAGER_PROPERTY )&pMyObject->Property; PANSC_TIMER_DESCRIPTOR_OBJECT pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject; PBWRM_COOKED_PAGE_OBJECT pCookedPage = (PBWRM_COOKED_PAGE_OBJECT )hCookedPage; ULONG ulHashIndex = (ULONG )AnscHashString(file_path, AnscSizeOfString(file_path), BWRM_PMO_CPO_TABLE_SIZE); ULONG ulPageCount = 0; ULONG ulCurTime = AnscGetTickInSeconds(); pMyObject->Timestamp = ulCurTime; pCookedPage->SetRootPath ((ANSC_HANDLE)pCookedPage, root_path); pCookedPage->SetPagePath ((ANSC_HANDLE)pCookedPage, file_path); pCookedPage->SetTimestamp((ANSC_HANDLE)pCookedPage, ulCurTime); pCookedPage->IncRefCount ((ANSC_HANDLE)pCookedPage ); AnscAcquireLock (&pMyObject->CpoTableLock); AnscSListPushEntry(&pMyObject->CpoTable[ulHashIndex], &pCookedPage->Linkage); AnscReleaseLock (&pMyObject->CpoTableLock); if ( TRUE ) { ulPageCount = pMyObject->GetPageCount((ANSC_HANDLE)pMyObject); if ( ulPageCount == 1 ) { pCacheTimerObject->Start((ANSC_HANDLE)pCacheTimerObject); } else if ( ulPageCount > pProperty->CacheEntryCount ) { pCookedPage = (PBWRM_COOKED_PAGE_OBJECT)pMyObject->GetOldestPage((ANSC_HANDLE)pMyObject); if ( pCookedPage && 0 == pCookedPage->GetRefCount((ANSC_HANDLE)pCookedPage) ) { returnStatus = pMyObject->DelPage ( (ANSC_HANDLE)pMyObject, pCookedPage->GetRootPath((ANSC_HANDLE)pCookedPage), pCookedPage->GetPagePath((ANSC_HANDLE)pCookedPage) ); } } } return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE BwrmPmoGetPage ( ANSC_HANDLE hThisObject, char* root_path, char* file_path ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBWRM_PAGE_MANAGER_OBJECT pMyObject = (PBWRM_PAGE_MANAGER_OBJECT )hThisObject; PBWRM_PAGE_MANAGER_PROPERTY pProperty = (PBWRM_PAGE_MANAGER_PROPERTY )&pMyObject->Property; PANSC_TIMER_DESCRIPTOR_OBJECT pCacheTimerObject = (PANSC_TIMER_DESCRIPTOR_OBJECT)pMyObject->hCacheTimerObject; PBWRM_COOKED_PAGE_OBJECT pCookedPage = (PBWRM_COOKED_PAGE_OBJECT )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; ULONG ulHashIndex = (ULONG )AnscHashString(file_path, AnscSizeOfString(file_path), BWRM_PMO_CPO_TABLE_SIZE); ULONG ulCurTime = AnscGetTickInSeconds(); pMyObject->Timestamp = ulCurTime; AnscAcquireLock(&pMyObject->CpoTableLock); pSLinkEntry = AnscSListGetFirstEntry(&pMyObject->CpoTable[ulHashIndex]); while ( pSLinkEntry ) { pCookedPage = ACCESS_BWRM_COOKED_PAGE_OBJECT(pSLinkEntry); pSLinkEntry = AnscSListGetNextEntry(pSLinkEntry); if ( pCookedPage->MatchPath ( (ANSC_HANDLE)pCookedPage, root_path, file_path ) ) { pCookedPage->SetTimestamp((ANSC_HANDLE)pCookedPage, ulCurTime); pCookedPage->IncRefCount ((ANSC_HANDLE)pCookedPage); AnscReleaseLock(&pMyObject->CpoTableLock); return (ANSC_HANDLE)pCookedPage; } } AnscReleaseLock(&pMyObject->CpoTableLock); return (ANSC_HANDLE)NULL; }
ANSC_HANDLE Bmc2EnvcoDelCommandProperty ( ANSC_HANDLE hThisObject, char* pCommandName, char* pDomainNamePattern ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBMC2_ENV_CONTROLLER_OBJECT pMyObject = (PBMC2_ENV_CONTROLLER_OBJECT )hThisObject; PBMC2_ENV_CONTROLLER_PROPERTY pProperty = (PBMC2_ENV_CONTROLLER_PROPERTY)&pMyObject->Property; PBMC2_COMMAND_PROPERTY pBmc2CommandProperty = (PBMC2_COMMAND_PROPERTY )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; ULONG ulHashIndex = AnscHashString(pCommandName, AnscSizeOfString(pCommandName), BMC2_ENVCO_COMPO_TABLE_SIZE); PBMC2_COMMAND_PROPERTY pBmc2CommandRef = (PBMC2_COMMAND_PROPERTY )NULL; AnscAcquireLock(&pMyObject->CompoTableLock); pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->CompoTable[ulHashIndex]); while ( pSLinkEntry ) { pBmc2CommandProperty = ACCESS_BMC2_COMMAND_PROPERTY(pSLinkEntry); pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry); if ( AnscEqualString ( pBmc2CommandProperty->CommandName, pCommandName, FALSE ) ) { BOOL bDomainMatched = FALSE; /* check if the specified domain matches pattern defined in command property */ if ( !pDomainNamePattern && !pBmc2CommandProperty->DomainNamePattern ) { bDomainMatched = TRUE; } else if ( !pDomainNamePattern && pBmc2CommandProperty->DomainNamePattern ) { if ( AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE) ) { bDomainMatched = TRUE; } } else if ( !pBmc2CommandProperty->DomainNamePattern || AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE) ) { if ( !pDomainNamePattern || AnscEqualString(pDomainNamePattern, "*", TRUE) ) { bDomainMatched = TRUE; } } else { ULONG ulDNLen = AnscSizeOfString(pBmc2CommandProperty->DomainNamePattern); ULONG ulCmdDNLen = AnscSizeOfString(pDomainNamePattern); ULONG ulCmpLen = (ulDNLen > ulCmdDNLen) ? ulCmdDNLen : ulDNLen; if ( !pBmc2CommandRef && AnscEqualString2(pDomainNamePattern, pBmc2CommandProperty->DomainNamePattern, ulCmpLen, FALSE) ) { pBmc2CommandRef = pBmc2CommandProperty; } else if ( !pBmc2CommandRef && (!pBmc2CommandProperty->DomainNamePattern || AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE)) ) { pBmc2CommandRef = pBmc2CommandProperty; } else { BOOL bEndWithStar = (pBmc2CommandProperty->DomainNamePattern[ulDNLen - 1] == '*'); if ( bEndWithStar && AnscEqualString2(pDomainNamePattern, pBmc2CommandProperty->DomainNamePattern, ulDNLen - 1, FALSE) ) { pBmc2CommandRef = pBmc2CommandProperty; } } bDomainMatched = AnscEqualString ( pBmc2CommandProperty->DomainNamePattern, pDomainNamePattern, FALSE ); } if ( !bDomainMatched ) { continue; } AnscQueuePopEntryByLink(&pMyObject->CompoTable[ulHashIndex], &pBmc2CommandProperty->Linkage); AnscReleaseLock(&pMyObject->CompoTableLock); Bmc2FreeCommandProperty(pBmc2CommandProperty); return (ANSC_HANDLE)NULL; } } AnscReleaseLock(&pMyObject->CompoTableLock); return (ANSC_HANDLE)pBmc2CommandRef; }
ANSC_HANDLE Bmc2EnvcoGetCommandProperty ( ANSC_HANDLE hThisObject, char* pCommandName, char* pDomainName ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PBMC2_ENV_CONTROLLER_OBJECT pMyObject = (PBMC2_ENV_CONTROLLER_OBJECT )hThisObject; PBMC2_ENV_CONTROLLER_PROPERTY pProperty = (PBMC2_ENV_CONTROLLER_PROPERTY)&pMyObject->Property; PBMC2_COMMAND_PROPERTY pBmc2CommandProperty = (PBMC2_COMMAND_PROPERTY )NULL; PSINGLE_LINK_ENTRY pSLinkEntry = (PSINGLE_LINK_ENTRY )NULL; ULONG ulHashIndex = AnscHashString(pCommandName, AnscSizeOfString(pCommandName), BMC2_ENVCO_COMPO_TABLE_SIZE); AnscAcquireLock(&pMyObject->CompoTableLock); pSLinkEntry = AnscQueueGetFirstEntry(&pMyObject->CompoTable[ulHashIndex]); while ( pSLinkEntry ) { pBmc2CommandProperty = ACCESS_BMC2_COMMAND_PROPERTY(pSLinkEntry); pSLinkEntry = AnscQueueGetNextEntry(pSLinkEntry); if ( AnscEqualString ( pBmc2CommandProperty->CommandName, pCommandName, FALSE ) ) { BOOL bDomainMatched = FALSE; /* check if the specified domain matches pattern defined in command property */ if ( !pBmc2CommandProperty->DomainNamePattern || AnscEqualString(pBmc2CommandProperty->DomainNamePattern, "*", TRUE) ) { bDomainMatched = TRUE; } else { char* pStar = _ansc_strstr(pBmc2CommandProperty->DomainNamePattern, "*"); if ( !pStar ) { bDomainMatched = AnscEqualString ( pBmc2CommandProperty->DomainNamePattern, pDomainName, FALSE ); } else { PANSC_TOKEN_CHAIN pTokenChain = (PANSC_TOKEN_CHAIN)NULL; PANSC_STRING_TOKEN pStringToken = (PANSC_STRING_TOKEN)NULL; ULONG ulCurPos = 0; char* pCurDomain = pDomainName; char* pSubStr = NULL; bDomainMatched = TRUE; pTokenChain = AnscTcAllocate3 ( pBmc2CommandProperty->DomainNamePattern, "*" ); if(pTokenChain) /*RDKB-5887 , CID-24415, null check before use*/ { while ( pStringToken = AnscTcUnlinkToken(pTokenChain) ) { pSubStr = Bmc2EnvcoFindSubStrNoCase(pCurDomain, pStringToken->Name); if ( !pSubStr ) { bDomainMatched = FALSE; } else if ( pCurDomain == pDomainName && *pBmc2CommandProperty->DomainNamePattern != '*' ) { if ( pSubStr != pCurDomain ) { bDomainMatched = FALSE; } } if ( pSubStr ) { pCurDomain = pSubStr + AnscSizeOfString(pStringToken->Name); /* move to next part */ } AnscFreeMemory(pStringToken); if ( !bDomainMatched ) { break; } } AnscTcFree((ANSC_HANDLE)pTokenChain); } } } if ( !bDomainMatched ) { continue; } AnscReleaseLock(&pMyObject->CompoTableLock); return (ANSC_HANDLE)pBmc2CommandProperty; } } AnscReleaseLock(&pMyObject->CompoTableLock); return (ANSC_HANDLE)NULL; }