udts/xudts: Attempt to implement unitdata service parsing
Use the new offset based parsing to extract GT and data from the UDTS/XUDTS message as well. Test vectors are missing right now. Change-Id: Id0a3a291d8bad3f8c9621e6c97d4ea0b8bbe6035
This commit is contained in:
parent
1646d9b827
commit
174d33681a
30
src/sccp.c
30
src/sccp.c
|
@ -469,6 +469,18 @@ int _sccp_parse_udt(struct msgb *msgb, struct sccp_parse_result *result)
|
|||
return _sccp_parse_unitdata(msgb, result, &offsets);
|
||||
}
|
||||
|
||||
int _sccp_parse_udts(struct msgb *msgb, struct sccp_parse_result *result)
|
||||
{
|
||||
static const struct udt_offsets offsets = {
|
||||
.header_size = sizeof(struct sccp_data_unitdata_service),
|
||||
.called_offset = offsetof(struct sccp_data_unitdata_service, variable_called),
|
||||
.calling_offset = offsetof(struct sccp_data_unitdata_service, variable_calling),
|
||||
.data_offset = offsetof(struct sccp_data_unitdata_service, variable_data),
|
||||
};
|
||||
|
||||
return _sccp_parse_unitdata(msgb, result, &offsets);
|
||||
}
|
||||
|
||||
static int _sccp_parse_xudt(struct msgb *msgb, struct sccp_parse_result *result)
|
||||
{
|
||||
static const struct udt_offsets offsets = {
|
||||
|
@ -481,6 +493,18 @@ static int _sccp_parse_xudt(struct msgb *msgb, struct sccp_parse_result *result)
|
|||
return _sccp_parse_unitdata(msgb, result, &offsets);
|
||||
}
|
||||
|
||||
static int _sccp_parse_xudts(struct msgb *msgb, struct sccp_parse_result *result)
|
||||
{
|
||||
static const struct udt_offsets offsets = {
|
||||
.header_size = sizeof(struct sccp_data_ext_unitdata_service),
|
||||
.called_offset = offsetof(struct sccp_data_ext_unitdata_service, variable_called),
|
||||
.calling_offset = offsetof(struct sccp_data_ext_unitdata_service, variable_calling),
|
||||
.data_offset = offsetof(struct sccp_data_ext_unitdata_service, variable_data),
|
||||
};
|
||||
|
||||
return _sccp_parse_unitdata(msgb, result, &offsets);
|
||||
}
|
||||
|
||||
static int _sccp_parse_it(struct msgb *msgb, struct sccp_parse_result *result)
|
||||
{
|
||||
static const uint32_t header_size = sizeof(struct sccp_data_it);
|
||||
|
@ -1490,9 +1514,15 @@ int sccp_parse_header(struct msgb *msg, struct sccp_parse_result *result)
|
|||
case SCCP_MSG_TYPE_UDT:
|
||||
return _sccp_parse_udt(msg, result);
|
||||
break;
|
||||
case SCCP_MSG_TYPE_UDTS:
|
||||
return _sccp_parse_udts(msg, result);
|
||||
break;
|
||||
case SCCP_MSG_TYPE_XUDT:
|
||||
return _sccp_parse_xudt(msg, result);
|
||||
break;
|
||||
case SCCP_MSG_TYPE_XUDTS:
|
||||
return _sccp_parse_xudts(msg, result);
|
||||
break;
|
||||
case SCCP_MSG_TYPE_IT:
|
||||
return _sccp_parse_it(msg, result);
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue