File: alg.cfg

package info (click to toggle)
kamailio 4.2.0-2%2Bdeb8u3
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 56,276 kB
  • sloc: ansic: 552,836; xml: 166,484; sh: 8,659; makefile: 7,676; sql: 6,235; perl: 3,487; yacc: 3,428; python: 1,457; cpp: 1,219; php: 1,047; java: 449; pascal: 194; cs: 40; awk: 27
file content (105 lines) | stat: -rw-r--r-- 2,680 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# $Id$
#
# Simple application level gateway config script.
#
# Assumes that SER/rtpproxy run on a machine, which connected to
# two non-routable letworks: 192.168.0.0/24 and 192.168.1.1/24.
#
# Correspondingly, this machine has two IP addresses: 192.168.0.1
# and 192.168.1.1.
#
# 192.168.0.0/24 - "internal" network
# 192.168.1.0/24 - "external" network
#
# rtpproxy started with `-l 192.168.0.1/192.168.1.1' option.
#

# ------------------ module loading ----------------------------------

loadmodule "/usr/local/lib/ser/modules/sl.so"
loadmodule "/usr/local/lib/ser/modules/tm.so"
loadmodule "/usr/local/lib/ser/modules/rr.so"
loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
loadmodule "/usr/local/lib/ser/modules/usrloc.so"
loadmodule "/usr/local/lib/ser/modules/registrar.so"
loadmodule "/usr/local/lib/ser/modules/nathelper.so"
loadmodule "/usr/local/lib/ser/modules/rtpproxy.so"

# ----------------- setting module-specific parameters ---------------

# -- nathelper params --

modparam("nathelper", "natping_interval", 15)

# ------------------ main fun below ----------------------------------

route {
	# initial sanity checks -- messages with
	# max_forwars == 0, or excessively long requests,
	# or those that don't addressed to us
	if (!mf_process_maxfwd_header("10")) {
		sl_send_reply("483", "Too Many Hops");
		break;
	};
	if (msg:len > max_len) {
		sl_send_reply("513", "Message too big");
		break;
	};
	if (!(uri == myself) && method == "INVITE") {
		sl_send_reply("403", "Call cannot be served here");
		break;
	};

	if (method == "REGISTER") {
		if (dst_ip == 192.168.0.1) {
			save("location-internal");
		} else if (dst_ip == 192.168.1.1) {
			save("location-external");
		} else {
			sl_send_reply("403", "Call cannot be served here");
		};
		break;
	};

	if (method == "INVITE") {
		if (lookup("location-internal")) {
			if (dst_ip == 192.168.0.1)
				if (force_rtp_proxy("FAII"))
					t_on_reply("1");
			if (dst_ip == 192.168.1.1)
				if (force_rtp_proxy("FAEI"))
					t_on_reply("1");
		} else if (lookup("location-external")) {
			if (dst_ip == 192.168.0.1)
				if (force_rtp_proxy("FAIE"))
					t_on_reply("1");
			if (dst_ip == 192.168.1.1)
				if (force_rtp_proxy("FAEE"))
					t_on_reply("1");
		} else {
			sl_send_reply("403", "Call cannot be served here");
			break;
		};
	}

	if (method == "BYE" || method == "CANCEL")
		unforce_rtp_proxy();

	# Do strict routing if pre-loaded route headers present
	if (loose_route()) {
		t_relay();
		break;
	};

	if (method == "INVITE")
		record_route();

        if (!t_relay())
        	sl_reply_error();
}

onreply_route[1] {
	if (!(status=~"183" || status=~"200"))
		break;
	force_rtp_proxy("FA");
}