12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697 |
- perl Module
- Bastian Friedrich
- Collax GmbH
- Edited by
- Bastian Friedrich
- Copyright © 2007 Collax GmbH
- __________________________________________________________________
- Table of Contents
- 1. Admin Guide
- 1. Overview
- 2. Installing the module
- 3. Using the module
- 4. Dependencies
- 4.1. Kamailio Modules
- 4.2. External Libraries or Applications
- 5. Parameters
- 5.1. filename (string)
- 5.2. modpath (string)
- 5.3. reset_cycles (int)
- 5.4. perl_destroy_func (string)
- 6. Functions
- 6.1. perl_exec_simple(func, [param])
- 6.2. perl_exec(func, [param])
- 7. RPC Commands
- 7.1. app_perl.set_reset_cycles
- 7.2. app_perl.get_reset_cycles
- 2. Kamailio Perl API
- 1. Kamailio
- 1.1. log(level,message)
- 2. Kamailio::Message
- 2.1. getType()
- 2.2. getStatus()
- 2.3. getReason()
- 2.4. getVersion()
- 2.5. getRURI()
- 2.6. getMethod()
- 2.7. getFullHeader()
- 2.8. getBody()
- 2.9. getMessage()
- 2.10. getHeader(name)
- 2.11. getHeaderNames()
- 2.12. moduleFunction(func,string1,string2)
- 2.13. log(level,message) (deprecated type)
- 2.14. rewrite_ruri(newruri)
- 2.15. setFlag(flag)
- 2.16. resetFlag(flag)
- 2.17. isFlagSet(flag)
- 2.18. pseudoVar(string)
- 2.19. append_branch(branch,qval)
- 2.20. getParsedRURI()
- 3. Kamailio::URI
- 3.1. user()
- 3.2. host()
- 3.3. passwd()
- 3.4. port()
- 3.5. params()
- 3.6. headers()
- 3.7. transport()
- 3.8. ttl()
- 3.9. user_param()
- 3.10. maddr()
- 3.11. method()
- 3.12. lr()
- 3.13. r2()
- 3.14. transport_val()
- 3.15. ttl_val()
- 3.16. user_param_val()
- 3.17. maddr_val()
- 3.18. method_val()
- 3.19. lr_val()
- 3.20. r2_val()
- 4. Kamailio::AVP
- 4.1. add(name,val)
- 4.2. get(name)
- 4.3. destroy(name)
- 5. Kamailio::Utils::PhoneNumbers
- 5.1.
- new(publicAccessPrefix,internationalPrefix,longDistanceP
- refix,countryCode,areaCode,pbxCode)
- 5.2. canonicalForm( number [, context] )
- 5.3. dialNumber( number [, context] )
- 6. Kamailio::LDAPUtils::LDAPConf
- 6.1. Constructor new()
- 6.2. Method base()
- 6.3. Method host()
- 6.4. Method port()
- 6.5. Method uri()
- 6.6. Method rootbindpw()
- 6.7. Method rootbinddn()
- 6.8. Method binddn()
- 6.9. Method bindpw()
- 7. Kamailio::LDAPUtils::LDAPConnection
- 7.1. Constructor new( [config, [authenticated]] )
- 7.2. Function/Method search( conf, filter, base,
- [requested_attributes ...])
- 7.2.1. Arguments:
- 7.2.2. Result:
- 8. Kamailio::VDB
- 9. Kamailio::Constants
- 10. Kamailio::VDB::Adapter::Speeddial
- 11. Kamailio::VDB::Adapter::Alias
- 11.1. query(conds,retkeys,order)
- 12. Kamailio::VDB::Adapter::AccountingSIPtrace
- 13. Kamailio::VDB::Adapter::Describe
- 14. Kamailio::VDB::Adapter::Auth
- 15. Kamailio::VDB::ReqCond
- 15.1. new(key,op,type,name)
- 15.2. op()
- 16. Kamailio::VDB::Pair
- 16.1. new(key,type,name)
- 16.2. key()
- 17. Kamailio::VDB::VTab
- 17.1. new()
- 17.2. call(op,[args])
- 18. Kamailio::VDB::Value
- 18.1. stringification
- 18.2. new(type,data)
- 18.3. type()
- 18.4. data()
- 19. Kamailio::VDB::Column
- 19.1. Stringification
- 19.2. new(type,name)
- 19.3. type( )
- 19.4. name()
- 19.5. Kamailio::VDB::Result
- 19.6. new(coldefs,[row, row, ...])
- 19.7. coldefs()
- 19.8. rows()
- 3. Perl samples
- 1. Sample directory
- 1.1. Script descriptions
- 1.1.1. branches.pl
- 1.1.2. firstline.pl
- 1.1.3. flags.pl
- 1.1.4. functions.pl
- 1.1.5. headers.pl
- 1.1.6. logging.pl
- 1.1.7. messagedump.pl
- 1.1.8. persistence.pl
- 1.1.9. phonenumbers.pl
- 1.1.10. pseudovars.pl
- 4. Frequently Asked Questions
- List of Examples
- 1.1. Set filename parameter
- 1.2. Set modpath parameter
- 1.3. Set reset_cycles parameter
- 1.4. Set perl_destroy_func parameter
- 1.5. perl_exec_simple() usage
- 1.6. perl_exec() usage
- 1.7. app_perl.set_reset_cycles usage
- 1.8. app_perl.get_reset_cycles usage
- Chapter 1. Admin Guide
- Table of Contents
- 1. Overview
- 2. Installing the module
- 3. Using the module
- 4. Dependencies
- 4.1. Kamailio Modules
- 4.2. External Libraries or Applications
- 5. Parameters
- 5.1. filename (string)
- 5.2. modpath (string)
- 5.3. reset_cycles (int)
- 5.4. perl_destroy_func (string)
- 6. Functions
- 6.1. perl_exec_simple(func, [param])
- 6.2. perl_exec(func, [param])
- 7. RPC Commands
- 7.1. app_perl.set_reset_cycles
- 7.2. app_perl.get_reset_cycles
- 1. Overview
- The time needed when writing a new Kamailio module unfortunately is
- quite high, while the options provided by the configuration file are
- limited to the features implemented in the modules.
- With this Perl module, you can easily implement your own Kamailio
- extensions in Perl. This allows for simple access to the full world of
- CPAN modules. SIP URI rewriting could be implemented based on regular
- expressions; accessing arbitrary data backends, e.g. LDAP or Berkeley
- DB files, is now extremely simple.
- 2. Installing the module
- This Perl module is loaded in kamailio.cfg (just like all the other
- modules) with loadmodule("/path/to/perl.so");.
- For the Perl module to compile, you need a reasonably recent version of
- perl (tested with 5.8.8) linked dynamically. It is strongly advised to
- use a threaded version. The default binary packages from your favorite
- Linux distribution should work fine.
- Cross compilation is supported by the Makefile. You need to set the
- environment variables PERLLDOPTS, PERLCCOPTS and TYPEMAP to values
- similar to the output of
- PERLLDOPTS: perl -MExtUtils::Embed -e ldopts
- PERLCCOPTS: perl -MExtUtils::Embed -e ccopts
- TYPEMAP: echo "`perl -MConfig -e 'print $Config{installprivlib}'`/ExtUtils/ty
- pemap"
- The exact position of your (precompiled!) perl libraries depends on the
- setup of your environment.
- 3. Using the module
- The Perl module has two interfaces: The perl side, and the Kamailio
- side. Once a Perl function is defined and loaded via the module
- parameters (see below), it may be called in Kamailio's configuration at
- an arbitary point. E.g., you could write a function "ldap_alias" in
- Perl, and then execute
- ...
- if (perl_exec("ldap_alias")) {
- ...
- }
- ...
- just as you would have done with the current alias_db module.
- The functions you can use are listed in the "Exported Functions"
- section below.
- On the Perl side, there are a number of functions that let you read and
- modify the current SIP message, such as the RURI or the message flags.
- An introduction to the Perl interface and the full reference
- documentation can be found below.
- 4. Dependencies
- 4.1. Kamailio Modules
- 4.2. External Libraries or Applications
- 4.1. Kamailio Modules
- The following modules must be loaded before this module:
- * The "sl" module is needed for sending replies uppon fatal errors.
- All other modules can be accessed from the Perl module, though.
- 4.2. External Libraries or Applications
- The following libraries or applications must be installed before
- running Kamailio with this module loaded:
- * Perl 5.8.x or later
- Additionally, a number of perl modules should be installed. The
- Kamailio::LDAPUtils package relies on Net::LDAP to be installed. One of
- the sample scripts needs IPC::Shareable
- This module has been developed and tested with Perl 5.8.8, but should
- work with any 5.8.x release. Compilation is possible with 5.6.x, but
- its behavior is unsupported. Earlier versions do not work.
- On current Debian systems, at least the following packages should be
- installed:
- * perl
- * perl-base
- * perl-modules
- * libperl5.8
- * libperl-dev
- * libnet-ldap-perl
- * libipc-shareable-perl
- It was reported that other Debian-style distributions (such as Ubuntu)
- need the same packages.
- On SuSE systems, at least the following packages should be installed:
- * perl
- * perl-ldap
- * IPC::Shareable perl module from CPAN
- Although SuSE delivers a lot of perl modules, others may have to be
- fetched from CPAN. Consider using the program "cpan2rpm" - which, in
- turn, is available on CPAN. It creates RPM files from CPAN.
- 5. Parameters
- 5.1. filename (string)
- 5.2. modpath (string)
- 5.3. reset_cycles (int)
- 5.4. perl_destroy_func (string)
- 5.1. filename (string)
- This is the file name of your script. This may be set once only, but it
- may include an arbitary number of functions and "use" as many Perl
- module as necessary.
- Must not be empty!
- Example 1.1. Set filename parameter
- ...
- modparam("app_perl", "filename", "/home/test/kamailio/myperl.pl")
- ...
- 5.2. modpath (string)
- The path to the Perl modules included (Kamailio.pm et.al). It is not
- absolutely crucial to set this path, as you may install the Modules in
- Perl's standard path, or update the "%INC" variable from within your
- script. Using this module parameter is the standard behavior, though.
- Multiple paths may be specified by separating them with a ":"
- character. The maximum is 10 paths.
- Example 1.2. Set modpath parameter
- ...
- modparam("app_perl", "modpath", "/usr/local/lib/kamailio/perl/")
- ...
- 5.3. reset_cycles (int)
- The number of execution cycles after which the embedded perl
- interpreter is reset. Sometimes is hard to track the scope of variables
- in all used perl modules and that can result in leaks of system memory.
- Resetting the interpreter cleans the memory space.
- When the interpreter is reset, the perl script is loaded again. Note
- that not all Kamailio processes will reset the interpreter at the same
- time. Each will do it when it has executed the script for the number of
- reset_cycles. Also, be aware that the reset of the interpreter is
- taking a bit of time (in the order of tens of mili-seconds).
- Default value is 0 - never reset the interpreter.
- Example 1.3. Set reset_cycles parameter
- ...
- modparam("app_perl", "reset_cycles", 100000)
- ...
- 5.4. perl_destroy_func (string)
- The name of Perl function to be executed before the interpreter is
- re-initialized (reset -- see reset_cycles parameter) at runtime. This
- could be useful to clean global variables or file descriptors from the
- Perl script.
- Example 1.4. Set perl_destroy_func parameter
- ...
- modparam("app_perl", "perl_destroy_func", "my_perl_destroy")
- ...
- 6. Functions
- 6.1. perl_exec_simple(func, [param])
- 6.2. perl_exec(func, [param])
- 6.1. perl_exec_simple(func, [param])
- Calls a perl function without passing it the current SIP message. May
- be used for very simple simple requests that do not have to fiddle with
- the message themselves, but rather return information values about the
- environment.
- The first parameter is the function to be called. An arbitrary string
- may optionally be passed as a parameter.
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
- ONREPLY_ROUTE and BRANCH_ROUTE.
- Example 1.5. perl_exec_simple() usage
- ...
- if (method=="INVITE") {
- perl_exec_simple("dosomething", "on invite messages");
- };
- ...
- 6.2. perl_exec(func, [param])
- Calls a perl function with passing it the current SIP message. The SIP
- message is reflected by a Perl module that gives you access to the
- information in the current SIP message (Kamailio::Message).
- The first parameter is the function to be called. An arbitrary string
- may be passed as a parameter.
- This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
- ONREPLY_ROUTE and BRANCH_ROUTE.
- Example 1.6. perl_exec() usage
- ...
- if (perl_exec("ldapalias")) {
- ...
- };
- ...
- 7. RPC Commands
- 7.1. app_perl.set_reset_cycles
- 7.2. app_perl.get_reset_cycles
- 7.1. app_perl.set_reset_cycles
- Set the value of the reset_cycle. The command has one integer
- parameter.
- Example 1.7. app_perl.set_reset_cycles usage
- ...
- kamcmd app_perl.set_reset_cycles 20000
- ...
- 7.2. app_perl.get_reset_cycles
- Return the value of the reset_cycle.
- Example 1.8. app_perl.get_reset_cycles usage
- ...
- kamcmd app_perl.get_reset_cycles
- ...
- Chapter 2. Kamailio Perl API
- Table of Contents
- 1. Kamailio
- 1.1. log(level,message)
- 2. Kamailio::Message
- 2.1. getType()
- 2.2. getStatus()
- 2.3. getReason()
- 2.4. getVersion()
- 2.5. getRURI()
- 2.6. getMethod()
- 2.7. getFullHeader()
- 2.8. getBody()
- 2.9. getMessage()
- 2.10. getHeader(name)
- 2.11. getHeaderNames()
- 2.12. moduleFunction(func,string1,string2)
- 2.13. log(level,message) (deprecated type)
- 2.14. rewrite_ruri(newruri)
- 2.15. setFlag(flag)
- 2.16. resetFlag(flag)
- 2.17. isFlagSet(flag)
- 2.18. pseudoVar(string)
- 2.19. append_branch(branch,qval)
- 2.20. getParsedRURI()
- 3. Kamailio::URI
- 3.1. user()
- 3.2. host()
- 3.3. passwd()
- 3.4. port()
- 3.5. params()
- 3.6. headers()
- 3.7. transport()
- 3.8. ttl()
- 3.9. user_param()
- 3.10. maddr()
- 3.11. method()
- 3.12. lr()
- 3.13. r2()
- 3.14. transport_val()
- 3.15. ttl_val()
- 3.16. user_param_val()
- 3.17. maddr_val()
- 3.18. method_val()
- 3.19. lr_val()
- 3.20. r2_val()
- 4. Kamailio::AVP
- 4.1. add(name,val)
- 4.2. get(name)
- 4.3. destroy(name)
- 5. Kamailio::Utils::PhoneNumbers
- 5.1.
- new(publicAccessPrefix,internationalPrefix,longDistancePrefix,
- countryCode,areaCode,pbxCode)
- 5.2. canonicalForm( number [, context] )
- 5.3. dialNumber( number [, context] )
- 6. Kamailio::LDAPUtils::LDAPConf
- 6.1. Constructor new()
- 6.2. Method base()
- 6.3. Method host()
- 6.4. Method port()
- 6.5. Method uri()
- 6.6. Method rootbindpw()
- 6.7. Method rootbinddn()
- 6.8. Method binddn()
- 6.9. Method bindpw()
- 7. Kamailio::LDAPUtils::LDAPConnection
- 7.1. Constructor new( [config, [authenticated]] )
- 7.2. Function/Method search( conf, filter, base,
- [requested_attributes ...])
- 7.2.1. Arguments:
- 7.2.2. Result:
- 8. Kamailio::VDB
- 9. Kamailio::Constants
- 10. Kamailio::VDB::Adapter::Speeddial
- 11. Kamailio::VDB::Adapter::Alias
- 11.1. query(conds,retkeys,order)
- 12. Kamailio::VDB::Adapter::AccountingSIPtrace
- 13. Kamailio::VDB::Adapter::Describe
- 14. Kamailio::VDB::Adapter::Auth
- 15. Kamailio::VDB::ReqCond
- 15.1. new(key,op,type,name)
- 15.2. op()
- 16. Kamailio::VDB::Pair
- 16.1. new(key,type,name)
- 16.2. key()
- 17. Kamailio::VDB::VTab
- 17.1. new()
- 17.2. call(op,[args])
- 18. Kamailio::VDB::Value
- 18.1. stringification
- 18.2. new(type,data)
- 18.3. type()
- 18.4. data()
- 19. Kamailio::VDB::Column
- 19.1. Stringification
- 19.2. new(type,name)
- 19.3. type( )
- 19.4. name()
- 19.5. Kamailio::VDB::Result
- 19.6. new(coldefs,[row, row, ...])
- 19.7. coldefs()
- 19.8. rows()
- 1. Kamailio
- 1.1. log(level,message)
- This module provides access to a limited number of Kamailio core
- functions. As the most interesting functions deal with SIP messages,
- they are located in the Kamailio::Message class below.
- 1.1. log(level,message)
- Logs the message with Kamailio's logging facility. The logging level is
- one of the following:
- * L_ALERT
- * L_CRIT
- * L_ERR
- * L_WARN
- * L_NOTICE
- * L_INFO
- * L_DBG
- Please note that this method is NOT automatically exported, as it
- collides with the perl function log (which calculates the logarithm).
- Either explicitly import the function (via use Kamailio qw ( log );),
- or call it with its full name:
- Kamailio::log(L_INFO, "foobar");
- 2. Kamailio::Message
- 2.1. getType()
- 2.2. getStatus()
- 2.3. getReason()
- 2.4. getVersion()
- 2.5. getRURI()
- 2.6. getMethod()
- 2.7. getFullHeader()
- 2.8. getBody()
- 2.9. getMessage()
- 2.10. getHeader(name)
- 2.11. getHeaderNames()
- 2.12. moduleFunction(func,string1,string2)
- 2.13. log(level,message) (deprecated type)
- 2.14. rewrite_ruri(newruri)
- 2.15. setFlag(flag)
- 2.16. resetFlag(flag)
- 2.17. isFlagSet(flag)
- 2.18. pseudoVar(string)
- 2.19. append_branch(branch,qval)
- 2.20. getParsedRURI()
- This package provides access functions for an Kamailio sip_msg
- structure and its sub-components. Through its means it is possible to
- fully configure alternative routing decisions.
- 2.1. getType()
- Returns one of the constants SIP_REQUEST, SIP_REPLY, SIP_INVALID
- stating the type of the current message.
- 2.2. getStatus()
- Returns the status code of the current Reply message. This function is
- invalid in Request context!
- 2.3. getReason()
- Returns the reason of the current Reply message. This function is
- invalid in Request context!
- 2.4. getVersion()
- Returns the version string of the current SIP message.
- 2.5. getRURI()
- This function returns the recipient URI of the present SIP message:
- my $ruri = $m->getRURI();
- getRURI returns a string. See "getParsedRURI()" below how to receive a
- parsed structure.
- This function is valid in request messages only.
- 2.6. getMethod()
- Returns the current method, such as INVITE, REGISTER, ACK and so on.
- my $method = $m->getMethod();
- This function is valid in request messages only.
- 2.7. getFullHeader()
- Returns the full message header as present in the current message. You
- might use this header to further work with it with your favorite MIME
- package.
- my $hdr = $m->getFullHeader();
- 2.8. getBody()
- Returns the message body.
- 2.9. getMessage()
- Returns the whole message including headers and body.
- 2.10. getHeader(name)
- Returns the body of the first message header with this name.
- print $m->getHeader("To");
- "John" <sip:[email protected]>
- 2.11. getHeaderNames()
- Returns an array of all header names. Duplicates possible!
- 2.12. moduleFunction(func,string1,string2)
- Search for an arbitrary function in module exports and call it with the
- parameters self, string1, string2.
- string1 and/or string2 may be omitted.
- As this function provides access to the functions that are exported to
- the Kamailio configuration file, it is autoloaded for unknown
- functions. Instead of writing
- $m->moduleFunction("sl_send_reply", "500", "Internal Error");
- $m->moduleFunction("xlog", "L_INFO", "foo");
- you may as well write
- $m->sl_send_reply("500", "Internal Error");
- $m->xlog("L_INFO", "foo");
- WARNING
- In Kamailio 1.2, only a limited subset of module functions is
- available. This restriction will be removed in a later version.
- Here is a list of functions that are expected to be working (not
- claiming completeness):
- * alias_db_lookup
- * consume_credentials
- * is_rpid_user_e164
- * append_rpid_hf
- * bind_auth
- * avp_print
- * cpl_process_register
- * cpl_process_register_norpl
- * load_dlg
- * ds_next_dst
- * ds_next_domain
- * ds_mark_dst
- * ds_mark_dst
- * is_from_local
- * is_uri_host_local
- * dp_can_connect
- * dp_apply_policy
- * enum_query (without parameters)
- * enum_fquery (without parameters)
- * is_from_user_enum (without parameters)
- * i_enum_query (without parameters)
- * imc_manager
- * jab_* (all functions from the jabber module)
- * load_gws (without parameters)
- * next_gw
- * from_gw (without parameters)
- * to_gw (without parameters)
- * load_contacts
- * next_contacts
- * sdp_mangle_ip
- * sdp_mangle_port
- * encode_contact
- * decode_contact
- * decode_contact_header
- * fix_contact
- * use_media_proxy
- * end_media_session
- * m_store
- * m_dump
- * fix_nated_contact
- * unforce_rtp_proxy
- * force_rtp_proxy
- * fix_nated_register
- * add_rcv_param
- * options_reply
- * checkospheader
- * validateospheader
- * requestosprouting
- * checkosproute
- * prepareosproute
- * prepareallosproutes
- * checkcallingtranslation
- * reportospusage
- * mangle_pidf
- * mangle_message_cpim
- * add_path (without parameters)
- * add_path_received (without parameters)
- * prefix2domain
- * allow_routing (without parameters)
- * allow_trusted
- * pike_check_req
- * handle_publish
- * handle_subscribe
- * stored_pres_info
- * bind_pua
- * send_publish
- * send_subscribe
- * pua_set_publish
- * loose_route
- * record_route
- * load_rr
- * sip_trace
- * sl_reply_error
- * sms_send_msg
- * sd_lookup
- * sstCheckMin
- * append_time
- * has_body (without parameters)
- * is_peer_verified
- * t_newtran
- * t_release
- * t_relay (without parameters)
- * t_flush_flags
- * t_check_trans
- * t_was_cancelled
- * t_load_contacts
- * t_next_contacts
- * uac_restore_from
- * uac_auth
- * has_totag
- * tel2sip
- * check_to
- * check_from
- * radius_does_uri_exist
- * ul_* (All functions exported by the usrloc module for user access)
- * xmpp_send_message
- 2.13. log(level,message) (deprecated type)
- Logs the message with Kamailio's logging facility. The logging level is
- one of the following:
- * L_ALERT
- * L_CRIT
- * L_ERR
- * L_WARN
- * L_NOTICE
- * L_INFO
- * L_DBG
- The logging function should be accessed via the Kamailio module
- variant. This one, located in Kamailio::Message, is deprecated.
- 2.14. rewrite_ruri(newruri)
- Sets a new destination (recipient) URI. Useful for rerouting the
- current message/call.
- if ($m->getRURI() =~ m/\@somedomain.net/) {
- $m->rewrite_ruri("sip:dispatcher\@organization.net");
- }
- 2.15. setFlag(flag)
- Sets a message flag. The constants as known from the C API may be used,
- when Constants.pm is included.
- 2.16. resetFlag(flag)
- Resets a message flag.
- 2.17. isFlagSet(flag)
- Returns whether a message flag is set or not.
- 2.18. pseudoVar(string)
- Returns a new string where all pseudo variables are substituted by
- their values. Can be used to receive the values of single variables,
- too.
- Please remember that you need to escape the '$' sign in perl strings!
- 2.19. append_branch(branch,qval)
- Append a branch to current message.
- 2.20. getParsedRURI()
- Returns the current destination URI as an Kamailio::URI object.
- 3. Kamailio::URI
- 3.1. user()
- 3.2. host()
- 3.3. passwd()
- 3.4. port()
- 3.5. params()
- 3.6. headers()
- 3.7. transport()
- 3.8. ttl()
- 3.9. user_param()
- 3.10. maddr()
- 3.11. method()
- 3.12. lr()
- 3.13. r2()
- 3.14. transport_val()
- 3.15. ttl_val()
- 3.16. user_param_val()
- 3.17. maddr_val()
- 3.18. method_val()
- 3.19. lr_val()
- 3.20. r2_val()
- This package provides functions for access to sip_uri structures.
- 3.1. user()
- Returns the user part of this URI.
- 3.2. host()
- Returns the host part of this URI.
- 3.3. passwd()
- Returns the passwd part of this URI.
- 3.4. port()
- Returns the port part of this URI.
- 3.5. params()
- Returns the params part of this URI.
- 3.6. headers()
- Returns the headers part of this URI.
- 3.7. transport()
- Returns the transport part of this URI.
- 3.8. ttl()
- Returns the ttl part of this URI.
- 3.9. user_param()
- Returns the user_param part of this URI.
- 3.10. maddr()
- Returns the maddr part of this URI.
- 3.11. method()
- Returns the method part of this URI.
- 3.12. lr()
- Returns the lr part of this URI.
- 3.13. r2()
- Returns the r2 part of this URI.
- 3.14. transport_val()
- Returns the transport_val part of this URI.
- 3.15. ttl_val()
- Returns the ttl_val part of this URI.
- 3.16. user_param_val()
- Returns the user_param_val part of this URI.
- 3.17. maddr_val()
- Returns the maddr_val part of this URI.
- 3.18. method_val()
- Returns the method_val part of this URI.
- 3.19. lr_val()
- Returns the lr_val part of this URI.
- 3.20. r2_val()
- Returns the r2_val part of this URI.
- 4. Kamailio::AVP
- 4.1. add(name,val)
- 4.2. get(name)
- 4.3. destroy(name)
- This package provides access functions for Kamailio's AVPs. These
- variables can be created, evaluated, modified and removed through this
- package.
- Please note that these functions do NOT support the notation used in
- the configuration file, but directly work on strings or numbers. See
- documentation of add method below.
- 4.1. add(name,val)
- Add an AVP.
- Add an Kamailio AVP to its environment. name and val may both be
- integers or strings; this function will try to guess what is correct.
- Please note that
- Kamailio::AVP::add("10", "10")
- is something different than
- Kamailio::AVP::add(10, 10)
- due to this evaluation: The first will create _string_ AVPs with the
- name 10, while the latter will create a numerical AVP.
- You can modify/overwrite AVPs with this function.
- 4.2. get(name)
- get an Kamailio AVP:
- my $numavp = Kamailio::AVP::get(5);
- my $stravp = Kamailio::AVP::get("foo");
- 4.3. destroy(name)
- Destroy an AVP.
- Kamailio::AVP::destroy(5);
- Kamailio::AVP::destroy("foo");
- 5. Kamailio::Utils::PhoneNumbers
- 5.1.
- new(publicAccessPrefix,internationalPrefix,longDistancePrefix,count
- ryCode,areaCode,pbxCode)
- 5.2. canonicalForm( number [, context] )
- 5.3. dialNumber( number [, context] )
- Kamailio::Utils::PhoneNumbers - Functions for canonical forms of phone
- numbers.
- use Kamailio::Utils::PhoneNumbers;
- my $phonenumbers = new Kamailio::Utils::PhoneNumbers(
- publicAccessPrefix => "0",
- internationalPrefix => "+",
- longDistancePrefix => "0",
- areaCode => "761",
- pbxCode => "456842",
- countryCode => "49"
- );
- $canonical = $phonenumbers->canonicalForm("07612034567");
- $number = $phonenumbers->dialNumber("+497612034567");
- A telphone number starting with a plus sign and containing all dial
- prefixes is in canonical form. This is usally not the number to dial at
- any location, so the dialing number depends on the context of the
- user/system.
- The idea to canonicalize numbers were taken from hylafax.
- Example: +497614514829 is the canonical form of my phone number, 829 is
- the number to dial at Pyramid, 4514829 is the dialing number from
- Freiburg are and so on.
- To canonicalize any number, we strip off any dial prefix we find and
- then add the prefixes for the location. So, when the user enters the
- number 04514829 in context pyramid, we remove the publicAccessPrefix
- (at Pyramid this is 0) and the pbxPrefix (4514 here). The result is
- 829. Then we add all the general dial prefixes - 49 (country) 761
- (area) 4514 (pbx) and 829, the number itself => +497614514829
- To get the dialing number from a canonical phone number, we substract
- all general prefixes until we have something
- As said before, the interpretation of a phone number depends on the
- context of the location. For the functions in this package, the context
- is created through the new operator.
- The following fields should be set:
- 'longDistancePrefix'
- 'areaCode'
- 'pbxCode'
- 'internationalPrefix'
- 'publicAccessPrefix'
- 'countryCode'
- This module exports the following functions when useed:
- 5.1. new(publicAccessPrefix,internationalPrefix,longDistancePrefix,countryCod
- e,areaCode,pbxCode)
- The new operator returns an object of this type and sets its locational
- context according to the passed parameters. See
- Kamailio::Utils::PhoneNumbers above.
- 5.2. canonicalForm( number [, context] )
- Convert a phone number (given as first argument) into its canonical
- form. When no context is passed in as the second argument, the default
- context from the systems configuration file is used.
- 5.3. dialNumber( number [, context] )
- Convert a canonical phone number (given in the first argument) into a
- number to to dial. WHen no context is given in the second argument, a
- default context from the systems configuration is used.
- 6. Kamailio::LDAPUtils::LDAPConf
- 6.1. Constructor new()
- 6.2. Method base()
- 6.3. Method host()
- 6.4. Method port()
- 6.5. Method uri()
- 6.6. Method rootbindpw()
- 6.7. Method rootbinddn()
- 6.8. Method binddn()
- 6.9. Method bindpw()
- Kamailio::LDAPUtils::LDAPConf - Read openldap config from standard
- config files.
- use Kamailio::LDAPUtils::LDAPConf;
- my $conf = new Kamailio::LDAPUtils::LDAPConf();
- This module may be used to retrieve the global LDAP configuration as
- used by other LDAP software, such as nsswitch.ldap and pam-ldap. The
- configuration is usualy stored in /etc/openldap/ldap.conf
- When used from an account with sufficient privilegs (e.g. root), the
- ldap manager passwort is also retrieved.
- 6.1. Constructor new()
- Returns a new, initialized Kamailio::LDAPUtils::LDAPConf object.
- 6.2. Method base()
- Returns the servers base-dn to use when doing queries.
- 6.3. Method host()
- Returns the ldap host to contact.
- 6.4. Method port()
- Returns the ldap servers port.
- 6.5. Method uri()
- Returns an uri to contact the ldap server. When there is no ldap_uri in
- the configuration file, an ldap: uri is constucted from host and port.
- 6.6. Method rootbindpw()
- Returns the ldap "root" password.
- Note that the rootbindpw is only available when the current account has
- sufficient privilegs to access /etc/openldap/ldap.secret.
- 6.7. Method rootbinddn()
- Returns the DN to use for "root"-access to the ldap server.
- 6.8. Method binddn()
- Returns the DN to use for authentication to the ldap server. When no
- bind dn has been specified in the configuration file, returns the
- rootbinddn.
- 6.9. Method bindpw()
- Returns the password to use for authentication to the ldap server. When
- no bind password has been specified, returns the rootbindpw if any.
- 7. Kamailio::LDAPUtils::LDAPConnection
- 7.1. Constructor new( [config, [authenticated]] )
- 7.2. Function/Method search( conf, filter, base, [requested_attributes
- ...])
- 7.2.1. Arguments:
- 7.2.2. Result:
- Kamailio::LDAPUtils::LDAPConnection - Perl module to perform simple
- LDAP queries.
- OO-Style interface:
- use Kamailio::LDAPUtils::LDAPConnection;
- my $ldap = new Kamailio::LDAPUtils::LDAPConnection;
- my @rows = $ldap-search("uid=andi","ou=people,ou=coreworks,ou=de");
- Procedural interface:
- use Kamailio::LDAPUtils::LDAPConnection;
- my @rows = $ldap->search(
- new Kamailio::LDAPUtils::LDAPConfig(), "uid=andi","ou=people,ou=coreworks,
- ou=de");
- This perl module offers a somewhat simplified interface to the
- Net::LDAP functionality. It is intended for cases where just a few
- attributes should be retrieved without the overhead of the full
- featured Net::LDAP.
- 7.1. Constructor new( [config, [authenticated]] )
- Set up a new LDAP connection.
- The first argument, when given, should be a hash reference pointing to
- to the connection parameters, possibly an
- Kamailio::LDAPUtils::LDAPConfig object. This argument may be undef in
- which case a new (default) Kamailio::LDAPUtils::LDAPConfig object is
- used.
- When the optional second argument is a true value, the connection will
- be authenticated. Otherwise an anonymous bind is done.
- On success, a new LDAPConnection object is returned, otherwise the
- result is undef.
- 7.2. Function/Method search( conf, filter, base, [requested_attributes ...])
- perform an ldap search, return the dn of the first matching directory
- entry, unless a specific attribute has been requested, in wich case the
- values(s) fot this attribute are returned.
- When the first argument (conf) is a
- Kamailio::LDAPUtils::LDAPConnection, it will be used to perform the
- queries. You can pass the first argument implicitly by using the
- "method" syntax.
- Otherwise the conf argument should be a reference to a hash containing
- the connection setup parameters as contained in a
- Kamailio::LDAPUtils::LDAPConf object. In this mode, the
- Kamailio::LDAPUtils::LDAPConnection from previous queries will be
- reused.
- 7.2.1. Arguments:
- conf
- configuration object, used to find host,port,suffix and
- use_ldap_checks
- filter
- ldap search filter, eg '(mail=some@domain)'
- base
- search base for this query. If undef use default suffix, concat
- base with default suffix if the last char is a ','
- requested_attributes
- retrieve the given attributes instead of the dn from the ldap
- directory.
- 7.2.2. Result:
- Without any specific requested_attributes, return the dn of all
- matching entries in the LDAP directory.
- When some requested_attributes are given, return an array with those
- attibutes. When multiple entries match the query, the attribute lists
- are concatenated.
- 8. Kamailio::VDB
- This package is an (abstract) base class for all virtual databases.
- Derived packages can be configured to be used by Kamailio as a
- database.
- The base class itself should NOT be used in this context, as it does
- not provide any functionality.
- 9. Kamailio::Constants
- This package provides a number of constants taken from enums and
- defines of Kamailio header files. Unfortunately, there is no mechanism
- for updating the constants automatically, so check the values if you
- are in doubt.
- 10. Kamailio::VDB::Adapter::Speeddial
- This adapter can be used with the speeddial module.
- 11. Kamailio::VDB::Adapter::Alias
- 11.1. query(conds,retkeys,order)
- This package is intended for usage with the alias_db module. The query
- VTab has to take two arguments and return an array of two arguments
- (user name/domain).
- 11.1. query(conds,retkeys,order)
- Queries the vtab with the given arguments for request conditions, keys
- to return and sort order column name.
- 12. Kamailio::VDB::Adapter::AccountingSIPtrace
- This package is an Adapter for the acc and siptrace modules, featuring
- only an insert operation.
- 13. Kamailio::VDB::Adapter::Describe
- This package is intended for debug usage. It will print information
- about requested functions and operations of a client module.
- Use this module to request schema information when creating new
- adapters.
- 14. Kamailio::VDB::Adapter::Auth
- This adapter is intended for usage with the auth_db module. The VTab
- should take a username as an argument and return a (plain text!)
- password.
- 15. Kamailio::VDB::ReqCond
- 15.1. new(key,op,type,name)
- 15.2. op()
- This package represents a request condition for database access,
- consisting of a column name, an operator (=, <, >, ...), a data type
- and a value.
- This package inherits from Kamailio::VDB::Pair and thus includes its
- methods.
- 15.1. new(key,op,type,name)
- Constructs a new Column object.
- 15.2. op()
- Returns or sets the current operator.
- 16. Kamailio::VDB::Pair
- 16.1. new(key,type,name)
- 16.2. key()
- This package represents database key/value pairs, consisting of a key,
- a value type, and the value.
- This package inherits from Kamailio::VDB::Value and thus has the same
- methods.
- 16.1. new(key,type,name)
- Constructs a new Column object.
- 16.2. key()
- Returns or sets the current key.
- 17. Kamailio::VDB::VTab
- 17.1. new()
- 17.2. call(op,[args])
- This package handles virtual tables and is used by the Kamailio::VDB
- class to store information about valid tables. The package is not
- inteded for end user access.
- 17.1. new()
- Constructs a new VTab object
- 17.2. call(op,[args])
- Invokes an operation on the table (insert, update, ...) with the given
- arguments.
- 18. Kamailio::VDB::Value
- 18.1. stringification
- 18.2. new(type,data)
- 18.3. type()
- 18.4. data()
- This package represents a database value. Additional to the data
- itself, information about its type is stored.
- 18.1. stringification
- When accessing a Kamailio::VDB::Value object as a string, it simply
- returns its data regardless of its type. =cut
- use strict;
- package Kamailio::VDB::Value;
- use overload '""' => \&stringify;
- sub stringify { shift->{data} }
- use Kamailio; use Kamailio::Constants;
- our @ISA = qw ( Kamailio::Utils::Debug );
- 18.2. new(type,data)
- Constructs a new Value object. Its data type and the data are passed as
- parameters.
- 18.3. type()
- Returns or sets the current data type. Please consider using the
- constants from Kamailio::Constants
- 18.4. data()
- Returns or sets the current data.
- 19. Kamailio::VDB::Column
- 19.1. Stringification
- 19.2. new(type,name)
- 19.3. type( )
- 19.4. name()
- 19.5. Kamailio::VDB::Result
- 19.6. new(coldefs,[row, row, ...])
- 19.7. coldefs()
- 19.8. rows()
- This package represents database column definition, consisting of a
- column name and its data type.
- 19.1. Stringification
- When accessing a Kamailio::VDB::Column object as a string, it simply
- returns its column name regardless of its type. =cut
- package Kamailio::VDB::Column;
- use overload '""' => \&stringify;
- sub stringify { shift->{name} }
- use Kamailio; use Kamailio::Constants;
- our @ISA = qw ( Kamailio::Utils::Debug );
- 19.2. new(type,name)
- Constructs a new Column object. Its type and the name are passed as
- parameters.
- 19.3. type( )
- Returns or sets the current type. Please consider using the constants
- from Kamailio::Constants
- 19.4. name()
- Returns or sets the current column name.
- 19.5. Kamailio::VDB::Result
- This class represents a VDB result set. It contains a column
- definition, plus an array of rows. Rows themselves are simply
- references to arrays of scalars.
- 19.6. new(coldefs,[row, row, ...])
- The constructor creates a new Result object. Its first parameter is a
- reference to an array of Kamailio::VDB::Column objects. Additional
- parameters may be passed to provide initial rows, which are references
- to arrays of scalars.
- 19.7. coldefs()
- Returns or sets the column definition of the object.
- 19.8. rows()
- Returns or sets the rows of the object.
- Chapter 3. Perl samples
- Table of Contents
- 1. Sample directory
- 1.1. Script descriptions
- 1.1.1. branches.pl
- 1.1.2. firstline.pl
- 1.1.3. flags.pl
- 1.1.4. functions.pl
- 1.1.5. headers.pl
- 1.1.6. logging.pl
- 1.1.7. messagedump.pl
- 1.1.8. persistence.pl
- 1.1.9. phonenumbers.pl
- 1.1.10. pseudovars.pl
- 1. Sample directory
- 1.1. Script descriptions
- 1.1.1. branches.pl
- 1.1.2. firstline.pl
- 1.1.3. flags.pl
- 1.1.4. functions.pl
- 1.1.5. headers.pl
- 1.1.6. logging.pl
- 1.1.7. messagedump.pl
- 1.1.8. persistence.pl
- 1.1.9. phonenumbers.pl
- 1.1.10. pseudovars.pl
- There are a number of example scripts in the "samples/". They are
- documented well. Read them, it will explain a lot to you :)
- If you want to use any of these scripts directly in your
- implementation, you can use Perl's "require" mechanism to import them
- (just remember that you need to use quotes when require'ing .pl files).
- 1.1. Script descriptions
- The included sample scripts are described below:
- 1.1.1. branches.pl
- The minimal function in branches.pl demonstrates that you can access
- the "append_branch" function from within perl, just as you would have
- done from your normal configuration file. You'll find documentation on
- the concepts of branching in the Kamailio documentation.
- 1.1.2. firstline.pl
- Message's first_line structure may be evaluated. Message can be either
- of SIP_REQUEST or SIP_REPLY. Depending on that, different information
- can be received. This script demonstrates these functions.
- 1.1.3. flags.pl
- The perl module provides access to Kamailio's flagging mechanism. The
- flag names available for Kamailio modules are made available through
- the Kamailio::Constants package, so you can flag messages as "green",
- "magenta" etc.
- The first function, setflag, demonstrates how the "green" flag is set.
- In the second function, readflag, the "green" and "magenta" flags are
- evaluated.
- 1.1.4. functions.pl
- This sample script demonstrates different things related to calling
- functions from within perl, and the different types of functions you
- can offer for Kamailio access.
- "exportedfuncs" simply demonstrates that you can use the moduleFunction
- method to call functions offered by other modules. The results are
- equivalent to calling these functions from your config file. In the
- demonstrated case, telephone calls with a destination number beginning
- with 555... are rejected with an internal server error. Other
- destination addresses are passed to the alias_db module.
- Please note that the moduleFunction method is not fully available in
- Kamailio 1.2. See the method's documentation for details.
- "paramfunc" shows that you can pass arbitrary strings to perl
- functions. Do with them whatever you want :)
- "autotest" demonstrates that unknown functions in Kamailio::Message
- objects are automatically transformed into calls to module functions.
- The "diefunc"s show that dying perl scripts - by "manual" dying, or
- because of script errors - are handled by the Kamailio package. The
- error message is logged through Kamailio's logging mechanism. Please
- note that this only works correctly if you do NOT overwrite the default
- die handler. Oh, yes, that works for warnings, too.
- 1.1.5. headers.pl
- Header extraction is among the most crucial functionalities while
- processing SIP messages. This sample script demonstrates access to
- header names and values within two sample functions.
- "headernames" extracts all header names and logs their names.
- "someheaders" logs the contents of the two headers, "To" and
- "WWW-Contact". As you can see, headers that occur more than once are
- retrieved as an array, which may be accessed by Perl's array accessing
- methods.
- 1.1.6. logging.pl
- For debugging purposes, you probably want to write messages to the
- syslog. The "logdemo" shows three ways to access the Kamailio log
- function: it is available through the Kamailio class as well as through
- the Kamailio::Message class.
- Remember that you can use exported functions from other modules. You
- may thus as well use the "xlog" module and it's xlog function.
- The L_INFO, L_DBG, L_ERR, L_CRIT... constants are available through the
- Kamailio::Constants package.
- 1.1.7. messagedump.pl
- This script demonstrates how to access the whole message header of the
- current message. Please note that modifications on the message made by
- earlier function calls in your configuration script may NOT be
- reflected in this dump.
- 1.1.8. persistence.pl
- When processing SIP messages, you may want to use persistent data
- across multiple calls to your Perl functions. Your first option is to
- use global variables in your script. Unfortunately, these globals are
- not visible from the mulitple instances of Kamailio. You may want to
- use a mechanism such as the IPC::Shareable shared memory access package
- to correct this.
- 1.1.9. phonenumbers.pl
- The Kamailio::Utils::PhoneNumbers package provides two methods for the
- transformation of local to canonical telephone numbers, and vice versa.
- This script demonstrates it's use.
- 1.1.10. pseudovars.pl
- This script demonstrates the Perl module's "pseudoVar" method. It may
- be used to retrieve the values of current pseudo variables.
- You might notice that there is no particular function for setting
- pseudo variables; you may use the exported functions from the avpops
- module, though.
- Chapter 4. Frequently Asked Questions
- 4.1. Are there known bugs in the Perl module?
- 4.2. Where can I find more about Kamailio?
- 4.3. Where can I post a question about this module?
- 4.4. How can I report a bug?
- 4.1.
- Are there known bugs in the Perl module?
- The Perl module does have a few shortcomings that may be regarded as
- bugs.
- * Missing module functions. Not all functions of other modules are
- available for Perl access. The reason for this is a design property
- of Kamailio. Making available more functions is work in progress.
- * Perl and threads. Perl itself is, when compiled with the correct
- parameters, thread safe; unfortunately, not all Perl modules are.
- The DBI modules, especially (but not restricted to) DBI::ODBC are
- known NOT to be thread safe.
- Using DBI::ODBC -- and possibly other non-thread-safe Perl
- extensions -- may result in erroneous behavior of Kamailio,
- including (but not restricted to) server crashes and wrong routing.
- 4.2.
- Where can I find more about Kamailio?
- Take a look at http://www.kamailio.org/.
- 4.3.
- Where can I post a question about this module?
- First at all check if your question was already answered on one of our
- mailing lists:
- * User Mailing List -
- http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
- * Developer Mailing List -
- http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
- E-mails regarding any stable Kamailio release should be sent to
- <[email protected]> and e-mails regarding development
- versions should be sent to <[email protected]>.
- If you want to keep the mail private, send it to
- <[email protected]>.
- 4.4.
- How can I report a bug?
- Please follow the guidelines provided at:
- http://sip-router.org/tracker.
|