mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
synced 2025-10-23 08:12:01 +00:00
At the moment the MGCP Client only supports one MGW per application. Depending on the requirements of the application one MGW might not offer the performance needed. Lets add support for an MGCP Client pool that is backward compatible to existing applications. Change-Id: Icaaba0e470e916eefddfee750b83f5f65291a6b0 Related: SYS#5091
75 lines
2.8 KiB
C
75 lines
2.8 KiB
C
#pragma once
|
|
|
|
#include <osmocom/mgcp_client/mgcp_common.h>
|
|
#include <osmocom/mgcp_client/mgcp_client.h>
|
|
#include <osmocom/gsm/protocol/gsm_04_08.h>
|
|
|
|
/*! This struct organizes the connection infromation one connection side
|
|
* (either remote or local). It is used to pass parameters (local) to the FSM
|
|
* and get responses (remote) from the FSM as pointer attached to the FSM
|
|
* event.
|
|
*
|
|
* When modifiying a connection, the endpoint and call_id members may be left
|
|
* unpopulated. The call_id field is ignored in this case. If an endpoint
|
|
* identifier is supplied it is checked against the internal state to make
|
|
* sure it is correct. */
|
|
struct mgcp_conn_peer {
|
|
/*! RTP connection IP-Address (optional, string e.g. "127.0.0.1") */
|
|
char addr[INET6_ADDRSTRLEN];
|
|
|
|
/*! RTP connection IP-Port (optional) */
|
|
uint16_t port;
|
|
|
|
/*! RTP endpoint */
|
|
char endpoint[MGCP_ENDPOINT_MAXLEN];
|
|
|
|
/*! CALL ID (unique per connection) */
|
|
unsigned int call_id;
|
|
|
|
/*! RTP packetization interval (optional) */
|
|
unsigned int ptime;
|
|
|
|
/*! RTP codec list (optional) */
|
|
enum mgcp_codecs codecs[MGCP_MAX_CODECS];
|
|
|
|
/*! Number of codecs in RTP codec list (optional) */
|
|
unsigned int codecs_len;
|
|
|
|
/*! RTP payload type map (optional, only needed when payload types are
|
|
* used that differ from what IANA/3GPP defines) */
|
|
struct ptmap ptmap[MGCP_MAX_CODECS];
|
|
|
|
/*! RTP payload type map length (optional, only needed when payload
|
|
* types are used that differ from what IANA/3GPP defines) */
|
|
unsigned int ptmap_len;
|
|
|
|
/*! If nonzero, send 'X-Osmo-IGN:' header. This is useful e.g. for SCCPlite MSCs where the MSC is
|
|
* known to issue incoherent or unknown CallIDs / to issue CRCX commands with a different domain
|
|
* name than the BSC. An OsmoMGW will then ignore these and not fail on mismatches. */
|
|
uint32_t x_osmo_ign;
|
|
|
|
/*! send 'X-Osmux: %d' header (or "*" as wildcard). */
|
|
bool x_osmo_osmux_use;
|
|
/*! -1 means send wildcard. */
|
|
int x_osmo_osmux_cid;
|
|
|
|
/*! If left MGCP_CONN_NONE, use MGCP_CONN_RECV_ONLY or MGCP_CONN_RECV_SEND, depending on whether an audio RTP
|
|
* address is set. If != MGCP_CONN_NONE, force this conn mode. */
|
|
enum mgcp_connection_mode conn_mode;
|
|
|
|
/*! If the codec requires additional format parameters (fmtp), those cann be set here, see also
|
|
* mgcp_common.h */
|
|
bool param_present;
|
|
struct mgcp_codec_param param;
|
|
};
|
|
|
|
struct osmo_fsm_inst *mgcp_conn_create(struct mgcp_client *mgcp, struct osmo_fsm_inst *parent_fi, uint32_t parent_term_evt,
|
|
uint32_t parent_evt, struct mgcp_conn_peer *conn_peer);
|
|
int mgcp_conn_modify(struct osmo_fsm_inst *fi, uint32_t parent_evt, struct mgcp_conn_peer *conn_peer);
|
|
void mgcp_conn_delete(struct osmo_fsm_inst *fi);
|
|
|
|
const char *mgcp_conn_get_ci(struct osmo_fsm_inst *fi);
|
|
struct mgcp_client *mgcp_conn_get_client(struct osmo_fsm_inst *fi);
|
|
|
|
const char *osmo_mgcpc_conn_peer_name(const struct mgcp_conn_peer *info);
|