mirror of https://gerrit.osmocom.org/libosmocore
re-introduce ipa_ccm_idtag_parse_off()
In the previous commit we deprecated ipa_ccm_idtag_parse() but also removed ipa_ccm_idtag_parse_off(), for which I couldn't find any users. However, legacy openbsc.git still uses this function, so let's re-introiduce it in its original form. Change-Id: Ibfe53b04340eb355c8bfb8453a2af1522a4b6baf
This commit is contained in:
parent
61650d5117
commit
5a7740d1db
|
@ -28,6 +28,8 @@ const char *ipa_ccm_idtag_name(uint8_t tag);
|
|||
|
||||
int ipa_ccm_idtag_parse(struct tlv_parsed *dec, unsigned char *buf, int len)
|
||||
OSMO_DEPRECATED("Use ipa_ccm_id_{get,resp}_parse instead");
|
||||
int ipa_ccm_idtag_parse_off(struct tlv_parsed *dec, unsigned char *buf, int len, const int len_offset)
|
||||
OSMO_DEPRECATED("Use ipa_ccm_id_{get,resp}_parse instead");
|
||||
|
||||
/* parse payload of IPA CCM ID GET into a osmocom TLV style representation */
|
||||
int ipa_ccm_id_get_parse(struct tlv_parsed *dec, const uint8_t *buf, unsigned int len);
|
||||
|
@ -35,9 +37,6 @@ int ipa_ccm_id_get_parse(struct tlv_parsed *dec, const uint8_t *buf, unsigned in
|
|||
/* parse payload of IPA CCM ID RESP into a osmocom TLV style representation */
|
||||
int ipa_ccm_id_resp_parse(struct tlv_parsed *dec, const uint8_t *buf, unsigned int len);
|
||||
|
||||
/* Is the TAG included in the length field? */
|
||||
int ipa_ccm_idtag_parse_off(struct tlv_parsed *dec, unsigned char *buf, int len, const int len_offset);
|
||||
|
||||
/* parse an Unit ID in string format into the 'ipaccess_unit' data structure */
|
||||
int ipa_parse_unitid(const char *str, struct ipaccess_unit *unit_data);
|
||||
|
||||
|
|
|
@ -99,6 +99,11 @@ const char *ipa_ccm_idtag_name(uint8_t tag)
|
|||
}
|
||||
|
||||
int ipa_ccm_idtag_parse(struct tlv_parsed *dec, unsigned char *buf, int len)
|
||||
{
|
||||
return ipa_ccm_idtag_parse_off(dec, buf, len, 0);
|
||||
}
|
||||
|
||||
int ipa_ccm_idtag_parse_off(struct tlv_parsed *dec, unsigned char *buf, int len, const int len_offset)
|
||||
{
|
||||
uint8_t t_len;
|
||||
uint8_t t_tag;
|
||||
|
@ -111,6 +116,11 @@ int ipa_ccm_idtag_parse(struct tlv_parsed *dec, unsigned char *buf, int len)
|
|||
t_len = *cur++;
|
||||
t_tag = *cur++;
|
||||
|
||||
if (t_len < len_offset) {
|
||||
LOGP(DLMI, LOGL_ERROR, "minimal offset not included: %d < %d\n", t_len, len_offset);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (t_len > len + 1) {
|
||||
LOGP(DLMI, LOGL_ERROR, "The tag does not fit: %d > %d\n", t_len, len + 1);
|
||||
return -EINVAL;
|
||||
|
@ -118,11 +128,11 @@ int ipa_ccm_idtag_parse(struct tlv_parsed *dec, unsigned char *buf, int len)
|
|||
|
||||
DEBUGPC(DLMI, "%s='%s' ", ipa_ccm_idtag_name(t_tag), cur);
|
||||
|
||||
dec->lv[t_tag].len = t_len;
|
||||
dec->lv[t_tag].len = t_len - len_offset;
|
||||
dec->lv[t_tag].val = cur;
|
||||
|
||||
cur += t_len;
|
||||
len -= t_len;
|
||||
cur += t_len - len_offset;
|
||||
len -= t_len - len_offset;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -461,6 +461,7 @@ ipa_ccm_send_pong;
|
|||
ipa_ccm_tlv_to_unitdata;
|
||||
ipa_ccm_idtag_name;
|
||||
ipa_ccm_idtag_parse;
|
||||
ipa_ccm_idtag_parse_off;
|
||||
ipa_ccm_id_get_parse;
|
||||
ipa_ccm_id_resp_parse;
|
||||
ipa_ccm_make_id_resp;
|
||||
|
|
Loading…
Reference in New Issue