123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <?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>
|