diff options
| -rw-r--r-- | TODO-RELEASE | 3 | ||||
| -rw-r--r-- | include/osmocom/gsm/gsm0480.h | 3 | ||||
| -rw-r--r-- | include/osmocom/gsm/gsm48.h | 8 | ||||
| -rw-r--r-- | src/gsm/gsm0411_utils.c | 3 | ||||
| -rw-r--r-- | src/gsm/gsm0480.c | 35 | ||||
| -rw-r--r-- | src/gsm/gsm48.c | 20 | ||||
| -rw-r--r-- | src/gsm/libosmogsm.map | 1 | 
7 files changed, 49 insertions, 24 deletions
| diff --git a/TODO-RELEASE b/TODO-RELEASE index 8ccfa491..64833d23 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -7,3 +7,6 @@  # If any interfaces have been added since the last public release: c:r:a + 1.  # If any interfaces have been removed or changed since the last public release: c:r:0.  #library	what			description / commit summary line +libosmogsm	gsm0480_l3hdr_push()	removed from gsm/gsm0480.h (was not exposed) +libosmogsm	gsm48_push_l3hdr()	(re)introduced in gsm/gsm48.h (GSM 04.08 API) +libosmogsm	gsm48_push_l3hdr_tid()	a wrapper around gsm48_push_l3hdr() diff --git a/include/osmocom/gsm/gsm0480.h b/include/osmocom/gsm/gsm0480.h index 246f4b3b..827464e1 100644 --- a/include/osmocom/gsm/gsm0480.h +++ b/include/osmocom/gsm/gsm0480.h @@ -121,6 +121,3 @@ struct msgb *gsm0480_create_ussd_release_complete(void);  int gsm0480_wrap_invoke(struct msgb *msg, int op, int link_id);  int gsm0480_wrap_facility(struct msgb *msg); - -struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr, -				     uint8_t msg_type); diff --git a/include/osmocom/gsm/gsm48.h b/include/osmocom/gsm/gsm48.h index cfae83da..2b14e6cd 100644 --- a/include/osmocom/gsm/gsm48.h +++ b/include/osmocom/gsm/gsm48.h @@ -4,6 +4,8 @@  #include <stdbool.h> +#include <osmocom/core/msgb.h> +  #include <osmocom/gsm/tlv.h>  #include <osmocom/gsm/protocol/gsm_04_08.h>  #include <osmocom/gsm/gsm48_ie.h> @@ -63,3 +65,9 @@ void gsm48_mcc_mnc_to_bcd(uint8_t *bcd_dst, uint16_t mcc, uint16_t mnc)  	OSMO_DEPRECATED("Use osmo_plmn_to_bcd() instead, to not lose leading zeros in the MNC");  void gsm48_mcc_mnc_from_bcd(uint8_t *bcd_src, uint16_t *mcc, uint16_t *mnc)  	OSMO_DEPRECATED("Use osmo_plmn_from_bcd() instead, to not lose leading zeros in the MNC"); + +struct gsm48_hdr *gsm48_push_l3hdr(struct msgb *msg, +				   uint8_t pdisc, uint8_t msg_type); + +#define gsm48_push_l3hdr_tid(msg, pdisc, tid, msg_type) \ +	gsm48_push_l3hdr(msg, (pdisc & 0x0f) | (tid << 4), msg_type) diff --git a/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c index 53d37a43..ccefe546 100644 --- a/src/gsm/gsm0411_utils.c +++ b/src/gsm/gsm0411_utils.c @@ -35,7 +35,6 @@  #include <osmocom/core/logging.h>  #include <osmocom/gsm/gsm48.h> -#include <osmocom/gsm/gsm0480.h>  #include <osmocom/gsm/gsm_utils.h>  #include <osmocom/gsm/protocol/gsm_03_40.h>  #include <osmocom/gsm/protocol/gsm_04_11.h> @@ -354,7 +353,7 @@ int gsm411_push_cp_header(struct msgb *msg, uint8_t proto, uint8_t trans,  			     uint8_t msg_type)  {  	/* Outgoing proto_discr needs the highest bit set */ -	gsm0480_l3hdr_push(msg, proto | (trans << 4), msg_type); +	gsm48_push_l3hdr_tid(msg, proto, trans, msg_type);  	return 0;  } diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c index df640b8e..7756ecba 100644 --- a/src/gsm/gsm0480.c +++ b/src/gsm/gsm0480.c @@ -25,6 +25,7 @@   *   */ +#include <osmocom/gsm/gsm48.h>  #include <osmocom/gsm/gsm0480.h>  #include <osmocom/gsm/gsm_utils.h> @@ -863,10 +864,11 @@ struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const  	msgb_wrap_with_TL(msg, GSM0480_IE_FACILITY);  	/* And finally pre-pend the L3 header */ -	gsm0480_l3hdr_push(msg, -			   GSM48_PDISC_NC_SS | trans_id -			   | (1<<7) /* TI direction = 1 */, -			   GSM0480_MTYPE_RELEASE_COMPLETE); +	gsm48_push_l3hdr_tid(msg, GSM48_PDISC_NC_SS, +			     /* FIXME: TI direction is always 1 ?!? */ +			     trans_id | (1 << 7), +			     GSM0480_MTYPE_RELEASE_COMPLETE); +  	return msg;  } @@ -932,17 +934,6 @@ struct msgb *gsm0480_gen_reject(int invoke_id, uint8_t problem_tag, uint8_t prob  	return msg;  } - -struct gsm48_hdr *gsm0480_l3hdr_push(struct msgb *msg, uint8_t proto_discr, -				     uint8_t msg_type) -{ -	struct gsm48_hdr *gh; -	gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh)); -	gh->proto_discr = proto_discr; -	gh->msg_type = msg_type; -	return gh; -} -  struct msgb *gsm0480_create_ussd_notify(int level, const char *text)  {  	struct msgb *msg; @@ -954,7 +945,11 @@ struct msgb *gsm0480_create_ussd_notify(int level, const char *text)  	gsm0480_wrap_invoke(msg, GSM0480_OP_CODE_USS_NOTIFY, 0);  	gsm0480_wrap_facility(msg); -	gsm0480_l3hdr_push(msg, GSM48_PDISC_NC_SS, GSM0480_MTYPE_REGISTER); +	/* And finally pre-pend the L3 header */ +	gsm48_push_l3hdr(msg, GSM48_PDISC_NC_SS, +			 /* FIXME: no transactionID?!? */ +			 GSM0480_MTYPE_REGISTER); +  	return msg;  } @@ -966,8 +961,10 @@ struct msgb *gsm0480_create_ussd_release_complete(void)  	if (!msg)  		return NULL; -	/* FIXME: should this set trans_id and TI direction flag? */ -	gsm0480_l3hdr_push(msg, GSM48_PDISC_NC_SS, -			   GSM0480_MTYPE_RELEASE_COMPLETE); +	/* And finally pre-pend the L3 header */ +	gsm48_push_l3hdr(msg, GSM48_PDISC_NC_SS, +			 /* FIXME: no transactionID?!? */ +			 GSM0480_MTYPE_RELEASE_COMPLETE); +  	return msg;  } diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index b4892dea..136b9375 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -1024,4 +1024,24 @@ const struct value_string gsm48_reject_value_names[] = {  	 { 0, NULL }  }; +/*! Wrap a given \ref msg with \ref gsm48_hdr structure + * \param[out] msg      A message to be wrapped + * \param[in]  pdisc    GSM TS 04.07 protocol discriminator 1/2, + *                      sub-pdisc, trans_id or skip_ind 1/2, + *                      see section 11.2.3.1 for details + * \param[in]  msg_type GSM TS 04.08 message type + * @return              pointer to pushed header within \ref msg + */ +struct gsm48_hdr *gsm48_push_l3hdr(struct msgb *msg, +				   uint8_t pdisc, uint8_t msg_type) +{ +	struct gsm48_hdr *gh; + +	gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh)); +	gh->proto_discr = pdisc; +	gh->msg_type = msg_type; + +	return gh; +} +  /*! @} */ diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 2bb9d97c..1da398c1 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -241,6 +241,7 @@ gsm411_rp_state_names;  gsm414_msgt_names; +gsm48_push_l3hdr;  gsm48_att_tlvdef;  gsm48_cc_msg_name;  gsm48_rr_msg_name; | 
