bsc_api: Rename lchan_for_subscr to connection_for_subscr and update code

With handover and late/early assignment there might be two channels
for one subscriber and only the BSC knows which one to use, so use
the gsm_subscriber_connection everywhere...
diff --git a/openbsc/include/openbsc/chan_alloc.h b/openbsc/include/openbsc/chan_alloc.h
index fff0ea3..bbbe536 100644
--- a/openbsc/include/openbsc/chan_alloc.h
+++ b/openbsc/include/openbsc/chan_alloc.h
@@ -23,6 +23,8 @@
 
 #include "gsm_subscriber.h"
 
+struct gsm_subscriber_connection;
+
 /* Special allocator for C0 of BTS */
 struct gsm_bts_trx_ts *ts_c0_alloc(struct gsm_bts *bts,
 				   enum gsm_phys_chan_config pchan);
@@ -35,7 +37,7 @@
 void ts_free(struct gsm_bts_trx_ts *ts);
 
 /* Find an allocated channel for a specified subscriber */
-struct gsm_lchan *lchan_for_subscr(struct gsm_subscriber *subscr);
+struct gsm_subscriber_connection *connection_for_subscr(struct gsm_subscriber *subscr);
 
 /* Allocate a logical channel (SDCCH, TCH, ...) */
 struct gsm_lchan *lchan_alloc(struct gsm_bts *bts, enum gsm_chan_t type);
diff --git a/openbsc/src/chan_alloc.c b/openbsc/src/chan_alloc.c
index 4809496..d6e4ff1 100644
--- a/openbsc/src/chan_alloc.c
+++ b/openbsc/src/chan_alloc.c
@@ -396,7 +396,7 @@
 	return NULL;
 }
 
