391 lines
17 KiB
C
391 lines
17 KiB
C
/*******************************************************************************
|
|
|
|
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;
|
|
}
|
|
|