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