From c3043290ac0dfb488740f9489ba936eec2fa1a6a Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 21 Sep 2017 21:57:01 +0200 Subject: [PATCH] - MMS client: MmsConnection_getVariableAccessAttributes support for VMD specific variables --- src/mms/inc/mms_client_connection.h | 2 +- .../client/mms_client_get_var_access.c | 31 +++++++++++++------ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/mms/inc/mms_client_connection.h b/src/mms/inc/mms_client_connection.h index 48c9c8e..bbe0bea 100644 --- a/src/mms/inc/mms_client_connection.h +++ b/src/mms/inc/mms_client_connection.h @@ -484,7 +484,7 @@ MmsConnection_writeNamedVariableList(MmsConnection self, MmsError* mmsError, boo * * \param self MmsConnection instance to operate on * \param mmsError user provided variable to store error code - * \param domainId the domain name of the variable + * \param domainId the domain name of the variable or NULL for a VMD specific request * \param itemId name of the variable * * \return Returns a MmsTypeSpecification object or NULL if the request failed. diff --git a/src/mms/iso_mms/client/mms_client_get_var_access.c b/src/mms/iso_mms/client/mms_client_get_var_access.c index d4104af..af92602 100644 --- a/src/mms/iso_mms/client/mms_client_get_var_access.c +++ b/src/mms/iso_mms/client/mms_client_get_var_access.c @@ -179,22 +179,35 @@ mmsClient_createGetVariableAccessAttributesRequest( request->present = GetVariableAccessAttributesRequest_PR_name; - request->choice.name.present = ObjectName_PR_domainspecific; + if (domainId != NULL) { + request->choice.name.present = ObjectName_PR_domainspecific; - request->choice.name.choice.domainspecific.domainId.buf = (uint8_t*) domainId; - request->choice.name.choice.domainspecific.domainId.size = strlen(domainId); - request->choice.name.choice.domainspecific.itemId.buf = (uint8_t*) itemId; - request->choice.name.choice.domainspecific.itemId.size = strlen(itemId); + request->choice.name.choice.domainspecific.domainId.buf = (uint8_t*) domainId; + request->choice.name.choice.domainspecific.domainId.size = strlen(domainId); + request->choice.name.choice.domainspecific.itemId.buf = (uint8_t*) itemId; + request->choice.name.choice.domainspecific.itemId.size = strlen(itemId); + } + else { + request->choice.name.present = ObjectName_PR_vmdspecific; + request->choice.name.choice.vmdspecific.buf = (uint8_t*) itemId; + request->choice.name.choice.vmdspecific.size = strlen(itemId); + } asn_enc_rval_t rval; rval = der_encode(&asn_DEF_MmsPdu, mmsPdu, (asn_app_consume_bytes_f*) mmsClient_write_out, (void*) writeBuffer); - request->choice.name.choice.domainspecific.domainId.buf = 0; - request->choice.name.choice.domainspecific.domainId.size = 0; - request->choice.name.choice.domainspecific.itemId.buf = 0; - request->choice.name.choice.domainspecific.itemId.size = 0; + if (domainId != NULL) { + request->choice.name.choice.domainspecific.domainId.buf = 0; + request->choice.name.choice.domainspecific.domainId.size = 0; + request->choice.name.choice.domainspecific.itemId.buf = 0; + request->choice.name.choice.domainspecific.itemId.size = 0; + } + else { + request->choice.name.choice.vmdspecific.buf = 0; + request->choice.name.choice.vmdspecific.size = 0; + } asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0);