ULONG SlapEcoUoaGetObjCallOption ( ANSC_HANDLE hThisObject, ANSC_HANDLE hSlapObject, char* method_name, SLAP_PARAMETER_LIST* params_in ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_ENV_CONTROLLER_OBJECT pMyObject = (PSLAP_ENV_CONTROLLER_OBJECT)hThisObject; PSLAP_OBJ_MAPPER_OBJECT pSlapObjMapper = (PSLAP_OBJ_MAPPER_OBJECT )pMyObject->hSlapObjMapper; PSLAP_OBJ_RECORD_OBJECT pSlapObjRecord = (PSLAP_OBJ_RECORD_OBJECT )hSlapObject; PSLAP_OBJ_ENTITY_OBJECT pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT )pSlapObjRecord->hSlapObjEntity; PSLAP_SRV_COMPONENT_OBJECT pSlapSrvComponent = (PSLAP_SRV_COMPONENT_OBJECT )pSlapObjRecord->hSlapSrvComponent; if ( !pSlapObjEntity ) { return 0; } return pSlapObjEntity->ResolveCallOption ( (ANSC_HANDLE)pSlapObjEntity, method_name, params_in ); }
ANSC_STATUS SlapEcoUoaDeleteObject ( ANSC_HANDLE hThisObject, ANSC_HANDLE hSlapObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_ENV_CONTROLLER_OBJECT pMyObject = (PSLAP_ENV_CONTROLLER_OBJECT)hThisObject; PSLAP_OBJ_MAPPER_OBJECT pSlapObjMapper = (PSLAP_OBJ_MAPPER_OBJECT )pMyObject->hSlapObjMapper; PSLAP_OBJ_CONTAINER_OBJECT pSlapObjContainer = (PSLAP_OBJ_CONTAINER_OBJECT )NULL; PSLAP_OBJ_ENTITY_OBJECT pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT )NULL; PSLAP_OBJ_RECORD_OBJECT pSlapObjRecord = (PSLAP_OBJ_RECORD_OBJECT )hSlapObject; PSLAP_SRV_COMPONENT_OBJECT pSlapSrvComponent = (PSLAP_SRV_COMPONENT_OBJECT )NULL; if ( !pSlapObjRecord ) { return ANSC_STATUS_UNAPPLICABLE; } else { pSlapObjContainer = (PSLAP_OBJ_CONTAINER_OBJECT)pSlapObjRecord->hSlapObjContainer; pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT )pSlapObjRecord->hSlapObjEntity; pSlapSrvComponent = (PSLAP_SRV_COMPONENT_OBJECT)pSlapObjRecord->hSlapSrvComponent; } if ( !pSlapObjEntity ) { pSlapObjRecord->Remove((ANSC_HANDLE)pSlapObjRecord); return ANSC_STATUS_INTERNAL_ERROR; } else { if ( pSlapObjRecord->GetRef((ANSC_HANDLE)pSlapObjRecord) > 0 ) { pSlapObjRecord->AcqAccess((ANSC_HANDLE)pSlapObjRecord); pSlapObjRecord->DecRef ((ANSC_HANDLE)pSlapObjRecord); pSlapObjRecord->RelAccess((ANSC_HANDLE)pSlapObjRecord); } returnStatus = pSlapObjEntity->DelObjRecord ( (ANSC_HANDLE)pSlapObjEntity, (ANSC_HANDLE)pSlapObjContainer, (ANSC_HANDLE)pSlapSrvComponent, FALSE ); } return returnStatus; }
ANSC_HANDLE SlapOeoOlaGetObjectProperty ( ANSC_HANDLE hThisObject, char* property_name ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_ENTITY_OBJECT pMyObject = (PSLAP_OBJ_ENTITY_OBJECT)hThisObject; PSLAP_OBJECT_PROPERTY pObjectProperty = (PSLAP_OBJECT_PROPERTY )NULL; return pMyObject->GetObjectProperty((ANSC_HANDLE)pMyObject, property_name); }
ANSC_HANDLE SlapOeoOlaGetMethodDescriptor ( ANSC_HANDLE hThisObject, char* method_name, SLAP_PARAMETER_LIST* param_list_input ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_ENTITY_OBJECT pMyObject = (PSLAP_OBJ_ENTITY_OBJECT)hThisObject; PSLAP_METHOD_DESCRIPTOR pMethodDescriptor = (PSLAP_METHOD_DESCRIPTOR)NULL; return pMyObject->GetMethodDescriptor2((ANSC_HANDLE)pMyObject, method_name, param_list_input); }
ANSC_STATUS SlapEcoUoaEnrollObjDescriptor ( ANSC_HANDLE hThisObject, ANSC_HANDLE hObjDescr ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_ENV_CONTROLLER_OBJECT pMyObject = (PSLAP_ENV_CONTROLLER_OBJECT)hThisObject; PSLAP_OBJ_MAPPER_OBJECT pSlapObjMapper = (PSLAP_OBJ_MAPPER_OBJECT )pMyObject->hSlapObjMapper; PSLAP_OBJECT_DESCRIPTOR pObjDescriptor = (PSLAP_OBJECT_DESCRIPTOR )hObjDescr; PSLAP_OBJ_ENTITY_OBJECT pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT )NULL; pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT)SlapCreateObjEntity ( pMyObject->hContainerContext, (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)NULL ); if ( !pSlapObjEntity ) { return ANSC_STATUS_RESOURCES; } else { pSlapObjEntity->hSlapUoaIf = pMyObject->hSlapUoaIf; pSlapObjEntity->hSlapBssIf = pMyObject->hSlapBssIf; pSlapObjEntity->SetObjDescriptor((ANSC_HANDLE)pSlapObjEntity, (ANSC_HANDLE)pObjDescriptor); } returnStatus = pSlapObjMapper->AddObjEntity ( (ANSC_HANDLE)pSlapObjMapper, pObjDescriptor->ObjName, (ANSC_HANDLE)pSlapObjEntity ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { pSlapObjEntity->Remove((ANSC_HANDLE)pSlapObjEntity); } return returnStatus; }
ANSC_STATUS SlapOeoResolveCallDescrO ( ANSC_HANDLE hThisObject, char* call_description, SLAP_PARAMETER_LIST* param_list ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_ENTITY_OBJECT pMyObject = (PSLAP_OBJ_ENTITY_OBJECT)hThisObject; returnStatus = pMyObject->ResolveCallDescrI ( (ANSC_HANDLE)pMyObject, call_description, param_list ); return returnStatus; }
ANSC_STATUS SlapOboRemove ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_BROKER_OBJECT pMyObject = (PSLAP_OBJ_BROKER_OBJECT)hThisObject; PSLAP_OBJ_ENTITY_OBJECT pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT)pMyObject->hSlapObjEntity; PSLAP_OBJ_PROXY_OBJECT pSlapObjProxy = (PSLAP_OBJ_PROXY_OBJECT )pMyObject->hSlapObjProxy; if ( pMyObject->PathName ) { AnscFreeMemory(pMyObject->PathName); pMyObject->PathName = NULL; } pMyObject->DelAllObjBrokers((ANSC_HANDLE)pMyObject); if ( pSlapObjEntity ) { pSlapObjEntity->Remove((ANSC_HANDLE)pSlapObjEntity); pMyObject->hSlapObjEntity = (ANSC_HANDLE)NULL; } if ( pSlapObjProxy ) { pSlapObjProxy->Remove((ANSC_HANDLE)pSlapObjProxy); pMyObject->hSlapObjProxy = (ANSC_HANDLE)NULL; } AnscFreeLock (&pMyObject->OboTableLock); AnscLcoRemove((ANSC_HANDLE)pMyObject ); return ANSC_STATUS_SUCCESS; }
ANSC_HANDLE SlapEcoUoaAcqObjectAccess ( ANSC_HANDLE hThisObject, ANSC_HANDLE hSlapContainer, char* obj_name ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_ENV_CONTROLLER_OBJECT pMyObject = (PSLAP_ENV_CONTROLLER_OBJECT)hThisObject; PSLAP_OBJ_MAPPER_OBJECT pSlapObjMapper = (PSLAP_OBJ_MAPPER_OBJECT )pMyObject->hSlapObjMapper; PSLAP_OBJ_CONTAINER_OBJECT pSlapObjContainer = (PSLAP_OBJ_CONTAINER_OBJECT )hSlapContainer; PSLAP_OBJ_ENTITY_OBJECT pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT )NULL; PSLAP_OBJ_RECORD_OBJECT pSlapObjRecord = (PSLAP_OBJ_RECORD_OBJECT )NULL; if ( !obj_name ) { return (ANSC_HANDLE)NULL; } else if ( !pSlapObjContainer ) { pSlapObjContainer = (PSLAP_OBJ_CONTAINER_OBJECT)pMyObject->hSlapDefContainer; if ( !pSlapObjContainer ) { return (ANSC_HANDLE)NULL; } } pSlapObjEntity = (PSLAP_OBJ_ENTITY_OBJECT)pSlapObjMapper->GetObjEntity1 ( (ANSC_HANDLE)pSlapObjMapper, obj_name ); if ( !pSlapObjEntity ) { return (ANSC_HANDLE)NULL; } else { pSlapObjRecord = (PSLAP_OBJ_RECORD_OBJECT)pSlapObjEntity->GetObjRecord ( (ANSC_HANDLE)pSlapObjEntity, (ANSC_HANDLE)pSlapObjContainer, 0 ); } if ( !pSlapObjRecord ) { return (ANSC_HANDLE)NULL; } else { pSlapObjRecord->IncRef ((ANSC_HANDLE)pSlapObjRecord); pSlapObjRecord->RelAccess((ANSC_HANDLE)pSlapObjRecord); } return (ANSC_HANDLE)pSlapObjRecord; }
ULONG SlapOeoResolveCallOption ( ANSC_HANDLE hThisObject, char* method_name, SLAP_PARAMETER_LIST* param_list ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_ENTITY_OBJECT pMyObject = (PSLAP_OBJ_ENTITY_OBJECT)hThisObject; PSLAP_METHOD_DESCRIPTOR pMethodDescriptor1 = (PSLAP_METHOD_DESCRIPTOR)NULL; PSLAP_METHOD_DESCRIPTOR pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)NULL; PSLAP_OBJECT_PROPERTY pObjectProperty = (PSLAP_OBJECT_PROPERTY )NULL; ULONG ulCallOptions = (ULONG )0; char* property_name = (char* )NULL; pMethodDescriptor1 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, method_name, param_list ); if ( !pMethodDescriptor1 ) { return 0; } else { ulCallOptions = pMethodDescriptor1->CallOptions; } /* * If the specified method is one the pre-defined 'bridge' functions, namely 'GetProperty', * 'SetProperty', 'GetItem', 'SetItem', 'GetItemByIndex', and 'SetItemByIndex', we need to * locate the target method and examine it's call options. */ switch ( pMethodDescriptor1->BridgeId ) { case SLAP_BRIDGE_ID_GetProperty : if ( !param_list ) { break; } else if ( param_list->ParamCount < 1 ) { break; } else if ( (param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string) || (param_list->ParamArray[0].Variant.varString == NULL ) ) { break; } else { property_name = param_list->ParamArray[0].Variant.varString; } pObjectProperty = (PSLAP_OBJECT_PROPERTY)pMyObject->GetObjectProperty ( (ANSC_HANDLE)pMyObject, property_name ); if ( !pObjectProperty ) { break; } else { /* * When searching for the target method, we need to make sure the number of * input parameters match the one specified in the target method descriptor. * Since the content of the parameters don't really matter when perform the * lookup, we simply modify the parameter count. */ param_list->ParamCount--; pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, pObjectProperty->GetMethodName, param_list ); param_list->ParamCount++; } if ( !pMethodDescriptor2 ) { break; } else if ( pMethodDescriptor2->CallOptions & SLAP_CALL_OPTION_skipGoaTranslation ) { ulCallOptions |= SLAP_CALL_OPTION_skipGoaTranslation; } break; case SLAP_BRIDGE_ID_SetProperty : if ( !param_list ) { break; } else if ( param_list->ParamCount < 1 ) { break; } else if ( (param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string) || (param_list->ParamArray[0].Variant.varString == NULL ) ) { break; } else { property_name = param_list->ParamArray[0].Variant.varString; } pObjectProperty = (PSLAP_OBJECT_PROPERTY)pMyObject->GetObjectProperty ( (ANSC_HANDLE)pMyObject, property_name ); if ( !pObjectProperty ) { break; } else { /* * When searching for the target method, we need to make sure the number of * input parameters match the one specified in the target method descriptor. * Since the content of the parameters don't really matter when perform the * lookup, we simply modify the parameter count. */ param_list->ParamCount--; pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, pObjectProperty->SetMethodName, param_list ); param_list->ParamCount++; } if ( !pMethodDescriptor2 ) { break; } else if ( pMethodDescriptor2->CallOptions & SLAP_CALL_OPTION_skipGoaTranslation ) { ulCallOptions |= SLAP_CALL_OPTION_skipGoaTranslation; } break; case SLAP_BRIDGE_ID_GetItem : if ( TRUE ) { property_name = "CollectionItem"; } pObjectProperty = (PSLAP_OBJECT_PROPERTY)pMyObject->GetObjectProperty ( (ANSC_HANDLE)pMyObject, property_name ); if ( !pObjectProperty ) { break; } else { pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, pObjectProperty->GetMethodName, param_list ); } if ( !pMethodDescriptor2 ) { break; } else if ( pMethodDescriptor2->CallOptions & SLAP_CALL_OPTION_skipGoaTranslation ) { ulCallOptions |= SLAP_CALL_OPTION_skipGoaTranslation; } break; case SLAP_BRIDGE_ID_SetItem : if ( TRUE ) { property_name = "CollectionItem"; } pObjectProperty = (PSLAP_OBJECT_PROPERTY)pMyObject->GetObjectProperty ( (ANSC_HANDLE)pMyObject, property_name ); if ( !pObjectProperty ) { break; } else { pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, pObjectProperty->SetMethodName, param_list ); } if ( !pMethodDescriptor2 ) { break; } else if ( pMethodDescriptor2->CallOptions & SLAP_CALL_OPTION_skipGoaTranslation ) { ulCallOptions |= SLAP_CALL_OPTION_skipGoaTranslation; } break; case SLAP_BRIDGE_ID_GetItemByIndex : if ( TRUE ) { property_name = "ItemByIndex"; } pObjectProperty = (PSLAP_OBJECT_PROPERTY)pMyObject->GetObjectProperty ( (ANSC_HANDLE)pMyObject, property_name ); if ( !pObjectProperty ) { break; } else { pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, pObjectProperty->GetMethodName, param_list ); } if ( !pMethodDescriptor2 ) { break; } else if ( pMethodDescriptor2->CallOptions & SLAP_CALL_OPTION_skipGoaTranslation ) { ulCallOptions |= SLAP_CALL_OPTION_skipGoaTranslation; } break; case SLAP_BRIDGE_ID_SetItemByIndex : if ( TRUE ) { property_name = "ItemByIndex"; } pObjectProperty = (PSLAP_OBJECT_PROPERTY)pMyObject->GetObjectProperty ( (ANSC_HANDLE)pMyObject, property_name ); if ( !pObjectProperty ) { break; } else { pMethodDescriptor2 = (PSLAP_METHOD_DESCRIPTOR)pMyObject->GetMethodDescriptor2 ( (ANSC_HANDLE)pMyObject, pObjectProperty->SetMethodName, param_list ); } if ( !pMethodDescriptor2 ) { break; } else if ( pMethodDescriptor2->CallOptions & SLAP_CALL_OPTION_skipGoaTranslation ) { ulCallOptions |= SLAP_CALL_OPTION_skipGoaTranslation; } break; default : break; } return ulCallOptions; }
ANSC_STATUS SlapOmoDelObjEntity ( ANSC_HANDLE hThisObject, char* path, BOOL bFreeObjEntity ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_OBJ_MAPPER_OBJECT pMyObject = (PSLAP_OBJ_MAPPER_OBJECT )hThisObject; PSLAP_OBJ_MAPPER_PROPERTY pProperty = (PSLAP_OBJ_MAPPER_PROPERTY)&pMyObject->Property; PSLAP_OBJ_BROKER_OBJECT pRootObjBroker = (PSLAP_OBJ_BROKER_OBJECT )pMyObject->hRootObjBroker; PSLAP_OBJ_ENTITY_OBJECT pObjEntity = NULL; PSLAP_OBJ_BROKER_OBJECT pThisObjBroker = NULL; PSLAP_OBJ_BROKER_OBJECT pNextObjBroker = NULL; PANSC_TOKEN_CHAIN pPathTokenChain = NULL; PANSC_STRING_TOKEN pPathToken = NULL; pPathTokenChain = (PANSC_TOKEN_CHAIN)AnscAllocateMemory(sizeof(ANSC_TOKEN_CHAIN)); if ( !pPathTokenChain ) { return ANSC_STATUS_RESOURCES; } else { returnStatus = AnscSetTokenChain ( (ANSC_HANDLE)pPathTokenChain, path, SLAP_OBJ_PATH_SEPARATORS ); } if ( returnStatus != ANSC_STATUS_SUCCESS ) { AnscDelTokenChain((ANSC_HANDLE)pPathTokenChain); AnscFreeMemory ((ANSC_HANDLE)pPathTokenChain); return returnStatus; } else { pThisObjBroker = (PSLAP_OBJ_BROKER_OBJECT)pMyObject->GetObjBroker ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pPathTokenChain ); AnscDelTokenChain((ANSC_HANDLE)pPathTokenChain); AnscFreeMemory ((ANSC_HANDLE)pPathTokenChain); } if ( pThisObjBroker ) { pObjEntity = (PSLAP_OBJ_ENTITY_OBJECT)pThisObjBroker->hSlapObjEntity; if ( pObjEntity ) { pThisObjBroker->hSlapObjEntity = (ANSC_HANDLE)NULL; if ( bFreeObjEntity ) { pObjEntity->Remove((ANSC_HANDLE)pObjEntity); } } } else { return ANSC_STATUS_CANT_FIND; } /* * After removing the associated Obj Entity Object, the Obj Broker Object may have become * removeable if there's no more Broker Objects currently associated with it. We shall trim all * the unnecessary branches from the bottom to the top. */ while ( pThisObjBroker && (pThisObjBroker != pRootObjBroker) && pThisObjBroker->IsRemoveable((ANSC_HANDLE)pThisObjBroker) ) { pNextObjBroker = pThisObjBroker; pThisObjBroker = (PSLAP_OBJ_BROKER_OBJECT)pNextObjBroker->hOwnerContext; returnStatus = pThisObjBroker->DelObjBroker ( (ANSC_HANDLE)pThisObjBroker, pNextObjBroker->PathName ); } return ANSC_STATUS_SUCCESS; }