sccp: Improve logging in sccp_to_xua_opt()
Change-Id: Icb3f18f34ecfe0602c6e491b61107a30287dcafb
This commit is contained in:
parent
060b39223e
commit
5a7eb34f73
|
@ -80,6 +80,10 @@ enum sccp_parameter_name_codes {
|
|||
SCCP_PNC_LONG_DATA = 19,
|
||||
};
|
||||
|
||||
extern const struct value_string osmo_sccp_pnc_names[];
|
||||
static inline const char *osmo_sccp_pnc_name(enum sccp_message_types val)
|
||||
{ return get_value_string(osmo_sccp_pnc_names, val); }
|
||||
|
||||
/* Figure 3/Q.713 Called/calling party address */
|
||||
enum {
|
||||
SCCP_TITLE_IND_NONE = 0,
|
||||
|
|
|
@ -711,10 +711,11 @@ static struct xua_msg *sccp_to_xua_opt(struct msgb *msg, uint8_t *ptr_opt, struc
|
|||
|
||||
oneopt = opt_start;
|
||||
|
||||
enum sccp_parameter_name_codes opt_type = 0; /* dummy value not used */
|
||||
while (oneopt < msg->tail) {
|
||||
enum sccp_parameter_name_codes opt_type = oneopt[0];
|
||||
uint8_t opt_len;
|
||||
uint16_t opt_len16;
|
||||
opt_type = oneopt[0];
|
||||
|
||||
switch (opt_type) {
|
||||
case SCCP_PNC_END_OF_OPTIONAL:
|
||||
|
@ -722,25 +723,30 @@ static struct xua_msg *sccp_to_xua_opt(struct msgb *msg, uint8_t *ptr_opt, struc
|
|||
case SCCP_PNC_LONG_DATA:
|
||||
/* two byte length field */
|
||||
if (oneopt + 2 > msg->tail)
|
||||
return NULL;
|
||||
goto malformed;
|
||||
opt_len16 = oneopt[1] << 8 | oneopt[2];
|
||||
if (oneopt + 3 + opt_len16 > msg->tail)
|
||||
return NULL;
|
||||
goto malformed;
|
||||
xua_msg_add_sccp_opt(xua, opt_type, opt_len16, oneopt+3);
|
||||
oneopt += 3 + opt_len16;
|
||||
break;
|
||||
default:
|
||||
/* one byte length field */
|
||||
if (oneopt + 1 > msg->tail)
|
||||
return NULL;
|
||||
goto malformed;
|
||||
|
||||
opt_len = oneopt[1];
|
||||
if (oneopt + 2 + opt_len > msg->tail)
|
||||
return NULL;
|
||||
goto malformed;
|
||||
xua_msg_add_sccp_opt(xua, opt_type, opt_len, oneopt+2);
|
||||
oneopt += 2 + opt_len;
|
||||
}
|
||||
}
|
||||
LOGP(DLSUA, LOGL_ERROR, "Parameter %s not found\n", osmo_sccp_pnc_name(SCCP_PNC_END_OF_OPTIONAL));
|
||||
return NULL;
|
||||
|
||||
malformed:
|
||||
LOGP(DLSUA, LOGL_ERROR, "Malformed parameter %s (%d)\n", osmo_sccp_pnc_name(opt_type), opt_type);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -24,3 +24,28 @@ const struct value_string osmo_sccp_msg_type_names[] = {
|
|||
{ SCCP_MSG_TYPE_LUDTS, "Long unitdata service" },
|
||||
{}
|
||||
};
|
||||
|
||||
/* Table 2/Q.713 - SCCP parameter name codes */
|
||||
const struct value_string osmo_sccp_pnc_names[] = {
|
||||
{ SCCP_PNC_END_OF_OPTIONAL, "End of optional parameters" },
|
||||
{ SCCP_PNC_DESTINATION_LOCAL_REFERENCE, "Destination local reference" },
|
||||
{ SCCP_PNC_SOURCE_LOCAL_REFERENCE, "Source local reference" },
|
||||
{ SCCP_PNC_CALLED_PARTY_ADDRESS, "Called party address" },
|
||||
{ SCCP_PNC_CALLING_PARTY_ADDRESS, "Calling party address" },
|
||||
{ SCCP_PNC_PROTOCOL_CLASS, "Protocol class" },
|
||||
{ SCCP_PNC_SEGMENTING, "Segmenting/reassembling" },
|
||||
{ SCCP_PNC_RECEIVE_SEQ_NUMBER, "Receive sequence number" },
|
||||
{ SCCP_PNC_SEQUENCING, "Sequencing/segmenting" },
|
||||
{ SCCP_PNC_CREDIT, "Credit" },
|
||||
{ SCCP_PNC_RELEASE_CAUSE, "Release cause" },
|
||||
{ SCCP_PNC_RETURN_CAUSE, "Return cause" },
|
||||
{ SCCP_PNC_RESET_CAUSE, "Reset cause" },
|
||||
{ SCCP_PNC_ERROR_CAUSE, "Error cause" },
|
||||
{ SCCP_PNC_REFUSAL_CAUSE, "Refusal cause" },
|
||||
{ SCCP_PNC_DATA, "Data" },
|
||||
{ SCCP_PNC_SEGMENTATION, "Segmentation" },
|
||||
{ SCCP_PNC_HOP_COUNTER, "Hop counter" },
|
||||
{ SCCP_PNC_IMPORTANCE, "Importance" },
|
||||
{ SCCP_PNC_LONG_DATA, "Long data" },
|
||||
{}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue