m3ua: Generalize + Export function to generate MTP-TRANSFER xua_msg
Change-Id: If82956317ec703341514ad81057eceb3d0714f47
This commit is contained in:
parent
5012416b7e
commit
3a09645ca6
24
src/m3ua.c
24
src/m3ua.c
|
@ -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
|
||||
***********************************************************************/
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue