diff options
| author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-11-26 15:21:05 +0100 | 
|---|---|---|
| committer | Harald Welte <laforge@gnumonks.org> | 2016-12-01 15:54:34 +0000 | 
| commit | 25774b9839a9842affc6fef925166b3b9481b466 (patch) | |
| tree | fa6db0b297a1aa26b7626d8c441af232c1a1c3fa | |
| parent | c3c28528de78fd5d50c3a141c2176c0da5dd7075 (diff) | |
gsm0480: code dup: introduce and use gsm0480_l3hdr_push()
Add function gsm0480_l3hdr_push() to push a struct gsm48_hdr to the start of a
msgb. Use in gsm0480.c and gsm0411_utils.c. Further callers of the new function
will follow in openbsc as well as another libosmocore patch for ussd.
Change-Id: I54fce6053ab8362015686fe22dbcd38bf1366700
| -rw-r--r-- | include/osmocom/gsm/gsm0480.h | 3 | ||||
| -rw-r--r-- | src/gsm/gsm0411_utils.c | 9 | ||||
| -rw-r--r-- | src/gsm/gsm0480.c | 20 | 
3 files changed, 19 insertions, 13 deletions
| diff --git a/include/osmocom/gsm/gsm0480.h b/include/osmocom/gsm/gsm0480.h index deac3225..f49ca6b3 100644 --- a/include/osmocom/gsm/gsm0480.h +++ b/include/osmocom/gsm/gsm0480.h @@ -35,3 +35,6 @@ struct msgb *gsm0480_create_notifySS(const char *text);  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/src/gsm/gsm0411_utils.c b/src/gsm/gsm0411_utils.c index af57963c..5d18b120 100644 --- a/src/gsm/gsm0411_utils.c +++ b/src/gsm/gsm0411_utils.c @@ -315,12 +315,7 @@ int gsm411_push_rp_header(struct msgb *msg, uint8_t rp_msg_type,  int gsm411_push_cp_header(struct msgb *msg, uint8_t proto, uint8_t trans,  			     uint8_t msg_type)  { -	struct gsm48_hdr *gh; - -	gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh)); -	/* Outgoing needs the highest bit set */ -	gh->proto_discr = proto | (trans << 4); -	gh->msg_type = msg_type; - +	/* Outgoing proto_discr needs the highest bit set */ +	gsm0480_l3hdr_push(msg, proto | (trans << 4), msg_type);  	return 0;  } diff --git a/src/gsm/gsm0480.c b/src/gsm/gsm0480.c index d628d922..cab4d01b 100644 --- a/src/gsm/gsm0480.c +++ b/src/gsm/gsm0480.c @@ -486,7 +486,6 @@ static int parse_ss_for_bs_req(const uint8_t *ss_req_data,  struct msgb *gsm0480_create_ussd_resp(uint8_t invoke_id, uint8_t trans_id, const char *text)  {  	struct msgb *msg; -	struct gsm48_hdr *gh;  	uint8_t *ptr8;  	int response_len; @@ -525,10 +524,19 @@ 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 */ -	gh = (struct gsm48_hdr *) msgb_push(msg, sizeof(*gh)); -	gh->proto_discr = GSM48_PDISC_NC_SS | trans_id -					| (1<<7);  /* TI direction = 1 */ -	gh->msg_type = GSM0480_MTYPE_RELEASE_COMPLETE; - +	gsm0480_l3hdr_push(msg, +			   GSM48_PDISC_NC_SS | trans_id +			   | (1<<7) /* TI direction = 1 */, +			   GSM0480_MTYPE_RELEASE_COMPLETE);  	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; +} | 
