osaf/libs/agents/saf/imma/imma_cb.h        |   1 +
 osaf/libs/agents/saf/imma/imma_oi_api.c    |   6 ++++++
 osaf/libs/agents/saf/imma/imma_om_api.c    |   6 ++++++
 osaf/libs/common/immsv/immsv_evt.c         |  24 ++++++++++++++++++++++++
 osaf/libs/common/immsv/include/immsv_evt.h |   1 +
 osaf/services/saf/immsv/immnd/immnd_evt.c  |   9 +++++++++
 6 files changed, 47 insertions(+), 0 deletions(-)


Add new member 'version' to IMMSV_ND2A_INIT_RSP.
When protocol47 is supported, it is set to 'A.2.16'. Otherwise, it is set to 
'_.0.0'.

Add new member 'isProto47' to IMMA_CLIENT_NODE.
If protocol47 is supported at handle initialization, 'isProto47' is set to true.

The clients initialized before protocol47 will never use the new protocol47 
messages.

diff --git a/osaf/libs/agents/saf/imma/imma_cb.h 
b/osaf/libs/agents/saf/imma/imma_cb.h
--- a/osaf/libs/agents/saf/imma/imma_cb.h
+++ b/osaf/libs/agents/saf/imma/imma_cb.h
@@ -67,6 +67,7 @@ typedef struct imma_client_node {
        bool isApplier; /* True => This is an Applier-OI */
        bool isAug;     /* True => handle internal to OI augmented CCB */
        bool isBusy;    /* True => handle is locked by a thread until a 
function execution is done */
+       bool isProto47;  /* True => If true then the server side supported 
protocol47 at handle initialize */
        struct imma_oi_ccb_record *activeOiCcbs; /* For ccb termination on 
IMMND down.*/
        SYSF_MBX callbk_mbx;    /*Mailbox Queue for clnt messages */
 
diff --git a/osaf/libs/agents/saf/imma/imma_oi_api.c 
b/osaf/libs/agents/saf/imma/imma_oi_api.c
--- a/osaf/libs/agents/saf/imma/imma_oi_api.c
+++ b/osaf/libs/agents/saf/imma/imma_oi_api.c
@@ -284,6 +284,12 @@ SaAisErrorT initialize_common(SaImmOiHan
                }
 
                cl_node->handle = out_evt->info.imma.info.initRsp.immHandle;
+               cl_node->isProto47 = false;
+               if (out_evt->info.imma.info.initRsp.version.releaseCode == 'A' 
&&
+                       out_evt->info.imma.info.initRsp.version.majorVersion == 
0x02 &&
+                       out_evt->info.imma.info.initRsp.version.minorVersion == 
0x10) { // A.2.16
+                       cl_node->isProto47 = true;
+               }
 
                TRACE_1("Trying to add OI client id:%u node:%x handle:%llx",
                        m_IMMSV_UNPACK_HANDLE_HIGH(cl_node->handle),
diff --git a/osaf/libs/agents/saf/imma/imma_om_api.c 
b/osaf/libs/agents/saf/imma/imma_om_api.c
--- a/osaf/libs/agents/saf/imma/imma_om_api.c
+++ b/osaf/libs/agents/saf/imma/imma_om_api.c
@@ -320,6 +320,12 @@ static SaAisErrorT initialize_common(SaI
 
                cl_node->handle = out_evt->info.imma.info.initRsp.immHandle;
                cl_node->isOm = true;
+               cl_node->isProto47 = false;
+               if (out_evt->info.imma.info.initRsp.version.releaseCode == 'A' 
&&
+                       out_evt->info.imma.info.initRsp.version.majorVersion == 
0x02 &&
+                       out_evt->info.imma.info.initRsp.version.minorVersion == 
0x10) { // A.2.16
+                       cl_node->isProto47 = true;
+               }
 
                cl_node->maxSearchHandles = 100;
                if((value = getenv("IMMA_MAX_OPEN_SEARCHES_PER_HANDLE"))) {
diff --git a/osaf/libs/common/immsv/immsv_evt.c 
b/osaf/libs/common/immsv/immsv_evt.c
--- a/osaf/libs/common/immsv/immsv_evt.c
+++ b/osaf/libs/common/immsv/immsv_evt.c
@@ -2599,6 +2599,18 @@ static uint32_t immsv_evt_enc_toplevel(I
                        IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 4);
                        ncs_encode_32bit(&p8, immaevt->info.initRsp.error);
                        ncs_enc_claim_space(o_ub, 4);
+
+                       IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 1);
+                       ncs_encode_8bit(&p8, 
immaevt->info.initRsp.version.releaseCode);
+                       ncs_enc_claim_space(o_ub, 1);
+
+                       IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 1);
+                       ncs_encode_8bit(&p8, 
immaevt->info.initRsp.version.majorVersion);
+                       ncs_enc_claim_space(o_ub, 1);
+
+                       IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 1);
+                       ncs_encode_8bit(&p8, 
immaevt->info.initRsp.version.minorVersion);
+                       ncs_enc_claim_space(o_ub, 1);
                        break;
 
                case IMMA_EVT_ND2A_IMM_FINALIZE_RSP:
@@ -3947,6 +3959,18 @@ static uint32_t immsv_evt_dec_toplevel(N
                        IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 4);
                        immaevt->info.initRsp.error = ncs_decode_32bit(&p8);
                        ncs_dec_skip_space(i_ub, 4);
+
+                       IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 1);
+                       immaevt->info.initRsp.version.releaseCode = 
ncs_decode_8bit(&p8);
+                       ncs_dec_skip_space(i_ub, 1);
+
+                       IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 1);
+                       immaevt->info.initRsp.version.majorVersion = 
ncs_decode_8bit(&p8);
+                       ncs_dec_skip_space(i_ub, 1);
+
+                       IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 1);
+                       immaevt->info.initRsp.version.minorVersion = 
ncs_decode_8bit(&p8);
+                       ncs_dec_skip_space(i_ub, 1);
                        break;
 
                case IMMA_EVT_ND2A_IMM_FINALIZE_RSP:
