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.
kamailio/obsolete/pa/doc/functions.xml

171 lines
5.0 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="pa.functions"><title>Functions</title>
<variablelist>
<varlistentry>
<term><varname>handle_subscription(domain)</varname></term>
<listitem>
<para>This function processes SUBSCRIBE requests to "presence" and
"presence.winfo" (see <link
linkend="pa.param.watcherinfo_notify">watcherinfo_notify
parameter</link>) events. </para>
<para>Meaning of the parameters is as follows:</para>
<itemizedlist>
<listitem>
<para><emphasis>domain</emphasis> - This can be either "registrar" or "jabber".
</para>
</listitem>
</itemizedlist>
<example>
<title><function>handle_subscription</function> usage</title>
<programlisting>
...
handle_subscription("registrar");
...
</programlisting>
</example>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>handle_publish(domain)</varname></term>
<listitem><para>Processes PUBLISH request and generates response to it.
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>target_online(domain)</varname></term>
<listitem><para>This function returns 1 if the target (using get_to_uid on
current message) is online, -1 otherwise.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>check_subscription_status(status)</varname></term>
<listitem><para>This function returns 1 if last subscription is in status
given by parameter, -1 otherwise. The <parameter>status</parameter> can have
values:
<variablelist>
<varlistentry>
<term>pending</term>
<listitem><para>Subscription was created but no status information will
be sent to the watcher.</para></listitem>
</varlistentry>
<varlistentry>
<term>active</term>
<listitem><para>Subscription was established and all presence
information will be sent to the watcher.</para></listitem>
</varlistentry>
<!-- <varlistentry>
<term>rejected</term>
<listitem><para>Subscription was not established due to authorization
rules.</para></listitem>
</varlistentry>-->
<varlistentry>
<term>terminated</term>
<listitem><para>Subscription was terminated.</para></listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>store_winfo(domain)</varname></term>
<listitem><para>This function stores data about currently created
subscription into database for later dumping in the form of watcherinfo
notification. It should be called after handle_subscription
during processing SUBSCRIBE request.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>dump_stored_winfo(domain, event_package)</varname></term>
<listitem><para>This function tries to send stored watcherinfo data
in the context of existing watcherinfo subscription. It uses get_to_uid as
target for notification. If there is no watcherinfo subscription to such
presentity, no information is sent.</para>
<para>If the client responds with 2xx on generated NOTIFY request, the
stored information is removed from database.
</para>
<example><title><function>target_online</function>,
<function>store_winfo</function>, <function>dump_stored_winfo</function> usage</title>
<programlisting>
...
if (method=="SUBSCRIBE") {
if (!t_newtran()) {
sl_reply_error();
break;
};
if (handle_subscription("registrar")) {; # uses uid from AVP (get_to_uid)
if (@msg.event=~"presence\.winfo") {
log(1, "subscription to watcherinfo\n");
dump_stored_winfo("registrar", "presence");
log(1, "OFFLINE AUTH: watcherinfo dumped\n");
}
else {
if ((@msg.event=~"presence") &amp;&amp; (check_subscription_status("pending"))) {
log(1, "pending subscription to presence\n");
# if offline user and new "pending" subscription
if (!target_online("registrar") &amp;&amp; (@to.tag=="")) {
log(1, "OFFLINE AUTH: storing for offline user\n");
store_winfo("registrar");
}
}
}
}
break;
};
...
</programlisting>
</example>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>authorize_message(filename)</varname></term>
<listitem><para>This function reads and processes IM authorization data and
returns 1 if message can be accepted by destination user. If there is no IM
authorization document on given XCAP server, it returns 1 too (MESSAGE is
enabled by default). If the sender is blocked by recipient rules, this
function returns -1. For more details about authorization documents see
<xref linkend="im_rules"/>.
</para>
<para>Filename parameter specifies the name of file on XCAP server which
contains message authorization rules. It is <quote>im-rules.xml</quote> by
default.
</para>
<example><title><function>authorize_message</function> usage</title>
<programlisting>
...
if (method=="MESSAGE") {
if (authorize_message("im-rules.xml")) {
if (!lookup("location")) {
sl_reply("404", "Not Found");
break;
};
if (!t_relay()) { sl_reply_error(); };
}
else {
sl_reply("403", "Forbidden");
}
break;
}
...
</programlisting>
</example>
</listitem>
</varlistentry>
</variablelist>
</section>