File: functions.pl

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 (70 lines) | stat: -rw-r--r-- 1,479 bytes parent folder | download | duplicates (9)
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
use Kamailio qw ( log );
use Kamailio::Constants;

#This function demonstrates how to call functions that are exported by other modules.
sub exportedfuncs {
	my $m = shift;
	my $res = -1;

	if (($m->getMethod() eq "INVITE") || ($m->getMethod eq "CANCEL")) {
		
		$m->moduleFunction("xlog", "L_INFO", "x foobar");
		
		if ($m->getRURI() =~ m/sip:555[0-9]+@/) {
			$m->moduleFunction("sl_send_reply", "500", "Error: 555 not available");
		} else {
			$res = $m->moduleFunction("alias_db_lookup", "dbaliases");
		}
	}

	return $res;
}

# This demonstrates that a parameter may be passed to a function
sub paramfunc {
	my $m = shift;
	my $param = shift;

	log(L_INFO, "This function was called with a parameter: $param\n");

	$param =~ s/l/L/g;

	log(L_INFO, "We can fiddle with it: $param\n");

	return 1;
}


# The following function shows that you can use exported functions just as if they were "real".
# This is achieved through Perl's autoloading mechanisms.

sub autotest {
	my $m = shift;

	$m->xlog("L_ERR", "This logging is done via perl's autoload mechanism and the xlog function");

	return 1;
}

# The following two functions demonstrate that the Kamailio perl module handles
# dieing interpreters correctly. Kamailio itself will not crash.

sub diefunc1 {
	my $m = shift;

	warn("I'll die in a moment...");

	log(L_INFO, "About to die...");

	die("Here I die!");

	return 1;
}

sub diefunc2 {
	my $m = shift;
	NoSuchClass::NoSuchMethod(noSuchParameter);

	return 1;
}