diff options
Diffstat (limited to 'asn1/rua/eurecom/rua_decoder.c')
-rw-r--r-- | asn1/rua/eurecom/rua_decoder.c | 390 |
1 files changed, 390 insertions, 0 deletions
diff --git a/asn1/rua/eurecom/rua_decoder.c b/asn1/rua/eurecom/rua_decoder.c new file mode 100644 index 0000000..521ecab --- /dev/null +++ b/asn1/rua/eurecom/rua_decoder.c @@ -0,0 +1,390 @@ +/******************************************************************************* + + Eurecom OpenAirInterface + Copyright(c) 1999 - 2012 Eurecom + + This program is free software; you can redistribute it and/or modify it + under the terms and conditions of the GNU General Public License, + version 2, as published by the Free Software Foundation. + + This program is distributed in the hope it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along with + this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. + + The full GNU General Public License is included in this distribution in + the file called "COPYING". + + Contact Information + Openair Admin: openair_admin@eurecom.fr + Openair Tech : openair_tech@eurecom.fr + Forums : http://forums.eurecom.fr/openairinterface + Address : EURECOM, Campus SophiaTech, 450 Route des Chappes + 06410 Biot FRANCE + +*******************************************************************************/ + +/******************************************************************************* + * This file had been created by asn1tostruct.py script v0.5 + * Please do not modify this file but regenerate it via script. + * Created on: 2015-08-29 14:31:31.109013 by laforge + * from ['../RUA-CommonDataTypes.asn', '../RUA-Constants.asn', '../RUA-Containers.asn', '../RUA-IEs.asn', '../RUA-PDU-Contents.asn', '../RUA-PDU-Descriptions.asn'] + ******************************************************************************/ +#include "rua_common.h" +#include "rua_ies_defs.h" + +int rua_decode_connecties( + ConnectIEs_t *connectIEs, + ANY_t *any_p) { + + Connect_t connect; + Connect_t *connect_p = &connect; + int i, decoded = 0; + int tempDecoded = 0; + assert(any_p != NULL); + assert(connectIEs != NULL); + + RUA_DEBUG("Decoding message ConnectIEs (%s:%d)\n", __FILE__, __LINE__); + + ANY_to_type_aper(any_p, &asn_DEF_Connect, (void**)&connect_p); + + for (i = 0; i < connect_p->connect_ies.list.count; i++) { + IE_t *ie_p; + ie_p = connect_p->connect_ies.list.array[i]; + switch(ie_p->id) { + case ProtocolIE_ID_id_CN_DomainIndicator: + { + CN_DomainIndicator_t cnDomainIndicator; + CN_DomainIndicator_t *cnDomainIndicator_p = &cnDomainIndicator; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CN_DomainIndicator, (void**)&cnDomainIndicator_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE cN_DomainIndicator failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_CN_DomainIndicator, cnDomainIndicator_p); + memcpy(&connectIEs->cN_DomainIndicator, cnDomainIndicator_p, sizeof(CN_DomainIndicator_t)); + } break; + case ProtocolIE_ID_id_Context_ID: + { + Context_ID_t contextID; + Context_ID_t *contextID_p = &contextID; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Context_ID, (void**)&contextID_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE context_ID failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_Context_ID, contextID_p); + memcpy(&connectIEs->context_ID, contextID_p, sizeof(Context_ID_t)); + } break; + /* Optional field */ + case ProtocolIE_ID_id_IntraDomainNasNodeSelector: + { + IntraDomainNasNodeSelector_t intraDomainNasNodeSelector; + IntraDomainNasNodeSelector_t *intraDomainNasNodeSelector_p = &intraDomainNasNodeSelector; + connectIEs->presenceMask |= CONNECTIES_INTRADOMAINNASNODESELECTOR_PRESENT; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_IntraDomainNasNodeSelector, (void**)&intraDomainNasNodeSelector_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE intraDomainNasNodeSelector failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_IntraDomainNasNodeSelector, intraDomainNasNodeSelector_p); + memcpy(&connectIEs->intraDomainNasNodeSelector, intraDomainNasNodeSelector_p, sizeof(IntraDomainNasNodeSelector_t)); + } break; + case ProtocolIE_ID_id_Establishment_Cause: + { + Establishment_Cause_t establishmentCause; + Establishment_Cause_t *establishmentCause_p = &establishmentCause; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Establishment_Cause, (void**)&establishmentCause_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE establishment_Cause failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_Establishment_Cause, establishmentCause_p); + memcpy(&connectIEs->establishment_Cause, establishmentCause_p, sizeof(Establishment_Cause_t)); + } break; + case ProtocolIE_ID_id_RANAP_Message: + { + RANAP_Message_t ranapMessage; + RANAP_Message_t *ranapMessage_p = &ranapMessage; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE ranaP_Message failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p); + memcpy(&connectIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t)); + } break; + default: + RUA_DEBUG("Unknown protocol IE id (%d) for message connecties\n", (int)ie_p->id); + return -1; + } + } + return decoded; +} + +int rua_decode_disconnecties( + DisconnectIEs_t *disconnectIEs, + ANY_t *any_p) { + + Disconnect_t disconnect; + Disconnect_t *disconnect_p = &disconnect; + int i, decoded = 0; + int tempDecoded = 0; + assert(any_p != NULL); + assert(disconnectIEs != NULL); + + RUA_DEBUG("Decoding message DisconnectIEs (%s:%d)\n", __FILE__, __LINE__); + + ANY_to_type_aper(any_p, &asn_DEF_Disconnect, (void**)&disconnect_p); + + for (i = 0; i < disconnect_p->disconnect_ies.list.count; i++) { + IE_t *ie_p; + ie_p = disconnect_p->disconnect_ies.list.array[i]; + switch(ie_p->id) { + case ProtocolIE_ID_id_CN_DomainIndicator: + { + CN_DomainIndicator_t cnDomainIndicator; + CN_DomainIndicator_t *cnDomainIndicator_p = &cnDomainIndicator; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CN_DomainIndicator, (void**)&cnDomainIndicator_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE cN_DomainIndicator failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_CN_DomainIndicator, cnDomainIndicator_p); + memcpy(&disconnectIEs->cN_DomainIndicator, cnDomainIndicator_p, sizeof(CN_DomainIndicator_t)); + } break; + case ProtocolIE_ID_id_Context_ID: + { + Context_ID_t contextID; + Context_ID_t *contextID_p = &contextID; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Context_ID, (void**)&contextID_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE context_ID failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_Context_ID, contextID_p); + memcpy(&disconnectIEs->context_ID, contextID_p, sizeof(Context_ID_t)); + } break; + case ProtocolIE_ID_id_Cause: + { + Cause_t cause; + Cause_t *cause_p = &cause; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Cause, (void**)&cause_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE cause failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_Cause, cause_p); + memcpy(&disconnectIEs->cause, cause_p, sizeof(Cause_t)); + } break; + /* Conditional field */ + case ProtocolIE_ID_id_RANAP_Message: + { + RANAP_Message_t ranapMessage; + RANAP_Message_t *ranapMessage_p = &ranapMessage; + disconnectIEs->presenceMask |= DISCONNECTIES_RANAP_MESSAGE_PRESENT; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE ranaP_Message failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p); + memcpy(&disconnectIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t)); + } break; + default: + RUA_DEBUG("Unknown protocol IE id (%d) for message disconnecties\n", (int)ie_p->id); + return -1; + } + } + return decoded; +} + +int rua_decode_errorindicationies( + ErrorIndicationIEs_t *errorIndicationIEs, + ANY_t *any_p) { + + ErrorIndication_t errorIndication; + ErrorIndication_t *errorIndication_p = &errorIndication; + int i, decoded = 0; + int tempDecoded = 0; + assert(any_p != NULL); + assert(errorIndicationIEs != NULL); + + RUA_DEBUG("Decoding message ErrorIndicationIEs (%s:%d)\n", __FILE__, __LINE__); + + ANY_to_type_aper(any_p, &asn_DEF_ErrorIndication, (void**)&errorIndication_p); + + for (i = 0; i < errorIndication_p->errorIndication_ies.list.count; i++) { + IE_t *ie_p; + ie_p = errorIndication_p->errorIndication_ies.list.array[i]; + switch(ie_p->id) { + case ProtocolIE_ID_id_Cause: + { + Cause_t cause; + Cause_t *cause_p = &cause; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Cause, (void**)&cause_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE cause failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_Cause, cause_p); + memcpy(&errorIndicationIEs->cause, cause_p, sizeof(Cause_t)); + } break; + /* Optional field */ + case ProtocolIE_ID_id_CriticalityDiagnostics: + { + CriticalityDiagnostics_t criticalityDiagnostics; + CriticalityDiagnostics_t *criticalityDiagnostics_p = &criticalityDiagnostics; + errorIndicationIEs->presenceMask |= ERRORINDICATIONIES_CRITICALITYDIAGNOSTICS_PRESENT; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CriticalityDiagnostics, (void**)&criticalityDiagnostics_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE criticalityDiagnostics failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_CriticalityDiagnostics, criticalityDiagnostics_p); + memcpy(&errorIndicationIEs->criticalityDiagnostics, criticalityDiagnostics_p, sizeof(CriticalityDiagnostics_t)); + } break; + default: + RUA_DEBUG("Unknown protocol IE id (%d) for message errorindicationies\n", (int)ie_p->id); + return -1; + } + } + return decoded; +} + +int rua_decode_connectionlesstransferies( + ConnectionlessTransferIEs_t *connectionlessTransferIEs, + ANY_t *any_p) { + + ConnectionlessTransfer_t connectionlessTransfer; + ConnectionlessTransfer_t *connectionlessTransfer_p = &connectionlessTransfer; + int i, decoded = 0; + int tempDecoded = 0; + assert(any_p != NULL); + assert(connectionlessTransferIEs != NULL); + + RUA_DEBUG("Decoding message ConnectionlessTransferIEs (%s:%d)\n", __FILE__, __LINE__); + + ANY_to_type_aper(any_p, &asn_DEF_ConnectionlessTransfer, (void**)&connectionlessTransfer_p); + + for (i = 0; i < connectionlessTransfer_p->connectionlessTransfer_ies.list.count; i++) { + IE_t *ie_p; + ie_p = connectionlessTransfer_p->connectionlessTransfer_ies.list.array[i]; + switch(ie_p->id) { + case ProtocolIE_ID_id_RANAP_Message: + { + RANAP_Message_t ranapMessage; + RANAP_Message_t *ranapMessage_p = &ranapMessage; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE ranaP_Message failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p); + memcpy(&connectionlessTransferIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t)); + } break; + default: + RUA_DEBUG("Unknown protocol IE id (%d) for message connectionlesstransferies\n", (int)ie_p->id); + return -1; + } + } + return decoded; +} + +int rua_decode_directtransferies( + DirectTransferIEs_t *directTransferIEs, + ANY_t *any_p) { + + DirectTransfer_t directTransfer; + DirectTransfer_t *directTransfer_p = &directTransfer; + int i, decoded = 0; + int tempDecoded = 0; + assert(any_p != NULL); + assert(directTransferIEs != NULL); + + RUA_DEBUG("Decoding message DirectTransferIEs (%s:%d)\n", __FILE__, __LINE__); + + ANY_to_type_aper(any_p, &asn_DEF_DirectTransfer, (void**)&directTransfer_p); + + for (i = 0; i < directTransfer_p->directTransfer_ies.list.count; i++) { + IE_t *ie_p; + ie_p = directTransfer_p->directTransfer_ies.list.array[i]; + switch(ie_p->id) { + case ProtocolIE_ID_id_CN_DomainIndicator: + { + CN_DomainIndicator_t cnDomainIndicator; + CN_DomainIndicator_t *cnDomainIndicator_p = &cnDomainIndicator; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_CN_DomainIndicator, (void**)&cnDomainIndicator_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE cN_DomainIndicator failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_CN_DomainIndicator, cnDomainIndicator_p); + memcpy(&directTransferIEs->cN_DomainIndicator, cnDomainIndicator_p, sizeof(CN_DomainIndicator_t)); + } break; + case ProtocolIE_ID_id_Context_ID: + { + Context_ID_t contextID; + Context_ID_t *contextID_p = &contextID; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_Context_ID, (void**)&contextID_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE context_ID failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_Context_ID, contextID_p); + memcpy(&directTransferIEs->context_ID, contextID_p, sizeof(Context_ID_t)); + } break; + case ProtocolIE_ID_id_RANAP_Message: + { + RANAP_Message_t ranapMessage; + RANAP_Message_t *ranapMessage_p = &ranapMessage; + tempDecoded = ANY_to_type_aper(&ie_p->value, &asn_DEF_RANAP_Message, (void**)&ranapMessage_p); + if (tempDecoded < 0) { + RUA_DEBUG("Decoding of IE ranaP_Message failed\n"); + return -1; + } + decoded += tempDecoded; + if (asn1_xer_print) + xer_fprint(stdout, &asn_DEF_RANAP_Message, ranapMessage_p); + memcpy(&directTransferIEs->ranaP_Message, ranapMessage_p, sizeof(RANAP_Message_t)); + } break; + default: + RUA_DEBUG("Unknown protocol IE id (%d) for message directtransferies\n", (int)ie_p->id); + return -1; + } + } + return decoded; +} + |