ClRcT clMsgGroupMembershipUpdateClientAsync_4_0_0(CL_IN ClIdlHandleT handle, CL_IN ClMsgSyncActionT_4_0_0 syncAct, CL_IN ClNameT* pGroupName, CL_IN ClNameT* pQueueName, CL_IN ClUint16T updateCkpt,CL_IN MsgIdlClMsgGroupMembershipUpdateAsyncCallbackT_4_0_0 fpAsyncCallback, CL_IN void *cookie) { ClRcT rc = CL_OK; ClVersionT funcVer = {4, 0, 0}; ClUint32T funcNo = CL_EO_GET_FULL_FN_NUM(CL_EO_NATIVE_COMPONENT_TABLE_ID, 14); ClBufferHandleT inMsgHdl = 0; ClBufferHandleT outMsgHdl = 0; ClIocAddressT address = {{0}}; ClIdlHandleObjT* pHandleObj = NULL; ClRmdAsyncOptionsT asyncOptions; ClUint32T tempFlags = 0; ClIdlCookieT* pCookie = NULL; rc = clHandleCheckout(gIdlClnt.idlDbHdl,handle,(void **)&pHandleObj); if(rc != CL_OK) { return rc; } if (CL_IDL_ADDRESSTYPE_IOC == pHandleObj->address.addressType) { address = pHandleObj->address.address.iocAddress; } else if (CL_IDL_ADDRESSTYPE_NAME == pHandleObj->address.addressType) { rc = clNameToObjectReferenceGet(&(pHandleObj->address.address.nameAddress.name), pHandleObj->address.address.nameAddress.attrCount, pHandleObj->address.address.nameAddress.attr, pHandleObj->address.address.nameAddress.contextCookie, (ClUint64T*)&address); if (CL_OK != rc) { goto L; } } else { rc = CL_IDL_RC(CL_ERR_INVALID_PARAMETER); goto L; } rc = clBufferCreate(&inMsgHdl); if (CL_OK != rc) { goto L; } rc = clXdrMarshallClMsgSyncActionT_4_0_0(&(syncAct), inMsgHdl, 0); if (CL_OK != rc) { goto L; } rc = clXdrMarshallClNameT(pGroupName, inMsgHdl, 0); if (CL_OK != rc) { goto L; } rc = clXdrMarshallClNameT(pQueueName, inMsgHdl, 0); if (CL_OK != rc) { goto L; } rc = clXdrMarshallClUint16T(&(updateCkpt), inMsgHdl, 0); if (CL_OK != rc) { goto L; } if(fpAsyncCallback != NULL) { pCookie = clHeapAllocate(sizeof(ClIdlCookieT)); if (NULL == pCookie) { return CL_IDL_RC(CL_ERR_NO_MEMORY); } asyncOptions.pCookie = NULL; asyncOptions.fpCallback = NULL; rc = clBufferCreate(&outMsgHdl); if (CL_OK != rc) { goto L2; } tempFlags |= pHandleObj->flags | (CL_RMD_CALL_ASYNC | CL_RMD_CALL_NON_PERSISTENT | CL_RMD_CALL_NEED_REPLY); pCookie->pCookie = cookie; pCookie->actualCallback = (void(*)())fpAsyncCallback; pCookie->handle = handle; asyncOptions.pCookie = pCookie; asyncOptions.fpCallback = clMsgGroupMembershipUpdateAsyncCallback_4_0_0; rc = clRmdWithMsgVer(address, &funcVer, funcNo, inMsgHdl, outMsgHdl, tempFlags, &(pHandleObj->options), &asyncOptions); if (CL_OK != rc) { goto LL; } } else { tempFlags |= pHandleObj->flags | (CL_RMD_CALL_ASYNC | CL_RMD_CALL_NON_PERSISTENT); rc = clRmdWithMsgVer(address, &funcVer, funcNo, inMsgHdl, 0, tempFlags, &(pHandleObj->options),NULL); if(CL_OK != rc) { goto L; } } clHandleCheckin(gIdlClnt.idlDbHdl,handle); return rc; LL: clBufferDelete(&outMsgHdl); L2: clHeapFree(pCookie); L: clHandleCheckin(gIdlClnt.idlDbHdl,handle); return rc; }
ClRcT clMsgGroupMembershipUpdateServer_4_0_0(ClEoDataT eoData, ClBufferHandleT inMsgHdl, ClBufferHandleT outMsgHdl) { ClIdlContextInfoT *pIdlCtxInfo = NULL; ClRcT rc = CL_OK; ClMsgSyncActionT_4_0_0 syncAct; SaNameT pGroupName; SaNameT pQueueName; ClUint16T updateCkpt; memset(&(syncAct), 0, sizeof(ClMsgSyncActionT_4_0_0)); memset(&(pGroupName), 0, sizeof(SaNameT)); memset(&(pQueueName), 0, sizeof(SaNameT)); memset(&(updateCkpt), 0, sizeof(ClUint16T)); rc = clXdrUnmarshallClMsgSyncActionT_4_0_0( inMsgHdl,&(syncAct)); if (CL_OK != rc) { goto LL0; } rc = clXdrUnmarshallSaNameT( inMsgHdl,&(pGroupName)); if (CL_OK != rc) { goto LL1; } rc = clXdrUnmarshallSaNameT( inMsgHdl,&(pQueueName)); if (CL_OK != rc) { goto LL2; } rc = clXdrUnmarshallClUint16T( inMsgHdl,&(updateCkpt)); if (CL_OK != rc) { goto LL3; } pIdlCtxInfo = (ClIdlContextInfoT *)clHeapAllocate(sizeof(ClIdlContextInfoT)); if(pIdlCtxInfo == NULL) { return CL_IDL_RC(CL_ERR_NO_MEMORY); } memset(pIdlCtxInfo, 0, sizeof(ClIdlContextInfoT)); pIdlCtxInfo->idlDeferMsg = outMsgHdl; pIdlCtxInfo->inProgress = CL_FALSE; rc = clIdlSyncPrivateInfoSet(msgIdlidlSyncKey, (void *)pIdlCtxInfo); if (CL_OK != rc) { clHeapFree(pIdlCtxInfo); goto L0; } rc = clMsgGroupMembershipUpdate_4_0_0(syncAct, &(pGroupName), &(pQueueName), updateCkpt); if(pIdlCtxInfo->inProgress == CL_FALSE) { clHeapFree(pIdlCtxInfo); pIdlCtxInfo = NULL; } if (CL_OK != rc) { goto L0; } rc = clXdrMarshallClMsgSyncActionT_4_0_0(&(syncAct), 0, 1); if (CL_OK != rc) { goto L1; } rc = clXdrMarshallSaNameT(&(pGroupName), 0, 1); if (CL_OK != rc) { goto L2; } rc = clXdrMarshallSaNameT(&(pQueueName), 0, 1); if (CL_OK != rc) { goto L3; } rc = clXdrMarshallClUint16T(&(updateCkpt), 0, 1); if (CL_OK != rc) { goto L4; } if(pIdlCtxInfo != NULL) { clHeapFree(pIdlCtxInfo); return rc; } L4: return rc; LL3: clXdrMarshallClUint16T(&(updateCkpt), 0, 1); LL2: clXdrMarshallSaNameT(&(pQueueName), 0, 1); LL1: clXdrMarshallSaNameT(&(pGroupName), 0, 1); LL0: clXdrMarshallClMsgSyncActionT_4_0_0(&(syncAct), 0, 1); return rc; L0: clXdrMarshallClMsgSyncActionT_4_0_0(&(syncAct), 0, 1); L1: clXdrMarshallSaNameT(&(pGroupName), 0, 1); L2: clXdrMarshallSaNameT(&(pQueueName), 0, 1); L3: clXdrMarshallClUint16T(&(updateCkpt), 0, 1); return rc; }
ClRcT clMsgGroupDatabaseUpdateClientSync_4_0_0(CL_IN ClIdlHandleT handle, CL_IN ClMsgSyncActionT_4_0_0 syncupType, CL_IN ClNameT* pGroupName, CL_IN SaMsgQueueGroupPolicyT_4_0_0 policy, CL_IN ClIocPhysicalAddressT_4_0_0 qGroupAddress, CL_IN ClUint16T updateCkpt) { ClRcT rc = CL_OK; ClVersionT funcVer = {4, 0, 0}; ClUint32T funcNo = CL_EO_GET_FULL_FN_NUM(CL_EO_NATIVE_COMPONENT_TABLE_ID, 13); ClBufferHandleT inMsgHdl = 0; ClBufferHandleT outMsgHdl = 0; ClIocAddressT address = {{0}}; ClIdlHandleObjT* pHandleObj = NULL; ClUint32T tempFlags = 0; rc = clHandleCheckout(gIdlClnt.idlDbHdl,handle,(void **)&pHandleObj); if( rc != CL_OK ) { return rc ; } if (CL_IDL_ADDRESSTYPE_IOC == pHandleObj->address.addressType) { address = pHandleObj->address.address.iocAddress; } else if (CL_IDL_ADDRESSTYPE_NAME == pHandleObj->address.addressType) { rc = clNameToObjectReferenceGet(&(pHandleObj->address.address.nameAddress.name), pHandleObj->address.address.nameAddress.attrCount, pHandleObj->address.address.nameAddress.attr, pHandleObj->address.address.nameAddress.contextCookie, (ClUint64T*)&address); if (CL_OK != rc) { return rc; } } else { return CL_IDL_RC(CL_ERR_INVALID_PARAMETER); } rc = clBufferCreate(&inMsgHdl); if (CL_OK != rc) { return rc; } rc = clXdrMarshallClMsgSyncActionT_4_0_0(&(syncupType), inMsgHdl, 0); if (CL_OK != rc) { return rc; } rc = clXdrMarshallClNameT(pGroupName, inMsgHdl, 0); if (CL_OK != rc) { return rc; } rc = clXdrMarshallSaMsgQueueGroupPolicyT_4_0_0(&(policy), inMsgHdl, 0); if (CL_OK != rc) { return rc; } rc = clXdrMarshallClIocPhysicalAddressT_4_0_0(&(qGroupAddress), inMsgHdl, 0); if (CL_OK != rc) { return rc; } rc = clXdrMarshallClUint16T(&(updateCkpt), inMsgHdl, 0); if (CL_OK != rc) { return rc; } tempFlags |= pHandleObj->flags | (CL_RMD_CALL_NON_PERSISTENT); tempFlags &= ~CL_RMD_CALL_ASYNC; rc = clRmdWithMsgVer(address, &funcVer, funcNo, inMsgHdl, outMsgHdl, tempFlags, &(pHandleObj->options), NULL); if(CL_OK != rc) { return rc; } rc = clHandleCheckin(gIdlClnt.idlDbHdl,handle); return rc; }