/* Routines to talk to the MSC using the IPA Protocol */
/*
 * (C) 2010 by Holger Hans Peter Freyther <zecke@selfish.org>
 * (C) 2010 by On-Waves
 * All Rights Reserved
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#ifndef BSC_MSC_H
#define BSC_MSC_H

#include <osmocom/core/write_queue.h>
#include <osmocom/core/timer.h>
#include <osmocom/sigtran/sccp_sap.h>
#include <osmocom/msc/a_reset.h>

#include <netinet/in.h>

struct bsc_msc_dest {
	struct llist_head list;

	char *ip;
	int port;
	int dscp;
};


struct bsc_msc_connection {
	/* FIXME: Remove stuff that is no longer needed! */
	struct osmo_wqueue write_queue;
	int is_connected;
	int is_authenticated;
	int first_contact;

	struct llist_head *dests;

	const char *name;

	void (*connection_loss) (struct bsc_msc_connection *);
	void (*connected) (struct bsc_msc_connection *);
	struct osmo_timer_list reconnect_timer;
	struct osmo_timer_list timeout_timer;

	struct msgb *pending_msg;

	/* Sigtran connection data */
	struct osmo_sccp_instance *sccp;
	struct osmo_sccp_user *sccp_user;
	struct osmo_sccp_addr g_calling_addr;
	struct osmo_sccp_addr g_called_addr;
	struct a_reset_ctx *reset;

	int conn_id_counter;
};

struct bsc_msc_connection *bsc_msc_create(void *ctx, struct llist_head *dest);
int bsc_msc_connect(struct bsc_msc_connection *);
void bsc_msc_schedule_connect(struct bsc_msc_connection *);

void bsc_msc_lost(struct bsc_msc_connection *);

struct msgb *bsc_msc_id_get_resp(int fixed, const char *token, const uint8_t *res, int len);

#endif
