<!-- Auth_radius Module User's Guide -->

<chapter>
	
	<title>&adminguide;</title>

	<section id="overview" xreflabel="Overview">
	<title>Overview</title>
	<para>
	gflags module (global flags) keeps a bitmap of flags in shared memory
	and may be used to change behaviour of server based on value of the flags.
	Example:
	<programlisting format="linespecific">
	if (is_gflag(1)) {
		t_relay("udp:10.0.0.1:5060");
	} else {
		t_relay("udp:10.0.0.2:5060");
	}
	</programlisting>
	</para>
	<para>
	The benefit of this module is the value of the switch flags
	can be manipulated by external applications such as web interface
	or command line tools. The size of bitmap is 32.
	</para>
	<para>
	The module exports external commands that can be used to change
	the global flags via Management Interface. The MI commands are:
	<quote>set_gflag</quote>, <quote>reset_gflag</quote> and
	<quote>is_gflag</quote>.
	</para>
	</section>

	<section id="dependencies" xreflabel="Dependencies">
	<title>Dependencies</title>
	<para>
		The module depends on the following modules (in the other words the
		listed modules must be loaded before this module):
		<itemizedlist>
		<listitem>
			<para><emphasis>none</emphasis></para>
		</listitem>
		</itemizedlist>
	</para>
	</section>

	<section id="exported_parameters" xreflabel="Exported Parameters">
	<title>Exported Parameters</title>
	<section id="param_initial" xreflabel="initial">
		<title><varname>initial</varname> (integer)</title>
		<para>
		The initial value of global flags bitmap.
		</para>
		<para>
		Default value is <quote>0</quote>.
		</para>
		<example>
		<title><varname>initial</varname> parameter usage</title>
		<programlisting format="linespecific">
modparam("gflags", "initial", 15)
		</programlisting>
		</example>
	</section>
	</section>

	<section id="exported_functions" xreflabel="exported_functions">
	<title>Exported Functions</title>
	<section id="func_set_gflag" xreflabel="set_gflag()">
		<title><function moreinfo="none">set_gflag(flag)</function></title>
		<para>
		Set the bit at the position <quote>flag</quote> in global flags.
		</para>
		<para>
		The <quote>flag</quote> (int) parameter can have a value in the range of 0..31.
		</para>
		<para>
		This function may be used from any route.
		</para>
		<example>
		<title><function moreinfo="none">set_gflag()</function> usage</title>
		<programlisting format="linespecific">
...
set_gflag(4);
...
</programlisting>
		</example>
	</section>

	<section id="func_reset_gflag" xreflabel="reset_gflag()">
		<title><function moreinfo="none">reset_gflag(flag)</function></title>
		<para>
		Reset the bit at the position <quote>flag</quote> in global flags.
		</para>
		<para>
		The <quote>flag</quote> (int) parameter can have a value in the range of 0..31.
		</para>
		<para>
		This function may be used from any route.
		</para>
		<example>
		<title><function moreinfo="none">reset_gflag()</function> usage</title>
		<programlisting format="linespecific">
...
reset_gflag(4);
...
</programlisting>
		</example>
	</section>

	<section id="func_is_gflag" xreflabel="is_gflag()">
		<title><function moreinfo="none">is_gflag(flag)</function></title>
		<para>
		Check if bit at the position <quote>flag</quote> in global flags is
		set.
		</para>
		<para>
		The <quote>flag</quote> (int) parameter can have a value in the range of 0..31.
		</para>
		<para>
		This function may be used from any route.
		</para>
		<example>
		<title><function moreinfo="none">is_gflag()</function> usage</title>
		<programlisting format="linespecific">
...
if(is_gflag(4))
{
	log("global flag 4 is set\n");
} else {
	log("global flag 4 is not set\n");
};
...
</programlisting>
		</example>
	</section>

	</section>

	<section id="exported_mi_functions" xreflabel="Exported MI Functions">
	<title>Exported MI Functions</title>
		<para>Functions that check or change some flags accepts one parameter 
			which is the flag bitmap/mask specifing the corresponding flags.
			It is not possible to specify directly the flag position that 
			should be changed as in the functions available in the routing 
			script.
		</para>
		<section id="mi_set_gflag" xreflabel="set_gflag">
			<title><function moreinfo="none">set_gflag</function></title>
			<para>
			Set the value of some flags (specified by bitmask) to 1.
			</para>
			<para>
			The parameter value must be a bitmask in decimal or hexa format.
			The bitmaks has a 32 bit size.
			</para>
			<example>
			<title><function moreinfo="none">set_gflag</function> usage</title>
			<programlisting format="linespecific">
...
$ opensips-cli -x mi set_gflag 1
$ opensips-cli -x mi set_gflag 0x3
...
</programlisting>
			</example>

		</section>
		<section id="mi_reset_gflag" xreflabel="reset_gflag">
			<title><function moreinfo="none">reset_gflag</function></title>
			<para>
			Reset the value of some flags to 0.
			</para>
			<para>
			The parameter value must be a bitmask in decimal or hexa format.
			The bitmaks has a 32 bit size.
			</para>
			<example>
			<title>
				<function moreinfo="none">reset_gflag</function> usage</title>
			<programlisting format="linespecific">
...
$ opensips-cli -x mi reset_gflag 1
$ opensips-cli -x mi reset_gflag 0x3
...
</programlisting>
			</example>
		</section>
		<section id="mi_is_gflag" xreflabel="is_gflag">
			<title><function moreinfo="none">is_gflag</function></title>
			<para>
			Returns true if the all the flags from the bitmask are set.
			</para>
			<para>
			The parameter value must be a bitmask in decimal or hexa format.
			The bitmaks has a 32 bit size.
			</para>
			<para>
			The function returns TRUE if all the flags from the set are set
			and FALSE if at least one is not set.
			</para>
			<example>
			<title><function moreinfo="none">is_gflag</function> usage</title>
			<programlisting format="linespecific">
...
$ opensips-cli -x mi set_gflag 1024
$ opensips-cli -x mi is_gflag 1024
TRUE
$ opensips-cli -x mi is_gflag 1025
TRUE
$ opensips-cli -x mi is_gflag 1023
FALSE
$ opensips-cli -x mi set_gflag 0x10
$ opensips-cli -x mi is_gflag 1023
TRUE
$ opensips-cli -x mi is_gflag 1007
FALSE
$ opensips-cli -x mi is_gflag 16
TRUE
...
</programlisting>
			</example>
		</section>
		<section id="mi_get_gflags" xreflabel="get_gflags">
			<title><function moreinfo="none">get_gflags</function></title>
			<para>
			Return the bitmap with all flags. The function gets no 
			parameters and returns the bitmap in hexa and decimal format.
			</para>
			<example>
			<title>
				<function moreinfo="none">get_gflags</function> usage</title>
			<programlisting format="linespecific">
...
$ opensips-cli -x mi get_gflags
0x3039
12345
...
</programlisting>
			</example>
		</section>
	</section>

</chapter>

