61c13a960e24e6c92acac24b3fb8c9411fa7ae4e
[ric-plt/submgr.git] / e2ap / wrapper.c
1 #include <errno.h>\r
2 #include "wrapper.h"\r
3 \r
4 ssize_t encode_RIC_subscription_request(RICsubscriptionRequest_t* pdu, void* buffer, size_t buf_size)\r
5 {\r
6 \r
7     asn_enc_rval_t encode_result;\r
8     encode_result = aper_encode_to_buffer(&asn_DEF_RICsubscriptionRequest, NULL, pdu, buffer, buf_size);\r
9     if(encode_result.encoded == -1) {\r
10         return -1;\r
11     }\r
12     return encode_result.encoded;\r
13 }\r
14 \r
15 RICsubscriptionRequest_t* decode_RIC_subscription_request(const void *buffer, size_t buf_size)\r
16 {\r
17     asn_dec_rval_t decode_result;\r
18     RICsubscriptionRequest_t *pdu = 0;\r
19     decode_result = aper_decode_complete(NULL, &asn_DEF_RICsubscriptionRequest, (void **)&pdu, buffer, buf_size);\r
20     if(decode_result.code == RC_OK) {\r
21         return pdu;\r
22     } else {\r
23         ASN_STRUCT_FREE(asn_DEF_RICsubscriptionRequest, pdu);\r
24         return 0;\r
25     }\r
26 }\r
27 \r
28 long e2ap_get_ric_subscription_request_sequence_number(void *buffer, size_t buf_size)\r
29 {\r
30     RICsubscriptionRequest_t *pdu = decode_RIC_subscription_request(buffer, buf_size);\r
31     if(pdu != NULL)\r
32     {\r
33         for (int i = 0; i < pdu->protocolIEs.list.count; ++i )\r
34             {\r
35                 if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID )\r
36                 {\r
37                     return pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;\r
38                 }\r
39             }\r
40     }\r
41     return -1;\r
42 }\r
43 \r
44 ssize_t  e2ap_set_ric_subscription_request_sequence_number(void *buffer, size_t buf_size, long sequence_number)\r
45 {\r
46     RICsubscriptionRequest_t *pdu = decode_RIC_subscription_request(buffer, buf_size);\r
47     if(pdu != NULL)\r
48     {\r
49         for (int i = 0; i < pdu->protocolIEs.list.count; ++i )\r
50             {\r
51                 if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID )\r
52                 {\r
53                     pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;\r
54                     return encode_RIC_subscription_request(pdu, buffer, buf_size);\r
55                 }\r
56             }\r
57     }\r
58     return -1;\r
59 }\r
60 \r
61 ssize_t encode_RIC_subscription_response(RICsubscriptionResponse_t* pdu, void* buffer, size_t buf_size)\r
62 {\r
63 \r
64     asn_enc_rval_t encode_result;\r
65     encode_result = aper_encode_to_buffer(&asn_DEF_RICsubscriptionResponse, NULL, pdu, buffer, buf_size);\r
66     if(encode_result.encoded == -1) {\r
67         return -1;\r
68     }\r
69     return encode_result.encoded;\r
70 }\r
71 \r
72 RICsubscriptionResponse_t* decode_RIC_subscription_response(const void *buffer, size_t buf_size)\r
73 {\r
74     asn_dec_rval_t decode_result;\r
75     RICsubscriptionResponse_t *pdu = 0;\r
76     decode_result = aper_decode_complete(NULL, &asn_DEF_RICsubscriptionResponse, (void **)&pdu, buffer, buf_size);\r
77     if(decode_result.code == RC_OK) {\r
78         return pdu;\r
79     } else {\r
80         ASN_STRUCT_FREE(asn_DEF_RICsubscriptionResponse, pdu);\r
81         return 0;\r
82     }\r
83 }\r
84 \r
85 long e2ap_get_ric_subscription_response_sequence_number(void *buffer, size_t buf_size)\r
86 {\r
87     RICsubscriptionResponse_t *pdu = decode_RIC_subscription_response(buffer, buf_size);\r
88     if(pdu != NULL)\r
89     {\r
90         for (int i = 0; i < pdu->protocolIEs.list.count; ++i )\r
91         {\r
92             if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID )\r
93             {\r
94                 return pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber;\r
95             }\r
96         }\r
97     }\r
98     return -1;\r
99 }\r
100 \r
101 ssize_t  e2ap_set_ric_subscription_response_sequence_number(void *buffer, size_t buf_size, long sequence_number)\r
102 {\r
103     RICsubscriptionResponse_t *pdu = decode_RIC_subscription_response(buffer, buf_size);\r
104     if(pdu != NULL)\r
105     {\r
106         for (int i = 0; i < pdu->protocolIEs.list.count; ++i )\r
107         {\r
108             if ( pdu->protocolIEs.list.array[i]->id == ProtocolIE_ID_id_RICrequestID )\r
109             {\r
110                 pdu->protocolIEs.list.array[i]->value.choice.RICrequestID.ricRequestSequenceNumber = sequence_number;\r
111                 return encode_RIC_subscription_response(pdu, buffer, buf_size);\r
112             }\r
113         }\r
114     }\r
115     return -1;\r
116 }\r