void SlapVhoCloneParamList ( ANSC_HANDLE hThisObject, ANSC_HANDLE src_param_list, ANSC_HANDLE* dst_param_list ) { PSLAP_PARAMETER_LIST src_list = (PSLAP_PARAMETER_LIST)src_param_list; PSLAP_PARAMETER_LIST dst_list = (PSLAP_PARAMETER_LIST)*dst_param_list; ULONG ii = 0; if ( !dst_list ) { dst_list = (PSLAP_PARAMETER_LIST)AnscAllocateMemory ( sizeof(SLAP_PARAMETER_LIST) ); if ( dst_list ) { dst_list->ParamCount = 0; } } else { SlapCleanParamList(dst_list); } if ( dst_list ) { dst_list->ParamCount = src_list->ParamCount; for ( ii = 0; ii < src_list->ParamCount; ii++ ) { SlapCloneVariable ( (&src_list->ParamArray[ii]), (&dst_list->ParamArray[ii]) ); } } *dst_param_list = dst_list; return; }
ANSC_STATUS DslhVarroNotifyValueChanged ( ANSC_HANDLE hThisObject ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PDSLH_VAR_RECORD_OBJECT pMyObject = (PDSLH_VAR_RECORD_OBJECT )hThisObject; PDSLH_OBJ_RECORD_OBJECT pObjRecord = (PDSLH_OBJ_RECORD_OBJECT )pMyObject->hDslhObjRecord; PDSLH_CPE_CONTROLLER_OBJECT pDslhCpeController = (PDSLH_CPE_CONTROLLER_OBJECT )pObjRecord->hDslhCpeController; PCCC_MBI_INTERFACE pDslhMbiIf = (PCCC_MBI_INTERFACE )pDslhCpeController->GetInterfaceByName((ANSC_HANDLE)pDslhCpeController, CCC_MBI_INTERFACE_NAME); PDSLH_VAR_ENTITY_OBJECT pVarEntity = (PDSLH_VAR_ENTITY_OBJECT )pMyObject->hDslhVarEntity; PSLAP_VARIABLE pNewValue = (PSLAP_VARIABLE )NULL; char* pParamFullName = NULL; char* pAccessList = NULL; if ( !pDslhMbiIf ) { AnscTraceError(("DslhVarroNotifyValueChanged: pDslhMbiIf is NULL\n")); return ANSC_STATUS_FAILURE; } pParamFullName = pMyObject->GetFullName((ANSC_HANDLE)pMyObject); if ( pMyObject->TempParamValue ) { SlapAllocVariable(pNewValue); if ( !pNewValue ) { returnStatus = ANSC_STATUS_RESOURCES; return returnStatus; } SlapCloneVariable(pMyObject->TempParamValue, pNewValue); } else { /* New value has to be present all the time. Get current value */ pNewValue = pMyObject->GetValue((ANSC_HANDLE)pMyObject); } if(pNewValue != NULL) { pNewValue->ReqSenderID = pMyObject->ReqSenderID; } pAccessList = AnscCloneString(pMyObject->AccessList); returnStatus = pDslhMbiIf->SendParameterValueChangeSignal ( (void*)pDslhMbiIf->hOwnerContext, pParamFullName, pMyObject->OldParamValue, pNewValue, pAccessList ); if ( pNewValue ) { SlapFreeVariable(pNewValue); } if ( pParamFullName ) { AnscFreeMemory(pParamFullName); } if ( pAccessList ) { AnscFreeMemory(pAccessList); } return returnStatus; }
SLAP_VARIABLE* SlapScoGalGetVariable ( ANSC_HANDLE hThisObject, SLAP_PARAMETER_LIST* param_list ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_SCO_GALLERY_OBJECT pMyObject = (PSLAP_SCO_GALLERY_OBJECT)hThisObject; PANSC_ATOM_TABLE_OBJECT pAtoVariable = (PANSC_ATOM_TABLE_OBJECT )pMyObject->hAtoVariable; PANSC_ATOM_DESCRIPTOR pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR )NULL; PSLAP_VARIABLE pGalVariable = (PSLAP_VARIABLE )NULL; PSLAP_VARIABLE pReturnedVar = (PSLAP_VARIABLE )NULL; if ( !param_list || (param_list->ParamCount < 1) ) { return NULL; } else if ( param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string ) { return NULL; } else if ( !param_list->ParamArray[0].Variant.varString ) { return NULL; } pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR)pAtoVariable->GetAtomByName ( (ANSC_HANDLE)pAtoVariable, param_list->ParamArray[0].Variant.varString ); if ( !pAtomDescriptor ) { return NULL; } else { pGalVariable = (PSLAP_VARIABLE)pAtomDescriptor->hContext; } if ( !pGalVariable ) { return NULL; } else { pReturnedVar = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE)); if ( !pReturnedVar ) { return NULL; } else { SlapInitVariable (pReturnedVar); SlapCloneVariable(pGalVariable, pReturnedVar); } } return pReturnedVar; }
ANSC_STATUS SlapScoGalAddVariable ( ANSC_HANDLE hThisObject, SLAP_PARAMETER_LIST* param_list ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_SCO_GALLERY_OBJECT pMyObject = (PSLAP_SCO_GALLERY_OBJECT)hThisObject; PANSC_ATOM_TABLE_OBJECT pAtoVariable = (PANSC_ATOM_TABLE_OBJECT )pMyObject->hAtoVariable; PANSC_ATOM_DESCRIPTOR pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR )NULL; PSLAP_VARIABLE pGalVariable = (PSLAP_VARIABLE )NULL; PSLAP_VARIABLE pTbsVariable = (PSLAP_VARIABLE )NULL; if ( !param_list || (param_list->ParamCount < 2) ) { return ANSC_STATUS_BAD_PARAMETER; } else if ( param_list->ParamArray[0].Syntax != SLAP_VAR_SYNTAX_string ) { return ANSC_STATUS_BAD_PARAMETER; } else if ( !param_list->ParamArray[0].Variant.varString ) { return ANSC_STATUS_BAD_PARAMETER; } else { pTbsVariable = ¶m_list->ParamArray[1]; pGalVariable = NULL; } pAtomDescriptor = (PANSC_ATOM_DESCRIPTOR)pAtoVariable->GetAtomByName ( (ANSC_HANDLE)pAtoVariable, param_list->ParamArray[0].Variant.varString ); if ( pAtomDescriptor ) { return ANSC_STATUS_COLLISION; } else { pGalVariable = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE)); if ( !pGalVariable ) { return ANSC_STATUS_RESOURCES; } else { SlapInitVariable (pGalVariable); SlapCloneVariable(pTbsVariable, pGalVariable); } } pAtoVariable->AddAtomByName ( (ANSC_HANDLE)pAtoVariable, param_list->ParamArray[0].Variant.varString, 0, (ANSC_HANDLE)pGalVariable ); returnStatus = pMyObject->JoinGallery ( (ANSC_HANDLE)pMyObject, pGalVariable ); return returnStatus; }
ANSC_STATUS SlapScoStdInvokeDispatch ( ANSC_HANDLE hThisObject, char* method_name, SLAP_PARAMETER_LIST* params_in, SLAP_PARAMETER_LIST** params_out, SLAP_VARIABLE** return_var ) { ANSC_STATUS returnStatus = ANSC_STATUS_SUCCESS; PSLAP_SCO_STANDARD_OBJECT pMyObject = (PSLAP_SCO_STANDARD_OBJECT)hThisObject; PSLAP_OLA_INTERFACE pSlapOlaIf = (PSLAP_OLA_INTERFACE )pMyObject->hSlapOlaIf; PSLAP_METHOD_DESCRIPTOR pMethodDescriptor = (PSLAP_METHOD_DESCRIPTOR )NULL; PSLAP_PARAMETER_LIST pOutputParamList = (PSLAP_PARAMETER_LIST )NULL; PSLAP_VARIABLE pReturnedVar = (PSLAP_VARIABLE )NULL; void* pfnTargetMethod = (void* )NULL; /* * First of all, we need to verify the input parameters are valid of course. We do expect the * caller to allocate the memory for params_in even if there's no input parameters. We will be * responsible for allocating params_out and return_var. */ if ( !method_name || !params_in || !params_out || !return_var ) { return ANSC_STATUS_BAD_PARAMETER; } else { *params_out = NULL; *return_var = NULL; pMethodDescriptor = (PSLAP_METHOD_DESCRIPTOR)pSlapOlaIf->GetMethodDescriptor ( pSlapOlaIf->hOwnerContext, method_name, params_in ); } /* * Ooops! There're no method has been associated with the specified method name or no matched * parameter list has been identified. Note that above we always match the number of the input * parameters with the existing method descriptors. The caller must make sure the number of * input parameters is accurate. */ if ( !pMethodDescriptor ) { return ANSC_STATUS_CANT_FIND; } else { pfnTargetMethod = *(void**)((ULONG)pMyObject + pMethodDescriptor->MethodOffset); } /* * We shall always perform data type conversion on all input parameters unless the method * descriptor indicates that the input parameters should be passed in without any translation. * However only internal basic SLAP functions may specify that. Derived service objects MUST * NEVER attempt it. */ if ( !(pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI) ) { returnStatus = pMyObject->ConvertParams ( (ANSC_HANDLE)pMyObject, pMethodDescriptor->ParamListI, params_in ); if ( returnStatus != ANSC_STATUS_SUCCESS ) { goto EXIT1; } } /* * Now it comes the hardest and most time-consuming part: making sensible calls into the target * object methods. Apparently, we have two choices: * * (1) We can require all the derived service objects MUST override this member * function. Within the overrided function, the drived object shall map the * method name to the desired function call and arrange the function parameters. * * (2) We can invoke the target method calls directly since we're supposed to have * everything we need to arrange the function parameters. However this means we * MUST enumerate all possible calling scenarios, which can be extremely boring * and weird (that's how I feel somehow). * * Guess which option we're going to choose... */ if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passReturnVar ) { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI ) { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, params_out ); pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListO->ParamCount ) { case 0 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in ); break; case 1 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool ); break; case 2 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool ); break; case 3 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool ); break; case 4 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool ); break; case 5 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool ); break; case 6 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool ); break; case 7 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool ); break; case 8 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool, &pOutputParamList->ParamArray[7].Variant.varBool ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } else { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_out ); break; case 1 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), params_out ); break; case 2 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), params_out ); break; case 3 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), params_out ); break; case 4 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), params_out ); break; case 5 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), params_out ); break; case 6 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), params_out ); break; case 7 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), params_out ); break; case 8 : pReturnedVar = ((PFN_SLAPOBJ_CALL_VARIABLE)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), SlapResolveInvokeParam(pMethodDescriptor, params_in, 7), params_out ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT1; break; } pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput0 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 1 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput1 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 2 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput2 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 3 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput3 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 4 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput4 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 5 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput5 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 6 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput6 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 7 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput7 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 8 : pReturnedVar = (PSLAP_VARIABLE)pMyObject->InvokeFixInput8 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } *params_out = pOutputParamList; *return_var = pReturnedVar; } else { pReturnedVar = (PSLAP_VARIABLE)AnscAllocateMemory(sizeof(SLAP_VARIABLE)); if ( !pReturnedVar ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneVariable(pMethodDescriptor->ReturnVar, pReturnedVar); } if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListI ) { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, params_out ); pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListO->ParamCount ) { case 0 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in ); break; case 1 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool ); break; case 2 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool ); break; case 3 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool ); break; case 4 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool ); break; case 5 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool ); break; case 6 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool ); break; case 7 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool ); break; case 8 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_in, &pOutputParamList->ParamArray[0].Variant.varBool, &pOutputParamList->ParamArray[1].Variant.varBool, &pOutputParamList->ParamArray[2].Variant.varBool, &pOutputParamList->ParamArray[3].Variant.varBool, &pOutputParamList->ParamArray[4].Variant.varBool, &pOutputParamList->ParamArray[5].Variant.varBool, &pOutputParamList->ParamArray[6].Variant.varBool, &pOutputParamList->ParamArray[7].Variant.varBool ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } else { if ( pMethodDescriptor->CallOptions & SLAP_CALL_OPTION_passParamListO ) { pOutputParamList = NULL; switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, params_out ); break; case 1 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), params_out ); break; case 2 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), params_out ); break; case 3 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), params_out ); break; case 4 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), params_out ); break; case 5 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), params_out ); break; case 6 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), params_out ); break; case 7 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), params_out ); break; case 8 : pReturnedVar->Variant.varBool = ((PFN_SLAPOBJ_CALL_BOOL)pfnTargetMethod) ( (ANSC_HANDLE)pMyObject, SlapResolveInvokeParam(pMethodDescriptor, params_in, 0), SlapResolveInvokeParam(pMethodDescriptor, params_in, 1), SlapResolveInvokeParam(pMethodDescriptor, params_in, 2), SlapResolveInvokeParam(pMethodDescriptor, params_in, 3), SlapResolveInvokeParam(pMethodDescriptor, params_in, 4), SlapResolveInvokeParam(pMethodDescriptor, params_in, 5), SlapResolveInvokeParam(pMethodDescriptor, params_in, 6), SlapResolveInvokeParam(pMethodDescriptor, params_in, 7), params_out ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT1; break; } pOutputParamList = *params_out; } else { pOutputParamList = (PSLAP_PARAMETER_LIST)AnscAllocateMemory(sizeof(SLAP_PARAMETER_LIST)); if ( !pOutputParamList ) { returnStatus = ANSC_STATUS_RESOURCES; goto EXIT1; } else { SlapCloneParamList(pMethodDescriptor->ParamListO, pOutputParamList); } switch ( pMethodDescriptor->ParamListI->ParamCount ) { case 0 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput0 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 1 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput1 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 2 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput2 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 3 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput3 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 4 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput4 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 5 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput5 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 6 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput6 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 7 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput7 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; case 8 : pReturnedVar->Variant.varBool = (SLAP_BOOL)pMyObject->InvokeFixInput8 ( (ANSC_HANDLE)pMyObject, (ANSC_HANDLE)pMethodDescriptor, params_in, pOutputParamList ); break; default : returnStatus = ANSC_STATUS_INTERNAL_ERROR; goto EXIT2; break; } } } *params_out = pOutputParamList; *return_var = pReturnedVar; } returnStatus = ANSC_STATUS_SUCCESS; goto EXIT1; /****************************************************************** GRACEFUL ROLLBACK PROCEDURES AND EXIT DOORS ******************************************************************/ EXIT2: if ( pOutputParamList ) { SlapFreeParamList(pOutputParamList); } if ( pReturnedVar ) { SlapFreeVariable(pReturnedVar); } EXIT1: return returnStatus; }