libomsocc: Add function to check if interface is attached
This commit is contained in:
parent
2d1b5fb437
commit
046834ac97
|
@ -172,6 +172,27 @@ static int split_address(const char *address, const char **host_p, uint16_t *por
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
osmo_cc_call_t *osmo_cc_get_attached_interface(osmo_cc_endpoint_t *ep, const char *interface)
|
||||||
|
{
|
||||||
|
osmo_cc_call_t *att;
|
||||||
|
|
||||||
|
for (att = ep->call_list; att; att = att->next) {
|
||||||
|
if (att->state != OSMO_CC_STATE_ATTACH_IN)
|
||||||
|
continue;
|
||||||
|
/* no interface given, just use the attached peer */
|
||||||
|
if (!interface[0])
|
||||||
|
break;
|
||||||
|
/* no interface name given on attached peer, ignore it */
|
||||||
|
if (!att->attached_name || !att->attached_name[0])
|
||||||
|
continue;
|
||||||
|
/* interface given, use the attached peer with the same interface name */
|
||||||
|
if (!strcmp(interface, att->attached_name))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return att;
|
||||||
|
}
|
||||||
/* helper to forward message to upper layer */
|
/* helper to forward message to upper layer */
|
||||||
static void forward_to_ul(osmo_cc_call_t *call, osmo_cc_msg_t *msg)
|
static void forward_to_ul(osmo_cc_call_t *call, osmo_cc_msg_t *msg)
|
||||||
{
|
{
|
||||||
|
@ -233,19 +254,7 @@ reject:
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
interface[0] = '\0';
|
interface[0] = '\0';
|
||||||
/* check for incoming attachment */
|
/* check for incoming attachment */
|
||||||
for (att = call->ep->call_list; att; att = att->next) {
|
att = osmo_cc_get_attached_interface(call->ep, interface);
|
||||||
if (att->state != OSMO_CC_STATE_ATTACH_IN)
|
|
||||||
continue;
|
|
||||||
/* no interface given, just use the attached peer */
|
|
||||||
if (!interface[0])
|
|
||||||
break;
|
|
||||||
/* no interface name given on attached peer, ignore it */
|
|
||||||
if (!att->attached_name || !att->attached_name[0])
|
|
||||||
continue;
|
|
||||||
/* interface given, use the attached peer with the same interface name */
|
|
||||||
if (!strcmp(interface, att->attached_name))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (!att && !interface[0]) {
|
if (!att && !interface[0]) {
|
||||||
PDEBUG(DCC, DEBUG_ERROR, "No remote peer attached, rejecting call.\n");
|
PDEBUG(DCC, DEBUG_ERROR, "No remote peer attached, rejecting call.\n");
|
||||||
goto reject;
|
goto reject;
|
||||||
|
|
|
@ -112,6 +112,7 @@ int osmo_cc_new(osmo_cc_endpoint_t *ep, const char *version, const char *name, u
|
||||||
void osmo_cc_delete(struct osmo_cc_endpoint *ep);
|
void osmo_cc_delete(struct osmo_cc_endpoint *ep);
|
||||||
int osmo_cc_handle(void);
|
int osmo_cc_handle(void);
|
||||||
osmo_cc_call_t *osmo_cc_call_by_callref(osmo_cc_endpoint_t *ep, uint32_t callref);
|
osmo_cc_call_t *osmo_cc_call_by_callref(osmo_cc_endpoint_t *ep, uint32_t callref);
|
||||||
|
osmo_cc_call_t *osmo_cc_get_attached_interface(osmo_cc_endpoint_t *ep, const char *interface);
|
||||||
void osmo_cc_ll_msg(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg);
|
void osmo_cc_ll_msg(osmo_cc_endpoint_t *ep, uint32_t callref, osmo_cc_msg_t *msg);
|
||||||
void osmo_cc_ul_msg(void *priv, uint32_t callref, osmo_cc_msg_t *msg);
|
void osmo_cc_ul_msg(void *priv, uint32_t callref, osmo_cc_msg_t *msg);
|
||||||
osmo_cc_call_t *osmo_cc_call_new(osmo_cc_endpoint_t *ep);
|
osmo_cc_call_t *osmo_cc_call_new(osmo_cc_endpoint_t *ep);
|
||||||
|
|
Loading…
Reference in New Issue