4 size_t encode_E2AP_PDU(E2AP_PDU_t* pdu, void* buffer, size_t buf_size)
6 asn_enc_rval_t encode_result;
7 encode_result = aper_encode_to_buffer(&asn_DEF_E2AP_PDU, NULL, pdu, buffer, buf_size);
8 if (encode_result.encoded == -1) {
11 return encode_result.encoded;
14 E2AP_PDU_t* decode_E2AP_PDU(const void* buffer, size_t buf_size)
16 asn_dec_rval_t decode_result;
18 decode_result = aper_decode_complete(NULL, &asn_DEF_E2AP_PDU, (void **)&pdu, buffer, buf_size);
19 if (decode_result.code == RC_OK) {
22 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
27 long e2ap_get_ric_subscription_request_sequence_number(void *buffer, size_t buf_size)
30 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
31 if (pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage)
33 InitiatingMessage_t* initiatingMessage = pdu->choice.initiatingMessage;
34 if (initiatingMessage->procedureCode == ProcedureCode_id_ricSubscription
35 && initiatingMessage->value.present == InitiatingMessage__value_PR_RICsubscriptionRequest)
37 RICsubscriptionRequest_t *ric_subscription_request = &(initiatingMessage->value.choice.RICsubscriptionRequest);
38 for (int i = 0; i < ric_subscription_request->protocolIEs.list.count; ++i)
40 if (ric_subscription_request->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
42 long sequence_number = ric_subscription_request->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;
43 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
44 return sequence_number;
53 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
57 ssize_t e2ap_set_ric_subscription_request_sequence_number(void *buffer, size_t buf_size, long sequence_number)
60 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
61 if (pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage)
63 InitiatingMessage_t* initiatingMessage = pdu->choice.initiatingMessage;
64 if (initiatingMessage->procedureCode == ProcedureCode_id_ricSubscription
65 && initiatingMessage->value.present == InitiatingMessage__value_PR_RICsubscriptionRequest)
67 RICsubscriptionRequest_t *ricSubscriptionRequest = &initiatingMessage->value.choice.RICsubscriptionRequest;
68 for (int i = 0; i < ricSubscriptionRequest->protocolIEs.list.count; ++i)
70 if (ricSubscriptionRequest->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
72 ricSubscriptionRequest->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;
73 size_t encode_size = encode_E2AP_PDU(pdu, buffer, buf_size);
74 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
84 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
88 /* RICsubscriptionResponse */
89 long e2ap_get_ric_subscription_response_sequence_number(void *buffer, size_t buf_size)
92 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
93 if (pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome)
95 SuccessfulOutcome_t* successfulOutcome = pdu->choice.successfulOutcome;
96 if (successfulOutcome->procedureCode == ProcedureCode_id_ricSubscription
97 && successfulOutcome->value.present == SuccessfulOutcome__value_PR_RICsubscriptionResponse)
99 RICsubscriptionResponse_t *ricSubscriptionResponse = &successfulOutcome->value.choice.RICsubscriptionResponse;
100 for (int i = 0; i < ricSubscriptionResponse->protocolIEs.list.count; ++i)
102 if (ricSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
104 long sequence_number = ricSubscriptionResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;
105 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
106 return sequence_number;
115 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
119 ssize_t e2ap_set_ric_subscription_response_sequence_number(void *buffer, size_t buf_size, long sequence_number)
122 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
123 if (pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome)
125 SuccessfulOutcome_t* successfulOutcome = pdu->choice.successfulOutcome;
126 if (successfulOutcome->procedureCode == ProcedureCode_id_ricSubscription
127 && successfulOutcome->value.present == SuccessfulOutcome__value_PR_RICsubscriptionResponse)
129 RICsubscriptionResponse_t *ricSubscriptionResponse = &successfulOutcome->value.choice.RICsubscriptionResponse;
130 for (int i = 0; i < ricSubscriptionResponse->protocolIEs.list.count; ++i)
132 if (ricSubscriptionResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
134 ricSubscriptionResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;
135 size_t encode_size = encode_E2AP_PDU(pdu, buffer, buf_size);
136 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
146 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
150 /* RICsubscriptionDeleteRequest */
151 long e2ap_get_ric_subscription_delete_request_sequence_number(void *buffer, size_t buf_size)
154 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
155 if (pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage)
157 InitiatingMessage_t* initiatingMessage = pdu->choice.initiatingMessage;
158 if (initiatingMessage->procedureCode == ProcedureCode_id_ricSubscriptionDelete
159 && initiatingMessage->value.present == InitiatingMessage__value_PR_RICsubscriptionDeleteRequest)
161 RICsubscriptionDeleteRequest_t *subscriptionDeleteRequest = &initiatingMessage->value.choice.RICsubscriptionDeleteRequest;
162 for (int i = 0; i < subscriptionDeleteRequest->protocolIEs.list.count; ++i)
164 if (subscriptionDeleteRequest->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
166 long sequence_number = subscriptionDeleteRequest->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;
167 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
168 return sequence_number;
177 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
181 ssize_t e2ap_set_ric_subscription_delete_request_sequence_number(void *buffer, size_t buf_size, long sequence_number)
184 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
185 if (pdu != NULL && pdu->present == E2AP_PDU_PR_initiatingMessage)
187 InitiatingMessage_t* initiatingMessage = pdu->choice.initiatingMessage;
188 if (initiatingMessage->procedureCode == ProcedureCode_id_ricSubscriptionDelete
189 && initiatingMessage->value.present == InitiatingMessage__value_PR_RICsubscriptionDeleteRequest)
191 RICsubscriptionDeleteRequest_t* subscriptionDeleteRequest = &initiatingMessage->value.choice.RICsubscriptionDeleteRequest;
192 for (int i = 0; i < subscriptionDeleteRequest->protocolIEs.list.count; ++i)
194 if (subscriptionDeleteRequest->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
196 subscriptionDeleteRequest->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;
197 size_t encode_size = encode_E2AP_PDU(pdu, buffer, buf_size);
198 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
208 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
212 /* RICsubscriptionDeleteResponse */
213 long e2ap_get_ric_subscription_delete_response_sequence_number(void *buffer, size_t buf_size)
216 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
217 if (pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome)
219 SuccessfulOutcome_t* successfulOutcome = pdu->choice.successfulOutcome;
220 if (successfulOutcome->procedureCode == ProcedureCode_id_ricSubscriptionDelete
221 && successfulOutcome->value.present == SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse)
223 RICsubscriptionDeleteResponse_t* subscriptionDeleteResponse = &successfulOutcome->value.choice.RICsubscriptionDeleteResponse;
224 for (int i = 0; i < subscriptionDeleteResponse->protocolIEs.list.count; ++i)
226 if (subscriptionDeleteResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
228 long sequence_number = subscriptionDeleteResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;
229 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
230 return sequence_number;
239 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
243 ssize_t e2ap_set_ric_subscription_delete_response_sequence_number(void *buffer, size_t buf_size, long sequence_number)
246 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
247 if (pdu != NULL && pdu->present == E2AP_PDU_PR_successfulOutcome)
249 SuccessfulOutcome_t* successfulOutcome = pdu->choice.successfulOutcome;
250 if (successfulOutcome->procedureCode == ProcedureCode_id_ricSubscriptionDelete
251 && successfulOutcome->value.present == SuccessfulOutcome__value_PR_RICsubscriptionDeleteResponse)
253 RICsubscriptionDeleteResponse_t* subscriptionDeleteResponse = &successfulOutcome->value.choice.RICsubscriptionDeleteResponse;
254 for (int i = 0; i < subscriptionDeleteResponse->protocolIEs.list.count; ++i)
256 if (subscriptionDeleteResponse->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
258 subscriptionDeleteResponse->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;
259 size_t encode_size = encode_E2AP_PDU(pdu, buffer, buf_size);
260 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
270 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
274 // This function is not used currently. Can be deleted if not needed
275 ssize_t e2ap_set_ric_subscription_failure_sequence_number(void *buffer, size_t buf_size, long sequence_number)
278 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
279 if (pdu != NULL && pdu->present == E2AP_PDU_PR_unsuccessfulOutcome)
281 UnsuccessfulOutcome_t* unsuccessfulOutcome = pdu->choice.unsuccessfulOutcome;
282 if (unsuccessfulOutcome->procedureCode == ProcedureCode_id_ricSubscription
283 && unsuccessfulOutcome->value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionFailure)
285 RICsubscriptionFailure_t* subscriptionFailure = &unsuccessfulOutcome->value.choice.RICsubscriptionFailure;
286 for (int i = 0; i < subscriptionFailure->protocolIEs.list.count; ++i)
288 if (subscriptionFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
290 subscriptionFailure->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;
291 size_t encode_size = encode_E2AP_PDU(pdu, buffer, buf_size);
292 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
302 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
306 long e2ap_get_ric_subscription_failure_sequence_number(void *buffer, size_t buf_size)
309 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
310 if (pdu != NULL && pdu->present == E2AP_PDU_PR_unsuccessfulOutcome)
312 UnsuccessfulOutcome_t* unsuccessfulOutcome = pdu->choice.unsuccessfulOutcome;
313 if (unsuccessfulOutcome->procedureCode == ProcedureCode_id_ricSubscription
314 && unsuccessfulOutcome->value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionFailure)
316 RICsubscriptionFailure_t* subscriptionFailure = &unsuccessfulOutcome->value.choice.RICsubscriptionFailure;;
317 for (int i = 0; i < subscriptionFailure->protocolIEs.list.count; ++i)
319 if (subscriptionFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
321 long sequence_number = subscriptionFailure->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;
322 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
323 return sequence_number;
332 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
336 // This function is not used currently. Can be deleted if not needed
337 ssize_t e2ap_set_ric_subscription_delete_failure_sequence_number(void *buffer, size_t buf_size, long sequence_number)
340 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
341 if (pdu != NULL && pdu->present == E2AP_PDU_PR_unsuccessfulOutcome)
343 UnsuccessfulOutcome_t* unsuccessfulOutcome = pdu->choice.unsuccessfulOutcome;
344 if (unsuccessfulOutcome->procedureCode == ProcedureCode_id_ricSubscriptionDelete
345 && unsuccessfulOutcome->value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure)
347 RICsubscriptionDeleteFailure_t* subscriptionDeleteFailure = &unsuccessfulOutcome->value.choice.RICsubscriptionDeleteFailure;
348 for (int i = 0; i < subscriptionDeleteFailure->protocolIEs.list.count; ++i)
350 if (subscriptionDeleteFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
352 subscriptionDeleteFailure->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;
353 size_t encode_size = encode_E2AP_PDU(pdu, buffer, buf_size);
354 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
364 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
368 long e2ap_get_ric_subscription_delete_failure_sequence_number(void *buffer, size_t buf_size)
371 E2AP_PDU_t *pdu = decode_E2AP_PDU(buffer, buf_size);
372 if (pdu != NULL && pdu->present == E2AP_PDU_PR_unsuccessfulOutcome)
374 UnsuccessfulOutcome_t* unsuccessfulOutcome = pdu->choice.unsuccessfulOutcome;
375 if (unsuccessfulOutcome->procedureCode == ProcedureCode_id_ricSubscriptionDelete
376 && unsuccessfulOutcome->value.present == UnsuccessfulOutcome__value_PR_RICsubscriptionDeleteFailure)
378 RICsubscriptionDeleteFailure_t* subscriptionDeleteFailure = &unsuccessfulOutcome->value.choice.RICsubscriptionDeleteFailure;;
379 for (int i = 0; i < subscriptionDeleteFailure->protocolIEs.list.count; ++i)
381 if (subscriptionDeleteFailure->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID)
383 long sequence_number = subscriptionDeleteFailure->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;
384 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);
385 return sequence_number;
394 ASN_STRUCT_FREE(asn_DEF_E2AP_PDU, pdu);