m3ua: Generalize + Export function to generate MTP-TRANSFER xua_msg

Change-Id: If82956317ec703341514ad81057eceb3d0714f47
This commit is contained in:
Harald Welte 2017-04-15 19:55:48 +02:00
parent 5012416b7e
commit 3a09645ca6
3 changed files with 27 additions and 16 deletions

View File

@ -318,6 +318,30 @@ struct msgb *m3ua_msgb_alloc(const char *name)
M3UA_MSG_HEADROOM, name);
}
struct xua_msg *m3ua_xfer_from_data(const struct m3ua_data_hdr *data_hdr,
const uint8_t *data, unsigned int data_len)
{
struct xua_msg *xua = xua_msg_alloc();
struct xua_msg_part *data_part;
xua->hdr = XUA_HDR(M3UA_MSGC_XFER, M3UA_XFER_DATA);
/* Network Appearance: Optional */
/* Routing Context: Conditional */
/* Protocol Data: Mandatory */
data_part = talloc_zero(xua, struct xua_msg_part);
OSMO_ASSERT(data_part);
data_part->tag = M3UA_IEI_PROT_DATA;
data_part->len = sizeof(*data_hdr) + data_len;
data_part->dat = talloc_size(data_part, data_part->len);
OSMO_ASSERT(data_part->dat);
memcpy(data_part->dat, data_hdr, sizeof(*data_hdr));
memcpy(data_part->dat+sizeof(*data_hdr), data, data_len);
llist_add_tail(&data_part->entry, &xua->headers);
/* Correlation Id: Optional */
return xua;
}
/***********************************************************************
* ERROR generation
***********************************************************************/

View File

@ -51,27 +51,12 @@ struct osmo_mtp_prim *m3ua_to_xfer_ind(struct xua_msg *xua)
static struct xua_msg *mtp_prim_to_m3ua(struct osmo_mtp_prim *prim)
{
struct msgb *msg = prim->oph.msg;
struct xua_msg *xua = xua_msg_alloc();
struct osmo_mtp_transfer_param *param = &prim->u.transfer;
struct xua_msg_part *data_part;
struct m3ua_data_hdr data_hdr;
mtp_xfer_param_to_m3ua_dh(&data_hdr, param);
xua->hdr = XUA_HDR(M3UA_MSGC_XFER, M3UA_XFER_DATA);
/* Network Appearance: Optional */
/* Routing Context: Conditional */
/* Protocol Data: Mandatory */
data_part = talloc_zero(xua, struct xua_msg_part);
data_part->tag = M3UA_IEI_PROT_DATA;
data_part->len = sizeof(data_hdr) + msgb_l2len(msg);
data_part->dat = talloc_size(data_part, data_part->len);
memcpy(data_part->dat, &data_hdr, sizeof(data_hdr));
memcpy(data_part->dat+sizeof(data_hdr), msgb_l2(msg), msgb_l2len(msg));
llist_add_tail(&data_part->entry, &xua->headers);
/* Correlation Id: Optional */
return xua;
return m3ua_xfer_from_data(&data_hdr, msgb_l2(msg), msgb_l2len(msg));
}
/* delivery given XUA message to given SS7 user */

View File

@ -25,6 +25,8 @@ int m3ua_tx_xua_as(struct osmo_ss7_as *as, struct xua_msg *xua);
int m3ua_rx_msg(struct osmo_ss7_asp *asp, struct msgb *msg);
struct msgb *m3ua_msgb_alloc(const char *name);
struct xua_msg *m3ua_xfer_from_data(const struct m3ua_data_hdr *data_hdr,
const uint8_t *data, unsigned int data_len);
struct m3ua_data_hdr *data_hdr_from_m3ua(struct xua_msg *xua);
void m3ua_dh_to_xfer_param(struct osmo_mtp_transfer_param *param,
const struct m3ua_data_hdr *mdh);