-struct gsm_lchan *lchan_for_subscr(struct gsm_subscriber *subscr)
+struct gsm_subscriber_connection *connection_for_subscr(struct gsm_subscriber *subscr)
 {
 	struct gsm_bts *bts;
 	struct gsm_network *net = subscr->net;
@@ -405,7 +405,7 @@
 	llist_for_each_entry(bts, &net->bts_list, list) {
 		lchan = lchan_find(bts, subscr);
 		if (lchan)
-			return lchan;
+			return &lchan->conn;
 	}
 
 	return NULL;
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index b9249f2..0de10cc 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -2798,7 +2798,7 @@
 {
 	int i, rc = 0;
 	struct gsm_trans *trans = NULL, *transt;
-	struct gsm_lchan *lchan = NULL;
+	struct gsm_subscriber_connection *conn = NULL;
 	struct gsm_bts *bts = NULL;
 	struct gsm_mncc *data = arg, rel;
 
@@ -2903,10 +2903,10 @@
 			return -ENOMEM;
 		}
 		/* Find lchan */
-		lchan = lchan_for_subscr(subscr);
+		conn = connection_for_subscr(subscr);
 
 		/* If subscriber has no lchan */
-		if (!lchan) {
+		if (!conn) {
 			/* find transaction with this subscriber already paging */
 			llist_for_each_entry(transt, &net->trans_list, entry) {
 				/* Transaction of our lchan? */
@@ -2932,16 +2932,16 @@
 			return 0;
 		}
 		/* Assign lchan */
-		trans->conn = &lchan->conn;
+		trans->conn = conn;
 		use_subscr_con(trans->conn);
 		subscr_put(subscr);
 	}
 
 	if (trans->conn)
-		lchan = trans->conn->lchan;
+		conn = trans->conn;
 
 	/* if paging did not respond yet */
-	if (!lchan) {
+	if (!conn) {
 		DEBUGP(DCC, "(bts - trx - ts - ti -- sub %s) "
 			"Received '%s' from MNCC in paging state\n",
 			(trans->subscr)?(trans->subscr->extension):"-",
@@ -2959,7 +2959,7 @@
 
 	DEBUGP(DCC, "(bts %d trx %d ts %d ti %02x sub %s) "
 		"Received '%s' from MNCC in state %d (%s)\n",
-		lchan->ts->trx->bts->nr, lchan->ts->trx->nr, lchan->ts->nr,
+		conn->bts->nr, conn->lchan->ts->trx->nr, conn->lchan->ts->nr,
 		trans->transaction_id,
 		(trans->conn->subscr)?(trans->conn->subscr->extension):"-",
 		get_mncc_name(msg_type), trans->cc.state,
diff --git a/openbsc/src/gsm_04_11.c b/openbsc/src/gsm_04_11.c
index 4488f8d..9d65333 100644
--- a/openbsc/src/gsm_04_11.c
+++ b/openbsc/src/gsm_04_11.c
@@ -1143,14 +1143,14 @@
 int gsm411_send_sms_subscr(struct gsm_subscriber *subscr,
 			   struct gsm_sms *sms)
 {
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 
 	/* check if we already have an open lchan to the subscriber.
 	 * if yes, send the SMS this way */
-	lchan = lchan_for_subscr(subscr);
-	if (lchan) {
-		use_subscr_con(&lchan->conn);
-		return gsm411_send_sms_lchan(&lchan->conn, sms);
+	conn = connection_for_subscr(subscr);
+	if (conn) {
+		use_subscr_con(conn);
+		return gsm411_send_sms_lchan(conn, sms);
 	}
 
 	/* if not, we have to start paging */
@@ -1162,7 +1162,7 @@
 			 void *handler_data, void *signal_data)
 {
 	struct gsm_subscriber *subscr;
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 	struct gsm_sms *sms;
 
 	switch (signal) {
@@ -1170,14 +1170,14 @@
 		/* A subscriber has attached. Check if there are
 		 * any pending SMS for him to be delivered */
 		subscr = signal_data;
-		lchan = lchan_for_subscr(subscr);
-		if (!lchan)
+		conn = connection_for_subscr(subscr);
+		if (!conn)
 			break;
 		sms = db_sms_get_unsent_for_subscr(subscr);
 		if (!sms)
 			break;
-		use_subscr_con(&lchan->conn);
-		gsm411_send_sms_lchan(&lchan->conn, sms);
+		use_subscr_con(conn);
+		gsm411_send_sms_lchan(conn, sms);
 		break;
 	default:
 		break;
diff --git a/openbsc/src/rrlp.c b/openbsc/src/rrlp.c
index 3504451..c3b1dbc 100644
--- a/openbsc/src/rrlp.c
+++ b/openbsc/src/rrlp.c
@@ -68,16 +68,16 @@
 			 void *handler_data, void *signal_data)
 {
 	struct gsm_subscriber *subscr;
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 
 	switch (signal) {
 	case S_SUBSCR_ATTACHED:
 		/* A subscriber has attached. */
 		subscr = signal_data;
-		lchan = lchan_for_subscr(subscr);
-		if (!lchan)
+		conn = connection_for_subscr(subscr);
+		if (!conn)
 			break;
-		send_rrlp_req(lchan);
+		send_rrlp_req(&conn->lchan);
 		break;
 	}
 	return 0;
diff --git a/openbsc/src/silent_call.c b/openbsc/src/silent_call.c
index 8bd5341..00acc1d 100644
--- a/openbsc/src/silent_call.c
+++ b/openbsc/src/silent_call.c
@@ -128,15 +128,13 @@
 /* end a silent call with a given subscriber */
 int gsm_silent_call_stop(struct gsm_subscriber *subscr)
 {
-	struct gsm_lchan *lchan;
 	struct gsm_subscriber_connection *conn;
 
-	lchan = lchan_for_subscr(subscr);
-	if (!lchan)
+	conn = connection_for_subscr(subscr);
+	if (!conn)
 		return -EINVAL;
 
 	/* did we actually establish a silent call for this guy? */
-	conn = &lchan->conn;
 	if (!conn->silent_call)
 		return -EINVAL;
 
diff --git a/openbsc/src/token_auth.c b/openbsc/src/token_auth.c
index 2608c66..dc8cce2 100644
--- a/openbsc/src/token_auth.c
+++ b/openbsc/src/token_auth.c
@@ -99,12 +99,12 @@
 		subscr->authorized = 0;
 		db_sync_subscriber(subscr);
 		if (rc) {
-			struct gsm_lchan *lchan = lchan_for_subscr(subscr);
-			if (lchan) {
+			struct gsm_subscriber_connection *conn = connection_for_subscr(subscr);
+			if (conn) {
 				u_int8_t auth_rand[16];
 				/* kick the subscriber off the network */
-				gsm48_tx_mm_auth_req(&lchan->conn, auth_rand, 0);
-				gsm48_tx_mm_auth_rej(&lchan->conn);
+				gsm48_tx_mm_auth_req(conn, auth_rand, 0);
+				gsm48_tx_mm_auth_rej(conn);
 				/* FIXME: close the channel early ?*/
 				//gsm48_send_rr_Release(lchan);
 			}
@@ -118,7 +118,7 @@
 			void *handler_data, void *signal_data)
 {
 	struct gsm_sms *sms = signal_data;
-	struct gsm_lchan *lchan;
+	struct gsm_subscriber_connection *conn;
 	u_int8_t auth_rand[16];
 
 
@@ -136,11 +136,11 @@
 		return 0;
 
 
-	lchan = lchan_for_subscr(sms->receiver);
-	if (lchan) {
+	conn = connection_for_subscr(sms->receiver);
+	if (conn) {
 		/* kick the subscriber off the network */
-		gsm48_tx_mm_auth_req(&lchan->conn, auth_rand, 0);
-		gsm48_tx_mm_auth_rej(&lchan->conn);
+		gsm48_tx_mm_auth_req(conn, auth_rand, 0);
+		gsm48_tx_mm_auth_rej(conn);
 		/* FIXME: close the channel early ?*/
 		//gsm48_send_rr_Release(lchan);
 	}