/* Patch Messages to and from the MSC */
/*
 * (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 bss_patch_h
#define bss_patch_h

#include <osmocore/msgb.h>

#include <osmocom/sccp/sccp.h>

#define BSS_FILTER_RESET	1
#define BSS_FILTER_RESET_ACK	2
#define BSS_FILTER_RLSD		3
#define BSS_FILTER_RLC		4
#define BSS_FILTER_CLEAR_COMPL	5

/**
 * Error is < 0
 * Success is == 0
 * Filter is > 0
 */
int bss_patch_filter_msg(struct msgb *msg, struct sccp_parse_result *result);

/*
 * Copy inpt->l2h to target->l2h but rewrite the SCCP header on the way
 */
void bss_rewrite_header_for_msc(int, struct msgb *target, struct msgb *inpt, struct sccp_parse_result *result);
int bss_rewrite_header_to_bsc(struct msgb *target, int opc, int dpc);

#endif
