ss7: Move all mtp linksets callbacks into the app layer
diff --git a/src/ss7_application.c b/src/ss7_application.c
index 06e666e..b860b8a 100644
--- a/src/ss7_application.c
+++ b/src/ss7_application.c
@@ -31,6 +31,61 @@
 
 
 /* the SS7 dispatch... maybe as function pointers in the future */
+void forward_sccp_stp(struct mtp_link_set *set, struct msgb *_msg, int sls)
+{
+	struct mtp_link_set *other;
+	other = set->app->route_src.set == set ?
+			set->app->route_dst.set : set->app->route_src.set;
+	mtp_link_set_submit_sccp_data(other, sls, _msg->l2h, msgb_l2len(_msg));
+}
+
+void forward_isup_stp(struct mtp_link_set *set, struct msgb *msg, int sls)
+{
+	struct mtp_link_set *other;
+	other = set->app->route_src.set == set ?
+			set->app->route_dst.set : set->app->route_src.set;
+	mtp_link_set_submit_isup_data(other, sls, msg->l3h, msgb_l3len(msg));
+}
+
+void mtp_link_set_forward_sccp(struct mtp_link_set *set, struct msgb *_msg, int sls)
+{
+	if (!set->app) {
+		LOGP(DINP, LOGL_ERROR, "Linkset %d/%s has no application.\n",
+		     set->no, set->name);
+		return;
+	}
+
+	switch (set->app->type) {
+	case APP_STP:
+		forward_sccp_stp(set, _msg, sls);
+		break;
+	case APP_CELLMGR:
+	case APP_RELAY:
+		app_forward_sccp(set->app, _msg, sls);
+		break;
+	}
+}
+
+void mtp_link_set_forward_isup(struct mtp_link_set *set, struct msgb *msg, int sls)
+{
+	if (!set->app) {
+		LOGP(DINP, LOGL_ERROR, "Linkset %d/%s has no application.\n",
+		     set->no, set->name);
+		return;
+	}
+
+
+	switch (set->app->type) {
+	case APP_STP:
+		forward_isup_stp(set, msg, sls);
+		break;
+	case APP_CELLMGR:
+	case APP_RELAY:
+		LOGP(DINP, LOGL_ERROR, "ISUP is not handled.\n");
+		break;
+	}
+}
+
 void mtp_linkset_down(struct mtp_link_set *set)
 {
 	set->available = 0;