diff --git a/osaf/libs/common/immsv/include/immsv_evt.h 
b/osaf/libs/common/immsv/include/immsv_evt.h
--- a/osaf/libs/common/immsv/include/immsv_evt.h
+++ b/osaf/libs/common/immsv/include/immsv_evt.h
@@ -357,6 +357,7 @@ typedef struct immsv_oi_search_remote_rs
 typedef struct immsv_nd2a_init_rsp {
        SaImmHandleT immHandle;
        SaAisErrorT error;
+       SaVersionT version;
 } IMMSV_ND2A_INIT_RSP;
 
 /* AdminOwnerInit Response */
diff --git a/osaf/services/saf/immsv/immnd/immnd_evt.c 
b/osaf/services/saf/immsv/immnd/immnd_evt.c
--- a/osaf/services/saf/immsv/immnd/immnd_evt.c
+++ b/osaf/services/saf/immsv/immnd/immnd_evt.c
@@ -830,6 +830,15 @@ static uint32_t immnd_evt_proc_imm_init(
               
 
        send_evt.info.imma.info.initRsp.immHandle = cl_node->imm_app_hdl;
+       if (immModel_protocol47Allowed(cb)) { /* Set to A.2.16 */
+               send_evt.info.imma.info.initRsp.version.releaseCode = 'A';
+               send_evt.info.imma.info.initRsp.version.majorVersion = 0x02;
+               send_evt.info.imma.info.initRsp.version.minorVersion = 0x10;
+       } else { /* Set to _.0.0 */
+               send_evt.info.imma.info.initRsp.version.releaseCode = '_';
+               send_evt.info.imma.info.initRsp.version.majorVersion = 0x00;
+               send_evt.info.imma.info.initRsp.version.minorVersion = 0x00;
+       }
        error = SA_AIS_OK;
 
  agent_rsp:

------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to