mirror of https://github.com/sipwise/kamailio.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
5.2 KiB
136 lines
5.2 KiB
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
|
|
|
<section id="cpl-c.functions" xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
<sectioninfo>
|
|
</sectioninfo>
|
|
|
|
<title>Functions</title>
|
|
|
|
<section id="cpl_run_script">
|
|
<title>
|
|
<function>cpl_run_script(type,mode)</function>
|
|
</title>
|
|
<para>
|
|
Starts the execution of the CPL script. The user name is fetched
|
|
from new_uri or requested uri or from To header -in this order-
|
|
(for incoming execution) or from FROM header (for outgoing
|
|
execution). Regarding the stateful/stateless message processing,
|
|
the function is very flexible, being able to run in different modes
|
|
(see below the"mode" parameter). Normally this function will end
|
|
script execution. There is no guaranty that the CPL script
|
|
interpretation ended when ser script ended also (for the same
|
|
INVITE ;-)) - this can happen when the CPL script does a PROXY and
|
|
the script interpretation pause after proxying and it will be
|
|
resume when some reply is received (this can happen in a different
|
|
process of SER). If the function returns to script, the SIP server
|
|
should continue with the normal behavior as if no script existed.
|
|
When some error is returned, the function itself haven't sent any
|
|
SIP error reply (this can be done from script).
|
|
</para>
|
|
<para>Meaning of the parameters is as follows:</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>type</emphasis> - which part of the script should
|
|
be run; set it to "incoming" for having the incoming part
|
|
of script executed (when an INVITE is received) or to
|
|
"outgoing" for running the outgoing part of script (when a
|
|
user is generating an INVITE - call).
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>mode</emphasis> - sets the interpreter mode as
|
|
stateless/stateful behavior. The following modes are
|
|
accepted:
|
|
</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>IS_STATELESS</emphasis> - the current
|
|
INVITE has no transaction created yet. All
|
|
replies (redirection or deny) will be done
|
|
is a stateless way. The execution will
|
|
switch to stateful only when proxy is
|
|
done. So, if the function returns, will be
|
|
in stateless mode.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>IS_STATEFUL</emphasis> - the current
|
|
INVITE has already a transaction
|
|
associated. All signaling operations
|
|
(replies or proxy) will be done in stateful
|
|
way.So, if the function returns, will be in
|
|
stateful mode.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<emphasis>FORCE_STATEFUL</emphasis> - the current
|
|
INVITE has no transaction created yet. All
|
|
signaling operations will be done is a
|
|
stateful way (on signaling, the transaction
|
|
will be created from within the
|
|
interpreter). So, if the function returns,
|
|
will be in stateless mode.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<note>
|
|
<para>
|
|
is_stateful is very difficult to manage from the
|
|
routing script (script processing can continue in
|
|
stateful mode); is_stateless is the fastest and
|
|
consumes less resources (transaction is created only if
|
|
proxying is done), but there is only a minimal
|
|
protection against retransmissions (since replies are
|
|
send statelessly); force_stateful is a good compromise
|
|
- all signaling is done stateful (retransmission
|
|
protection) and in the same time, if returning to
|
|
script, it will be in stateless mode (easy to continue
|
|
the routing script execution)
|
|
</para>
|
|
</note>
|
|
</listitem>
|
|
</itemizedlist>
|
|
<example>
|
|
<title><function>cpl_run_script</function> usage</title>
|
|
<programlisting>
|
|
...
|
|
cpl_run_script("incoming","force_stateful");
|
|
...
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
<section id="cpl_process_register">
|
|
<title>
|
|
<function moreinfo="none">cpl_process_register()</function>
|
|
</title>
|
|
<para>
|
|
This function MUST be called only for REGISTER requests. It checks
|
|
if the current REGISTER request is related or not with CPL script
|
|
upload/download/ remove. If it is, all the needed operation will be
|
|
done. For checking if the REGISTER is CPL related, the function
|
|
looks fist to "Content-Type" header. If it exists and has a the
|
|
mime type set to "application/cpl+xml" means this is a CPL script
|
|
upload/remove operation. The distinction between to case is made by
|
|
looking at "Content-Disposition" header; id its value is
|
|
"script;action=store", means it's an upload; if it's
|
|
"script;action=remove", means it's a remove operation; other values
|
|
are considered to be errors. If no "Content-Type" header is
|
|
present, the function looks to "Accept" header and if it contains
|
|
the "*" or "application/cpl-xml" the request it will be consider
|
|
one for downloading CPL scripts. The functions returns to script
|
|
only if the REGISTER is not related to CPL. In other case, the
|
|
function will send by itself the necessary replies (stateless -
|
|
using sl), including for errors.
|
|
</para>
|
|
</section>
|
|
|
|
</section>
|