/* FSM to manage multiple connections of an MGW endpoint */ #pragma once #include #define LOG_MGCPC_EP(ep, level, fmt, args...) do { \ LOGPFSML(ep->fi, level, "%s " fmt, \ osmo_mgcpc_ep_name(ep), ## args); \ } while(0) struct osmo_mgcpc_ep; struct osmo_mgcpc_ep_ci; struct osmo_tdef; struct osmo_mgcpc_ep *osmo_mgcpc_ep_alloc(struct osmo_fsm_inst *parent, uint32_t parent_term_event, struct mgcp_client *mgcp_client, const struct osmo_tdef *T_defs, const char *fsm_id, const char *endpoint_str_fmt, ...); struct osmo_mgcpc_ep_ci *osmo_mgcpc_ep_ci_add(struct osmo_mgcpc_ep *ep, const char *label_fmt, ...); const struct mgcp_conn_peer *osmo_mgcpc_ep_ci_get_rtp_info(const struct osmo_mgcpc_ep_ci *ci); bool osmo_mgcpc_ep_ci_get_crcx_info_to_sockaddr(const struct osmo_mgcpc_ep_ci *ci, struct sockaddr_storage *dest); bool osmo_mgcpc_ep_ci_get_crcx_info_to_osmux_cid(const struct osmo_mgcpc_ep_ci *ci, uint8_t* cid); const struct mgcp_conn_peer *osmo_mgcpc_ep_ci_get_remote_rtp_info(const struct osmo_mgcpc_ep_ci *ci); void osmo_mgcpc_ep_ci_request(struct osmo_mgcpc_ep_ci *ci, enum mgcp_verb verb, const struct mgcp_conn_peer *verb_info, struct osmo_fsm_inst *notify, uint32_t event_success, uint32_t event_failure, void *notify_data); void osmo_mgcpc_ep_cancel_notify(struct osmo_mgcpc_ep *ep, struct osmo_fsm_inst *notify); struct osmo_mgcpc_ep *osmo_mgcpc_ep_ci_ep(struct osmo_mgcpc_ep_ci *ci); /*! Dispatch a DLCX for the given connection. * \param ci Connection identifier as obtained from osmo_mgcpc_ep_ci_add(). */ static inline void osmo_mgcpc_ep_ci_dlcx(struct osmo_mgcpc_ep_ci *ci) { osmo_mgcpc_ep_ci_request(ci, MGCP_VERB_DLCX, NULL, NULL, 0, 0, NULL); } void osmo_mgcpc_ep_clear(struct osmo_mgcpc_ep *ep); const char *osmo_mgcpc_ep_name(const struct osmo_mgcpc_ep *ep); const char *osmo_mgcpc_ep_local_name(const struct osmo_mgcpc_ep *ep); const char *osmo_mgcpc_ep_ci_name(const struct osmo_mgcpc_ep_ci *ci); const char *osmo_mgcpc_ep_ci_id(const struct osmo_mgcpc_ep_ci *ci); struct mgcp_client *osmo_mgcpc_ep_client(const struct osmo_mgcpc_ep *ep); extern const struct value_string osmo_mgcp_verb_names[]; static inline const char *osmo_mgcp_verb_name(enum mgcp_verb val) { return get_value_string(osmo_mgcp_verb_names, val); }