Files
openairinterface5g/openair3/RAL-LTE/INTERFACE-802.21/C/MIH_C_primitive_codec.c
T
2013-12-04 17:01:22 +00:00

813 lines
36 KiB
C
Executable File

#define MIH_C_INTERFACE
#define MIH_C_PRIMITIVE_CODEC_C
#include <assert.h>
#include "MIH_C_primitive_codec.h"
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Decode_Link_Capability_Discover_request(Bit_Buffer_t* bbP, MIH_C_Link_Capability_Discover_request_t *primitiveP) {
//-----------------------------------------------------------------------------
return MIH_PRIMITIVE_DECODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Capability_Discover_request2String(MIH_C_Link_Capability_Discover_request_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
return 0;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Decode_Link_Event_Subscribe_request(Bit_Buffer_t* bbP, MIH_C_Link_Event_Subscribe_request_t *primitiveP){
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t length;
MIH_C_TLV_TYPE_decode(bbP, &tlv);
MIH_C_LIST_LENGTH_decode(bbP, &length);
MIH_C_LINK_EVENT_LIST_decode(bbP, &primitiveP->RequestedLinkEventList);
#if MIH_C_DEBUG_DESERIALIZATION
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DETECTED) printf("SUBSCRIBE_REQUEST LINK_DETECTED\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_UP) printf("SUBSCRIBE_REQUEST LINK_UP\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_DOWN) printf("SUBSCRIBE_REQUEST LINK_DOWN\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PARAMETERS_REPORT) printf("SUBSCRIBE_REQUEST LINK_PARAMETERS_REPORT\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_GOING_DOWN) printf("SUBSCRIBE_REQUEST LINK_GOING_DOWN\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_IMMINENT) printf("SUBSCRIBE_REQUEST LINK_HANDOVER_IMMINENT\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_HANDOVER_COMPLETE) printf("SUBSCRIBE_REQUEST LINK_HANDOVER_COMPLETE\n");
if (primitiveP->RequestedLinkEventList & MIH_C_BIT_LINK_PDU_TRANSMIT_STATUS) printf("SUBSCRIBE_REQUEST LINK_PDU_TRANSMIT_STATUS\n");
#endif
if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) {
return MIH_PRIMITIVE_DECODE_OK;
} else {
return MIH_PRIMITIVE_DECODE_TOO_SHORT;
}
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Event_Subscribe_request2String(MIH_C_Link_Event_Subscribe_request_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Event_Subscribe.request -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += MIH_C_LINK_EVENT_LIST2String(&primitiveP->RequestedLinkEventList, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Decode_Link_Event_Unsubscribe_request(Bit_Buffer_t* bbP, MIH_C_Link_Event_Unsubscribe_request_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_LINK_EVENT_LIST_decode(bbP, &primitiveP->RequestedLinkEventList);
if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) {
return MIH_PRIMITIVE_DECODE_OK;
} else {
return MIH_PRIMITIVE_DECODE_TOO_SHORT;
}
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Event_Unsubscribe_request2String(MIH_C_Link_Event_Unsubscribe_request_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Event_Unsubscribe.request -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += MIH_C_LINK_EVENT_LIST2String(&primitiveP->RequestedLinkEventList, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Decode_Link_Get_Parameters_request(Bit_Buffer_t* bbP, MIH_C_Link_Get_Parameters_request_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t length;
MIH_C_TLV_TYPE_decode(bbP, &tlv);
assert(tlv == MIH_C_TLV_LINK_PARAM_TYPE_LIST);
MIH_C_LIST_LENGTH_decode(bbP, &length);
MIH_C_LINK_PARAM_TYPE_LIST_decode(bbP, &primitiveP->LinkParametersRequest_list);
MIH_C_TLV_TYPE_decode(bbP, &tlv);
assert(tlv == MIH_C_TLV_LINK_STATES_REQ);
MIH_C_LIST_LENGTH_decode(bbP, &length);
MIH_C_LINK_STATES_REQ_decode(bbP, &primitiveP->LinkStatesRequest);
MIH_C_TLV_TYPE_decode(bbP, &tlv);
assert(tlv == MIH_C_TLV_LINK_DESC_REQ);
MIH_C_LIST_LENGTH_decode(bbP, &length);
MIH_C_LINK_DESC_REQ_decode(bbP, &primitiveP->LinkDescriptorsRequest);
if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) {
return MIH_PRIMITIVE_DECODE_OK;
} else {
return MIH_PRIMITIVE_DECODE_TOO_SHORT;
}
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Get_Parameters_request2String(MIH_C_Link_Get_Parameters_request_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Get_Parameters.request -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "LINK_PARAM_TYPE_LIST = ");
buffer_index += MIH_C_LINK_PARAM_TYPE_LIST2String(&primitiveP->LinkParametersRequest_list, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\nLINK_STATES_REQ = ");
buffer_index += MIH_C_LINK_STATES_REQ2String(&primitiveP->LinkStatesRequest, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\nLINK_DESC_REQ = ");
buffer_index += MIH_C_LINK_DESC_REQ2String(&primitiveP->LinkDescriptorsRequest, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Decode_Link_Configure_Thresholds_request(Bit_Buffer_t* bbP, MIH_C_Link_Configure_Thresholds_request_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t length;
MIH_C_TLV_TYPE_decode(bbP, &tlv);
MIH_C_LIST_LENGTH_decode(bbP, &length);
MIH_C_LINK_CFG_PARAM_LIST_decode(bbP, &primitiveP->LinkConfigureParameterList_list);
if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_TRUE) {
return MIH_PRIMITIVE_DECODE_OK;
} else {
return MIH_PRIMITIVE_DECODE_TOO_SHORT;
}
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Configure_Thresholds_request2String(MIH_C_Link_Configure_Thresholds_request_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Configure_Threshold.request -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += MIH_C_LINK_CFG_PARAM_LIST2String(&primitiveP->LinkConfigureParameterList_list, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Decode_Link_Action_request(Bit_Buffer_t* bbP, MIH_C_Link_Action_request_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_LINK_ADDR_T *PoALinkAddress = NULL;
MIH_C_TLV_TYPE_T tlv;
u_int16_t length;
MIH_C_TLV_TYPE_decode(bbP, &tlv);
assert(tlv == MIH_C_TLV_LINK_ACTION);
MIH_C_LIST_LENGTH_decode(bbP, &length);
// Patch MW 03/05/2013
if (length >2) {
MIH_C_LINK_ACTION_decode(bbP, &primitiveP->LinkAction);
} else {
MIH_C_LINK_ACTION_short_decode(bbP, &primitiveP->LinkAction) ;
}
MIH_C_TLV_TYPE_decode(bbP, &tlv);
assert(tlv == MIH_C_TLV_LINK_TIME_INTERVAL);
MIH_C_LIST_LENGTH_decode(bbP, &length);
MIH_C_UNSIGNED_INT2_decode(bbP, &primitiveP->ExecutionDelay);
if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) {
return MIH_PRIMITIVE_DECODE_TOO_SHORT;
}
MIH_C_TLV_TYPE_decode(bbP, &tlv);
if (tlv == MIH_C_TLV_POA) {
PoALinkAddress = malloc(sizeof(MIH_C_LINK_ADDR_T));
MIH_C_LINK_ADDR_decode(bbP, PoALinkAddress);
primitiveP->PoALinkAddress = PoALinkAddress;
} else {
primitiveP->PoALinkAddress = NULL;
}
if (BitBuffer_isCheckReadOverflowOK(bbP, 0) == BIT_BUFFER_FALSE) {
free(PoALinkAddress);
return MIH_PRIMITIVE_DECODE_TOO_SHORT;
}
return MIH_PRIMITIVE_DECODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Action_request2String(MIH_C_Link_Action_request_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Action.request -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += MIH_C_LINK_ACTION2String(&primitiveP->LinkAction, &bufP[buffer_index]);
buffer_index += MIH_C_UNSIGNED_INT22String(&primitiveP->ExecutionDelay, &bufP[buffer_index]);
if (primitiveP->PoALinkAddress != NULL) {
buffer_index += MIH_C_LINK_ADDR2String(primitiveP->PoALinkAddress, &bufP[buffer_index]);
}
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
#ifdef MIH_C_MEDIEVAL_EXTENSIONS
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Register_indication(Bit_Buffer_t* bbP, MIH_C_Link_Register_indication_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
// TYPE
tlv = MIH_C_TLV_LINK_INTERFACE_TYPE_ADDR;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_ID_encode(bbP, &primitiveP->Link_Id);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
return MIH_PRIMITIVE_ENCODE_OK;
}
#endif
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Register_indication2String(MIH_C_Link_Register_indication_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Link_Register.indication -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += MIH_C_LINK_ID2String(&primitiveP->Link_Id, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Detected_indication(Bit_Buffer_t* bbP, MIH_C_Link_Detected_indication_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
// TYPE
tlv = MIH_C_TLV_LINK_DET_INFO;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_DET_INFO_encode(bbP, &primitiveP->LinkDetectedInfo);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Up_indication(Bit_Buffer_t* bbP, MIH_C_Link_Up_indication_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
// TYPE
tlv = MIH_C_TLV_LINK_IDENTIFIER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
if (primitiveP->OldAccessRouter) {
// TYPE
tlv = MIH_C_TLV_OLD_ACCESS_ROUTER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_ADDR_encode(bbP, primitiveP->OldAccessRouter);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
if (primitiveP->NewAccessRouter) {
// TYPE
tlv = MIH_C_TLV_NEW_ACCESS_ROUTER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_ADDR_encode(bbP, primitiveP->NewAccessRouter);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
if (primitiveP->IPRenewalFlag) {
// TYPE
tlv = MIH_C_TLV_IP_RENEWAL_FLAG;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_IP_RENEWAL_FLAG_encode(bbP, primitiveP->IPRenewalFlag);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
if (primitiveP->MobilityManagementSupport) {
// TYPE
tlv = MIH_C_TLV_MOBILITY_MANAGEMENT_SUPPORT;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_IP_MOB_MGMT_encode(bbP, primitiveP->MobilityManagementSupport);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Parameters_Report_indication(Bit_Buffer_t* bbP, MIH_C_Link_Parameters_Report_indication_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
// ------- LinkIdentifier--------
// TYPE
tlv = MIH_C_TLV_LINK_IDENTIFIER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
// ------- LinkParametersReportList_list--------
// TYPE
tlv = MIH_C_TLV_LINK_PARAMETER_REPORT_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_PARAM_RPT_LIST_encode(bbP, &primitiveP->LinkParametersReportList_list);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Going_Down_indication(Bit_Buffer_t* bbP, MIH_C_Link_Going_Down_indication_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
// ------- LinkIdentifier--------
// TYPE
tlv = MIH_C_TLV_LINK_IDENTIFIER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
// ------- TimeInterval--------
// TYPE
tlv = MIH_C_TLV_LINK_TIME_INTERVAL;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
MIH_C_LIST_LENGTH_encode(bbP, sizeof(MIH_C_UNSIGNED_INT2_T));
// VALUE
MIH_C_UNSIGNED_INT2_encode(bbP, &primitiveP->TimeInterval);
// ------- LinkGoingDownReason--------
// TYPE
tlv = MIH_C_TLV_LINK_GOING_DOWN_REASON_CODE;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
MIH_C_LIST_LENGTH_encode(bbP, sizeof(MIH_C_LINK_GD_REASON_T));
// VALUE
MIH_C_LINK_GD_REASON_encode(bbP, &primitiveP->LinkGoingDownReason);
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Down_indication(Bit_Buffer_t* bbP, MIH_C_Link_Down_indication_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
// ------- LinkIdentifier--------
// TYPE
tlv = MIH_C_TLV_LINK_IDENTIFIER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_TUPLE_ID_encode(bbP, &primitiveP->LinkIdentifier);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
// ------- OldAccessRouter--------
if (primitiveP->OldAccessRouter != NULL) {
// TYPE
tlv = MIH_C_TLV_OLD_ACCESS_ROUTER;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_ADDR_encode(bbP, primitiveP->OldAccessRouter);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
// ------- ReasonCode--------
// TYPE
tlv = MIH_C_TLV_LINK_DOWN_REASON_CODE;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
MIH_C_LIST_LENGTH_encode(bbP, sizeof(MIH_C_LINK_DN_REASON_T));
// VALUE
MIH_C_LINK_DN_REASON_encode(bbP, &primitiveP->ReasonCode);
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Capability_Discover_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Capability_Discover_confirm_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t encode_length;
//--------- Status ------------
// TYPE
tlv = MIH_C_TLV_STATUS;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_STATUS_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_STATUS_encode(bbP, &primitiveP->Status);
//--------- SupportedLinkEventList ------------
if (primitiveP->SupportedLinkEventList != NULL) {
// TYPE
tlv = MIH_C_TLV_LINK_EVENT_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_LINK_EVENT_LIST_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_LINK_EVENT_LIST_encode(bbP, primitiveP->SupportedLinkEventList);
}
//--------- SupportedLinkCommandList ------------
if (primitiveP->SupportedLinkCommandList != NULL) {
// TYPE
tlv = MIH_C_TLV_LINK_CMD_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_LINK_CMD_LIST_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_LINK_CMD_LIST_encode(bbP, primitiveP->SupportedLinkCommandList);
}
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Link_Capability_Discover_confirm2String(MIH_C_Link_Capability_Discover_confirm_t *primitiveP, char* bufP) {
//-----------------------------------------------------------------------------
unsigned int buffer_index = 0;
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "- PRIMITIVE Capability_Discover.confirm -\n");
buffer_index += sprintf(&bufP[buffer_index], "--------------------------------------------------\n");
buffer_index += sprintf(&bufP[buffer_index], "STATUS = ");
buffer_index += MIH_C_STATUS2String(&primitiveP->Status, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\nLINK_EVENT_LIST = ");
buffer_index += MIH_C_LINK_EVENT_LIST2String(primitiveP->SupportedLinkEventList, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\nLINK_CMD_LIST = ");
buffer_index += MIH_C_LINK_CMD_LIST2String(primitiveP->SupportedLinkEventList, &bufP[buffer_index]);
buffer_index += sprintf(&bufP[buffer_index], "\n");
return buffer_index;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Event_Subscribe_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Event_Subscribe_confirm_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t encode_length;
//--------- Status ------------
// TYPE
tlv = MIH_C_TLV_STATUS;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_STATUS_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_STATUS_encode(bbP, &primitiveP->Status);
//--------- SupportedLinkEventList ------------
if (primitiveP->ResponseLinkEventList != NULL) {
// TYPE
tlv = MIH_C_TLV_LINK_EVENT_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
// Bitmap
encode_length = sizeof(MIH_C_LINK_EVENT_LIST_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_LINK_EVENT_LIST_encode(bbP, primitiveP->ResponseLinkEventList);
}
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Event_Unsubscribe_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Event_Unsubscribe_confirm_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t encode_length;
//--------- Status ------------
// TYPE
tlv = MIH_C_TLV_STATUS;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_STATUS_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_STATUS_encode(bbP, &primitiveP->Status);
//--------- SupportedLinkEventList ------------
if (primitiveP->ResponseLinkEventList != NULL) {
// TYPE
tlv = MIH_C_TLV_LINK_EVENT_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
// Bitmap
encode_length = sizeof(MIH_C_LINK_EVENT_LIST_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_LINK_EVENT_LIST_encode(bbP, primitiveP->ResponseLinkEventList);
}
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Configure_Thresholds_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Configure_Thresholds_confirm_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
u_int16_t encode_length;
//--------- Status ------------
// TYPE
tlv = MIH_C_TLV_STATUS;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_STATUS_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_STATUS_encode(bbP, &primitiveP->Status);
//--------- SupportedLinkEventList ------------
if (primitiveP->LinkConfigureStatusList_list != NULL) {
// TYPE
tlv = MIH_C_TLV_CONFIGURE_RESPONSE_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_LINK_CFG_STATUS_T) * primitiveP->LinkConfigureStatusList_list->length;
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_LINK_CFG_STATUS_LIST_encode(bbP, primitiveP->LinkConfigureStatusList_list);
}
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Get_Parameters_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Get_Parameters_confirm_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
//--------- Status ------------
// TYPE
tlv = MIH_C_TLV_STATUS;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_STATUS_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_STATUS_encode(bbP, &primitiveP->Status);
//--------- LinkParametersStatusList_list ------------
// TYPE
tlv = MIH_C_TLV_LINK_PARAMETERS_STATUS_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_PARAM_LIST_encode(bbP, primitiveP->LinkParametersStatusList_list);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH (BECAUSE LinkParametersStatusList_list contains a list)
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
//--------- LinkStatesResponse_list ------------
// TYPE
tlv = MIH_C_TLV_LINK_STATES_RSP_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_STATES_RSP_LIST_encode(bbP, primitiveP->LinkStatesResponse_list);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH (DONE AFTER BECAUSE CONTAINS CHOICES OF NOT EQUAL SIZES)
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
//--------- LinkDescriptorsResponse_list ------------
// TYPE
tlv = MIH_C_TLV_LINK_DESC_RSP_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_DESC_RSP_LIST_encode(bbP, primitiveP->LinkDescriptorsResponse_list);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
return MIH_PRIMITIVE_ENCODE_OK;
}
//-----------------------------------------------------------------------------
int MIH_C_Link_Primitive_Encode_Link_Action_confirm(Bit_Buffer_t* bbP, MIH_C_Link_Action_confirm_t *primitiveP) {
//-----------------------------------------------------------------------------
MIH_C_TLV_TYPE_T tlv;
unsigned int saved_byte_position;
unsigned int end_byte_position;
unsigned int hole_size;
u_int16_t encode_length;
//--------- Status ------------
// TYPE
tlv = MIH_C_TLV_STATUS;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// LENGTH
encode_length = sizeof(MIH_C_STATUS_T);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
// VALUE
MIH_C_STATUS_encode(bbP, &primitiveP->Status);
if (primitiveP->Status == MIH_C_STATUS_SUCCESS) {
if (primitiveP->ScanResponseSet_list != NULL) {
//--------- ScanResponseSet_list ------------
// TYPE
tlv = MIH_C_TLV_LINK_SCAN_RSP_LIST;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_SCAN_RSP_LIST_encode(bbP, primitiveP->ScanResponseSet_list);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
//--------- LinkActionResult ------------
// TYPE
tlv = MIH_C_TLV_LINK_AC_RESULT;
MIH_C_TLV_TYPE_encode(bbP, &tlv);
// VALUE
saved_byte_position = BitBuffer_getPosition(bbP);
MIH_C_LINK_AC_RESULT_encode(bbP, primitiveP->LinkActionResult);
end_byte_position = BitBuffer_getPosition(bbP);
// LENGTH
encode_length = end_byte_position - saved_byte_position;
hole_size = MIH_C_LIST_LENGTH_get_encode_num_bytes(encode_length);
BitBuffer_write_shift_last_n_bytes_right(bbP, encode_length, hole_size);
BitBuffer_rewind_to(bbP, saved_byte_position);
MIH_C_LIST_LENGTH_encode(bbP, encode_length);
BitBuffer_rewind_to(bbP, end_byte_position + hole_size);
}
return MIH_PRIMITIVE_ENCODE_OK;
}