view sip-in/call_list.c @ 108:0d6435808bcd

sip-in: implement 100rel for 180 Ringing response
author Mychaela Falconia <falcon@freecalypso.org>
date Wed, 28 Sep 2022 14:29:10 -0800
parents 915f0f397fb6
children 9b87894704eb
line wrap: on
line source

/*
 * In this module we implement call list management for themwi-sip-in.
 */

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <syslog.h>
#include "call.h"

struct call *call_list;

struct call *
find_call_by_sip_id(sought_id)
	char *sought_id;
{
	struct call *call;

	for (call = call_list; call; call = call->next)
		if (!strcmp(call->sip_call_id, sought_id))
			return call;
	return 0;
}

struct call *
find_call_by_mncc_callref(callref)
	uint32_t callref;
{
	struct call *call;

	for (call = call_list; call; call = call->next)
		if (call->mncc_state && call->mncc_callref == callref)
			return call;
	return 0;
}

allocate_mncc_callref(call)
	struct call *call;
{
	static uint32_t next_callref;

	for (;;) {
		next_callref++;
		if (!find_call_by_mncc_callref(next_callref)) {
			call->mncc_callref = next_callref;
			return(0);
		}
	}
}

void
scan_call_list_for_timeouts(retrans)
	int *retrans;
{
	struct call *call;

	for (call = call_list; call; call = call->next) {
		switch (call->sip_state) {
		case SIP_STATE_RINGING_REL:
		case SIP_STATE_INVITE_200:
		case SIP_STATE_INVITE_ERR:
		case SIP_STATE_BYE_SENT:
			*retrans = 1;
			break;
		}
	}
}