2
0
Эх сурвалжийг харах

Merge remote branch 'origin/andrei/cdefs2doc'

* origin/andrei/cdefs2doc: (23 commits)
  doc: select_list: added intro & notations sections
  doc: select_list: generated docbook and txt lists
  doc: select_list: added makefiles for auto-gen.
  doc: {rpc,cfg}_list: fix makefile exclude list
  doc: dump_selects.pl: fix for incomplete initializers
  doc: dump_selects.pl: support for docbook output
  doc: cfg_list: generated docbook cfg vars lists
  doc: cfg_list: docbook output directory
  doc: cfg_list: support for generating docbook output
  doc: dump_cfg_defs.pl: support for docbook output
  doc: rpc_list: generated docbook rpc lists
  doc: rpc_list: docbook output directory
  doc: rpc_list: support for generating docbook output
  doc: dump_rpcs.pl: support for docbook output
  doc: select doc generator: more fixes & core selects support
  doc: select doc generator fix flags processing
  doc: generated rpc lists
  doc: generated cfg vars lists
  doc: added makefiles for auto-gen. rpc and cfg vars lists
  doc: script to generate select lists from C code
  ...
Andrei Pelinescu-Onciul 15 жил өмнө
parent
commit
21fb2e7f4a
85 өөрчлөгдсөн 10704 нэмэгдсэн , 0 устгасан
  1. 209 0
      doc/cfg_list/Makefile
  2. 210 0
      doc/cfg_list/cfg_core.txt
  3. 12 0
      doc/cfg_list/cfg_maxfwd.txt
  4. 103 0
      doc/cfg_list/cfg_sctp.txt
  5. 136 0
      doc/cfg_list/cfg_tcp.txt
  6. 204 0
      doc/cfg_list/cfg_tm.txt
  7. 5 0
      doc/cfg_list/docbook/Makefile
  8. 424 0
      doc/cfg_list/docbook/cfg_core.xml
  9. 21 0
      doc/cfg_list/docbook/cfg_maxfwd.xml
  10. 222 0
      doc/cfg_list/docbook/cfg_sctp.xml
  11. 288 0
      doc/cfg_list/docbook/cfg_tcp.xml
  12. 399 0
      doc/cfg_list/docbook/cfg_tm.xml
  13. 19 0
      doc/cfg_list/docbook/cfg_var_list.xml
  14. 228 0
      doc/rpc_list/Makefile
  15. 5 0
      doc/rpc_list/docbook/Makefile
  16. 96 0
      doc/rpc_list/docbook/rpc_cfg_rpc.xml
  17. 331 0
      doc/rpc_list/docbook/rpc_core.xml
  18. 35 0
      doc/rpc_list/docbook/rpc_cpl-c.xml
  19. 35 0
      doc/rpc_list/docbook/rpc_ctl.xml
  20. 19 0
      doc/rpc_list/docbook/rpc_db_flatstore.xml
  21. 27 0
      doc/rpc_list/docbook/rpc_dispatcher.xml
  22. 27 0
      doc/rpc_list/docbook/rpc_domain.xml
  23. 59 0
      doc/rpc_list/docbook/rpc_gflags.xml
  24. 35 0
      doc/rpc_list/docbook/rpc_lcr.xml
  25. 34 0
      doc/rpc_list/docbook/rpc_list.xml
  26. 47 0
      doc/rpc_list/docbook/rpc_mi_rpc.xml
  27. 36 0
      doc/rpc_list/docbook/rpc_pdt.xml
  28. 19 0
      doc/rpc_list/docbook/rpc_pike.xml
  29. 27 0
      doc/rpc_list/docbook/rpc_prefix_route.xml
  30. 27 0
      doc/rpc_list/docbook/rpc_presence_b2b.xml
  31. 51 0
      doc/rpc_list/docbook/rpc_ratelimit.xml
  32. 19 0
      doc/rpc_list/docbook/rpc_rls.xml
  33. 19 0
      doc/rpc_list/docbook/rpc_sl.xml
  34. 28 0
      doc/rpc_list/docbook/rpc_tls.xml
  35. 60 0
      doc/rpc_list/docbook/rpc_tm.xml
  36. 77 0
      doc/rpc_list/docbook/rpc_usrloc.xml
  37. 41 0
      doc/rpc_list/rpc_cfg_rpc.txt
  38. 131 0
      doc/rpc_list/rpc_core.txt
  39. 15 0
      doc/rpc_list/rpc_cpl-c.txt
  40. 15 0
      doc/rpc_list/rpc_ctl.txt
  41. 9 0
      doc/rpc_list/rpc_db_flatstore.txt
  42. 12 0
      doc/rpc_list/rpc_dispatcher.txt
  43. 12 0
      doc/rpc_list/rpc_domain.txt
  44. 24 0
      doc/rpc_list/rpc_gflags.txt
  45. 15 0
      doc/rpc_list/rpc_lcr.txt
  46. 22 0
      doc/rpc_list/rpc_mi_rpc.txt
  47. 16 0
      doc/rpc_list/rpc_pdt.txt
  48. 9 0
      doc/rpc_list/rpc_pike.txt
  49. 12 0
      doc/rpc_list/rpc_prefix_route.txt
  50. 12 0
      doc/rpc_list/rpc_presence_b2b.txt
  51. 21 0
      doc/rpc_list/rpc_ratelimit.txt
  52. 9 0
      doc/rpc_list/rpc_rls.txt
  53. 9 0
      doc/rpc_list/rpc_sl.txt
  54. 13 0
      doc/rpc_list/rpc_tls.txt
  55. 25 0
      doc/rpc_list/rpc_tm.txt
  56. 32 0
      doc/rpc_list/rpc_usrloc.txt
  57. 527 0
      doc/scripts/cdefs2doc/dump_cfg_defs.pl
  58. 476 0
      doc/scripts/cdefs2doc/dump_rpcs.pl
  59. 618 0
      doc/scripts/cdefs2doc/dump_selects.pl
  60. 230 0
      doc/select_list/Makefile
  61. 5 0
      doc/select_list/docbook/Makefile
  62. 61 0
      doc/select_list/docbook/intro.xml
  63. 29 0
      doc/select_list/docbook/select_avp.xml
  64. 1478 0
      doc/select_list/docbook/select_core.xml
  65. 359 0
      doc/select_list/docbook/select_db_ops.xml
  66. 155 0
      doc/select_list/docbook/select_eval.xml
  67. 25 0
      doc/select_list/docbook/select_list.xml
  68. 50 0
      doc/select_list/docbook/select_nathelper.xml
  69. 14 0
      doc/select_list/docbook/select_rr.xml
  70. 107 0
      doc/select_list/docbook/select_textops.xml
  71. 17 0
      doc/select_list/docbook/select_timer.xml
  72. 1235 0
      doc/select_list/docbook/select_tls.xml
  73. 59 0
      doc/select_list/docbook/select_tm.xml
  74. 14 0
      doc/select_list/docbook/select_xmlrpc.xml
  75. 12 0
      doc/select_list/select_avp.txt
  76. 495 0
      doc/select_list/select_core.txt
  77. 122 0
      doc/select_list/select_db_ops.txt
  78. 54 0
      doc/select_list/select_eval.txt
  79. 19 0
      doc/select_list/select_nathelper.txt
  80. 7 0
      doc/select_list/select_rr.txt
  81. 38 0
      doc/select_list/select_textops.txt
  82. 8 0
      doc/select_list/select_timer.txt
  83. 414 0
      doc/select_list/select_tls.txt
  84. 22 0
      doc/select_list/select_tm.txt
  85. 7 0
      doc/select_list/select_xmlrpc.txt

+ 209 - 0
doc/cfg_list/Makefile

@@ -0,0 +1,209 @@
+
+COREPATH=../..
+
+#include $(COREPATH)/Makefile.defs
+
+CFG2TXT=../scripts/cdefs2doc/dump_cfg_defs.pl
+CFG2DOCBOOK=../scripts/cdefs2doc/dump_cfg_defs.pl
+
+# output directory for generated txt files
+txt_output_dir=.
+# output directory for generated docbook xml files
+docbook_output_dir=docbook
+
+# list of files contanining cfg defs in the following format:
+# <filename>:<cfg_grp_name> 
+# can be easily filled/updated by pasting the output of:
+#  make print-lst |sed  -e 's!^ \?../..\(.*\)!$(COREPATH)\1 \\!'
+files_list=$(COREPATH)/cfg_core.c:core $(COREPATH)/tcp_options.c:tcp \
+			$(COREPATH)/sctp_options.c:sctp \
+			$(COREPATH)/modules_s/maxfwd/maxfwd.c:maxfwd \
+			$(COREPATH)/modules/tm/config.c:tm
+
+# list of excluded groups
+grp_exclude=pa
+# list of file prefixes to exclude (full path needed)
+file_exclude= $(COREPATH)/modules_s/tls/
+
+# special per file group overrides
+# format= grp_filename=... ,where filename does not contain the extension
+# e.g.:
+#     grp_f_tcp_options=tcp
+#     grp_f_sctp_options=sctp
+
+# special per group group name overrides
+# e.g.:
+#      grp_g_maxfwd=mf
+
+# override auto-detected group if set to 1 (else the group is used inside the
+# file only if it cannot be aut-odetected)
+ifeq ($(group_override),1)
+override force_grp=force-
+else
+override force_grp=
+endif
+
+# command used for gcc (contains extra includes)
+gcc=gcc -I$(COREPATH)/lib -I/usr/include/libxml2
+
+#filtered files list
+flist=$(filter-out $(addsuffix %,$(file_exclude)),\
+			$(filter-out $(addprefix %:,$(grp_exclude)),$(files_list)) )
+
+# throws an error if input is not in the format filename:grp
+check_fname_grp=$(if $(filter-out 2,$(words $(subst :, ,$(1)))),\
+					$(error bad format "$(1)", it should be filename:grp))
+
+# get prereq from file:grp (get_prereq(file:grp) => file)
+get_prereq=$(firstword $(subst :, ,$(1)))
+
+# get grp from file:grp (get_grp(file:grp) => grp)
+get_listed_grp=$(word 2, $(subst :, ,$(1)))
+
+# get base file name from file:grp: get_bname(file:grp) 
+# => basename(file) without extension (e.g. get_bname(foo/bar.c:x) => bar)
+# 
+get_bname=$(basename $(notdir $(call get_prereq,$(1))))
+
+#get grp from file:grp, using the overrides
+get_grp=$(strip $(if $(grp_f_$(call get_bname,$(1))), \
+					$(grp_f_$(call get_bname,$(1))),\
+					$(if $(grp_g_$(call get_listed_grp,$(1))),\
+						$(grp_g_$(call get_listed_grp,$(1))),\
+						$(call get_listed_grp,$(1))) ) )
+
+# get target from file:grp (get_target(file:grp) => cfg_grp.txt)
+get_target=cfg_$(call get_grp,$(1))
+
+define  mk_rules
+
+$(call check_fname_grp, $(1))
+
+#$$(info generating cfg_$$(call get_grp,$(1)).txt: $$(call get_prereq,$(1)))
+
+$(txt_output_dir)/$$(call get_target,$(1)).txt: \
+								$$(call get_prereq,$(1)) Makefile $(CFG2TXT)
+	$(CFG2TXT) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
+		--gcc="$(gcc)" --txt > "$$@" ||  (rm -f "$$@"; exit 1)
+
+$(docbook_output_dir)/$$(call get_target,$(1)).xml: \
+								$$(call get_prereq,$(1)) Makefile $(CFG2TXT)
+	$(CFG2DOCBOOK) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
+		--gcc="$(gcc)" --docbook > "$$@" ||  (rm -f "$$@"; exit 1)
+
+
+clean_$$(call get_target,$(1)).txt:
+	rm -f "$(txt_output_dir)/$$(call get_target,$(1)).txt"
+
+clean_$$(call get_target,$(1)).xml:
+	rm -f "$(docbook_output_dir)/$$(call get_target,$(1)).xml"
+
+txt: $(txt_output_dir)/$$(call get_target,$(1)).txt
+
+docbook: $(docbook_output_dir)/$$(call get_target,$(1)).xml
+
+clean_txt: clean_$$(call get_target,$(1)).txt
+
+clean_docbook: clean_$$(call get_target,$(1)).xml
+
+
+endef
+
+
+# help will be the default rule (on-purpose since without having a patched
+# GCC:TranslationUnit module, make all won't work)
+.PHONY: help
+help:
+	@echo "To regenerate $(foreach f,$(flist),$(call get_target,$f).{txt,xml})"
+	@echo "type: $(MAKE) all ."
+	@echo "or to regenerate all the cfg documentation by searching all"
+	@echo " the source files for definitions, type: $(MAKE) autogen ."
+	@echo "NOTE: you need the GCC:TranslationUnit perl module with an "
+	@echo "extra patch applied (see $(CFG2TXT) --patch)."
+
+.PHONY: txt
+txt:
+
+.PHONY: docbook
+docbook:
+
+.PHONY: clean_txt
+clean_txt:
+
+.PHONY: clean_docbook
+clean_docbook:
+
+
+.PHONY: all
+all: txt $(docbook_output_dir)/cfg_var_list.xml
+
+.PHONY: clean
+clean: clean_txt clean_docbook
+	@rm -f $(docbook_output_dir)/cfg_var_list.xml
+
+.PHONY: proper
+proper:
+	@rm -f $(txt_output_dir)/cfg_*.txt
+	@rm -f $(docbook_output_dir)/cfg_*.xml
+
+repo_ver="sip-router"\
+	"git-$(shell  git rev-parse --verify --short=6 HEAD 2>/dev/null)"
+ifeq ($(repo_ver),git-)
+repo_ver="sip-router unknown"
+endif
+
+$(docbook_output_dir)/cfg_var_list.xml: \
+		$(foreach f,$(flist),$(docbook_output_dir)/$(call get_target,$f).xml)
+	@echo '<?xml version="1.0" encoding="UTF-8"?>' >$@
+	@echo '<!-- this file is autogenerated, do not edit! -->' >>$@
+	@echo '<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"' >>$@
+	@echo '	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">' >>$@
+	@echo '<book id="cfg_var_list"'\
+		'xmlns:xi="http://www.w3.org/2001/XInclude">' >>$@
+	@echo '	<title>RPC Exports List</title>' >>$@
+	@echo '	<info><revhistory><revision>' >>$@
+	@echo '		<revnumber>'$(repo_ver)'</revnumber>' >>$@
+	@echo '		<revremark>' >>$@
+	@echo "			Automatically generated by:">>$@
+	@echo "			$(MAKE) -C doc/cfg_list $(MAKECMDGOALS)" >>$@
+	@echo '		</revremark>' >>$@
+	@echo '	</revision></revhistory></info>' >>$@
+	@$(foreach f,$(flist),\
+		echo '		<xi:include'\
+			'href="'$(call get_target,$f).xml'"/>' \
+			>>$@ ; )
+	@echo '</book>' >>$@
+
+find_cfg_files_cmd= find $(COREPATH) -type f -name "*.c" \
+		-exec grep "cfg_def_t[	 ][a-zA-Z0-9_]*\[\][	 ]*=" /dev/null {} \; \
+		| cut -d: -f1
+
+# shell command to generate a file:grp list from a list of files
+# grp will be the modulename if the file is in a module directory or
+# the file name with the extension and _cfg, cfg_ or _options stripped out of
+# it.
+# output: list of  " "filename":"grpname
+gen_file_grp_cmd=\
+sed -e "s!\(.*/modules[^/]*/\([^/][^/]*\)/.*\)! \1:\2!" \
+    -e "s!^\([^ ].*/\([^/.]*\)[^/]*$$\)!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_cfg[_]*!:\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)cfg[_]*!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_options[_]*!\1:\2!"
+
+# finds all the files containing cfg defs
+.PHONY: find
+find:
+	@$(find_cfg_files_cmd)
+
+# print the list of the autogenerated files
+.PHONY: print-lst
+print-lst:
+	@$(find_cfg_files_cmd) | $(gen_file_grp_cmd)
+
+# try to generate the docs from all the sources
+.PHONY: autogen
+autogen:
+	LST=`$(find_cfg_files_cmd)| $(gen_file_grp_cmd) | xargs echo` && \
+	[ -n "$$LST" ] && $(MAKE) all files_list="$$LST"
+
+$(foreach f,$(flist),$(eval $(call mk_rules,$(f))))

+ 210 - 0
doc/cfg_list/cfg_core.txt

@@ -0,0 +1,210 @@
+Configuration Variables for core
+================================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. core.debug
+        debug level.
+        Default: 0.
+        Type: integer.
+
+ 2. core.log_facility
+        syslog facility, see "man 3 syslog".
+        Default: 24.
+        Type: string.
+
+ 3. core.memdbg
+        log level for memory debugging messages.
+        Default: 3.
+        Type: integer.
+
+ 4. core.use_dst_blacklist
+        enable/disable destination blacklisting.
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer. 
+
+ 5. core.dst_blacklist_expire
+        how much time (in s) a blacklisted destination is kept in the
+        list.
+        Default: 60.
+        Type: integer.
+
+ 6. core.dst_blacklist_mem
+        maximum shared memory amount (in KB) used for keeping the
+        blacklisted destinations.
+        Default: 250.
+        Type: integer.
+
+ 7. core.dns_try_ipv6
+        enable/disable IPv6 DNS lookups.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+ 8. core.dns_try_naptr
+        enable/disable NAPTR DNS lookups.
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+ 9. core.dns_udp_pref
+        udp protocol preference when doing NAPTR lookups.
+        Default: 30.
+        Type: integer.
+
+10. core.dns_tcp_pref
+        tcp protocol preference when doing NAPTR lookups.
+        Default: 20.
+        Type: integer.
+
+11. core.dns_tls_pref
+        tls protocol preference when doing NAPTR lookups.
+        Default: 10.
+        Type: integer.
+
+12. core.dns_sctp_pref
+        sctp protocol preference when doing NAPTR lookups.
+        Default: 20.
+        Type: integer.
+
+13. core.dns_retr_time
+        time in s before retrying a dns request.
+        Default: -1.
+        Type: integer.
+
+14. core.dns_retr_no
+        number of dns retransmissions before giving up.
+        Default: -1.
+        Type: integer.
+
+15. core.dns_servers_no
+        how many dns servers from the ones defined in /etc/resolv.conf
+        will be used.
+        Default: -1.
+        Type: integer.
+
+16. core.dns_use_search_list
+        if set to 0, the search list in /etc/resolv.conf is ignored.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+17. core.dns_search_full_match
+        enable/disable domain name checks against the search list in
+        DNS answers.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+18. core.dns_reinit
+        set to 1 in order to reinitialize the DNS resolver.
+        Default: 0.
+        Range: 1 - 1.
+        Type: integer.
+
+19. core.use_dns_cache
+        enable/disable the dns cache.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+20. core.dns_cache_flags
+        dns cache specific resolver flags (1=ipv4 only, 2=ipv6 only,
+        4=prefer ipv6.
+        Default: 0.
+        Range: 0 - 4.
+        Type: integer.
+
+21. core.use_dns_failover
+        enable/disable dns failover in case the destination resolves to
+        multiple ip addresses and/or multiple SRV records (depends on
+        use_dns_cache).
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+22. core.dns_srv_lb
+        enable/disable load balancing to different srv records of the
+        same priority based on the srv records weights (depends on
+        dns_failover).
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+23. core.dns_cache_negative_ttl
+        time to live for negative results ("not found") in seconds. Use
+        0 to disable.
+        Default: 60.
+        Type: integer.
+
+24. core.dns_cache_min_ttl
+        minimum accepted time to live for a record, in seconds.
+        Default: 0.
+        Type: integer.
+
+25. core.dns_cache_max_ttl
+        maximum accepted time to live for a record, in seconds.
+        Default: -1.
+        Type: integer.
+
+26. core.dns_cache_mem
+        maximum memory used for the dns cache in Kb.
+        Default: 500.
+        Type: integer.
+
+27. core.dns_cache_del_nonexp
+        allow deletion of non-expired records from the cache when there
+        is no more space left for new ones.
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+28. core.mem_dump_pkg
+        dump process memory status, parameter: pid_number.
+        Default: 0.
+        Type: integer.
+
+29. core.mem_dump_shm
+        dump shared memory status.
+        Default: 0.
+        Type: integer.
+
+30. core.max_while_loops
+        maximum iterations allowed for a while loop.
+        Default: 100.
+        Type: integer.
+
+31. core.udp_mtu
+        fallback to a congestion controlled protocol if send size
+        exceeds udp_mtu.
+        Default: 0.
+        Range: 0 - 65535.
+        Type: integer.
+
+32. core.udp_mtu_try_proto
+        if send size > udp_mtu use proto (1 udp, 2 tcp, 3 tls, 4 sctp).
+        Default: 0.
+        Range: 1 - 4.
+        Type: integer.
+
+33. core.force_rport
+        force rport for all the received messages.
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+34. core.memlog
+        log level for memory status/summary information.
+        Default: 3.
+        Type: integer.
+
+35. core.mem_summary
+        memory debugging information displayed on exit (flags):  0 -
+        off, 1 - dump all the used blocks (status), 2 - summary of used
+        blocks.
+        Default: 1.
+        Range: 0 - 3.
+        Type: integer.
+

+ 12 - 0
doc/cfg_list/cfg_maxfwd.txt

@@ -0,0 +1,12 @@
+Configuration Variables for maxfwd
+==================================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. maxfwd.max_limit
+        Max. maxfwd limit.
+        Default: 16.
+        Range: 0 - 255.
+        Type: integer.
+

+ 103 - 0
doc/cfg_list/cfg_sctp.txt

@@ -0,0 +1,103 @@
+Configuration Variables for sctp
+================================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. sctp.socket_rcvbuf
+        socket receive buffer size (read-only).
+        Range: 512 - 102400.
+        Type: integer. Read-only.
+
+ 2. sctp.socket_sndbuf
+        socket send buffer size (read-only).
+        Range: 512 - 102400.
+        Type: integer. Read-only.
+
+ 3. sctp.autoclose
+        seconds before closing and idle connection (must be non-zero).
+        Range: 1 - 1073741824.
+        Type: integer.
+
+ 4. sctp.send_ttl
+        milliseconds before aborting a send.
+        Range: 0 - 1073741824.
+        Type: integer.
+
+ 5. sctp.send_retries
+        re-send attempts on failure.
+        Range: 0 - 9.
+        Type: integer.
+
+ 6. sctp.assoc_tracking
+        connection/association tracking (see also assoc_reuse).
+        Range: 0 - 1.
+        Type: integer.
+
+ 7. sctp.assoc_reuse
+        connection/association reuse (for now used only for replies),
+        depends on assoc_tracking being set.
+        Range: 0 - 1.
+        Type: integer.
+
+ 8. sctp.max_assocs
+        maximum allowed open associations (-1 = disable, as many as
+        allowed by the OS).
+        Type: integer.
+
+ 9. sctp.srto_initial
+        initial value of the retr. timeout, used in RTO calculations,
+        in msecs.
+        Range: 0 - 1073741824.
+        Type: integer.
+
+10. sctp.srto_max
+        maximum value of the retransmission timeout (RTO), in msecs.
+        Range: 0 - 1073741824.
+        Type: integer.
+
+11. sctp.srto_min
+        minimum value of the retransmission timeout (RTO), in msecs.
+        Range: 0 - 1073741824.
+        Type: integer.
+
+12. sctp.asocmaxrxt
+        maximum retransmission attempts per association.
+        Range: 0 - 1024.
+        Type: integer.
+
+13. sctp.init_max_attempts
+        max INIT retransmission attempts.
+        Range: 0 - 1024.
+        Type: integer.
+
+14. sctp.init_max_timeo
+        max INIT retransmission timeout (RTO max for INIT), in msecs.
+        Range: 0 - 1024.
+        Type: integer.
+
+15. sctp.hbinterval
+        heartbeat interval in msecs.
+        Type: integer.
+
+16. sctp.pathmaxrxt
+        maximum retransmission attempts per path.
+        Range: 0 - 1024.
+        Type: integer.
+
+17. sctp.sack_delay
+        time since the last received packet before sending a SACK, in
+        msecs.
+        Range: 0 - 1073741824.
+        Type: integer.
+
+18. sctp.sack_freq
+        number of received packets that trigger the sending of a SACK.
+        Range: 0 - 1024.
+        Type: integer.
+
+19. sctp.max_burst
+        maximum burst of packets that can be emitted by an association.
+        Range: 0 - 1024.
+        Type: integer.
+

+ 136 - 0
doc/cfg_list/cfg_tcp.txt

@@ -0,0 +1,136 @@
+Configuration Variables for tcp
+===============================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. tcp.connect_timeout
+        used only in non-async mode, in seconds.
+        Range: -1 - 134217727.
+        Type: integer.
+
+ 2. tcp.send_timeout
+        in seconds.
+        Range: -1 - 2147483647.
+        Type: integer.
+
+ 3. tcp.connection_lifetime
+        connection lifetime (in seconds).
+        Range: -1 - 2147483647.
+        Type: integer.
+
+ 4. tcp.max_connections
+        maximum connection number, soft limit.
+        Range: 0 - 2147483647.
+        Type: integer.
+
+ 5. tcp.no_connect
+        if set only accept new connections, never actively open new
+        ones.
+        Range: 0 - 1.
+        Type: integer.
+
+ 6. tcp.fd_cache
+        file descriptor cache for tcp_send.
+        Range: 0 - 1.
+        Type: integer. Read-only.
+
+ 7. tcp.async
+        async mode for writes and connects.
+        Range: 0 - 1.
+        Type: integer. Read-only.
+
+ 8. tcp.connect_wait
+        parallel simultaneous connects to the same dst. (0) or one
+        connect.
+        Range: 0 - 1.
+        Type: integer. Read-only.
+
+ 9. tcp.conn_wq_max
+        maximum bytes queued for write per connection (depends on
+        async).
+        Range: 0 - 1048576.
+        Type: integer.
+
+10. tcp.wq_max
+        maximum bytes queued for write allowed globally (depends on
+        async).
+        Range: 0 - 1073741824.
+        Type: integer.
+
+11. tcp.defer_accept
+        0/1 on linux, seconds on freebsd (see docs).
+        Range: 0 - 3600.
+        Type: integer. Read-only.
+
+12. tcp.delayed_ack
+        initial ack will be delayed and sent with the first data
+        segment.
+        Range: 0 - 1.
+        Type: integer.
+
+13. tcp.syncnt
+        number of syn retransmissions before aborting a connect (0=not
+        set).
+        Range: 0 - 1024.
+        Type: integer.
+
+14. tcp.linger2
+        lifetime of orphaned sockets in FIN_WAIT2 state in s (0=not
+        set).
+        Range: 0 - 3600.
+        Type: integer.
+
+15. tcp.keepalive
+        enables/disables keepalives for tcp.
+        Range: 0 - 1.
+        Type: integer.
+
+16. tcp.keepidle
+        time before sending a keepalive if the connection is idle
+        (linux).
+        Range: 0 - 86400.
+        Type: integer.
+
+17. tcp.keepintvl
+        time interval between keepalive probes on failure (linux).
+        Range: 0 - 86400.
+        Type: integer.
+
+18. tcp.keepcnt
+        number of failed keepalives before dropping the connection
+        (linux).
+        Range: 0 - 1024.
+        Type: integer.
+
+19. tcp.crlf_ping
+        enable responding to CRLF SIP-level keepalives .
+        Range: 0 - 1.
+        Type: integer.
+
+20. tcp.accept_aliases
+        turn on/off tcp aliases (see tcp_accept_aliases) .
+        Range: 0 - 1.
+        Type: integer.
+
+21. tcp.alias_flags
+        flags used for adding new aliases (FORCE_ADD:1 , REPLACE:2) .
+        Range: 0 - 2.
+        Type: integer.
+
+22. tcp.new_conn_alias_flags
+        flags for the def. aliases for a new conn. (FORCE_ADD:1,
+        REPLACE:2 .
+        Range: 0 - 2.
+        Type: integer.
+
+23. tcp.rd_buf_size
+        internal read buffer size (should be > max. expected datagram).
+        Range: 512 - 65536.
+        Type: integer.
+
+24. tcp.wq_blk_size
+        internal async write block size (debugging use only for now).
+        Range: 1 - 65535.
+        Type: integer.
+

+ 204 - 0
doc/cfg_list/cfg_tm.txt

@@ -0,0 +1,204 @@
+Configuration Variables for tm
+==============================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. tm.ruri_matching
+        perform Request URI check in transaction matching.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+ 2. tm.via1_matching
+        perform first Via header check in transaction matching.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+ 3. tm.fr_timer
+        timer which hits if no final reply for a request or ACK for a
+        negative INVITE reply arrives (in milliseconds).
+        Default: 30000.
+        Type: integer.
+
+ 4. tm.fr_inv_timer
+        timer which hits if no final reply for an INVITE arrives after
+        a provisional message was received (in milliseconds).
+        Default: 120000.
+        Type: integer.
+
+ 5. tm.wt_timer
+        time for which a transaction stays in memory to absorb delayed
+        messages after it completed.
+        Default: 5000.
+        Type: integer.
+
+ 6. tm.delete_timer
+        time after which a to-be-deleted transaction currently ref-ed
+        by a process will be tried to be deleted again..
+        Default: 200.
+        Type: integer.
+
+ 7. tm.retr_timer1
+        initial retransmission period (in milliseconds).
+        Default: 500.
+        Type: integer.
+
+ 8. tm.retr_timer2
+        maximum retransmission period (in milliseconds).
+        Default: 4000.
+        Type: integer.
+
+ 9. tm.max_inv_lifetime
+        maximum time an invite transaction can live from the moment of
+        creation.
+        Default: 180000.
+        Type: integer.
+
+10. tm.max_noninv_lifetime
+        maximum time a non-invite transaction can live from the moment
+        of creation.
+        Default: 32000.
+        Type: integer.
+
+11. tm.noisy_ctimer
+        if set, INVITE transactions that time-out (FR INV timer) will
+        be always replied.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+12. tm.auto_inv_100
+        automatically send 100 to an INVITE.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+13. tm.auto_inv_100_reason
+        reason text of the automatically send 100 to an INVITE.
+        Default: trying -- your call is important to us.
+        Type: string.
+
+14. tm.unix_tx_timeout
+        Unix socket transmission timeout, in milliseconds.
+        Default: 500.
+        Type: integer.
+
+15. tm.restart_fr_on_each_reply
+        restart final response timer on each provisional reply.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+16. tm.pass_provisional_replies
+        enable/disable passing of provisional replies to
+        TMCB_LOCAL_RESPONSE_OUT callbacks.
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+17. tm.aggregate_challenges
+        if the final response is a 401 or a 407, aggregate all the
+        authorization headers (challenges) (rfc3261 requires this to be
+        on).
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+18. tm.unmatched_cancel
+        determines how CANCELs with no matching transaction are handled
+        (0: statefull forwarding, 1: stateless forwarding, 2: drop).
+        Default: 0.
+        Range: 0 - 2.
+        Type: integer.
+
+19. tm.default_code
+        default SIP response code sent by t_reply(), if the function
+        cannot retrieve its parameters.
+        Default: 500.
+        Range: 400 - 699.
+        Type: integer.
+
+20. tm.default_reason
+        default SIP reason phrase sent by t_reply(), if the function
+        cannot retrieve its parameters.
+        Default: Server Internal Error.
+        Type: string.
+
+21. tm.reparse_invite
+        if set to 1, the CANCEL and negative ACK requests are
+        constructed from the INVITE message which was sent out instead
+        of building them from the received request.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+22. tm.ac_extra_hdrs
+        header fields prefixed by this parameter value are included in
+        the CANCEL and negative ACK messages if they were present in
+        the outgoing INVITE (depends on reparse_invite).
+        Default: <unknown:str>.
+        Type: string.
+
+23. tm.blst_503
+        if set to 1, blacklist 503 SIP response sources.
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+
+24. tm.blst_503_def_timeout
+        default 503 blacklist time (in s), when no Retry-After header
+        is present.
+        Default: 0.
+        Type: integer.
+
+25. tm.blst_503_min_timeout
+        minimum 503 blacklist time (in s).
+        Default: 0.
+        Type: integer.
+
+26. tm.blst_503_max_timeout
+        maximum 503 blacklist time (in s).
+        Default: 3600.
+        Type: integer.
+
+27. tm.blst_methods_add
+        bitmap of method types that trigger blacklisting on transaction
+        timeouts.
+        Default: 1.
+        Type: integer.
+
+28. tm.blst_methods_lookup
+        Bitmap of method types that are looked-up in the blacklist
+        before statefull forwarding.
+        Default: -9.
+        Type: integer.
+
+29. tm.cancel_b_method
+        How to cancel branches on which no replies were received: 0 -
+        fake reply, 1 - retransmitting the request, 2 - send cancel.
+        Default: 1.
+        Range: 0 - 2.
+        Type: integer.
+
+30. tm.reparse_on_dns_failover
+        if set to 1, the SIP message after a DNS failover is
+        constructed from the outgoing message buffer of the failed
+        branch instead of from the received request.
+        Default: 1.
+        Range: 0 - 1.
+        Type: integer.
+
+31. tm.fr_inv_timer_next
+        The value of fr_inv_timer for subsequent branches during serial
+        forking.
+        Default: 30000.
+        Type: integer.
+
+32. tm.disable_6xx_block
+        if set to 1, 6xx is treated like a normal reply (breaks rfc).
+        Default: 0.
+        Range: 0 - 1.
+        Type: integer.
+

+ 5 - 0
doc/cfg_list/docbook/Makefile

@@ -0,0 +1,5 @@
+
+docs = cfg_var_list.xml
+docbook_dir = ../../../docbook
+
+include $(docbook_dir)/Makefile

+ 424 - 0
doc/cfg_list/docbook/cfg_core.xml

@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="config_vars.core">
+	<title> Configuration Variables for core</title>
+
+
+<section id="core.debug">
+    <title>core.debug</title>
+    <para>
+        debug level.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.log_facility">
+    <title>core.log_facility</title>
+    <para>
+        syslog facility, see &quot;man 3 syslog&quot;.
+    </para>
+    <para>Default value: 24.</para>
+    <para>Type: string.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.memdbg">
+    <title>core.memdbg</title>
+    <para>
+        log level for memory debugging messages.
+    </para>
+    <para>Default value: 3.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.use_dst_blacklist">
+    <title>core.use_dst_blacklist</title>
+    <para>
+        enable/disable destination blacklisting.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dst_blacklist_expire">
+    <title>core.dst_blacklist_expire</title>
+    <para>
+        how much time (in s) a blacklisted destination is kept in the
+        list.
+    </para>
+    <para>Default value: 60.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dst_blacklist_mem">
+    <title>core.dst_blacklist_mem</title>
+    <para>
+        maximum shared memory amount (in KB) used for keeping the
+        blacklisted destinations.
+    </para>
+    <para>Default value: 250.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_try_ipv6">
+    <title>core.dns_try_ipv6</title>
+    <para>
+        enable/disable IPv6 DNS lookups.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_try_naptr">
+    <title>core.dns_try_naptr</title>
+    <para>
+        enable/disable NAPTR DNS lookups.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_udp_pref">
+    <title>core.dns_udp_pref</title>
+    <para>
+        udp protocol preference when doing NAPTR lookups.
+    </para>
+    <para>Default value: 30.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_tcp_pref">
+    <title>core.dns_tcp_pref</title>
+    <para>
+        tcp protocol preference when doing NAPTR lookups.
+    </para>
+    <para>Default value: 20.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_tls_pref">
+    <title>core.dns_tls_pref</title>
+    <para>
+        tls protocol preference when doing NAPTR lookups.
+    </para>
+    <para>Default value: 10.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_sctp_pref">
+    <title>core.dns_sctp_pref</title>
+    <para>
+        sctp protocol preference when doing NAPTR lookups.
+    </para>
+    <para>Default value: 20.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_retr_time">
+    <title>core.dns_retr_time</title>
+    <para>
+        time in s before retrying a dns request.
+    </para>
+    <para>Default value: -1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_retr_no">
+    <title>core.dns_retr_no</title>
+    <para>
+        number of dns retransmissions before giving up.
+    </para>
+    <para>Default value: -1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_servers_no">
+    <title>core.dns_servers_no</title>
+    <para>
+        how many dns servers from the ones defined in /etc/resolv.conf
+        will be used.
+    </para>
+    <para>Default value: -1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_use_search_list">
+    <title>core.dns_use_search_list</title>
+    <para>
+        if set to 0, the search list in /etc/resolv.conf is ignored.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_search_full_match">
+    <title>core.dns_search_full_match</title>
+    <para>
+        enable/disable domain name checks against the search list in
+        DNS answers.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_reinit">
+    <title>core.dns_reinit</title>
+    <para>
+        set to 1 in order to reinitialize the DNS resolver.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 1 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.use_dns_cache">
+    <title>core.use_dns_cache</title>
+    <para>
+        enable/disable the dns cache.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_cache_flags">
+    <title>core.dns_cache_flags</title>
+    <para>
+        dns cache specific resolver flags (1=ipv4 only, 2=ipv6 only,
+        4=prefer ipv6.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 4.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.use_dns_failover">
+    <title>core.use_dns_failover</title>
+    <para>
+        enable/disable dns failover in case the destination resolves to
+        multiple ip addresses and/or multiple SRV records (depends on
+        use_dns_cache).
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_srv_lb">
+    <title>core.dns_srv_lb</title>
+    <para>
+        enable/disable load balancing to different srv records of the
+        same priority based on the srv records weights (depends on
+        dns_failover).
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_cache_negative_ttl">
+    <title>core.dns_cache_negative_ttl</title>
+    <para>
+        time to live for negative results (&quot;not found&quot;) in
+        seconds. Use 0 to disable.
+    </para>
+    <para>Default value: 60.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_cache_min_ttl">
+    <title>core.dns_cache_min_ttl</title>
+    <para>
+        minimum accepted time to live for a record, in seconds.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_cache_max_ttl">
+    <title>core.dns_cache_max_ttl</title>
+    <para>
+        maximum accepted time to live for a record, in seconds.
+    </para>
+    <para>Default value: -1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_cache_mem">
+    <title>core.dns_cache_mem</title>
+    <para>
+        maximum memory used for the dns cache in Kb.
+    </para>
+    <para>Default value: 500.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.dns_cache_del_nonexp">
+    <title>core.dns_cache_del_nonexp</title>
+    <para>
+        allow deletion of non-expired records from the cache when there
+        is no more space left for new ones.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.mem_dump_pkg">
+    <title>core.mem_dump_pkg</title>
+    <para>
+        dump process memory status, parameter: pid_number.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.mem_dump_shm">
+    <title>core.mem_dump_shm</title>
+    <para>
+        dump shared memory status.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.max_while_loops">
+    <title>core.max_while_loops</title>
+    <para>
+        maximum iterations allowed for a while loop.
+    </para>
+    <para>Default value: 100.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.udp_mtu">
+    <title>core.udp_mtu</title>
+    <para>
+        fallback to a congestion controlled protocol if send size
+        exceeds udp_mtu.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 65535.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.udp_mtu_try_proto">
+    <title>core.udp_mtu_try_proto</title>
+    <para>
+        if send size &gt; udp_mtu use proto (1 udp, 2 tcp, 3 tls, 4
+        sctp).
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 1 - 4.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.force_rport">
+    <title>core.force_rport</title>
+    <para>
+        force rport for all the received messages.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.memlog">
+    <title>core.memlog</title>
+    <para>
+        log level for memory status/summary information.
+    </para>
+    <para>Default value: 3.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="core.mem_summary">
+    <title>core.mem_summary</title>
+    <para>
+        memory debugging information displayed on exit (flags):  0 -
+        off, 1 - dump all the used blocks (status), 2 - summary of used
+        blocks.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 3.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+</chapter>

+ 21 - 0
doc/cfg_list/docbook/cfg_maxfwd.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="config_vars.maxfwd">
+	<title> Configuration Variables for maxfwd</title>
+
+
+<section id="maxfwd.max_limit">
+    <title>maxfwd.max_limit</title>
+    <para>
+        Max. maxfwd limit.
+    </para>
+    <para>Default value: 16.</para>
+    <para>Range: 0 - 255.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+</chapter>

+ 222 - 0
doc/cfg_list/docbook/cfg_sctp.xml

@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="config_vars.sctp">
+	<title> Configuration Variables for sctp</title>
+
+
+<section id="sctp.socket_rcvbuf">
+    <title>sctp.socket_rcvbuf</title>
+    <para>
+        socket receive buffer size (read-only).
+    </para>
+    <para>Range: 512 - 102400.</para>
+    <para>Type: integer.</para>
+    <para>
+        Read-only.
+    </para>
+</section>
+
+<section id="sctp.socket_sndbuf">
+    <title>sctp.socket_sndbuf</title>
+    <para>
+        socket send buffer size (read-only).
+    </para>
+    <para>Range: 512 - 102400.</para>
+    <para>Type: integer.</para>
+    <para>
+        Read-only.
+    </para>
+</section>
+
+<section id="sctp.autoclose">
+    <title>sctp.autoclose</title>
+    <para>
+        seconds before closing and idle connection (must be non-zero).
+    </para>
+    <para>Range: 1 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.send_ttl">
+    <title>sctp.send_ttl</title>
+    <para>
+        milliseconds before aborting a send.
+    </para>
+    <para>Range: 0 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.send_retries">
+    <title>sctp.send_retries</title>
+    <para>
+        re-send attempts on failure.
+    </para>
+    <para>Range: 0 - 9.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.assoc_tracking">
+    <title>sctp.assoc_tracking</title>
+    <para>
+        connection/association tracking (see also assoc_reuse).
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.assoc_reuse">
+    <title>sctp.assoc_reuse</title>
+    <para>
+        connection/association reuse (for now used only for replies),
+        depends on assoc_tracking being set.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.max_assocs">
+    <title>sctp.max_assocs</title>
+    <para>
+        maximum allowed open associations (-1 = disable, as many as
+        allowed by the OS).
+    </para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.srto_initial">
+    <title>sctp.srto_initial</title>
+    <para>
+        initial value of the retr. timeout, used in RTO calculations,
+        in msecs.
+    </para>
+    <para>Range: 0 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.srto_max">
+    <title>sctp.srto_max</title>
+    <para>
+        maximum value of the retransmission timeout (RTO), in msecs.
+    </para>
+    <para>Range: 0 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.srto_min">
+    <title>sctp.srto_min</title>
+    <para>
+        minimum value of the retransmission timeout (RTO), in msecs.
+    </para>
+    <para>Range: 0 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.asocmaxrxt">
+    <title>sctp.asocmaxrxt</title>
+    <para>
+        maximum retransmission attempts per association.
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.init_max_attempts">
+    <title>sctp.init_max_attempts</title>
+    <para>
+        max INIT retransmission attempts.
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.init_max_timeo">
+    <title>sctp.init_max_timeo</title>
+    <para>
+        max INIT retransmission timeout (RTO max for INIT), in msecs.
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.hbinterval">
+    <title>sctp.hbinterval</title>
+    <para>
+        heartbeat interval in msecs.
+    </para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.pathmaxrxt">
+    <title>sctp.pathmaxrxt</title>
+    <para>
+        maximum retransmission attempts per path.
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.sack_delay">
+    <title>sctp.sack_delay</title>
+    <para>
+        time since the last received packet before sending a SACK, in
+        msecs.
+    </para>
+    <para>Range: 0 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.sack_freq">
+    <title>sctp.sack_freq</title>
+    <para>
+        number of received packets that trigger the sending of a SACK.
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="sctp.max_burst">
+    <title>sctp.max_burst</title>
+    <para>
+        maximum burst of packets that can be emitted by an association.
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+</chapter>

+ 288 - 0
doc/cfg_list/docbook/cfg_tcp.xml

@@ -0,0 +1,288 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="config_vars.tcp">
+	<title> Configuration Variables for tcp</title>
+
+
+<section id="tcp.connect_timeout">
+    <title>tcp.connect_timeout</title>
+    <para>
+        used only in non-async mode, in seconds.
+    </para>
+    <para>Range: -1 - 134217727.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.send_timeout">
+    <title>tcp.send_timeout</title>
+    <para>
+        in seconds.
+    </para>
+    <para>Range: -1 - 2147483647.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.connection_lifetime">
+    <title>tcp.connection_lifetime</title>
+    <para>
+        connection lifetime (in seconds).
+    </para>
+    <para>Range: -1 - 2147483647.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.max_connections">
+    <title>tcp.max_connections</title>
+    <para>
+        maximum connection number, soft limit.
+    </para>
+    <para>Range: 0 - 2147483647.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.no_connect">
+    <title>tcp.no_connect</title>
+    <para>
+        if set only accept new connections, never actively open new
+        ones.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.fd_cache">
+    <title>tcp.fd_cache</title>
+    <para>
+        file descriptor cache for tcp_send.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+        Read-only.
+    </para>
+</section>
+
+<section id="tcp.async">
+    <title>tcp.async</title>
+    <para>
+        async mode for writes and connects.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+        Read-only.
+    </para>
+</section>
+
+<section id="tcp.connect_wait">
+    <title>tcp.connect_wait</title>
+    <para>
+        parallel simultaneous connects to the same dst. (0) or one
+        connect.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+        Read-only.
+    </para>
+</section>
+
+<section id="tcp.conn_wq_max">
+    <title>tcp.conn_wq_max</title>
+    <para>
+        maximum bytes queued for write per connection (depends on
+        async).
+    </para>
+    <para>Range: 0 - 1048576.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.wq_max">
+    <title>tcp.wq_max</title>
+    <para>
+        maximum bytes queued for write allowed globally (depends on
+        async).
+    </para>
+    <para>Range: 0 - 1073741824.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.defer_accept">
+    <title>tcp.defer_accept</title>
+    <para>
+        0/1 on linux, seconds on freebsd (see docs).
+    </para>
+    <para>Range: 0 - 3600.</para>
+    <para>Type: integer.</para>
+    <para>
+        Read-only.
+    </para>
+</section>
+
+<section id="tcp.delayed_ack">
+    <title>tcp.delayed_ack</title>
+    <para>
+        initial ack will be delayed and sent with the first data
+        segment.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.syncnt">
+    <title>tcp.syncnt</title>
+    <para>
+        number of syn retransmissions before aborting a connect (0=not
+        set).
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.linger2">
+    <title>tcp.linger2</title>
+    <para>
+        lifetime of orphaned sockets in FIN_WAIT2 state in s (0=not
+        set).
+    </para>
+    <para>Range: 0 - 3600.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.keepalive">
+    <title>tcp.keepalive</title>
+    <para>
+        enables/disables keepalives for tcp.
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.keepidle">
+    <title>tcp.keepidle</title>
+    <para>
+        time before sending a keepalive if the connection is idle
+        (linux).
+    </para>
+    <para>Range: 0 - 86400.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.keepintvl">
+    <title>tcp.keepintvl</title>
+    <para>
+        time interval between keepalive probes on failure (linux).
+    </para>
+    <para>Range: 0 - 86400.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.keepcnt">
+    <title>tcp.keepcnt</title>
+    <para>
+        number of failed keepalives before dropping the connection
+        (linux).
+    </para>
+    <para>Range: 0 - 1024.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.crlf_ping">
+    <title>tcp.crlf_ping</title>
+    <para>
+        enable responding to CRLF SIP-level keepalives .
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.accept_aliases">
+    <title>tcp.accept_aliases</title>
+    <para>
+        turn on/off tcp aliases (see tcp_accept_aliases) .
+    </para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.alias_flags">
+    <title>tcp.alias_flags</title>
+    <para>
+        flags used for adding new aliases (FORCE_ADD:1 , REPLACE:2) .
+    </para>
+    <para>Range: 0 - 2.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.new_conn_alias_flags">
+    <title>tcp.new_conn_alias_flags</title>
+    <para>
+        flags for the def. aliases for a new conn. (FORCE_ADD:1,
+        REPLACE:2 .
+    </para>
+    <para>Range: 0 - 2.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.rd_buf_size">
+    <title>tcp.rd_buf_size</title>
+    <para>
+        internal read buffer size (should be &gt; max. expected
+        datagram).
+    </para>
+    <para>Range: 512 - 65536.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tcp.wq_blk_size">
+    <title>tcp.wq_blk_size</title>
+    <para>
+        internal async write block size (debugging use only for now).
+    </para>
+    <para>Range: 1 - 65535.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+</chapter>

+ 399 - 0
doc/cfg_list/docbook/cfg_tm.xml

@@ -0,0 +1,399 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="config_vars.tm">
+	<title> Configuration Variables for tm</title>
+
+
+<section id="tm.ruri_matching">
+    <title>tm.ruri_matching</title>
+    <para>
+        perform Request URI check in transaction matching.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.via1_matching">
+    <title>tm.via1_matching</title>
+    <para>
+        perform first Via header check in transaction matching.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.fr_timer">
+    <title>tm.fr_timer</title>
+    <para>
+        timer which hits if no final reply for a request or ACK for a
+        negative INVITE reply arrives (in milliseconds).
+    </para>
+    <para>Default value: 30000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.fr_inv_timer">
+    <title>tm.fr_inv_timer</title>
+    <para>
+        timer which hits if no final reply for an INVITE arrives after
+        a provisional message was received (in milliseconds).
+    </para>
+    <para>Default value: 120000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.wt_timer">
+    <title>tm.wt_timer</title>
+    <para>
+        time for which a transaction stays in memory to absorb delayed
+        messages after it completed.
+    </para>
+    <para>Default value: 5000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.delete_timer">
+    <title>tm.delete_timer</title>
+    <para>
+        time after which a to-be-deleted transaction currently ref-ed
+        by a process will be tried to be deleted again..
+    </para>
+    <para>Default value: 200.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.retr_timer1">
+    <title>tm.retr_timer1</title>
+    <para>
+        initial retransmission period (in milliseconds).
+    </para>
+    <para>Default value: 500.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.retr_timer2">
+    <title>tm.retr_timer2</title>
+    <para>
+        maximum retransmission period (in milliseconds).
+    </para>
+    <para>Default value: 4000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.max_inv_lifetime">
+    <title>tm.max_inv_lifetime</title>
+    <para>
+        maximum time an invite transaction can live from the moment of
+        creation.
+    </para>
+    <para>Default value: 180000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.max_noninv_lifetime">
+    <title>tm.max_noninv_lifetime</title>
+    <para>
+        maximum time a non-invite transaction can live from the moment
+        of creation.
+    </para>
+    <para>Default value: 32000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.noisy_ctimer">
+    <title>tm.noisy_ctimer</title>
+    <para>
+        if set, INVITE transactions that time-out (FR INV timer) will
+        be always replied.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.auto_inv_100">
+    <title>tm.auto_inv_100</title>
+    <para>
+        automatically send 100 to an INVITE.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.auto_inv_100_reason">
+    <title>tm.auto_inv_100_reason</title>
+    <para>
+        reason text of the automatically send 100 to an INVITE.
+    </para>
+    <para>Default value: trying -- your call is important to us.</para>
+    <para>Type: string.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.unix_tx_timeout">
+    <title>tm.unix_tx_timeout</title>
+    <para>
+        Unix socket transmission timeout, in milliseconds.
+    </para>
+    <para>Default value: 500.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.restart_fr_on_each_reply">
+    <title>tm.restart_fr_on_each_reply</title>
+    <para>
+        restart final response timer on each provisional reply.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.pass_provisional_replies">
+    <title>tm.pass_provisional_replies</title>
+    <para>
+        enable/disable passing of provisional replies to
+        TMCB_LOCAL_RESPONSE_OUT callbacks.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.aggregate_challenges">
+    <title>tm.aggregate_challenges</title>
+    <para>
+        if the final response is a 401 or a 407, aggregate all the
+        authorization headers (challenges) (rfc3261 requires this to be
+        on).
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.unmatched_cancel">
+    <title>tm.unmatched_cancel</title>
+    <para>
+        determines how CANCELs with no matching transaction are handled
+        (0: statefull forwarding, 1: stateless forwarding, 2: drop).
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 2.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.default_code">
+    <title>tm.default_code</title>
+    <para>
+        default SIP response code sent by t_reply(), if the function
+        cannot retrieve its parameters.
+    </para>
+    <para>Default value: 500.</para>
+    <para>Range: 400 - 699.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.default_reason">
+    <title>tm.default_reason</title>
+    <para>
+        default SIP reason phrase sent by t_reply(), if the function
+        cannot retrieve its parameters.
+    </para>
+    <para>Default value: Server Internal Error.</para>
+    <para>Type: string.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.reparse_invite">
+    <title>tm.reparse_invite</title>
+    <para>
+        if set to 1, the CANCEL and negative ACK requests are
+        constructed from the INVITE message which was sent out instead
+        of building them from the received request.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.ac_extra_hdrs">
+    <title>tm.ac_extra_hdrs</title>
+    <para>
+        header fields prefixed by this parameter value are included in
+        the CANCEL and negative ACK messages if they were present in
+        the outgoing INVITE (depends on reparse_invite).
+    </para>
+    <para>Default value: &lt;unknown:str&gt;.</para>
+    <para>Type: string.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.blst_503">
+    <title>tm.blst_503</title>
+    <para>
+        if set to 1, blacklist 503 SIP response sources.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.blst_503_def_timeout">
+    <title>tm.blst_503_def_timeout</title>
+    <para>
+        default 503 blacklist time (in s), when no Retry-After header
+        is present.
+    </para>
+    <para>Default value: 0.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.blst_503_min_timeout">
+    <title>tm.blst_503_min_timeout</title>
+    <para>
+        minimum 503 blacklist time (in s).
+    </para>
+    <para>Default value: 0.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.blst_503_max_timeout">
+    <title>tm.blst_503_max_timeout</title>
+    <para>
+        maximum 503 blacklist time (in s).
+    </para>
+    <para>Default value: 3600.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.blst_methods_add">
+    <title>tm.blst_methods_add</title>
+    <para>
+        bitmap of method types that trigger blacklisting on transaction
+        timeouts.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.blst_methods_lookup">
+    <title>tm.blst_methods_lookup</title>
+    <para>
+        Bitmap of method types that are looked-up in the blacklist
+        before statefull forwarding.
+    </para>
+    <para>Default value: -9.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.cancel_b_method">
+    <title>tm.cancel_b_method</title>
+    <para>
+        How to cancel branches on which no replies were received: 0 -
+        fake reply, 1 - retransmitting the request, 2 - send cancel.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 2.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.reparse_on_dns_failover">
+    <title>tm.reparse_on_dns_failover</title>
+    <para>
+        if set to 1, the SIP message after a DNS failover is
+        constructed from the outgoing message buffer of the failed
+        branch instead of from the received request.
+    </para>
+    <para>Default value: 1.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.fr_inv_timer_next">
+    <title>tm.fr_inv_timer_next</title>
+    <para>
+        The value of fr_inv_timer for subsequent branches during serial
+        forking.
+    </para>
+    <para>Default value: 30000.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+<section id="tm.disable_6xx_block">
+    <title>tm.disable_6xx_block</title>
+    <para>
+        if set to 1, 6xx is treated like a normal reply (breaks rfc).
+    </para>
+    <para>Default value: 0.</para>
+    <para>Range: 0 - 1.</para>
+    <para>Type: integer.</para>
+    <para>
+    </para>
+</section>
+
+</chapter>

+ 19 - 0
doc/cfg_list/docbook/cfg_var_list.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<book id="cfg_var_list" xmlns:xi="http://www.w3.org/2001/XInclude">
+	<title>RPC Exports List</title>
+	<info><revhistory><revision>
+		<revnumber>sip-router git-8ee1a0</revnumber>
+		<revremark>
+			Automatically generated by:
+			make -C doc/cfg_list all
+		</revremark>
+	</revision></revhistory></info>
+		<xi:include href="cfg_core.xml"/>
+		<xi:include href="cfg_tcp.xml"/>
+		<xi:include href="cfg_sctp.xml"/>
+		<xi:include href="cfg_maxfwd.xml"/>
+		<xi:include href="cfg_tm.xml"/>
+</book>

+ 228 - 0
doc/rpc_list/Makefile

@@ -0,0 +1,228 @@
+
+COREPATH=../..
+
+#include $(COREPATH)/Makefile.defs
+
+CFG2TXT=../scripts/cdefs2doc/dump_rpcs.pl
+CFG2DOCBOOK=../scripts/cdefs2doc/dump_rpcs.pl
+
+# output directory for generated txt files
+txt_output_dir=.
+# output directory for generated docbook xml files
+docbook_output_dir=docbook
+
+# list of files contanining rpc defs in the following format:
+# <filename>:<cfg_grp_name> 
+# can be easily filled/updated by pasting the output of:
+#  make print-lst |sed  -e 's!^ \?../..\(.*\)!$(COREPATH)\1 \\!'
+files_list= $(COREPATH)/core_cmd.c:core \
+	$(COREPATH)/modules_s/pdt/pdt.c:pdt \
+	$(COREPATH)/modules_s/rls/rpc.c:rls \
+	$(COREPATH)/modules_s/pike/rpc.c:pike \
+	$(COREPATH)/modules_s/tls/tls_rpc.c:tls \
+	$(COREPATH)/modules_s/presence_b2b/rpc.c:presence_b2b \
+	$(COREPATH)/modules_s/gflags/gflags.c:gflags \
+	$(COREPATH)/modules_s/dispatcher/ds_rpc.c:dispatcher \
+	$(COREPATH)/modules_s/prefix_route/pr_rpc.c:prefix_route \
+	$(COREPATH)/modules_s/domain/domain_rpc.c:domain \
+	$(COREPATH)/modules_s/cpl-c/cpl_rpc.c:cpl-c \
+	$(COREPATH)/modules_s/sl/sl_stats.c:sl \
+	$(COREPATH)/modules_s/usrloc/ul_rpc.c:usrloc \
+	$(COREPATH)/modules_s/pa/rpc.c:pa \
+	$(COREPATH)/modules_s/ratelimit/ratelimit.c:ratelimit \
+	$(COREPATH)/modules/tm/tm.c:tm \
+	$(COREPATH)/modules/tls/tls_rpc.c:tls \
+	$(COREPATH)/modules/lcr/lcr_rpc.c:lcr \
+	$(COREPATH)/modules/ctl/ctl.c:ctl \
+	$(COREPATH)/modules/cfg_rpc/cfg_rpc.c:cfg_rpc \
+	$(COREPATH)/modules/db_flatstore/flat_rpc.c:db_flatstore \
+	$(COREPATH)/modules/mi_rpc/mi_rpc_mod.c:mi_rpc
+
+
+# list of excluded groups
+grp_exclude=pa
+# list of file prefixes to exclude (full path needed)
+file_exclude=$(COREPATH)/modules_s/tls/
+
+# special per file group overrides
+# format= grp_filename=... ,where filename does not contain the extension
+# e.g.:
+#     grp_f_tcp_options=tcp
+#     grp_f_sctp_options=sctp
+
+# special per group group name overrides
+# e.g.:
+#      grp_g_maxfwd=mf
+
+# override auto-detected group if set to 1 (else the group is used inside the
+# file only if it cannot be aut-odetected)
+ifeq ($(group_override),1)
+override force_grp=force-
+else
+override force_grp=
+endif
+
+# command used for gcc (contains extra includes)
+gcc=gcc -I$(COREPATH)/lib -I/usr/include/libxml2
+
+#filtered files list
+flist=$(filter-out $(addsuffix %,$(file_exclude)),\
+			$(filter-out $(addprefix %:,$(grp_exclude)),$(files_list)) )
+
+# throws an error if input is not in the format filename:grp
+check_fname_grp=$(if $(filter-out 2,$(words $(subst :, ,$(1)))),\
+					$(error bad format "$(1)", it should be filename:grp))
+
+# get prereq from file:grp (get_prereq(file:grp) => file)
+get_prereq=$(firstword $(subst :, ,$(1)))
+
+# get grp from file:grp (get_grp(file:grp) => grp)
+get_listed_grp=$(word 2, $(subst :, ,$(1)))
+
+# get base file name from file:grp: get_bname(file:grp) 
+# => basename(file) without extension (e.g. get_bname(foo/bar.c:x) => bar)
+# 
+get_bname=$(basename $(notdir $(call get_prereq,$(1))))
+
+#get grp from file:grp, using the overrides
+get_grp=$(strip $(if $(grp_f_$(call get_bname,$(1))), \
+					$(grp_f_$(call get_bname,$(1))),\
+					$(if $(grp_g_$(call get_listed_grp,$(1))),\
+						$(grp_g_$(call get_listed_grp,$(1))),\
+						$(call get_listed_grp,$(1))) ) )
+
+# get target from file:grp (get_target(file:grp) => rpc_grp.txt)
+get_target=rpc_$(call get_grp,$(1))
+
+define  mk_rules
+
+$(call check_fname_grp, $(1))
+
+#$$(info generating rpc_$$(call get_grp,$(1)).txt: $$(call get_prereq,$(1)))
+
+$(txt_output_dir)/$$(call get_target,$(1)).txt: \
+								$$(call get_prereq,$(1)) Makefile $(CFG2TXT)
+	$(CFG2TXT) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
+		--gcc="$(gcc)" --txt > "$$@" ||  (rm -f "$$@"; exit 1)
+
+$(docbook_output_dir)/$$(call get_target,$(1)).xml: \
+								$$(call get_prereq,$(1)) Makefile $(CFG2TXT)
+	$(CFG2DOCBOOK) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
+		--gcc="$(gcc)" --docbook > "$$@" ||  (rm -f "$$@"; exit 1)
+
+
+clean_$$(call get_target,$(1)).txt:
+	rm -f "$(txt_output_dir)/$$(call get_target,$(1)).txt"
+
+clean_$$(call get_target,$(1)).xml:
+	rm -f "$(docbook_output_dir)/$$(call get_target,$(1)).xml"
+
+txt: $(txt_output_dir)/$$(call get_target,$(1)).txt
+
+docbook: $(docbook_output_dir)/$$(call get_target,$(1)).xml
+
+clean_txt: clean_$$(call get_target,$(1)).txt
+
+clean_docbook: clean_$$(call get_target,$(1)).xml
+
+
+endef
+
+
+# help will be the default rule (on-purpose since without having a patched
+# GCC:TranslationUnit module, make all won't work)
+.PHONY: help
+help:
+	@echo "To regenerate $(foreach f,$(flist),$(call get_target,$f).{txt,xml})"
+	@echo "type: $(MAKE) all ."
+	@echo "or to regenerate all the rpc lists by searching all"
+	@echo " the source files for definitions, type: $(MAKE) autogen ."
+	@echo "NOTE: you need the GCC:TranslationUnit perl module with an "
+	@echo "extra patch applied (see $(CFG2TXT) --patch)."
+
+.PHONY: txt
+txt:
+
+.PHONY: docbook
+docbook:
+
+.PHONY: clean_txt
+clean_txt:
+
+.PHONY: clean_docbook
+clean_docbook:
+
+
+.PHONY: all
+all: txt $(docbook_output_dir)/rpc_list.xml
+
+.PHONY: clean
+clean: clean_txt clean_docbook
+	@rm -f $(docbook_output_dir)/rpc_list.xml
+
+.PHONY: proper
+proper:
+	@rm -f $(txt_output_dir)/rpc_*.txt
+	@rm -f $(docbook_output_dir)/rpc_*.xml
+
+repo_ver="sip-router"\
+	"git-$(shell  git rev-parse --verify --short=6 HEAD 2>/dev/null)"
+ifeq ($(repo_ver),git-)
+repo_ver="sip-router unknown"
+endif
+
+$(docbook_output_dir)/rpc_list.xml: \
+		$(foreach f,$(flist),$(docbook_output_dir)/$(call get_target,$f).xml)
+	@echo '<?xml version="1.0" encoding="UTF-8"?>' >$@
+	@echo '<!-- this file is autogenerated, do not edit! -->' >>$@
+	@echo '<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"' >>$@
+	@echo '	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">' >>$@
+	@echo '<book id="rpc_list"'\
+		'xmlns:xi="http://www.w3.org/2001/XInclude">' >>$@
+	@echo '	<title>RPC Exports List</title>' >>$@
+	@echo '	<info><revhistory><revision>' >>$@
+	@echo '		<revnumber>'$(repo_ver)'</revnumber>' >>$@
+	@echo '		<revremark>' >>$@
+	@echo "			Automatically generated by:">>$@
+	@echo "			$(MAKE) -C doc/rpc_list $(MAKECMDGOALS)" >>$@
+	@echo '		</revremark>' >>$@
+	@echo '	</revision></revhistory></info>' >>$@
+	@$(foreach f,$(flist),\
+		echo '		<xi:include'\
+			'href="'$(call get_target,$f).xml'"/>' \
+			>>$@ ; )
+	@echo '</book>' >>$@
+
+find_rpc_files_cmd= find $(COREPATH) -type f -name "*.c" \
+		-exec grep "rpc_export_t[	 ][a-zA-Z0-9_]*\[\][	 ]*=" /dev/null {} \; \
+		| cut -d: -f1
+
+# shell command to generate a file:grp list from a list of files
+# grp will be the modulename if the file is in a module directory or
+# the file name with the extension and _cmd, cmd_ or _rpc stripped out of
+# it.
+# output: list of  " "filename":"grpname
+gen_file_grp_cmd=\
+sed -e "s!\(.*/modules[^/]*/\([^/][^/]*\)/.*\)! \1:\2!" \
+    -e "s!^\([^ ].*/\([^/.]*\)[^/]*$$\)!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_cmd[_]*!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)cmd[_]*!\1:\2!" \
+    -e "s!^\([^ :]\):\(.*\)_rpc[_]*!\1:\2!"
+
+# finds all the files containing cfg defs
+.PHONY: find
+find:
+	@$(find_rpc_files_cmd)
+
+# print the list of the autogenerated files
+.PHONY: print-lst
+print-lst:
+	@$(find_rpc_files_cmd) | $(gen_file_grp_cmd)
+
+# try to generate the docs from all the sources
+.PHONY: autogen
+autogen:
+	LST=`$(find_rpc_files_cmd)| $(gen_file_grp_cmd) | xargs echo` && \
+	[ -n "$$LST" ] && $(MAKE) all files_list="$$LST"
+
+$(foreach f,$(flist),$(eval $(call mk_rules,$(f))))

+ 5 - 0
doc/rpc_list/docbook/Makefile

@@ -0,0 +1,5 @@
+
+docs = rpc_list.xml
+docbook_dir = ../../../docbook
+
+include $(docbook_dir)/Makefile

+ 96 - 0
doc/rpc_list/docbook/rpc_cfg_rpc.xml

@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.cfg_rpc">
+	<title>
+RPC Exports for cfg_rpc
+	</title>
+
+
+<section id="cfg.set_now_int"><title>cfg.set_now_int</title>
+<para>
+        Set the value of a configuration variable and commit the change
+        immediately
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.set_now_string"><title>cfg.set_now_string</title>
+<para>
+        Set the value of a configuration variable and commit the change
+        immediately
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.set_delayed_int"><title>cfg.set_delayed_int</title>
+<para>
+        Prepare the change of a configuration variable, but does not
+        commit the new value yet
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.set_delayed_string"><title>cfg.set_delayed_string</title>
+<para>
+        Prepare the change of a configuration variable, but does not
+        commit the new value yet
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.commit"><title>cfg.commit</title>
+<para>
+        Commit the previously prepared configuration changes
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.rollback"><title>cfg.rollback</title>
+<para>
+        Drop the prepared configuration changes
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.get"><title>cfg.get</title>
+<para>
+        Get the value of a configuration variable
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.help"><title>cfg.help</title>
+<para>
+        Print the description of a configuration variable
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.list"><title>cfg.list</title>
+<para>
+        List the configuration variables
+</para>
+<para>
+</para>
+</section>
+
+<section id="cfg.diff"><title>cfg.diff</title>
+<para>
+        List the pending configuration changes that have not been
+        committed yet
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 331 - 0
doc/rpc_list/docbook/rpc_core.xml

@@ -0,0 +1,331 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.core">
+	<title>
+RPC Exports for core
+	</title>
+
+
+<section id="system.listMethods"><title>system.listMethods</title>
+<para>
+        Lists all RPC methods supported by the server.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="system.methodSignature"><title>system.methodSignature</title>
+<para>
+        Returns signature of given method.
+</para>
+<para>
+</para>
+</section>
+
+<section id="system.methodHelp"><title>system.methodHelp</title>
+<para>
+        Print the help string for given method.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.prints"><title>core.prints</title>
+<para>
+        Returns the strings given as parameters.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="core.printi"><title>core.printi</title>
+<para>
+        Returns the integers given as parameters.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="core.echo"><title>core.echo</title>
+<para>
+        Returns back its parameters.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="core.version"><title>core.version</title>
+<para>
+        Returns the version string of the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.uptime"><title>core.uptime</title>
+<para>
+        Returns uptime of SER server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.ps"><title>core.ps</title>
+<para>
+        Returns the description of running SER processes.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="core.pwd"><title>core.pwd</title>
+<para>
+        Returns the working directory of SER server.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="core.arg"><title>core.arg</title>
+<para>
+        Returns the list of command line arguments used on SER startup.
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="core.kill"><title>core.kill</title>
+<para>
+        Sends the given signal to SER.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.shmmem"><title>core.shmmem</title>
+<para>
+        Returns shared memory info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.tcp_info"><title>core.tcp_info</title>
+<para>
+        Returns tcp related info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.tcp_options"><title>core.tcp_options</title>
+<para>
+        Returns active tcp options.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.sctp_options"><title>core.sctp_options</title>
+<para>
+        Returns active sctp options.
+</para>
+<para>
+</para>
+</section>
+
+<section id="core.sctp_info"><title>core.sctp_info</title>
+<para>
+        Returns sctp related info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.mem_info"><title>dns.mem_info</title>
+<para>
+        dns cache memory info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.debug"><title>dns.debug</title>
+<para>
+        dns debug  info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.debug_all"><title>dns.debug_all</title>
+<para>
+        complete dns debug  dump
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.view"><title>dns.view</title>
+<para>
+        dns cache dump in a human-readable format
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.lookup"><title>dns.lookup</title>
+<para>
+        perform a dns lookup
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_all"><title>dns.delete_all</title>
+<para>
+        deletes all the entries from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.add_a"><title>dns.add_a</title>
+<para>
+        adds an A record to the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.add_aaaa"><title>dns.add_aaaa</title>
+<para>
+        adds an AAAA record to the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.add_srv"><title>dns.add_srv</title>
+<para>
+        adds an SRV record to the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_a"><title>dns.delete_a</title>
+<para>
+        deletes an A record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_aaaa"><title>dns.delete_aaaa</title>
+<para>
+        deletes an AAAA record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_srv"><title>dns.delete_srv</title>
+<para>
+        deletes an SRV record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_naptr"><title>dns.delete_naptr</title>
+<para>
+        deletes a NAPTR record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_cname"><title>dns.delete_cname</title>
+<para>
+        deletes a CNAME record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_txt"><title>dns.delete_txt</title>
+<para>
+        deletes a TXT record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_ebl"><title>dns.delete_ebl</title>
+<para>
+        deletes an EBL record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dns.delete_ptr"><title>dns.delete_ptr</title>
+<para>
+        deletes an PTR record from the DNS cache
+</para>
+<para>
+</para>
+</section>
+
+<section id="dst_blacklist.mem_info"><title>dst_blacklist.mem_info</title>
+<para>
+        dst blacklist memory usage info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dst_blacklist.debug"><title>dst_blacklist.debug</title>
+<para>
+        dst blacklist  debug  info.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dst_blacklist.view"><title>dst_blacklist.view</title>
+<para>
+        dst blacklist dump in human-readable format.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dst_blacklist.delete_all"><title>dst_blacklist.delete_all</title>
+<para>
+        Deletes all the entries from the dst blacklist except the
+        permanent ones.
+</para>
+<para>
+</para>
+</section>
+
+<section id="dst_blacklist.add"><title>dst_blacklist.add</title>
+<para>
+        Adds a new entry to the dst blacklist.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 35 - 0
doc/rpc_list/docbook/rpc_cpl-c.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.cpl-c">
+	<title>
+RPC Exports for cpl-c
+	</title>
+
+
+<section id="cpl.load"><title>cpl.load</title>
+<para>
+        Load a CPL script to the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="cpl.remove"><title>cpl.remove</title>
+<para>
+        Remove a CPL script from server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="cpl.get"><title>cpl.get</title>
+<para>
+        Return a CPL script.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 35 - 0
doc/rpc_list/docbook/rpc_ctl.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.ctl">
+	<title>
+RPC Exports for ctl
+	</title>
+
+
+<section id="ctl.who"><title>ctl.who</title>
+<para>
+        list open connections
+</para>
+<para>
+</para>
+</section>
+
+<section id="ctl.connections"><title>ctl.connections</title>
+<para>
+        returns number of open connections
+</para>
+<para>
+</para>
+</section>
+
+<section id="ctl.listen"><title>ctl.listen</title>
+<para>
+        list ctl listen sockets
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 19 - 0
doc/rpc_list/docbook/rpc_db_flatstore.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.db_flatstore">
+	<title>
+RPC Exports for db_flatstore
+	</title>
+
+
+<section id="flatstore.rotate"><title>flatstore.rotate</title>
+<para>
+        Close and reopen flatrotate files during log rotation.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 27 - 0
doc/rpc_list/docbook/rpc_dispatcher.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.dispatcher">
+	<title>
+RPC Exports for dispatcher
+	</title>
+
+
+<section id="dispatcher.dump"><title>dispatcher.dump</title>
+<para>
+        Dump dispatcher set configuration
+</para>
+<para>
+</para>
+</section>
+
+<section id="dispatcher.reload"><title>dispatcher.reload</title>
+<para>
+        Reload dispatcher list from file
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 27 - 0
doc/rpc_list/docbook/rpc_domain.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.domain">
+	<title>
+RPC Exports for domain
+	</title>
+
+
+<section id="domain.reload"><title>domain.reload</title>
+<para>
+        Reload domain table from database
+</para>
+<para>
+</para>
+</section>
+
+<section id="domain.dump"><title>domain.dump</title>
+<para>
+        Return the contents of domain table
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 59 - 0
doc/rpc_list/docbook/rpc_gflags.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.gflags">
+	<title>
+RPC Exports for gflags
+	</title>
+
+
+<section id="gflags.set"><title>gflags.set</title>
+<para>
+        Load a CPL script to the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="gflags.is_set"><title>gflags.is_set</title>
+<para>
+        Load a CPL script to the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="gflags.reset"><title>gflags.reset</title>
+<para>
+        Load a CPL script to the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="gflags.flush"><title>gflags.flush</title>
+<para>
+        Load a CPL script to the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="gflags.dump"><title>gflags.dump</title>
+<para>
+        Load a CPL script to the server.
+</para>
+<para>
+</para>
+</section>
+
+<section id="global.reload"><title>global.reload</title>
+<para>
+        Reload global attributes from database
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 35 - 0
doc/rpc_list/docbook/rpc_lcr.xml

@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.lcr">
+	<title>
+RPC Exports for lcr
+	</title>
+
+
+<section id="lcr.reload"><title>lcr.reload</title>
+<para>
+        Reload gw and lcr tables from database.
+</para>
+<para>
+</para>
+</section>
+
+<section id="lcr.dump_gws"><title>lcr.dump_gws</title>
+<para>
+        Dump the contents of the gw table.
+</para>
+<para>
+</para>
+</section>
+
+<section id="lcr.dump_lcrs"><title>lcr.dump_lcrs</title>
+<para>
+        Dump the contents of the lcr table.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 34 - 0
doc/rpc_list/docbook/rpc_list.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<book id="rpc_list" xmlns:xi="http://www.w3.org/2001/XInclude">
+	<title>RPC Exports List</title>
+	<info><revhistory><revision>
+		<revnumber>sip-router git-8ee1a0</revnumber>
+		<revremark>
+			Automatically generated by:
+			make -C doc/rpc_list all
+		</revremark>
+	</revision></revhistory></info>
+		<xi:include href="rpc_core.xml"/>
+		<xi:include href="rpc_pdt.xml"/>
+		<xi:include href="rpc_rls.xml"/>
+		<xi:include href="rpc_pike.xml"/>
+		<xi:include href="rpc_presence_b2b.xml"/>
+		<xi:include href="rpc_gflags.xml"/>
+		<xi:include href="rpc_dispatcher.xml"/>
+		<xi:include href="rpc_prefix_route.xml"/>
+		<xi:include href="rpc_domain.xml"/>
+		<xi:include href="rpc_cpl-c.xml"/>
+		<xi:include href="rpc_sl.xml"/>
+		<xi:include href="rpc_usrloc.xml"/>
+		<xi:include href="rpc_ratelimit.xml"/>
+		<xi:include href="rpc_tm.xml"/>
+		<xi:include href="rpc_tls.xml"/>
+		<xi:include href="rpc_lcr.xml"/>
+		<xi:include href="rpc_ctl.xml"/>
+		<xi:include href="rpc_cfg_rpc.xml"/>
+		<xi:include href="rpc_db_flatstore.xml"/>
+		<xi:include href="rpc_mi_rpc.xml"/>
+</book>

+ 47 - 0
doc/rpc_list/docbook/rpc_mi_rpc.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.mi_rpc">
+	<title>
+RPC Exports for mi_rpc
+	</title>
+
+
+<section id="mi"><title>mi</title>
+<para>
+        Execute MI command
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="mi_fifo"><title>mi_fifo</title>
+<para>
+        Execute MI command
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="mi_dg"><title>mi_dg</title>
+<para>
+        Execute MI command
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="mi_xmlrpc"><title>mi_xmlrpc</title>
+<para>
+        Execute MI command
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+</chapter>

+ 36 - 0
doc/rpc_list/docbook/rpc_pdt.xml

@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.pdt">
+	<title>
+RPC Exports for pdt
+	</title>
+
+
+<section id="pdt.add"><title>pdt.add</title>
+<para>
+        Add new prefix/domain translation rule.
+</para>
+<para>
+</para>
+</section>
+
+<section id="pdt.delete"><title>pdt.delete</title>
+<para>
+        Delete prefix/domain translation rule.
+</para>
+<para>
+</para>
+</section>
+
+<section id="pdt.list"><title>pdt.list</title>
+<para>
+        List existin prefix/domain translation rules
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+</chapter>

+ 19 - 0
doc/rpc_list/docbook/rpc_pike.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.pike">
+	<title>
+RPC Exports for pike
+	</title>
+
+
+<section id="pike.top"><title>pike.top</title>
+<para>
+        pike.top doc.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 27 - 0
doc/rpc_list/docbook/rpc_prefix_route.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.prefix_route">
+	<title>
+RPC Exports for prefix_route
+	</title>
+
+
+<section id="prefix_route.reload"><title>prefix_route.reload</title>
+<para>
+        Reload prefix routes from DB
+</para>
+<para>
+</para>
+</section>
+
+<section id="prefix_route.dump"><title>prefix_route.dump</title>
+<para>
+        Dump the prefix route tree
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 27 - 0
doc/rpc_list/docbook/rpc_presence_b2b.xml

@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.presence_b2b">
+	<title>
+RPC Exports for presence_b2b
+	</title>
+
+
+<section id="presence_b2b.test"><title>presence_b2b.test</title>
+<para>
+        Testing events.
+</para>
+<para>
+</para>
+</section>
+
+<section id="presence_b2b.trace"><title>presence_b2b.trace</title>
+<para>
+        Trace events.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 51 - 0
doc/rpc_list/docbook/rpc_ratelimit.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.ratelimit">
+	<title>
+RPC Exports for ratelimit
+	</title>
+
+
+<section id="rl.stats"><title>rl.stats</title>
+<para>
+        Print ratelimit statistics
+</para>
+<para>
+</para>
+</section>
+
+<section id="rl.invite_limit"><title>rl.invite_limit</title>
+<para>
+        Set INVITEs per timer interval limit
+</para>
+<para>
+</para>
+</section>
+
+<section id="rl.register_limit"><title>rl.register_limit</title>
+<para>
+        Set REGISTERs per timer interval limit
+</para>
+<para>
+</para>
+</section>
+
+<section id="rl.subscribe_limit"><title>rl.subscribe_limit</title>
+<para>
+        Set SUBSCRIBEs per timer interval limit
+</para>
+<para>
+</para>
+</section>
+
+<section id="rl.timer_interval"><title>rl.timer_interval</title>
+<para>
+        Set the ratelimit timer_interval length
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 19 - 0
doc/rpc_list/docbook/rpc_rls.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.rls">
+	<title>
+RPC Exports for rls
+	</title>
+
+
+<section id="rls.trace"><title>rls.trace</title>
+<para>
+        RLS trace.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 19 - 0
doc/rpc_list/docbook/rpc_sl.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.sl">
+	<title>
+RPC Exports for sl
+	</title>
+
+
+<section id="sl.stats"><title>sl.stats</title>
+<para>
+        Print reply statistics.
+</para>
+<para>
+</para>
+</section>
+
+</chapter>

+ 28 - 0
doc/rpc_list/docbook/rpc_tls.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.tls">
+	<title>
+RPC Exports for tls
+	</title>
+
+
+<section id="tls.reload"><title>tls.reload</title>
+<para>
+        Reload TLS configuration file
+</para>
+<para>
+</para>
+</section>
+
+<section id="tls.list"><title>tls.list</title>
+<para>
+        List currently open TLS connections
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+</chapter>

+ 60 - 0
doc/rpc_list/docbook/rpc_tm.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.tm">
+	<title>
+RPC Exports for tm
+	</title>
+
+
+<section id="tm.cancel"><title>tm.cancel</title>
+<para>
+        Documentation missing (rpc_cancel_doc).
+</para>
+<para>
+</para>
+</section>
+
+<section id="tm.reply"><title>tm.reply</title>
+<para>
+        Documentation missing (rpc_reply_doc).
+</para>
+<para>
+</para>
+</section>
+
+<section id="tm.stats"><title>tm.stats</title>
+<para>
+        Documentation missing (tm_rpc_stats_doc).
+</para>
+<para>
+</para>
+</section>
+
+<section id="tm.hash_stats"><title>tm.hash_stats</title>
+<para>
+        Documentation missing (tm_rpc_hash_stats_doc).
+</para>
+<para>
+</para>
+</section>
+
+<section id="tm.t_uac_start"><title>tm.t_uac_start</title>
+<para>
+        Documentation missing (rpc_t_uac_start_doc).
+</para>
+<para>
+</para>
+</section>
+
+<section id="tm.t_uac_wait"><title>tm.t_uac_wait</title>
+<para>
+        Documentation missing (rpc_t_uac_wait_doc).
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+</chapter>

+ 77 - 0
doc/rpc_list/docbook/rpc_usrloc.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports.usrloc">
+	<title>
+RPC Exports for usrloc
+	</title>
+
+
+<section id="usrloc.stats"><title>usrloc.stats</title>
+<para>
+        Print usrloc statistics
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+<section id="usrloc.delete_uid"><title>usrloc.delete_uid</title>
+<para>
+        Delete all registered contacts for address of record.
+</para>
+<para>
+</para>
+</section>
+
+<section id="usrloc.delete_contact"><title>usrloc.delete_contact</title>
+<para>
+        Delete a contact if it exists.
+</para>
+<para>
+</para>
+</section>
+
+<section id="usrloc.dump"><title>usrloc.dump</title>
+<para>
+        Print all registered contacts.
+</para>
+<para>
+</para>
+</section>
+
+<section id="usrloc.dump_file"><title>usrloc.dump_file</title>
+<para>
+        Print all registered contacts into a file.
+</para>
+<para>
+</para>
+</section>
+
+<section id="usrloc.flush"><title>usrloc.flush</title>
+<para>
+        Flush cache into database.
+</para>
+<para>
+</para>
+</section>
+
+<section id="usrloc.add_contact"><title>usrloc.add_contact</title>
+<para>
+        Create a new contact.
+</para>
+<para>
+</para>
+</section>
+
+<section id="usrloc.show_contacts"><title>usrloc.show_contacts</title>
+<para>
+        List all registered contacts for address of record
+</para>
+<para>
+        Returns an array.
+</para>
+</section>
+
+</chapter>

+ 41 - 0
doc/rpc_list/rpc_cfg_rpc.txt

@@ -0,0 +1,41 @@
+RPC Exports for cfg_rpc
+=======================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. cfg.set_now_int
+        Set the value of a configuration variable and commit the change
+        immediately
+
+ 2. cfg.set_now_string
+        Set the value of a configuration variable and commit the change
+        immediately
+
+ 3. cfg.set_delayed_int
+        Prepare the change of a configuration variable, but does not
+        commit the new value yet
+
+ 4. cfg.set_delayed_string
+        Prepare the change of a configuration variable, but does not
+        commit the new value yet
+
+ 5. cfg.commit
+        Commit the previously prepared configuration changes
+
+ 6. cfg.rollback
+        Drop the prepared configuration changes
+
+ 7. cfg.get
+        Get the value of a configuration variable
+
+ 8. cfg.help
+        Print the description of a configuration variable
+
+ 9. cfg.list
+        List the configuration variables
+
+10. cfg.diff
+        List the pending configuration changes that have not been
+        committed yet
+

+ 131 - 0
doc/rpc_list/rpc_core.txt

@@ -0,0 +1,131 @@
+RPC Exports for core
+====================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. system.listMethods
+        Lists all RPC methods supported by the server.
+        Returns an array.
+
+ 2. system.methodSignature
+        Returns signature of given method.
+
+ 3. system.methodHelp
+        Print the help string for given method.
+
+ 4. core.prints
+        Returns the strings given as parameters.
+        Returns an array.
+
+ 5. core.printi
+        Returns the integers given as parameters.
+        Returns an array.
+
+ 6. core.echo
+        Returns back its parameters.
+        Returns an array.
+
+ 7. core.version
+        Returns the version string of the server.
+
+ 8. core.uptime
+        Returns uptime of SER server.
+
+ 9. core.ps
+        Returns the description of running SER processes.
+        Returns an array.
+
+10. core.pwd
+        Returns the working directory of SER server.
+        Returns an array.
+
+11. core.arg
+        Returns the list of command line arguments used on SER startup.
+        Returns an array.
+
+12. core.kill
+        Sends the given signal to SER.
+
+13. core.shmmem
+        Returns shared memory info.
+
+14. core.tcp_info
+        Returns tcp related info.
+
+15. core.tcp_options
+        Returns active tcp options.
+
+16. core.sctp_options
+        Returns active sctp options.
+
+17. core.sctp_info
+        Returns sctp related info.
+
+18. dns.mem_info
+        dns cache memory info.
+
+19. dns.debug
+        dns debug  info.
+
+20. dns.debug_all
+        complete dns debug  dump
+
+21. dns.view
+        dns cache dump in a human-readable format
+
+22. dns.lookup
+        perform a dns lookup
+
+23. dns.delete_all
+        deletes all the entries from the DNS cache
+
+24. dns.add_a
+        adds an A record to the DNS cache
+
+25. dns.add_aaaa
+        adds an AAAA record to the DNS cache
+
+26. dns.add_srv
+        adds an SRV record to the DNS cache
+
+27. dns.delete_a
+        deletes an A record from the DNS cache
+
+28. dns.delete_aaaa
+        deletes an AAAA record from the DNS cache
+
+29. dns.delete_srv
+        deletes an SRV record from the DNS cache
+
+30. dns.delete_naptr
+        deletes a NAPTR record from the DNS cache
+
+31. dns.delete_cname
+        deletes a CNAME record from the DNS cache
+
+32. dns.delete_txt
+        deletes a TXT record from the DNS cache
+
+33. dns.delete_ebl
+        deletes an EBL record from the DNS cache
+
+34. dns.delete_ptr
+        deletes an PTR record from the DNS cache
+
+35. dst_blacklist.mem_info
+        dst blacklist memory usage info.
+
+36. dst_blacklist.debug
+        dst blacklist  debug  info.
+
+37. dst_blacklist.view
+        dst blacklist dump in human-readable format.
+
+38. dst_blacklist.delete_all
+        Deletes all the entries from the dst blacklist except the
+        permanent ones.
+
+39. dst_blacklist.add
+        Adds a new entry to the dst blacklist.
+

+ 15 - 0
doc/rpc_list/rpc_cpl-c.txt

@@ -0,0 +1,15 @@
+RPC Exports for cpl-c
+=====================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. cpl.load
+        Load a CPL script to the server.
+
+ 2. cpl.remove
+        Remove a CPL script from server.
+
+ 3. cpl.get
+        Return a CPL script.
+

+ 15 - 0
doc/rpc_list/rpc_ctl.txt

@@ -0,0 +1,15 @@
+RPC Exports for ctl
+===================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. ctl.who
+        list open connections
+
+ 2. ctl.connections
+        returns number of open connections
+
+ 3. ctl.listen
+        list ctl listen sockets
+

+ 9 - 0
doc/rpc_list/rpc_db_flatstore.txt

@@ -0,0 +1,9 @@
+RPC Exports for db_flatstore
+============================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. flatstore.rotate
+        Close and reopen flatrotate files during log rotation.
+

+ 12 - 0
doc/rpc_list/rpc_dispatcher.txt

@@ -0,0 +1,12 @@
+RPC Exports for dispatcher
+==========================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. dispatcher.dump
+        Dump dispatcher set configuration
+
+ 2. dispatcher.reload
+        Reload dispatcher list from file
+

+ 12 - 0
doc/rpc_list/rpc_domain.txt

@@ -0,0 +1,12 @@
+RPC Exports for domain
+======================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. domain.reload
+        Reload domain table from database
+
+ 2. domain.dump
+        Return the contents of domain table
+

+ 24 - 0
doc/rpc_list/rpc_gflags.txt

@@ -0,0 +1,24 @@
+RPC Exports for gflags
+======================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. gflags.set
+        Load a CPL script to the server.
+
+ 2. gflags.is_set
+        Load a CPL script to the server.
+
+ 3. gflags.reset
+        Load a CPL script to the server.
+
+ 4. gflags.flush
+        Load a CPL script to the server.
+
+ 5. gflags.dump
+        Load a CPL script to the server.
+
+ 6. global.reload
+        Reload global attributes from database
+

+ 15 - 0
doc/rpc_list/rpc_lcr.txt

@@ -0,0 +1,15 @@
+RPC Exports for lcr
+===================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. lcr.reload
+        Reload gw and lcr tables from database.
+
+ 2. lcr.dump_gws
+        Dump the contents of the gw table.
+
+ 3. lcr.dump_lcrs
+        Dump the contents of the lcr table.
+

+ 22 - 0
doc/rpc_list/rpc_mi_rpc.txt

@@ -0,0 +1,22 @@
+RPC Exports for mi_rpc
+======================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. mi
+        Execute MI command
+        Returns an array.
+
+ 2. mi_fifo
+        Execute MI command
+        Returns an array.
+
+ 3. mi_dg
+        Execute MI command
+        Returns an array.
+
+ 4. mi_xmlrpc
+        Execute MI command
+        Returns an array.
+

+ 16 - 0
doc/rpc_list/rpc_pdt.txt

@@ -0,0 +1,16 @@
+RPC Exports for pdt
+===================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. pdt.add
+        Add new prefix/domain translation rule.
+
+ 2. pdt.delete
+        Delete prefix/domain translation rule.
+
+ 3. pdt.list
+        List existin prefix/domain translation rules
+        Returns an array.
+

+ 9 - 0
doc/rpc_list/rpc_pike.txt

@@ -0,0 +1,9 @@
+RPC Exports for pike
+====================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. pike.top
+        pike.top doc.
+

+ 12 - 0
doc/rpc_list/rpc_prefix_route.txt

@@ -0,0 +1,12 @@
+RPC Exports for prefix_route
+============================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. prefix_route.reload
+        Reload prefix routes from DB
+
+ 2. prefix_route.dump
+        Dump the prefix route tree
+

+ 12 - 0
doc/rpc_list/rpc_presence_b2b.txt

@@ -0,0 +1,12 @@
+RPC Exports for presence_b2b
+============================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. presence_b2b.test
+        Testing events.
+
+ 2. presence_b2b.trace
+        Trace events.
+

+ 21 - 0
doc/rpc_list/rpc_ratelimit.txt

@@ -0,0 +1,21 @@
+RPC Exports for ratelimit
+=========================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. rl.stats
+        Print ratelimit statistics
+
+ 2. rl.invite_limit
+        Set INVITEs per timer interval limit
+
+ 3. rl.register_limit
+        Set REGISTERs per timer interval limit
+
+ 4. rl.subscribe_limit
+        Set SUBSCRIBEs per timer interval limit
+
+ 5. rl.timer_interval
+        Set the ratelimit timer_interval length
+

+ 9 - 0
doc/rpc_list/rpc_rls.txt

@@ -0,0 +1,9 @@
+RPC Exports for rls
+===================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. rls.trace
+        RLS trace.
+

+ 9 - 0
doc/rpc_list/rpc_sl.txt

@@ -0,0 +1,9 @@
+RPC Exports for sl
+==================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. sl.stats
+        Print reply statistics.
+

+ 13 - 0
doc/rpc_list/rpc_tls.txt

@@ -0,0 +1,13 @@
+RPC Exports for tls
+===================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. tls.reload
+        Reload TLS configuration file
+
+ 2. tls.list
+        List currently open TLS connections
+        Returns an array.
+

+ 25 - 0
doc/rpc_list/rpc_tm.txt

@@ -0,0 +1,25 @@
+RPC Exports for tm
+==================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. tm.cancel
+        Documentation missing (rpc_cancel_doc).
+
+ 2. tm.reply
+        Documentation missing (rpc_reply_doc).
+
+ 3. tm.stats
+        Documentation missing (tm_rpc_stats_doc).
+
+ 4. tm.hash_stats
+        Documentation missing (tm_rpc_hash_stats_doc).
+
+ 5. tm.t_uac_start
+        Documentation missing (rpc_t_uac_start_doc).
+
+ 6. tm.t_uac_wait
+        Documentation missing (rpc_t_uac_wait_doc).
+        Returns an array.
+

+ 32 - 0
doc/rpc_list/rpc_usrloc.txt

@@ -0,0 +1,32 @@
+RPC Exports for usrloc
+======================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+ 1. usrloc.stats
+        Print usrloc statistics
+        Returns an array.
+
+ 2. usrloc.delete_uid
+        Delete all registered contacts for address of record.
+
+ 3. usrloc.delete_contact
+        Delete a contact if it exists.
+
+ 4. usrloc.dump
+        Print all registered contacts.
+
+ 5. usrloc.dump_file
+        Print all registered contacts into a file.
+
+ 6. usrloc.flush
+        Flush cache into database.
+
+ 7. usrloc.add_contact
+        Create a new contact.
+
+ 8. usrloc.show_contacts
+        List all registered contacts for address of record
+        Returns an array.
+

+ 527 - 0
doc/scripts/cdefs2doc/dump_cfg_defs.pl

@@ -0,0 +1,527 @@
+#!/usr/bin/perl
+
+#
+# Generate docs from ser/sip-router cfg group descriptions
+# (run on files generated by gcc -fdump-translation-unit -c file.c, 
+#  try -h for help)
+# E.g.: dump_cfg_defs.pl --file cfg_core.c  --defs="-DUSE_SCTP ..."
+#
+# History:
+# =======
+#  2009-10-16  initial version (Andrei Pelinescu-Onciul <[email protected]>)
+#
+
+# Note: uses GCC::TranslationUnit (see cpan) with the following patch:
+#@@ -251,6 +251,8 @@
+# 	    $node->{vector}[$key] = $value;
+# 	} elsif($key =~ /^op (\d+)$/) {
+# 	    $node->{operand}[$1] = $value;
+#+	} elsif ($key eq "val") {
+#+		push @{$node->{$key}}, ($value) ;
+# 	} else {
+# 	    $node->{$key} = $value;
+# 	}
+# 
+#
+# Assumptions:
+#  - the first array of type cfg_def_t with an initializer is the array
+#    with the config definitions (name, type, description a.s.o.). Only
+#    one cfg_def array per file is supported.
+#  - the first variable of type struct cfg_group_(.*) , with an intializer,
+#    contains the default values. If no group name is specified on the 
+#    command line (--group) the group name is derived from the struct
+#    name ($1). The default values are optional. Only one such variable is
+#    supported per file.
+#  - if the number of the default values is different from the number of
+#    elements in the config defs array, the default values are discarded.
+#
+# Output notes:
+#  - range is not printed if min==max==0.
+#  - default values are not printed if missing
+
+
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Temp qw(:mktemp);
+use File::Basename;
+use lib "/home/andrei/perl/modules/share/perl/5.10.1";
+use GCC::TranslationUnit;
+
+# text printed if we discover that GCC::TranslationUnit is unpatched
+my $patch_required="$0 requires a patched GCC:TranslationUnit, see the " .
+				"comments at the beginning of the file or try --patch\n";
+# gcc name
+my $gcc="gcc";
+# default defines
+my $c_defs="-D__CPU_i386 -D__OS_linux -DSER_VER=2099099 -DPKG_MALLOC -DSHM_MEM  -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR  -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK   -DCC_GCC_LIKE_ASM -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_SCHED_SETSCHEDULER -DHAVE_EPOLL -DUSE_SCTP -DNAME='\"ser\"' -DVERSION='\"2.99.99-pre3\"' -DARCH='\"i386\"' -DOS_QUOTED='\"linux\"' -DSER_MOD_INTERFACE";
+
+# file with gcc syntax tree
+my $file; #"tcp_options.c.001t.tu" ;
+my $tmp_file;
+my $src_fname;
+
+# type to look for
+my $var_type="cfg_def_t";
+
+my $tu;
+my $node;
+my $i;
+my @cfg_defs; # filled with config var definition (cfg_def_t)
+my @cfg_default; # filled with config var defaults
+my ($cfg_grp_name, $def_cfg_name, $cfg_var_name);
+
+my ($opt_help, $opt_txt, $opt_is_tu, $dbg, $opt_grp_name, $opt_patch);
+my ($opt_force_grp_name, $opt_docbook);
+
+# default output formats
+my $output_format_header="HEADER";
+my $output_format_footer="FOOTER";
+my $output_format_varline="VARLINE2";
+
+
+sub show_patch
+{
+my $patch='
+--- GCC/TranslationUnit.pm.orig	2009-10-16 17:57:51.275963053 +0200
++++ GCC/TranslationUnit.pm	2009-10-16 20:17:28.128455959 +0200
+@@ -251,6 +251,8 @@
+ 	    $node->{vector}[$key] = $value;
+ 	} elsif($key =~ /^op (\d+)$/) {
+ 	    $node->{operand}[$1] = $value;
++	} elsif ($key eq "val") {
++		push @{$node->{$key}}, ($value) ;
+ 	} else {
+ 	    $node->{$key} = $value;
+ 	}
+';
+
+print $patch;
+}
+
+
+sub help
+{
+	#print "Usage: $0 --file fname [--src src_fname] [--txt|-t] [--help|-h]\n";
+	$~ = "USAGE";
+	write;
+
+format USAGE =
+Usage @*  -f filename | --file filename  [options...]
+      $0
+Options:
+         -f        filename    - use filename for input (see also -T/--tu).
+         --file    filename    - same as -f.
+         -h | -? | --help      - this help message.
+         -D | --dbg | --debug  - enable debugging messages.
+         -d | --defs           - defines to be passed on gcc's command line
+                                 (e.g. --defs="-DUSE_SCTP -DUSE_TCP").
+         -g | --grp  name
+         --group     name      - config group name used if one cannot be
+                                 autodetected (e.g. no default value 
+                                 intializer present in the file).
+         -G | --force-grp name
+         --force-group    name - force using a config group name, even if one
+                                 is autodetected (see also -g).
+         --gcc     gcc_name    - run gcc_name instead of gcc.
+         -t | --txt            - text mode output.
+         --docbook | --xml     - docbook output (xml).
+         -T | --tu             - the input file is in raw gcc translation
+                                 unit format (as produced by
+                                   gcc -fdump-translation-unit -c ). If not
+                                 present it's assumed that the file contains
+                                 C code.
+         -s | --src | --source - name of the source file, needed only if
+                                 the input file is in "raw" translation
+                                 unit format (--tu) and usefull to restrict
+                                 and speed-up the search.
+         --patch               - show patches needed for the
+                                 GCC::TranslationUnit package.
+.
+
+}
+
+
+
+# escape a string for xml use
+# params: string to be escaped
+# return: escaped string
+sub xml_escape{
+	my $s=shift;
+	my %escapes = (
+		'"' => '&quot;',
+		"'" => '&apos;',
+		'&' => '&amp;',
+		'<' => '&lt;',
+		'>' => '&gt;'
+	);
+	
+	$s=~s/(["'&<>])/$escapes{$1}/g;
+	return $s;
+}
+
+
+
+# escape a string according with the output requirements
+# params: string to be escaped
+# return: escaped string
+sub output_esc{
+	return xml_escape(shift) if defined $opt_docbook;
+	return shift;
+}
+
+
+
+# eliminate casts and expressions.
+# (always go on the first operand)
+# params: node (GCC::Node)
+# result: if node is an expression it will walk on operand(0) until first non
+# expression element is found
+sub expr_op0{
+	my $n=shift;
+	
+	while(($n->isa('GCC::Node::Expression') || $n->isa('GCC::Node::Unary')) &&
+			defined $n->operand(0)) {
+		$n=$n->operand(0);
+	}
+	return $n;
+}
+
+
+
+# read command line args
+if ($#ARGV < 0 || ! GetOptions(	'help|h|?' => \$opt_help,
+								'file|f=s' => \$file,
+								'txt|t' => \$opt_txt,
+								'docbook|xml' => \$opt_docbook,
+								'tu|T' => \$opt_is_tu,
+								'source|src|s=s' => \$src_fname,
+								'defs|d=s'=>\$c_defs,
+								'group|grp|g=s'=>\$opt_grp_name,
+								'force-group|force-grp|G=s' =>
+													\$opt_force_grp_name,
+								'dbg|debug|D'=>\$dbg,
+								'gcc=s' => \$gcc,
+								'patch' => \$opt_patch) ||
+		defined $opt_help) {
+	do { show_patch(); exit 0; } if (defined $opt_patch);
+	select(STDERR) if ! defined $opt_help;
+	help();
+	exit((defined $opt_help)?0:1);
+}
+
+do { show_patch(); exit 0; } if (defined $opt_patch);
+do { select(STDERR); help(); exit 1 } if (!defined $file);
+
+if (defined $opt_txt){
+	$output_format_header="HEADER";
+	$output_format_footer="FOOTER";
+	$output_format_varline="VARLINE2";
+}elsif (defined $opt_docbook){
+	$output_format_header="DOCBOOK_HEADER";
+	$output_format_footer="DOCBOOK_FOOTER";
+	$output_format_varline="DOCBOOK_VARLINE";
+}
+
+if (! defined $opt_is_tu){
+	# file is not a gcc translation-unit dump
+	# => we have to create one
+	$src_fname=basename($file);
+	$tmp_file = "/tmp/" . mktemp ("dump_translation_unit_XXXXXX");
+	system("$gcc -fdump-translation-unit $c_defs -c $file -o $tmp_file.o && \
+			mv \"$src_fname\".001t.tu  $tmp_file") == 0 or
+		die "$gcc failed to generate a translation unit dump from $file";
+	$tu=GCC::TranslationUnit::Parser->parsefile($tmp_file);
+	print(STDERR "src name $src_fname\n") if $dbg;
+	unlink($tmp_file, "$tmp_file.o");
+}else{
+	$tu=GCC::TranslationUnit::Parser->parsefile($file);
+}
+
+print(STDERR "Parsing file $file...\n") if $dbg;
+#
+# function_decl: name, type, srcp (source), chan?, body?, link (e.g. extern)
+# parm_decl: name, type, scpe, srcp, chan, argt, size, algn, used
+# field_decl: name, type, scpe (scope), srcp, size, algn, bpos (bit pos?)
+#
+# array_type: size, algn, elts (elements?), domn ?
+#
+#
+# name as string $node->name->identifier
+#
+# E.g.: static cfg_def_t tcp_cfg_def[]= {...}
+#                        ^^^^^^^^^^^
+#
+# @7695 var_decl:  name: @7705   type: @7706    srcp: tcp_options.c:51
+#                  chan: @7707    init: @7708    size: @7709
+#                  algn: 256      used: 1
+# 
+# @7705 (var name)  	identifier_node strg: tcp_cfg_def lngt 11
+# @7706 (var type)  	array_type: size:@7709 algn: 32 elts: @2265 domn: @7718
+# @7707 (? next ?  )	function_decl: ....
+# @7708 (intializer)	constructor: lngt: 25
+#                                    idx : @20      val : @7723    [...]
+# @7709             	interget_cst: type: @11 low: 5600
+#
+# @2265 (array type)	record_type: name: @2256    unql: @2255    size: @2002
+#                                    algn: 32       tag : struct   flds: @2263
+# @2256 (type)      	type_decl: name: @2264    type: @2265    srcp: cfg.h:73
+#                                  chan: @2266
+# @2264 (name)     		identifier_node:  strg: cfg_def_t
+
+print(STDERR "Searching...\n") if $dbg;
+$i=0;
+# iterate on the entire nodes array (returned by gcc), but skipping node 0
+SEARCH: for $node (@{$tu}[1..$#{$tu}]) {
+	$i++;
+	while($node) {
+		if (
+			@cfg_defs == 0 &&  # parse it only once
+			$node->isa('GCC::Node::var_decl') &&
+			$node->type->isa('GCC::Node::array_type')  &&
+			(! defined $src_fname || $src_fname eq "" ||
+				$node->source=~"$src_fname")
+			){
+			# found a var decl. that it's an array
+			# check if it's a valid array type
+			next if (!(	$node->type->can('elements') &&
+						defined $node->type->elements &&
+						$node->type->elements->can('name') &&
+						defined $node->type->elements->name &&
+						$node->type->elements->name->can('name') &&
+						defined $node->type->elements->name->name)
+					);
+			my $type_name= $node->type->elements->name->name->identifier;
+			if ($type_name eq $var_type) {
+				#printf "tree[$i]: found var %s %s (%s)\n",
+				#		$type_name,
+				#		$node->name->identifier,v
+				#		$node->source;
+				#print ("keys:", join " ", keys %$node, "\n");
+				#print ("keys init:", join " ", keys %{$node->initial}, "\n");
+				if ($node->can('initial') && defined $node->initial) {
+					my %c1=%{$node->initial};
+					$cfg_var_name=$node->name->identifier;
+					if (defined $c1{val}){
+						my $c1_el;
+						die $patch_required if (ref($c1{val}) ne "ARRAY");
+						# iterate on array elem., level 1( top {} )
+						# each element is a constructor
+						for $c1_el (@{$c1{val}}) {
+							# finally we are a the lower {} initializer
+							my %c2=%{$c1_el};
+							my @el=@{$c2{val}};
+							my ($name_n, $type_n, $min_n, $max_n, $fixup_n, 
+									$pcbk_n, $desc_n)=@el;
+							my ($name, $type, $min, $max, $desc);
+							if ($name_n->isa('GCC::Node::integer_cst')){
+								printf(" ERROR: integer non-0 name (%d)\n",
+										$name_n->low) if ($name_n->low!=0);
+								if (@cfg_default > 0){
+									last SEARCH; # exit
+								}else{
+									next; # have to look for defaults too
+								}
+							}
+							$name=expr_op0($name_n)->string;
+							$type=$type_n->low;
+							$min=$min_n->low;
+							$max=$max_n->low;
+							$desc=expr_op0($desc_n)->string;
+							push @cfg_defs, [$name, $type, $min, $max, $desc];
+						}
+					}
+				}
+			}
+		}elsif (@cfg_default == 0 && # parse it only once
+				$node->isa('GCC::Node::var_decl') &&
+				$node->type->isa('GCC::Node::record_type') &&
+				(! defined $src_fname || $src_fname eq "" ||
+					$node->source=~"$src_fname") &&
+				defined $node->type->name->can('identifier') &&
+				$node->type->name->identifier=~"cfg_group_([a-z0-9_]+)" &&
+				$node->can('initial') && defined $node->initial) {
+				my %c1=%{$node->initial};
+				if (defined $c1{val}){
+					my $c1_el;
+					$cfg_grp_name=$1;
+					$def_cfg_name=$node->name->identifier;
+					print(STDERR "found default cfg: $def_cfg_name,", 
+								"grp $cfg_grp_name\n") if $dbg;
+					die $patch_required if (ref($c1{val}) ne "ARRAY");
+					# iterate on array elem.,( top {} )
+					# each element is an integer, expr (string pointer) or
+					# constructor (str)
+					for $c1_el (@{$c1{val}}) {
+						if ($c1_el->isa('GCC::Node::integer_cst')){
+							push @cfg_default, $c1_el->low;
+						}elsif ($c1_el->isa('GCC::Node::constructor')){
+							push @cfg_default, "<unknown:str>";
+						}else{
+							push @cfg_default, expr_op0($c1_el)->string;
+						}
+					}
+					last SEARCH if @cfg_defs > 0; # exit
+				}
+		}
+	} continue {
+		if ($node->can('chain')){
+			$node = $node->chain;
+		}else{
+			last;
+		}
+	}
+}
+
+print(STDERR "Done.\n") if $dbg;
+
+my ($name, $flags, $min, $max, $desc);
+my ($type, $extra_txt, $default);
+
+if (@cfg_defs > 0){
+	my $l;
+	my $no=@cfg_default;
+	$i=0;
+	if ($no > 0 && @cfg_defs != $no) {
+		print(STDERR "WARNING: different array lenghts ($def_cfg_name($no) &&",
+				" $cfg_var_name($(scalar @cfg_defs)))\n");
+		$no=0;
+	}
+	# dump the configuration in txt mode
+	if (defined $opt_force_grp_name) {
+		$cfg_grp_name=output_esc($opt_force_grp_name);
+	}elsif (!defined $cfg_grp_name && defined $opt_grp_name) {
+		$cfg_grp_name=output_esc($opt_grp_name);
+	}
+	$~ = $output_format_header; write;
+	$~ = $output_format_varline ;
+	for $l (@cfg_defs){
+		($name, $flags, $min, $max, $desc)=@{$l};
+		$type="";
+		$extra_txt="";
+		$default= ($no>0) ? output_esc($cfg_default[$i]) : "";
+		
+		$i++;
+		if ($min==0 && $max==0) {
+			$min=""; $max="";
+		}
+		if ($flags & 8) {
+			$type="integer";
+		}elsif ($flags & 16) {
+			$type="string";
+		}elsif ($flags & 32) {
+			$type="string"; # str
+		}else{
+			my $t = $flags & 7;
+			$t == 1 && do { $type="integer"; };
+			$t == 2 && do { $type="string"; };
+			$t == 3 && do { $type="string"; }; # str
+			$t == 4 && do { $type=""; }; # pointer
+		}
+		
+		$extra_txt.="Read-only." if ($flags & 128 );
+		$extra_txt=output_esc($extra_txt);
+		$desc=output_esc($desc . ".");
+		$name=output_esc($name);
+		# generate txt description
+		write;
+	}
+	$~ = $output_format_footer; write;
+}else{
+	die "no configuration variables found in $file\n";
+}
+
+
+sub valid_grp_name
+{
+	my $name=shift;
+	return defined $name && $name ne "";
+}
+
+
+format HEADER =
+Configuration Variables@*
+(valid_grp_name $cfg_grp_name) ? " for " . $cfg_grp_name : ""
+=======================@*
+"=" x length((valid_grp_name $cfg_grp_name)?" for " . $cfg_grp_name : "")
+
+@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+"[ this file is autogenerated, do not edit ]"
+
+
+.
+
+format FOOTER =
+.
+
+format VARLINE =
+@>. @<<<<<<<<<<<<<<<<<<< - ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$i, $name,                 $desc
+~~                         ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+                           $desc
+~                          Default: @*.
+                           $default
+~                          Range: @* - @*.
+                                  $min, $max
+~                          Type: @*. ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+                                 $type, $extra_txt
+~~                         ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+                           $extra_txt
+
+.
+
+format VARLINE2 =
+@>. @*
+$i, (valid_grp_name $cfg_grp_name)?$cfg_grp_name . "." . $name : $name
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $desc
+~       Default: @*.
+                 $default
+~       Range: @* - @*.
+               $min, $max
+~       Type: @*. ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+              $type, $extra_txt
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $extra_txt
+
+.
+
+format DOCBOOK_HEADER =
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="config_vars@*">
+(valid_grp_name $cfg_grp_name) ? "." . $cfg_grp_name : ""
+	<title> Configuration Variables@*</title>
+(valid_grp_name $cfg_grp_name) ? " for " . $cfg_grp_name : ""
+
+
+.
+
+format DOCBOOK_FOOTER =
+</chapter>
+.
+
+format DOCBOOK_VARLINE =
+<section id="@*">
+    (valid_grp_name $cfg_grp_name)?$cfg_grp_name . "." . $name : $name
+    <title>@*</title>
+    (valid_grp_name $cfg_grp_name)?$cfg_grp_name . "." . $name : $name
+    <para>
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $desc
+    </para>
+~   <para>Default value: @*.</para>
+        $default
+~   <para>Range: @* - @*.</para>
+            $min, $max
+~   <para>Type: @*.</para>
+            $type
+    <para>
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $extra_txt
+    </para>
+</section>
+
+.

+ 476 - 0
doc/scripts/cdefs2doc/dump_rpcs.pl

@@ -0,0 +1,476 @@
+#!/usr/bin/perl
+
+#
+# Generate docs from ser/sip-router RPCs descriptions
+# (run on files generated by gcc -fdump-translation-unit -c file.c, 
+#  try -h for help)
+# E.g.: dump_rpcs.pl --file cfg_core.c  --defs="-DUSE_SCTP ..."
+#
+# History:
+# =======
+#  2009-10-18  initial version (Andrei Pelinescu-Onciul <[email protected]>)
+#
+
+# Note: uses GCC::TranslationUnit (see cpan) with the following patch:
+#@@ -251,6 +251,8 @@
+# 	    $node->{vector}[$key] = $value;
+# 	} elsif($key =~ /^op (\d+)$/) {
+# 	    $node->{operand}[$1] = $value;
+#+	} elsif ($key eq "val") {
+#+		push @{$node->{$key}}, ($value) ;
+# 	} else {
+# 	    $node->{$key} = $value;
+# 	}
+# 
+#
+# Assumptions:
+#  - the first array of type rpc_export_t with an initializer is the array
+#    with the rpc definitions (name, doc, flags a.s.o.). Only
+#    one rpc_export_t array per file is supported.
+#  - all the documentation arrays referenced in the rpc export array are
+#    defined and intialized in the same file.
+#
+# Output notes:
+#  - doc strings are not printed if they cannot be found
+
+
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Temp qw(:mktemp);
+use File::Basename;
+use lib "/home/andrei/perl/modules/share/perl/5.10.1";
+use GCC::TranslationUnit;
+
+# text printed if we discover that GCC::TranslationUnit is unpatched
+my $patch_required="$0 requires a patched GCC:TranslationUnit, see the " .
+				"comments at the beginning of the file or try --patch\n";
+# gcc name
+my $gcc="gcc";
+# default defines
+my $c_defs="-D__CPU_i386 -D__OS_linux -DSER_VER=2099099 -DPKG_MALLOC -DSHM_MEM  -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR  -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK   -DCC_GCC_LIKE_ASM -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_SCHED_SETSCHEDULER -DHAVE_EPOLL -DUSE_SCTP -DNAME='\"ser\"' -DVERSION='\"2.99.99-pre3\"' -DARCH='\"i386\"' -DOS_QUOTED='\"linux\"' -DSER_MOD_INTERFACE";
+
+# file with gcc syntax tree
+my $file;
+my $tmp_file;
+my $src_fname;
+
+# type to look for
+my $var_type="rpc_export_t";
+
+my $tu;
+my $node;
+my $i;
+my @rpc_exports; # filled with rpc definitions (rpc_export_t)
+my %rpc_docs; # hash containing rpc_doc_varname -> doc_string mappings
+my ($rpc_grp_name, $rpc_var_name);
+
+my ($opt_help, $opt_txt, $opt_is_tu, $dbg, $opt_grp_name, $opt_patch);
+my ($opt_force_grp_name, $opt_docbook);
+
+# default output formats
+my $output_format_header="HEADER";
+my $output_format_footer="FOOTER";
+my $output_format_rpcline="RPCLINE";
+
+
+sub show_patch
+{
+my $patch='
+--- GCC/TranslationUnit.pm.orig	2009-10-16 17:57:51.275963053 +0200
++++ GCC/TranslationUnit.pm	2009-10-16 20:17:28.128455959 +0200
+@@ -251,6 +251,8 @@
+ 	    $node->{vector}[$key] = $value;
+ 	} elsif($key =~ /^op (\d+)$/) {
+ 	    $node->{operand}[$1] = $value;
++	} elsif ($key eq "val") {
++		push @{$node->{$key}}, ($value) ;
+ 	} else {
+ 	    $node->{$key} = $value;
+ 	}
+';
+
+print $patch;
+}
+
+
+sub help
+{
+	$~ = "USAGE";
+	write;
+
+format USAGE =
+Usage @*  -f filename | --file filename  [options...]
+      $0
+Options:
+         -f        filename    - use filename for input (see also -T/--tu).
+         --file    filename    - same as -f.
+         -h | -? | --help      - this help message.
+         -D | --dbg | --debug  - enable debugging messages.
+         -d | --defs           - defines to be passed on gcc's command line
+                                 (e.g. --defs="-DUSE_SCTP -DUSE_TCP").
+         -g | --grp  name
+         --group     name      - rpc group name used if one cannot be
+                                 autodetected (e.g. no default value 
+                                 intializer present in the file).
+         -G | --force-grp name
+         --force-group    name - force using a rpc group name, even if one
+                                 is autodetected (see also -g).
+         --gcc     gcc_name    - run gcc_name instead of gcc.
+         -t | --txt            - text mode output.
+         --docbook | --xml     - docbook output (xml).
+         -T | --tu             - the input file is in raw gcc translation
+                                 unit format (as produced by
+                                   gcc -fdump-translation-unit -c ). If not
+                                 present it's assumed that the file contains
+                                 C code.
+         -s | --src | --source - name of the source file, needed only if
+                                 the input file is in "raw" translation
+                                 unit format (--tu) and usefull to restrict
+                                 and speed-up the search.
+         --patch               - show patches needed for the
+                                 GCC::TranslationUnit package.
+.
+
+}
+
+
+
+# escape a string for xml use
+# params: string to be escaped
+# return: escaped string
+sub xml_escape{
+	my $s=shift;
+	my %escapes = (
+		'"' => '&quot;',
+		"'" => '&apos;',
+		'&' => '&amp;',
+		'<' => '&lt;',
+		'>' => '&gt;'
+	);
+	
+	$s=~s/(["'&<>])/$escapes{$1}/g;
+	return $s;
+}
+
+
+
+# escape a string according with the output requirements
+# params: string to be escaped
+# return: escaped string
+sub output_esc{
+	return xml_escape(shift) if defined $opt_docbook;
+	return shift;
+}
+
+
+
+# eliminate casts and expressions.
+# (always go on the first operand)
+# params: node (GCC::Node)
+# result: if node is an expression it will walk on operand(0) until first non
+# expression element is found
+sub expr_op0{
+	my $n=shift;
+	
+	while(($n->isa('GCC::Node::Expression') || $n->isa('GCC::Node::Unary')) &&
+			defined $n->operand(0)) {
+		$n=$n->operand(0);
+	}
+	return $n;
+}
+
+
+
+# read command line args
+if ($#ARGV < 0 || ! GetOptions(	'help|h|?' => \$opt_help,
+								'file|f=s' => \$file,
+								'txt|t' => \$opt_txt,
+								'docbook|xml' => \$opt_docbook,
+								'tu|T' => \$opt_is_tu,
+								'source|src|s=s' => \$src_fname,
+								'defs|d=s'=>\$c_defs,
+								'group|grp|g=s'=>\$opt_grp_name,
+								'force-group|force-grp|G=s' =>
+													\$opt_force_grp_name,
+								'dbg|debug|D'=>\$dbg,
+								'gcc=s' => \$gcc,
+								'patch' => \$opt_patch) ||
+		defined $opt_help) {
+	do { show_patch(); exit 0; } if (defined $opt_patch);
+	select(STDERR) if ! defined $opt_help;
+	help();
+	exit((defined $opt_help)?0:1);
+}
+
+do { show_patch(); exit 0; } if (defined $opt_patch);
+do { select(STDERR); help(); exit 1 } if (!defined $file);
+
+if (defined $opt_txt){
+	$output_format_header="HEADER";
+	$output_format_footer="FOOTER";
+	$output_format_rpcline="RPCLINE";
+}elsif (defined $opt_docbook){
+	$output_format_header="DOCBOOK_HEADER";
+	$output_format_footer="DOCBOOK_FOOTER";
+	$output_format_rpcline="DOCBOOK_RPCLINE";
+}
+
+if (! defined $opt_is_tu){
+	# file is not a gcc translation-unit dump
+	# => we have to create one
+	$src_fname=basename($file);
+	$tmp_file = "/tmp/" . mktemp ("dump_translation_unit_XXXXXX");
+	system("$gcc -fdump-translation-unit $c_defs -c $file -o $tmp_file && \
+			mv \"$src_fname\".001t.tu  $tmp_file") == 0 or
+		die "$gcc failed to generate a translation unit dump from $file";
+	$tu=GCC::TranslationUnit::Parser->parsefile($tmp_file);
+	print(STDERR "src name $src_fname\n") if $dbg;
+	unlink($tmp_file, "$tmp_file.o");
+}else{
+	$tu=GCC::TranslationUnit::Parser->parsefile($file);
+}
+
+print(STDERR "Parsing file $file...\n") if $dbg;
+#
+# function_decl: name, type, srcp (source), chan?, body?, link (e.g. extern)
+# parm_decl: name, type, scpe, srcp, chan, argt, size, algn, used
+# field_decl: name, type, scpe (scope), srcp, size, algn, bpos (bit pos?)
+#
+# array_type: size, algn, elts (elements?), domn ?
+#
+#
+# name as string $node->name->identifier
+#
+# E.g.: static cfg_def_t tcp_cfg_def[]= {...}
+#                        ^^^^^^^^^^^
+#
+# @7695 var_decl:  name: @7705   type: @7706    srcp: tcp_options.c:51
+#                  chan: @7707    init: @7708    size: @7709
+#                  algn: 256      used: 1
+# 
+# @7705 (var name)  	identifier_node strg: tcp_cfg_def lngt 11
+# @7706 (var type)  	array_type: size:@7709 algn: 32 elts: @2265 domn: @7718
+# @7707 (? next ?  )	function_decl: ....
+# @7708 (intializer)	constructor: lngt: 25
+#                                    idx : @20      val : @7723    [...]
+# @7709             	interget_cst: type: @11 low: 5600
+#
+# @2265 (array type)	record_type: name: @2256    unql: @2255    size: @2002
+#                                    algn: 32       tag : struct   flds: @2263
+# @2256 (type)      	type_decl: name: @2264    type: @2265    srcp: cfg.h:73
+#                                  chan: @2266
+# @2264 (name)     		identifier_node:  strg: cfg_def_t
+
+print(STDERR "Searching...\n") if $dbg;
+$i=0;
+# iterate on the entire nodes array (returned by gcc), but skipping node 0
+SEARCH: for $node (@{$tu}[1..$#{$tu}]) {
+	$i++;
+	while($node) {
+		if (
+			@rpc_exports == 0 &&  # parse it only once
+			$node->isa('GCC::Node::var_decl') &&
+			$node->type->isa('GCC::Node::array_type')  &&
+			(! defined $src_fname || $src_fname eq "" ||
+				$node->source=~"$src_fname")
+			){
+			# found a var decl. that it's an array
+			# check if it's a valid array type
+			next if (!(	$node->type->can('elements') &&
+						defined $node->type->elements &&
+						$node->type->elements->can('name') &&
+						defined $node->type->elements->name &&
+						$node->type->elements->name->can('name') &&
+						defined $node->type->elements->name->name)
+					);
+			my $type_name= $node->type->elements->name->name->identifier;
+			if ($type_name eq $var_type) {
+				if ($node->can('initial') && defined $node->initial) {
+					my %c1=%{$node->initial};
+					$rpc_var_name=$node->name->identifier;
+					if (defined $c1{val}){
+						my $c1_el;
+						die $patch_required if (ref($c1{val}) ne "ARRAY");
+						# iterate on array elem., level 1( top {} )
+						# each element is a constructor.
+						#    { name, callback, doc_var, flags }
+						for $c1_el (@{$c1{val}}) {
+							# finally we are a the lower {} initializer:
+							#    { name, callback, doc_var, flags }
+							my %c2=%{$c1_el};
+							my @el=@{$c2{val}};
+							my ($name_n, $callback_n, $docvar_n, $flags_n)=@el;
+							my ($name, $docvar, $flags);
+							if ($name_n->isa('GCC::Node::integer_cst')){
+								printf(" ERROR: integer non-0 name (%d)\n",
+										$name_n->low) if ($name_n->low!=0);
+								last SEARCH;
+							}
+							$name_n=expr_op0($name_n);
+							$name= $name_n->string;
+							$flags=$flags_n->low;
+							# eliminate casts and expressions
+							# (always go on the first operand)
+							$docvar_n=expr_op0($docvar_n);
+							$docvar=$docvar_n->name->identifier;
+							push @rpc_exports, [$name, $docvar, $flags];
+						}
+					}
+				}
+			}
+		}
+	} continue {
+		if ($node->can('chain')){
+			$node = $node->chain;
+		}else{
+			last;
+		}
+	}
+}
+
+
+print(STDERR "Searching doc vars...\n") if $dbg;
+# look for docvars
+# re-iterate on the entire nodes array (returned by gcc), but skipping node 0
+DOC: for $node (@{$tu}[1..$#{$tu}]) {
+	while(@rpc_exports>0 && $node) {
+		if (
+			$node->isa('GCC::Node::var_decl') &&
+			$node->type->isa('GCC::Node::array_type')  &&
+			(! defined $src_fname || $src_fname eq "" ||
+				$node->source=~"$src_fname") &&
+			# var name is among the one we look for
+			grep(${$_}[1] eq $node->name->identifier, @rpc_exports) > 0
+			){
+			print(STDERR "found a candidate:", $node->name->identifier, "\n")
+				if $dbg;
+			# found a var decl. that it's an array
+			# check if it's a valid array type
+			next if (!(	$node->type->can('elements') &&
+						defined $node->type->elements)
+					);
+			if ($node->can('initial') && defined $node->initial){
+				my %c1=%{$node->initial};
+				my $doc_n = ${$c1{val}}[0];
+				if (defined $doc_n){
+					my $doc=expr_op0($doc_n)->string;
+					$rpc_docs{$node->name->identifier}=$doc;
+					last DOC if ( @rpc_exports == keys %rpc_docs );
+				}
+			}
+		}
+	} continue {
+		if ($node->can('chain')){
+			$node = $node->chain;
+		}else{
+			last;
+		}
+	}
+}
+
+
+print(STDERR "Done.\n") if $dbg;
+
+my ($name, $flags, $desc);
+my $extra_txt;
+
+if (@rpc_exports > 0){
+	my $l;
+	$i=0;
+	if (@rpc_exports != keys %rpc_docs){
+		print STDERR "Warning: missing ", @rpc_exports - keys %rpc_docs,
+			" doc variables definitions\n";
+	}
+	# dump the configuration in txt mode
+	if (defined $opt_force_grp_name) {
+		$rpc_grp_name=output_esc($opt_force_grp_name);
+	}elsif (!defined $rpc_grp_name && defined $opt_grp_name) {
+		$rpc_grp_name=output_esc($opt_grp_name);
+	}
+	$~ = $output_format_header; write;
+	$~ = $output_format_rpcline ;
+	for $l (@rpc_exports){
+		($name, $desc, $flags)=@{$l};
+		$extra_txt="";
+		$desc=(defined $rpc_docs{$desc} && $rpc_docs{$desc} ne "")?
+				output_esc($rpc_docs{$desc}):
+				output_esc("Documentation missing ($desc).");
+		$i++;
+		$extra_txt.=output_esc("Returns an array.") if ($flags & 1 );
+		$name=output_esc($name);
+		# generate txt description
+		write;
+	}
+	$~ = $output_format_footer; write;
+}else{
+	die "no rpc exports found in $file\n";
+}
+
+
+sub valid_grp_name
+{
+	my $name=shift;
+	return defined $name && $name ne "";
+}
+
+
+format HEADER =
+RPC Exports@*
+(valid_grp_name $rpc_grp_name) ? " for " . $rpc_grp_name : ""
+===========@*
+"=" x length((valid_grp_name $rpc_grp_name)?" for " . $rpc_grp_name : "")
+
+@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+"[ this file is autogenerated, do not edit ]"
+
+
+.
+
+format FOOTER =
+.
+
+format RPCLINE =
+@>. @*
+$i, $name
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $desc
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $extra_txt
+
+.
+
+format DOCBOOK_HEADER =
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="rpc_exports@*">
+(valid_grp_name $rpc_grp_name) ? "." . $rpc_grp_name : ""
+	<title>
+RPC Exports@*
+(valid_grp_name $rpc_grp_name) ? " for " . $rpc_grp_name : ""
+	</title>
+
+
+.
+
+format DOCBOOK_FOOTER =
+</chapter>
+.
+
+
+format DOCBOOK_RPCLINE =
+<section id="@*"><title>@*</title>
+$name, $name
+<para>
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $desc
+</para>
+<para>
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $extra_txt
+</para>
+</section>
+
+.

+ 618 - 0
doc/scripts/cdefs2doc/dump_selects.pl

@@ -0,0 +1,618 @@
+#!/usr/bin/perl
+
+#
+# Generate select lists from ser/sip-router select initializations structs.
+# (run on files generated by gcc -fdump-translation-unit -c file.c, 
+#  try -h for help)
+# E.g.: dump_selects.pl --file cfg_core.c  --defs="-DUSE_SCTP ..."
+#
+# History:
+# =======
+#  2009-10-18  initial version (Andrei Pelinescu-Onciul <[email protected]>)
+#
+
+# Note: uses GCC::TranslationUnit (see cpan) with the following patch:
+#@@ -251,6 +251,8 @@
+# 	    $node->{vector}[$key] = $value;
+# 	} elsif($key =~ /^op (\d+)$/) {
+# 	    $node->{operand}[$1] = $value;
+#+	} elsif ($key eq "val") {
+#+		push @{$node->{$key}}, ($value) ;
+# 	} else {
+# 	    $node->{$key} = $value;
+# 	}
+# 
+#
+# Assumptions:
+#  - the first array of type select_row_t  with an initializer is the array
+#    with the select definitions. Only one select_row_t array per file is
+#    supported.
+#
+# Output notes:
+#
+
+use strict;
+use warnings;
+use Getopt::Long;
+use File::Temp qw(:mktemp);
+use File::Basename;
+use lib "/home/andrei/perl/modules/share/perl/5.10.1";
+use GCC::TranslationUnit;
+
+# text printed if we discover that GCC::TranslationUnit is unpatched
+my $patch_required="$0 requires a patched GCC:TranslationUnit, see the " .
+				"comments at the beginning of the file or try --patch\n";
+# gcc name
+my $gcc="gcc";
+# default defines
+my $c_defs="-D__CPU_i386 -D__OS_linux -DSER_VER=2099099 -DPKG_MALLOC -DSHM_MEM  -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR  -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK   -DCC_GCC_LIKE_ASM -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H -DHAVE_SCHED_SETSCHEDULER -DHAVE_EPOLL -DUSE_SCTP -DNAME='\"ser\"' -DVERSION='\"2.99.99-pre3\"' -DARCH='\"i386\"' -DOS_QUOTED='\"linux\"' -DSER_MOD_INTERFACE";
+
+# file with gcc syntax tree
+my $file;
+my $core_file;
+my $src_fname;
+
+# type to look for
+my $var_type="select_row_t";
+
+my $tu;
+my $node;
+my $i;
+my @sel_exports; # filled with select definitions (select_row_t)
+my @core_exports; # filled with select definitions from core (if -c is used)
+my ($sel_grp_name, $sel_var_name);
+
+my ($opt_help, $opt_txt, $opt_is_tu, $dbg, $opt_grp_name, $opt_patch);
+my ($opt_force_grp_name, $opt_docbook);
+
+# default output formats
+my $output_format_header="HEADER";
+my $output_format_footer="FOOTER";
+my $output_format_selline="SELLINE";
+
+
+sub show_patch
+{
+my $patch='
+--- GCC/TranslationUnit.pm.orig	2009-10-16 17:57:51.275963053 +0200
++++ GCC/TranslationUnit.pm	2009-10-16 20:17:28.128455959 +0200
+@@ -251,6 +251,8 @@
+ 	    $node->{vector}[$key] = $value;
+ 	} elsif($key =~ /^op (\d+)$/) {
+ 	    $node->{operand}[$1] = $value;
++	} elsif ($key eq "val") {
++		push @{$node->{$key}}, ($value) ;
+ 	} else {
+ 	    $node->{$key} = $value;
+ 	}
+';
+
+print $patch;
+}
+
+
+sub help
+{
+	$~ = "USAGE";
+	write;
+
+format USAGE =
+Usage @*  -f filename | --file filename  [options...]
+      $0
+Options:
+         -f        filename    - use filename for input (see also -T/--tu).
+         --file    filename    - same as -f.
+         -c | --core filename  - location of core selects (used to resolve
+                                 module selects that refer in-core functions).
+         -h | -? | --help      - this help message.
+         -D | --dbg | --debug  - enable debugging messages.
+         -d | --defs           - defines to be passed on gcc's command line
+                                 (e.g. --defs="-DUSE_SCTP -DUSE_TCP").
+         -g | --grp  name
+         --group     name      - select group name used if one cannot be
+                                 autodetected (e.g. no default value 
+                                 intializer present in the file).
+         -G | --force-grp name
+         --force-group    name - force using a select group name, even if one
+                                 is autodetected (see also -g).
+         --gcc     gcc_name    - run gcc_name instead of gcc.
+         -t | --txt            - text mode output.
+         --docbook | --xml     - docbook output (xml).
+         -T | --tu             - the input file is in raw gcc translation
+                                 unit format (as produced by
+                                   gcc -fdump-translation-unit -c ). If not
+                                 present it's assumed that the file contains
+                                 C code.
+         -s | --src | --source - name of the source file, needed only if
+                                 the input file is in "raw" translation
+                                 unit format (--tu) and usefull to restrict
+                                 and speed-up the search.
+         --patch               - show patches needed for the
+                                 GCC::TranslationUnit package.
+.
+
+}
+
+
+
+# escape a string for xml use
+# params: string to be escaped
+# return: escaped string
+sub xml_escape{
+	my $s=shift;
+	my %escapes = (
+		'"' => '&quot;',
+		"'" => '&apos;',
+		'&' => '&amp;',
+		'<' => '&lt;',
+		'>' => '&gt;'
+	);
+	
+	$s=~s/(["'&<>])/$escapes{$1}/g;
+	return $s;
+}
+
+
+
+# escape a string according with the output requirements
+# params: string to be escaped
+# return: escaped string
+sub output_esc{
+	return xml_escape(shift) if defined $opt_docbook;
+	return shift;
+}
+
+
+
+# eliminate casts and expressions.
+# (always go on the first operand)
+# params: node (GCC::Node)
+# result: if node is an expression it will walk on operand(0) until first non
+# expression element is found
+sub expr_op0{
+	my $n=shift;
+	
+	while(($n->isa('GCC::Node::Expression') || $n->isa('GCC::Node::Unary')) &&
+			defined $n->operand(0)) {
+		$n=$n->operand(0);
+	}
+	return $n;
+}
+
+
+# constants (from select.h)
+use constant {
+	MAX_SELECT_PARAMS =>	32,
+	MAX_NESTED_CALLS =>		4,
+};
+
+use constant DIVERSION_MASK => 0x00FF;
+use constant {
+	DIVERSION =>			1<<8,
+	SEL_PARAM_EXPECTED =>	1<<9,
+	CONSUME_NEXT_STR =>		1<<10,
+	CONSUME_NEXT_INT =>		1<<11,
+	CONSUME_ALL =>			1<<12,
+	OPTIONAL =>				1<<13,
+	NESTED =>				1<<14,
+	FIXUP_CALL =>			1<<15,
+};
+
+use constant {
+	SEL_PARAM_INT => 0,
+	SEL_PARAM_STR => 1,
+	SEL_PARAM_DIV => 2,
+	SEL_PARAM_PTR => 3,
+};
+
+
+
+# Select rules (pasted from one email from Jan):
+# Roughly the rules are as follows:
+# * The first component of the row tells the select compiler in what state the
+#   row can be considered.
+# * The second component tells the compiler what type of components is expected
+#   for the row to match. SEL_PARAM_STR means that .foo should follow,
+#   SEL_PARAM_INT means that [1234] should follow.
+# * The third component is the string to be matched for string components and
+#   STR_NULL if the next expected component is an integer.
+# * The fourth component is a function name. This is either the function to be
+#   called if this is the last rule all constrains are met, or it is the next
+#   state to transition into if we are not processing the last component of the
+#   select identifier.
+#
+# * The fifth rule are flags that can impose further constrains on how the
+#   given line is to be used. Some of them are:
+#
+# - CONSUME_NEXT_INT - This tells the compiler that there must be at least one 
+#   more component following the current one, but it won't transition into the
+#   next state, instead the current function will "consume" the integer as
+#   parameters.
+#
+# - CONSUME_NEXT_STR - Same as previous, but the next component must be a
+#   string.
+# - SEL_PARAM_EXPECTED - The current row must not be last and there must be
+#   another row to transition to.
+#
+# - OPTIONAL - There may or may not be another component, but in any case the
+#   compiler does not transition into another state (row). This can be used
+#   together with CONSUME_NEXT_{STR,INT} to implement optional parameters, for
+#   example .param could return a string of all parameters, while .param.abc
+#   will only return the value of parameter abc.
+# 
+# - NESTED - When this flag is present in a rule then it means that the
+#   previous function should be called before the current one. The original
+#   idea was that all select identifiers would only resolve to one function
+#   call, however, it turned out to be inconvenient in some cases so we added
+#   this. This is typically used in selects that have URIs as components. In
+#   that case it is desirable to support all subcomponents for uri selects, but
+#   it does not make sense to reimplement them for every single case. In that
+#   case the uri components sets NESTED flags which causes the "parent"
+#   function to be called first. The "parent" function extracts only the URI
+#   which is then passed to the corresponding URI parsing function. The word
+#   NESTED here means "nested function call".
+#
+# - CONSUME_ALL - Any number of select identifier components may follow and
+#   they may be of any types. This flag causes the function on the current row
+#   to be called and it is up to the function to handle the remainder of the
+#   select identifier.
+
+
+
+# generate all select strings starting with a specific "root" function
+# params:
+#  $1 - root
+#  $2 - crt_label/skip (if !="" skip print and use it to search the next valid
+#       sel. param)
+sub gen_selects
+{
+	my $root=shift;
+	my $crt_label=shift;
+	my $skip_next;
+	my @matches;
+	my ($prev, $type, $name, $new_f, $flags);
+	my $m;
+	my @ret=();
+	my @sel;
+	
+	@matches = grep((${$_}[0] eq $root) &&
+					(!defined $crt_label || $crt_label eq "" ||
+					 ${$_}[2] eq "" ||
+					 $crt_label eq ${$_}[2]) , @sel_exports);
+	if ((@matches == 0) && (@core_exports > 0)) {
+		@matches = grep((${$_}[0] eq $root) &&
+					(!defined $crt_label || $crt_label eq "" ||
+					 ${$_}[2] eq "" ||
+					 $crt_label eq ${$_}[2]), @core_exports);
+	}
+	for $m (@matches) {
+		my $s="";
+		($prev, $type, $name, $new_f, $flags)=@$m;
+		if (($flags & (NESTED|CONSUME_NEXT_STR|CONSUME_NEXT_INT)) == NESTED){
+			$skip_next=$name;
+		}
+		if (!($flags & NESTED) ||
+			(($flags & NESTED) && ($type !=SEL_PARAM_INT))){
+			# Note: unnamed NESTED params are not allowed --andrei
+			if ($type==SEL_PARAM_INT){
+				$s.="[integer]";
+			}else{
+				if ($name ne "") {
+					if (!defined $crt_label || $crt_label eq "") {
+						$s.=(($prev eq "0" || $prev eq "")?"@":".") . $name;
+					}
+				}elsif (!($flags & NESTED) &&
+						(!defined $crt_label || $crt_label eq "")){
+					$s.=".<string>";
+				}
+			}
+		}
+		if ( !($flags & NESTED) &&
+			 ($flags & (CONSUME_NEXT_STR|CONSUME_NEXT_INT|CONSUME_ALL)) ){
+			#process params
+			if ($flags & OPTIONAL){
+				$s.="{";
+			}
+			# add param name
+			if ($flags & CONSUME_NEXT_STR){
+				$s.="[\"string\"]";
+			}elsif ($flags & CONSUME_NEXT_INT){
+				$s.="[integer]";
+			}else{
+				$s.=".*"; # CONSUME_ALL
+			}
+			if ($flags & OPTIONAL){
+				$s.="}";
+			}
+		}
+		
+		if (!($flags & SEL_PARAM_EXPECTED)){
+			# if optional terminal  add it to the list along with all the
+			# variants
+			if ($new_f eq "" || $new_f eq "0"){
+				# terminal
+				push @ret, $s;
+			}else{
+				@sel=map("$s$_", gen_selects($new_f, $skip_next));
+				if (@sel > 0) {
+					push(@ret, $s) if (!($s eq "") && !($flags & NESTED));
+					push @ret, @sel;
+				}else{
+					if ($flags & NESTED) {
+						$s.="*";
+					}
+					push @ret, $s;
+				}
+			}
+		}else{
+			# non-terminal
+			if (!($new_f eq "" || $new_f eq "0")){
+				@sel=map("$s$_", gen_selects($new_f, $skip_next));
+				if (@sel > 0) {
+					push @ret, @sel;
+				}elsif ($flags & NESTED){
+					$s.="*";
+					push @ret, $s;
+				}
+			} # else nothing left, but param expected => error
+		}
+	}
+	return @ret;
+}
+
+
+
+# parse the select declaration from a  file into an array.
+# params:
+#  $1 - file name
+#  $2 - ref to result list (e.g. \@res)
+#  $3 - boolean - true if filename is a translation-unit dump.
+# cmd. line global options used:
+#  $src_fname - used only if $3 is true (see --src)
+#  $gcc
+#  $c_defs
+#  $dbg
+#  
+#
+sub process_file
+{
+	my $file=shift;
+	my $sel=shift; # ref to result array
+	my $file_is_tu=shift;
+	
+	my $tmp_file;
+	my $i;
+	my $node;
+	my $tu;
+	my @res; # temporary hold the result here
+	
+	if (! $file_is_tu){
+		# file is not a gcc translation-unit dump
+		# => we have to create one
+		$src_fname=basename($file);
+		$tmp_file = "/tmp/" . mktemp ("dump_translation_unit_XXXXXX");
+		system("$gcc -fdump-translation-unit $c_defs -c $file -o $tmp_file && \
+				mv \"$src_fname\".001t.tu  $tmp_file") == 0 or
+			die "$gcc failed to generate a translation unit dump from $file";
+		$tu=GCC::TranslationUnit::Parser->parsefile($tmp_file);
+		print(STDERR "src name $src_fname\n") if $dbg;
+		unlink($tmp_file, "$tmp_file.o");
+	}else{
+		$tu=GCC::TranslationUnit::Parser->parsefile($file);
+	}
+
+	print(STDERR "Parsing file $file...\n") if $dbg;
+	print(STDERR "Searching...\n") if $dbg;
+
+	$i=0;
+	# iterate on the entire nodes array (returned by gcc), but skipping node 0
+	SEARCH: for $node (@{$tu}[1..$#{$tu}]) {
+		$i++;
+		while($node) {
+			if (
+				@res == 0 &&  # parse it only once
+				$node->isa('GCC::Node::var_decl') &&
+				$node->type->isa('GCC::Node::array_type') # &&
+				#(! defined $src_fname || $src_fname eq "" ||
+				#	$node->source=~"$src_fname")
+				){
+				# found a var decl. that it's an array
+				# check if it's a valid array type
+				next if (!(	$node->type->can('elements') &&
+							defined $node->type->elements &&
+							$node->type->elements->can('name') &&
+							defined $node->type->elements->name &&
+							$node->type->elements->name->can('name') &&
+							defined $node->type->elements->name->name)
+						);
+				my $type_name= $node->type->elements->name->name->identifier;
+				if ($type_name eq $var_type) {
+					if ($node->can('initial') && defined $node->initial) {
+						my %c1=%{$node->initial};
+						$sel_var_name=$node->name->identifier;
+						if (defined $c1{val}){
+							my $c1_el;
+							die $patch_required if (ref($c1{val}) ne "ARRAY");
+							# iterate on array elem., level 1( top {} )
+							# each element is a constructor.
+							for $c1_el (@{$c1{val}}) {
+								# finally we are a the lower {} initializer:
+								#    { prev_f, type, name, new_f, flags }
+								my %c2=%{$c1_el};
+								my @el=@{$c2{val}};
+								my ($prev_f_n, $type_n, $name_n, $new_f_n,
+									$flags_n)=@el;
+								my ($prev_f, $type, $name, $new_f, $flags);
+								my $str;
+								if ($prev_f_n->isa('GCC::Node::integer_cst') &&
+									$new_f_n->isa('GCC::Node::integer_cst') &&
+									$prev_f_n->low==0 && $new_f_n->low==0) {
+									last SEARCH;
+								}
+								$prev_f=
+									($prev_f_n->isa('GCC::Node::integer_cst'))?
+										$prev_f_n->low:
+										expr_op0($prev_f_n)->name->identifier;
+								$type=$type_n->low;
+								$str=${${$name_n}{val}}[0];
+								$name=($str->isa('GCC::Node::integer_cst'))?"":
+										expr_op0($str)->string;
+								$new_f=
+									($new_f_n->isa('GCC::Node::integer_cst'))?
+										$new_f_n->low:
+										expr_op0($new_f_n)->name->identifier;
+								$flags= (defined $flags_n)?$flags_n->low:0;
+								
+								push @res, [$prev_f, $type, $name,
+													$new_f, $flags];
+							}
+						}
+					}
+				}
+			}
+		} continue {
+			if ($node->can('chain')){
+				$node = $node->chain;
+			}else{
+				last;
+			}
+		}
+	}
+	push @$sel, @res;
+}
+
+
+
+# main:
+
+# read command line args
+if ($#ARGV < 0 || ! GetOptions(	'help|h|?' => \$opt_help,
+								'file|f=s' => \$file,
+								'core|c=s' => \$core_file,
+								'txt|t' => \$opt_txt,
+								'docbook|xml' => \$opt_docbook,
+								'tu|T' => \$opt_is_tu,
+								'source|src|s=s' => \$src_fname,
+								'defs|d=s'=>\$c_defs,
+								'group|grp|g=s'=>\$opt_grp_name,
+								'force-group|force-grp|G=s' =>
+													\$opt_force_grp_name,
+								'dbg|debug|D'=>\$dbg,
+								'gcc=s' => \$gcc,
+								'patch' => \$opt_patch) ||
+		defined $opt_help) {
+	do { show_patch(); exit 0; } if (defined $opt_patch);
+	select(STDERR) if ! defined $opt_help;
+	help();
+	exit((defined $opt_help)?0:1);
+}
+
+do { show_patch(); exit 0; } if (defined $opt_patch);
+do { select(STDERR); help(); exit 1 } if (!defined $file);
+
+if (defined $opt_txt){
+	$output_format_header="HEADER";
+	$output_format_footer="FOOTER";
+	$output_format_selline="SELLINE";
+}elsif (defined $opt_docbook){
+	$output_format_header="DOCBOOK_HEADER";
+	$output_format_footer="DOCBOOK_FOOTER";
+	$output_format_selline="DOCBOOK_SELLINE";
+}
+
+process_file($file, \@sel_exports, defined $opt_is_tu);
+process_file($core_file, \@core_exports, 0) if (defined $core_file);
+print(STDERR "Done.\n") if $dbg;
+
+my ($prev, $type, $name, $next, $flags, $desc);
+my $extra_txt;
+
+if (@sel_exports > 0){
+	my $s;
+	$i=0;
+	# dump the configuration in txt mode
+	if (defined $opt_force_grp_name) {
+		$sel_grp_name=output_esc($opt_force_grp_name);
+	}elsif (!defined $sel_grp_name && defined $opt_grp_name) {
+		$sel_grp_name=output_esc($opt_grp_name);
+	}
+	print(STDERR "Generating select list...\n") if $dbg;
+	my @sels = gen_selects "0";
+	$~ = $output_format_header; write;
+	$~ = $output_format_selline ;
+	for $s (@sels){
+		$extra_txt=output_esc("");
+		$desc=output_esc("");
+		$name=output_esc($s);
+		$i++;
+		#$extra_txt.=output_esc("Returns an array.") if ($flags & 1 );
+		# generate txt description
+		write;
+	}
+	$~ = $output_format_footer; write;
+}else{
+	die "no selects found in $file\n";
+}
+
+
+sub valid_grp_name
+{
+	my $name=shift;
+	return defined $name && $name ne "";
+}
+
+
+format HEADER =
+Selects@*
+(valid_grp_name $sel_grp_name) ? " for " . $sel_grp_name : ""
+=======@*
+"=" x length((valid_grp_name $sel_grp_name)?" for " . $sel_grp_name : "")
+
+@||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+"[ this file is autogenerated, do not edit ]"
+
+
+.
+
+format FOOTER =
+.
+
+format SELLINE =
+@>>. @*
+$i,  $name
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $desc
+~~      ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+        $extra_txt
+.
+
+
+format DOCBOOK_HEADER =
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list@*">
+(valid_grp_name $sel_grp_name) ? "." . $sel_grp_name : ""
+	<title>Selects@*</title>
+(valid_grp_name $sel_grp_name) ? " for " . $sel_grp_name : ""
+	<orderedlist>
+
+
+.
+
+format DOCBOOK_FOOTER =
+	</orderedlist>
+</chapter>
+.
+
+format DOCBOOK_SELLINE =
+	<listitem>@*
+					$name
+~~<para>^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< </para>
+        $desc
+~~<para>^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< </para>
+        $extra_txt
+	</listitem>
+
+.

+ 230 - 0
doc/select_list/Makefile

@@ -0,0 +1,230 @@
+
+COREPATH=../..
+
+#include $(COREPATH)/Makefile.defs
+
+CFG2TXT=../scripts/cdefs2doc/dump_selects.pl
+CFG2DOCBOOK=../scripts/cdefs2doc/dump_selects.pl
+
+# extra generators options
+# use select_core.c to resolve possible chained select
+CFG2TXT_EXTRA_OPTS=--core $(COREPATH)/select_core.c
+CFG2DOCBOOK_EXTRA_OPTS=--core $(COREPATH)/select_core.c
+
+# output directory for generated txt files
+txt_output_dir=.
+# output directory for generated docbook xml files
+docbook_output_dir=docbook
+
+# list of files contanining selects defs in the following format:
+# <filename>:<sel_grp_name> 
+# can be easily filled/updated by pasting the output of:
+#  make print-lst |sed  -e 's!^ \?../..\(.*\)!$(COREPATH)\1 \\!'
+files_list=$(COREPATH)/select_core.c:core \
+	$(COREPATH)/modules_s/timer/timer.c:timer \
+	$(COREPATH)/modules_s/nathelper/nathelper.c:nathelper \
+	$(COREPATH)/modules_s/eval/eval.c:eval \
+	$(COREPATH)/modules_s/rr/rr_mod.c:rr \
+	$(COREPATH)/modules_s/textops/textops.c:textops \
+	$(COREPATH)/modules_s/avp/avp.c:avp \
+	$(COREPATH)/modules_s/db_ops/db_ops.c:db_ops \
+	$(COREPATH)/modules/tm/select.c:tm \
+	$(COREPATH)/modules/tls/tls_select.c:tls \
+	$(COREPATH)/modules/xmlrpc/xmlrpc.c:xmlrpc \
+	$(COREPATH)/modules/iptrtpproxy/iptrtpproxy.c:iptrtpproxy
+
+# list of excluded groups
+grp_exclude=pa iptrtpproxy
+# list of file prefixes to exclude (full path needed)
+file_exclude= $(COREPATH)/modules_s/tls/ \
+              $(COREPATH)/modules/iptrtpproxy/
+
+# special per file group overrides
+# format= grp_filename=... ,where filename does not contain the extension
+# e.g.:
+#     grp_f_tcp_options=tcp
+#     grp_f_sctp_options=sctp
+
+# special per group group name overrides
+# e.g.:
+#      grp_g_maxfwd=mf
+
+# override auto-detected group if set to 1 (else the group is used inside the
+# file only if it cannot be aut-odetected)
+ifeq ($(group_override),1)
+override force_grp=force-
+else
+override force_grp=
+endif
+
+# command used for gcc (contains extra includes)
+gcc=gcc -I$(COREPATH)/lib -I/usr/include/libxml2
+
+#filtered files list
+flist=$(subst .h:,.c:, $(filter-out $(addsuffix %,$(file_exclude)),\
+			$(filter-out $(addprefix %:,$(grp_exclude)),$(files_list)) ) )
+
+# throws an error if input is not in the format filename:grp
+check_fname_grp=$(if $(filter-out 2,$(words $(subst :, ,$(1)))),\
+					$(error bad format "$(1)", it should be filename:grp))
+
+# get prereq from file:grp (get_prereq(file:grp) => file)
+get_prereq=$(firstword $(subst :, ,$(1)))
+
+# get grp from file:grp (get_grp(file:grp) => grp)
+get_listed_grp=$(word 2, $(subst :, ,$(1)))
+
+# get base file name from file:grp: get_bname(file:grp) 
+# => basename(file) without extension (e.g. get_bname(foo/bar.c:x) => bar)
+# 
+get_bname=$(basename $(notdir $(call get_prereq,$(1))))
+
+#get grp from file:grp, using the overrides
+get_grp=$(strip $(if $(grp_f_$(call get_bname,$(1))), \
+					$(grp_f_$(call get_bname,$(1))),\
+					$(if $(grp_g_$(call get_listed_grp,$(1))),\
+						$(grp_g_$(call get_listed_grp,$(1))),\
+						$(call get_listed_grp,$(1))) ) )
+
+# get target from file:grp (get_target(file:grp) => select_grp)
+get_target=select_$(call get_grp,$(1))
+
+define  mk_rules
+
+$(call check_fname_grp, $(1))
+
+#$$(info generating select_$$(call get_grp,$(1)).txt: $$(call get_prereq,$(1)))
+
+$(txt_output_dir)/$$(call get_target,$(1)).txt: \
+								$$(call get_prereq,$(1)) Makefile $(CFG2TXT)
+	$(CFG2TXT) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
+		--gcc="$(gcc)" --txt $(CFG2TXT_EXTRA_OPTS) > "$$@" || \
+		(rm -f "$$@"; exit 1)
+
+$(docbook_output_dir)/$$(call get_target,$(1)).xml: \
+								$$(call get_prereq,$(1)) Makefile $(CFG2TXT)
+	$(CFG2DOCBOOK) --file $$< --$(force_grp)grp=$$(call get_grp,$(1)) \
+		--gcc="$(gcc)" --docbook $(CFG2DOCBOOK_EXTRA_OPTS) > "$$@" || \
+		(rm -f "$$@"; exit 1)
+
+
+clean_$$(call get_target,$(1)).txt:
+	rm -f "$(txt_output_dir)/$$(call get_target,$(1)).txt"
+
+clean_$$(call get_target,$(1)).xml:
+	rm -f "$(docbook_output_dir)/$$(call get_target,$(1)).xml"
+
+txt: $(txt_output_dir)/$$(call get_target,$(1)).txt
+
+docbook: $(docbook_output_dir)/$$(call get_target,$(1)).xml
+
+clean_txt: clean_$$(call get_target,$(1)).txt
+
+clean_docbook: clean_$$(call get_target,$(1)).xml
+
+
+endef
+
+
+# help will be the default rule (on-purpose since without having a patched
+# GCC:TranslationUnit module, make all won't work)
+.PHONY: help
+help:
+	@echo "To regenerate $(foreach f,$(flist),$(call get_target,$f).{txt,xml})"
+	@echo "type: $(MAKE) all ."
+	@echo "or to regenerate all the select lists by searching all"
+	@echo " the source files for definitions, type: $(MAKE) autogen ."
+	@echo "NOTE: you need the GCC:TranslationUnit perl module with an "
+	@echo "extra patch applied (see $(CFG2TXT) --patch)."
+
+.PHONY: txt
+txt:
+
+.PHONY: docbook
+docbook:
+
+.PHONY: clean_txt
+clean_txt:
+
+.PHONY: clean_docbook
+clean_docbook:
+
+
+.PHONY: all
+all: txt $(docbook_output_dir)/select_list.xml
+
+.PHONY: clean
+clean: clean_txt clean_docbook
+	@rm -f $(docbook_output_dir)/select_list.xml
+
+.PHONY: proper
+proper:
+	@rm -f $(txt_output_dir)/select_*.txt
+	@rm -f $(docbook_output_dir)/select_*.xml
+
+repo_ver="sip-router"\
+	"git-$(shell  git rev-parse --verify --short=6 HEAD 2>/dev/null)"
+ifeq ($(repo_ver),git-)
+repo_ver="sip-router unknown"
+endif
+
+$(docbook_output_dir)/select_list.xml: \
+		$(foreach f,$(flist),$(docbook_output_dir)/$(call get_target,$f).xml)
+	@echo '<?xml version="1.0" encoding="UTF-8"?>' >$@
+	@echo '<!-- this file is autogenerated, do not edit! -->' >>$@
+	@echo '<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"' >>$@
+	@echo '	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">' >>$@
+	@echo '<book id="select_list"'\
+		'xmlns:xi="http://www.w3.org/2001/XInclude">' >>$@
+	@echo '	<title>Select List</title>' >>$@
+	@echo '	<info><revhistory><revision>' >>$@
+	@echo '		<revnumber>'$(repo_ver)'</revnumber>' >>$@
+	@echo '		<revremark>' >>$@
+	@echo "			Automatically generated by:">>$@
+	@echo "			$(MAKE) -C doc/select_list $(MAKECMDGOALS)" >>$@
+	@echo '		</revremark>' >>$@
+	@echo '	</revision></revhistory></info>' >>$@
+	@echo '		<xi:include href="intro.xml"/>' >>$@
+	@$(foreach f,$(flist),\
+		echo '		<xi:include'\
+			'href="'$(call get_target,$f).xml'"/>' \
+			>>$@ ; )
+	@echo '</book>' >>$@
+
+find_sel_files_cmd= find $(COREPATH) -type f -name "*.[ch]" \
+		-exec grep "select_row_t[	 ][a-zA-Z0-9_][a-zA-Z0-9_]*\[\][	 ]*=" \
+		/dev/null {} \; \
+		| cut -d: -f1
+
+# shell command to generate a file:grp list from a list of files
+# grp will be the modulename if the file is in a module directory or
+# the file name with the extension and _sel, sel_, select_, _select,
+# _declaration or _table # stripped out of it.
+# output: list of  " "filename":"grpname
+gen_file_grp_cmd=\
+sed -e "s!\(.*/modules[^/]*/\([^/][^/]*\)/.*\)! \1:\2!" \
+    -e "s!^\([^ ].*/\([^/.]*\)[^/]*$$\)!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_select[_]*!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)select[_]*!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_declaration[_]*!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_table[_]*!\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)_sel[_]*!:\1:\2!" \
+    -e "s!^\([^ :]*\):\(.*\)sel[_]*!\1:\2!"
+
+# finds all the files containing select defs
+.PHONY: find
+find:
+	@$(find_sel_files_cmd)
+
+# print the list of the autogenerated files
+.PHONY: print-lst
+print-lst:
+	@$(find_sel_files_cmd) | $(gen_file_grp_cmd)
+
+# try to generate the docs from all the sources
+.PHONY: autogen
+autogen:
+	LST=`$(find_sel_files_cmd)| $(gen_file_grp_cmd) | xargs echo` && \
+	[ -n "$$LST" ] && $(MAKE) all files_list="$$LST"
+
+$(foreach f,$(flist),$(eval $(call mk_rules,$(f))))

+ 5 - 0
doc/select_list/docbook/Makefile

@@ -0,0 +1,5 @@
+
+docs = select_list.xml
+docbook_dir = ../../../docbook
+
+include $(docbook_dir)/Makefile

+ 61 - 0
doc/select_list/docbook/intro.xml

@@ -0,0 +1,61 @@
+<?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">
+<chapter id="Select_Intro">
+	<title>Introduction and Notations</title>
+	<section id="Intro">
+	<title>Introduction</title>
+	<para>Selects are read-only functions that can be used in the script and
+	that always return a string value. In the script a select always starts
+	with a &apos;<emphasis>@</emphasis>&apos;. In an expression context a
+	select always evaluates to either a string or undef.
+	</para>
+	<para>For more informations see
+		<ulink url=' http://sip-router.org/wiki/cookbooks/selects/devel'>
+			http://sip-router.org/wiki/cookbooks/selects/devel</ulink>.
+	</para>
+	<para>This document lists all the selects implemented by each module.
+	</para>
+	</section>
+	<section id="Notations">
+	<title>Notations</title>
+	<para>The following notations are used:
+	<orderedlist>
+	<listitem>@  - all selects always start with '@'. </listitem>
+	<listitem>&quot;string&quot; - string type.</listitem>
+	<listitem>integer - integer type.</listitem>
+	<listitem>[] - Parameter markers. Can be either [integer] or
+		[&quot;string&quot;].
+		Note that instead of [&quot;string&quot;] one could write .string,
+		e.g.:
+		@foo.bar[&quot;string&quot;] is equivalent to @foo.bar.string.
+	</listitem>
+	<listitem>{} - denotes an optional parameter.
+		E.g.: @ruri.params{[&quot;string&quot;]} means you could use
+		@ruri.params by itself or you could specify an extra parameter:
+		@ruri.params[&quot;trasnport&quot;] or @ruri.params.transport.
+	</listitem>
+	<listitem>&lt;string&gt; - means the next member is not fixed and can
+		take any string value (it is a string parameter).
+		It is equivalent with [&quot;string&quot;], e.g.:
+		@msg.header.&lt;string&gt; is the same as
+		@msg.header[&quot;string&quot;].
+		It is used only to expose an internal implementation detail
+		(SEL_PARAM_* vs. CONSUME_NEXT_*), but from the script writer point
+		of view it is the same thing.
+	</listitem>
+	<listitem>.* - means the select can be followed by a variable number of
+		string parameters.
+		E.g.: @cfg_get.*  means that @cfg_get.core.version is a valid usage.
+	</listitem>
+	<listitem>* (without a &apos;.&apos; in front) - it means the last member
+		might be a class that might expand further (but the
+		&quot;expansion&quot; is not defined in the same module).
+		E.g. @foo.nameaddr* means that nameaddr is most likely
+		a class that expands further
+		(for example into @foo.nameaddr.uri a.s.o).
+	</listitem>
+	</orderedlist>
+	</para>
+	</section>
+</chapter>

+ 29 - 0
doc/select_list/docbook/select_avp.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.avp">
+	<title>Selects for avp</title>
+	<orderedlist>
+
+
+	<listitem>@avp.&lt;string&gt;[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@avp.&lt;string&gt;[&quot;string&quot;].nameaddr*
+	</listitem>
+
+	<listitem>@attr.&lt;string&gt;[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@attr.&lt;string&gt;[&quot;string&quot;].nameaddr*
+	</listitem>
+
+	<listitem>@attribute.&lt;string&gt;[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@attribute.&lt;string&gt;[&quot;string&quot;].nameaddr*
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 1478 - 0
doc/select_list/docbook/select_core.xml

@@ -0,0 +1,1478 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.core">
+	<title>Selects for core</title>
+	<orderedlist>
+
+
+	<listitem>@ruri
+	</listitem>
+
+	<listitem>@ruri.type
+	</listitem>
+
+	<listitem>@ruri.user
+	</listitem>
+
+	<listitem>@ruri.rn_user
+	</listitem>
+
+	<listitem>@ruri.pwd
+	</listitem>
+
+	<listitem>@ruri.host
+	</listitem>
+
+	<listitem>@ruri.port
+	</listitem>
+
+	<listitem>@ruri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@ruri.hostport
+	</listitem>
+
+	<listitem>@ruri.transport
+	</listitem>
+
+	<listitem>@request_uri
+	</listitem>
+
+	<listitem>@request_uri.type
+	</listitem>
+
+	<listitem>@request_uri.user
+	</listitem>
+
+	<listitem>@request_uri.rn_user
+	</listitem>
+
+	<listitem>@request_uri.pwd
+	</listitem>
+
+	<listitem>@request_uri.host
+	</listitem>
+
+	<listitem>@request_uri.port
+	</listitem>
+
+	<listitem>@request_uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@request_uri.hostport
+	</listitem>
+
+	<listitem>@request_uri.transport
+	</listitem>
+
+	<listitem>@dst_uri
+	</listitem>
+
+	<listitem>@dst_uri.type
+	</listitem>
+
+	<listitem>@dst_uri.user
+	</listitem>
+
+	<listitem>@dst_uri.rn_user
+	</listitem>
+
+	<listitem>@dst_uri.pwd
+	</listitem>
+
+	<listitem>@dst_uri.host
+	</listitem>
+
+	<listitem>@dst_uri.port
+	</listitem>
+
+	<listitem>@dst_uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@dst_uri.hostport
+	</listitem>
+
+	<listitem>@dst_uri.transport
+	</listitem>
+
+	<listitem>@next_hop
+	</listitem>
+
+	<listitem>@next_hop.src_ip
+	</listitem>
+
+	<listitem>@next_hop.type
+	</listitem>
+
+	<listitem>@next_hop.user
+	</listitem>
+
+	<listitem>@next_hop.rn_user
+	</listitem>
+
+	<listitem>@next_hop.pwd
+	</listitem>
+
+	<listitem>@next_hop.host
+	</listitem>
+
+	<listitem>@next_hop.port
+	</listitem>
+
+	<listitem>@next_hop.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@next_hop.hostport
+	</listitem>
+
+	<listitem>@next_hop.transport
+	</listitem>
+
+	<listitem>@from
+	</listitem>
+
+	<listitem>@from.uri
+	</listitem>
+
+	<listitem>@from.uri.type
+	</listitem>
+
+	<listitem>@from.uri.user
+	</listitem>
+
+	<listitem>@from.uri.rn_user
+	</listitem>
+
+	<listitem>@from.uri.pwd
+	</listitem>
+
+	<listitem>@from.uri.host
+	</listitem>
+
+	<listitem>@from.uri.port
+	</listitem>
+
+	<listitem>@from.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@from.uri.hostport
+	</listitem>
+
+	<listitem>@from.uri.transport
+	</listitem>
+
+	<listitem>@from.tag
+	</listitem>
+
+	<listitem>@from.name
+	</listitem>
+
+	<listitem>@from.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@f
+	</listitem>
+
+	<listitem>@f.uri
+	</listitem>
+
+	<listitem>@f.uri.type
+	</listitem>
+
+	<listitem>@f.uri.user
+	</listitem>
+
+	<listitem>@f.uri.rn_user
+	</listitem>
+
+	<listitem>@f.uri.pwd
+	</listitem>
+
+	<listitem>@f.uri.host
+	</listitem>
+
+	<listitem>@f.uri.port
+	</listitem>
+
+	<listitem>@f.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@f.uri.hostport
+	</listitem>
+
+	<listitem>@f.uri.transport
+	</listitem>
+
+	<listitem>@f.tag
+	</listitem>
+
+	<listitem>@f.name
+	</listitem>
+
+	<listitem>@f.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@to
+	</listitem>
+
+	<listitem>@to.uri
+	</listitem>
+
+	<listitem>@to.uri.type
+	</listitem>
+
+	<listitem>@to.uri.user
+	</listitem>
+
+	<listitem>@to.uri.rn_user
+	</listitem>
+
+	<listitem>@to.uri.pwd
+	</listitem>
+
+	<listitem>@to.uri.host
+	</listitem>
+
+	<listitem>@to.uri.port
+	</listitem>
+
+	<listitem>@to.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@to.uri.hostport
+	</listitem>
+
+	<listitem>@to.uri.transport
+	</listitem>
+
+	<listitem>@to.tag
+	</listitem>
+
+	<listitem>@to.name
+	</listitem>
+
+	<listitem>@to.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@t
+	</listitem>
+
+	<listitem>@t.uri
+	</listitem>
+
+	<listitem>@t.uri.type
+	</listitem>
+
+	<listitem>@t.uri.user
+	</listitem>
+
+	<listitem>@t.uri.rn_user
+	</listitem>
+
+	<listitem>@t.uri.pwd
+	</listitem>
+
+	<listitem>@t.uri.host
+	</listitem>
+
+	<listitem>@t.uri.port
+	</listitem>
+
+	<listitem>@t.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@t.uri.hostport
+	</listitem>
+
+	<listitem>@t.uri.transport
+	</listitem>
+
+	<listitem>@t.tag
+	</listitem>
+
+	<listitem>@t.name
+	</listitem>
+
+	<listitem>@t.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@refer_to
+	</listitem>
+
+	<listitem>@refer_to.uri
+	</listitem>
+
+	<listitem>@refer_to.uri.type
+	</listitem>
+
+	<listitem>@refer_to.uri.user
+	</listitem>
+
+	<listitem>@refer_to.uri.rn_user
+	</listitem>
+
+	<listitem>@refer_to.uri.pwd
+	</listitem>
+
+	<listitem>@refer_to.uri.host
+	</listitem>
+
+	<listitem>@refer_to.uri.port
+	</listitem>
+
+	<listitem>@refer_to.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@refer_to.uri.hostport
+	</listitem>
+
+	<listitem>@refer_to.uri.transport
+	</listitem>
+
+	<listitem>@refer_to.tag
+	</listitem>
+
+	<listitem>@refer_to.name
+	</listitem>
+
+	<listitem>@refer_to.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@remote_party_id
+	</listitem>
+
+	<listitem>@remote_party_id.uri
+	</listitem>
+
+	<listitem>@remote_party_id.uri.type
+	</listitem>
+
+	<listitem>@remote_party_id.uri.user
+	</listitem>
+
+	<listitem>@remote_party_id.uri.rn_user
+	</listitem>
+
+	<listitem>@remote_party_id.uri.pwd
+	</listitem>
+
+	<listitem>@remote_party_id.uri.host
+	</listitem>
+
+	<listitem>@remote_party_id.uri.port
+	</listitem>
+
+	<listitem>@remote_party_id.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@remote_party_id.uri.hostport
+	</listitem>
+
+	<listitem>@remote_party_id.uri.transport
+	</listitem>
+
+	<listitem>@remote_party_id.tag
+	</listitem>
+
+	<listitem>@remote_party_id.name
+	</listitem>
+
+	<listitem>@remote_party_id.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@rpid
+	</listitem>
+
+	<listitem>@rpid.uri
+	</listitem>
+
+	<listitem>@rpid.uri.type
+	</listitem>
+
+	<listitem>@rpid.uri.user
+	</listitem>
+
+	<listitem>@rpid.uri.rn_user
+	</listitem>
+
+	<listitem>@rpid.uri.pwd
+	</listitem>
+
+	<listitem>@rpid.uri.host
+	</listitem>
+
+	<listitem>@rpid.uri.port
+	</listitem>
+
+	<listitem>@rpid.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@rpid.uri.hostport
+	</listitem>
+
+	<listitem>@rpid.uri.transport
+	</listitem>
+
+	<listitem>@rpid.tag
+	</listitem>
+
+	<listitem>@rpid.name
+	</listitem>
+
+	<listitem>@rpid.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@contact
+	</listitem>
+
+	<listitem>@contact.uri
+	</listitem>
+
+	<listitem>@contact.uri.type
+	</listitem>
+
+	<listitem>@contact.uri.user
+	</listitem>
+
+	<listitem>@contact.uri.rn_user
+	</listitem>
+
+	<listitem>@contact.uri.pwd
+	</listitem>
+
+	<listitem>@contact.uri.host
+	</listitem>
+
+	<listitem>@contact.uri.port
+	</listitem>
+
+	<listitem>@contact.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@contact.uri.hostport
+	</listitem>
+
+	<listitem>@contact.uri.transport
+	</listitem>
+
+	<listitem>@contact.name
+	</listitem>
+
+	<listitem>@contact.q
+	</listitem>
+
+	<listitem>@contact.expires
+	</listitem>
+
+	<listitem>@contact.methods
+	</listitem>
+
+	<listitem>@contact.received
+	</listitem>
+
+	<listitem>@contact.instance
+	</listitem>
+
+	<listitem>@contact.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@m
+	</listitem>
+
+	<listitem>@m.uri
+	</listitem>
+
+	<listitem>@m.uri.type
+	</listitem>
+
+	<listitem>@m.uri.user
+	</listitem>
+
+	<listitem>@m.uri.rn_user
+	</listitem>
+
+	<listitem>@m.uri.pwd
+	</listitem>
+
+	<listitem>@m.uri.host
+	</listitem>
+
+	<listitem>@m.uri.port
+	</listitem>
+
+	<listitem>@m.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@m.uri.hostport
+	</listitem>
+
+	<listitem>@m.uri.transport
+	</listitem>
+
+	<listitem>@m.name
+	</listitem>
+
+	<listitem>@m.q
+	</listitem>
+
+	<listitem>@m.expires
+	</listitem>
+
+	<listitem>@m.methods
+	</listitem>
+
+	<listitem>@m.received
+	</listitem>
+
+	<listitem>@m.instance
+	</listitem>
+
+	<listitem>@m.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@via{[integer]}
+	</listitem>
+
+	<listitem>@via{[integer]}.name
+	</listitem>
+
+	<listitem>@via{[integer]}.version
+	</listitem>
+
+	<listitem>@via{[integer]}.transport
+	</listitem>
+
+	<listitem>@via{[integer]}.host
+	</listitem>
+
+	<listitem>@via{[integer]}.port
+	</listitem>
+
+	<listitem>@via{[integer]}.comment
+	</listitem>
+
+	<listitem>@via{[integer]}.branch
+	</listitem>
+
+	<listitem>@via{[integer]}.received
+	</listitem>
+
+	<listitem>@via{[integer]}.rport
+	</listitem>
+
+	<listitem>@via{[integer]}.i
+	</listitem>
+
+	<listitem>@via{[integer]}.alias
+	</listitem>
+
+	<listitem>@via{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@v{[integer]}
+	</listitem>
+
+	<listitem>@v{[integer]}.name
+	</listitem>
+
+	<listitem>@v{[integer]}.version
+	</listitem>
+
+	<listitem>@v{[integer]}.transport
+	</listitem>
+
+	<listitem>@v{[integer]}.host
+	</listitem>
+
+	<listitem>@v{[integer]}.port
+	</listitem>
+
+	<listitem>@v{[integer]}.comment
+	</listitem>
+
+	<listitem>@v{[integer]}.branch
+	</listitem>
+
+	<listitem>@v{[integer]}.received
+	</listitem>
+
+	<listitem>@v{[integer]}.rport
+	</listitem>
+
+	<listitem>@v{[integer]}.i
+	</listitem>
+
+	<listitem>@v{[integer]}.alias
+	</listitem>
+
+	<listitem>@v{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@event
+	</listitem>
+
+	<listitem>@record_route
+	</listitem>
+
+	<listitem>@record_route.uri
+	</listitem>
+
+	<listitem>@record_route.uri.type
+	</listitem>
+
+	<listitem>@record_route.uri.user
+	</listitem>
+
+	<listitem>@record_route.uri.rn_user
+	</listitem>
+
+	<listitem>@record_route.uri.pwd
+	</listitem>
+
+	<listitem>@record_route.uri.host
+	</listitem>
+
+	<listitem>@record_route.uri.port
+	</listitem>
+
+	<listitem>@record_route.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@record_route.uri.hostport
+	</listitem>
+
+	<listitem>@record_route.uri.transport
+	</listitem>
+
+	<listitem>@record_route.name
+	</listitem>
+
+	<listitem>@record_route.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@rr
+	</listitem>
+
+	<listitem>@rr.uri
+	</listitem>
+
+	<listitem>@rr.uri.type
+	</listitem>
+
+	<listitem>@rr.uri.user
+	</listitem>
+
+	<listitem>@rr.uri.rn_user
+	</listitem>
+
+	<listitem>@rr.uri.pwd
+	</listitem>
+
+	<listitem>@rr.uri.host
+	</listitem>
+
+	<listitem>@rr.uri.port
+	</listitem>
+
+	<listitem>@rr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@rr.uri.hostport
+	</listitem>
+
+	<listitem>@rr.uri.transport
+	</listitem>
+
+	<listitem>@rr.name
+	</listitem>
+
+	<listitem>@rr.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@cseq
+	</listitem>
+
+	<listitem>@cseq.num
+	</listitem>
+
+	<listitem>@cseq.method
+	</listitem>
+
+	<listitem>@msg
+	</listitem>
+
+	<listitem>@msg.first_line
+	</listitem>
+
+	<listitem>@msg.flags
+	</listitem>
+
+	<listitem>@msg.len
+	</listitem>
+
+	<listitem>@msg.id
+	</listitem>
+
+	<listitem>@msg.id.hex
+	</listitem>
+
+	<listitem>@msg.type
+	</listitem>
+
+	<listitem>@msg.header
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.name
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.type
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.user
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.host
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.port
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@msg.header.&lt;string&gt;{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@msg.h
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.name
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.type
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.user
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.host
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.port
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@msg.h.&lt;string&gt;{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@msg.body
+	</listitem>
+
+	<listitem>@msg.body.sdp
+	</listitem>
+
+	<listitem>@msg.body.sdp.line[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@msg.content
+	</listitem>
+
+	<listitem>@msg.content.sdp
+	</listitem>
+
+	<listitem>@msg.content.sdp.line[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@msg.request
+	</listitem>
+
+	<listitem>@msg.request.method
+	</listitem>
+
+	<listitem>@msg.request.uri
+	</listitem>
+
+	<listitem>@msg.request.uri.type
+	</listitem>
+
+	<listitem>@msg.request.uri.user
+	</listitem>
+
+	<listitem>@msg.request.uri.rn_user
+	</listitem>
+
+	<listitem>@msg.request.uri.pwd
+	</listitem>
+
+	<listitem>@msg.request.uri.host
+	</listitem>
+
+	<listitem>@msg.request.uri.port
+	</listitem>
+
+	<listitem>@msg.request.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@msg.request.uri.hostport
+	</listitem>
+
+	<listitem>@msg.request.uri.transport
+	</listitem>
+
+	<listitem>@msg.request.version
+	</listitem>
+
+	<listitem>@msg.req
+	</listitem>
+
+	<listitem>@msg.req.method
+	</listitem>
+
+	<listitem>@msg.req.uri
+	</listitem>
+
+	<listitem>@msg.req.uri.type
+	</listitem>
+
+	<listitem>@msg.req.uri.user
+	</listitem>
+
+	<listitem>@msg.req.uri.rn_user
+	</listitem>
+
+	<listitem>@msg.req.uri.pwd
+	</listitem>
+
+	<listitem>@msg.req.uri.host
+	</listitem>
+
+	<listitem>@msg.req.uri.port
+	</listitem>
+
+	<listitem>@msg.req.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@msg.req.uri.hostport
+	</listitem>
+
+	<listitem>@msg.req.uri.transport
+	</listitem>
+
+	<listitem>@msg.req.version
+	</listitem>
+
+	<listitem>@msg.response
+	</listitem>
+
+	<listitem>@msg.response.version
+	</listitem>
+
+	<listitem>@msg.response.status
+	</listitem>
+
+	<listitem>@msg.response.code
+	</listitem>
+
+	<listitem>@msg.response.reason
+	</listitem>
+
+	<listitem>@msg.res
+	</listitem>
+
+	<listitem>@msg.res.version
+	</listitem>
+
+	<listitem>@msg.res.status
+	</listitem>
+
+	<listitem>@msg.res.code
+	</listitem>
+
+	<listitem>@msg.res.reason
+	</listitem>
+
+	<listitem>@message
+	</listitem>
+
+	<listitem>@message.first_line
+	</listitem>
+
+	<listitem>@message.flags
+	</listitem>
+
+	<listitem>@message.len
+	</listitem>
+
+	<listitem>@message.id
+	</listitem>
+
+	<listitem>@message.id.hex
+	</listitem>
+
+	<listitem>@message.type
+	</listitem>
+
+	<listitem>@message.header
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.name
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.type
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.user
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.host
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.port
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@message.header.&lt;string&gt;{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@message.h
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.name
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.type
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.user
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.host
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.port
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@message.h.&lt;string&gt;{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@message.body
+	</listitem>
+
+	<listitem>@message.body.sdp
+	</listitem>
+
+	<listitem>@message.body.sdp.line[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@message.content
+	</listitem>
+
+	<listitem>@message.content.sdp
+	</listitem>
+
+	<listitem>@message.content.sdp.line[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@message.request
+	</listitem>
+
+	<listitem>@message.request.method
+	</listitem>
+
+	<listitem>@message.request.uri
+	</listitem>
+
+	<listitem>@message.request.uri.type
+	</listitem>
+
+	<listitem>@message.request.uri.user
+	</listitem>
+
+	<listitem>@message.request.uri.rn_user
+	</listitem>
+
+	<listitem>@message.request.uri.pwd
+	</listitem>
+
+	<listitem>@message.request.uri.host
+	</listitem>
+
+	<listitem>@message.request.uri.port
+	</listitem>
+
+	<listitem>@message.request.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@message.request.uri.hostport
+	</listitem>
+
+	<listitem>@message.request.uri.transport
+	</listitem>
+
+	<listitem>@message.request.version
+	</listitem>
+
+	<listitem>@message.req
+	</listitem>
+
+	<listitem>@message.req.method
+	</listitem>
+
+	<listitem>@message.req.uri
+	</listitem>
+
+	<listitem>@message.req.uri.type
+	</listitem>
+
+	<listitem>@message.req.uri.user
+	</listitem>
+
+	<listitem>@message.req.uri.rn_user
+	</listitem>
+
+	<listitem>@message.req.uri.pwd
+	</listitem>
+
+	<listitem>@message.req.uri.host
+	</listitem>
+
+	<listitem>@message.req.uri.port
+	</listitem>
+
+	<listitem>@message.req.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@message.req.uri.hostport
+	</listitem>
+
+	<listitem>@message.req.uri.transport
+	</listitem>
+
+	<listitem>@message.req.version
+	</listitem>
+
+	<listitem>@message.response
+	</listitem>
+
+	<listitem>@message.response.version
+	</listitem>
+
+	<listitem>@message.response.status
+	</listitem>
+
+	<listitem>@message.response.code
+	</listitem>
+
+	<listitem>@message.response.reason
+	</listitem>
+
+	<listitem>@message.res
+	</listitem>
+
+	<listitem>@message.res.version
+	</listitem>
+
+	<listitem>@message.res.status
+	</listitem>
+
+	<listitem>@message.res.code
+	</listitem>
+
+	<listitem>@message.res.reason
+	</listitem>
+
+	<listitem>@method
+	</listitem>
+
+	<listitem>@version
+	</listitem>
+
+	<listitem>@status
+	</listitem>
+
+	<listitem>@code
+	</listitem>
+
+	<listitem>@reason
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].username
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].username.user
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].username.domain
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].realm
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].nonce
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].uri
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].cnonce
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].nc
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].response
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].opaque
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].algorithm
+	</listitem>
+
+	<listitem>@proxy_authorization[&quot;string&quot;].qop
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].username
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].username.user
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].username.domain
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].realm
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].nonce
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].uri
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].cnonce
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].nc
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].response
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].opaque
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].algorithm
+	</listitem>
+
+	<listitem>@authorization[&quot;string&quot;].qop
+	</listitem>
+
+	<listitem>@src.ip
+	</listitem>
+
+	<listitem>@src.port
+	</listitem>
+
+	<listitem>@src.ip_port
+	</listitem>
+
+	<listitem>@dst.ip
+	</listitem>
+
+	<listitem>@dst.port
+	</listitem>
+
+	<listitem>@dst.ip_port
+	</listitem>
+
+	<listitem>@received.proto
+	</listitem>
+
+	<listitem>@received.ip
+	</listitem>
+
+	<listitem>@received.port
+	</listitem>
+
+	<listitem>@received.ip_port
+	</listitem>
+
+	<listitem>@received.proto_ip_port
+	</listitem>
+
+	<listitem>@call_id
+	</listitem>
+
+	<listitem>@expires
+	</listitem>
+
+	<listitem>@max_forwards
+	</listitem>
+
+	<listitem>@content_type
+	</listitem>
+
+	<listitem>@content_length
+	</listitem>
+
+	<listitem>@subject
+	</listitem>
+
+	<listitem>@organization
+	</listitem>
+
+	<listitem>@priority
+	</listitem>
+
+	<listitem>@session_expires
+	</listitem>
+
+	<listitem>@min_se
+	</listitem>
+
+	<listitem>@user_agent
+	</listitem>
+
+	<listitem>@sip_if_match
+	</listitem>
+
+	<listitem>@sys.pid
+	</listitem>
+
+	<listitem>@sys.unique
+	</listitem>
+
+	<listitem>@sys.now
+	</listitem>
+
+	<listitem>@sys.now.local{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@sys.now.gmt{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@sys.now.utc{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@sys.server_id
+	</listitem>
+
+	<listitem>@branch.count
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.type
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.user
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.rn_user
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.pwd
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.host
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.port
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.hostport
+	</listitem>
+
+	<listitem>@branch.uri{[integer]}.transport
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.type
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.user
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.rn_user
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.pwd
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.host
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.port
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.hostport
+	</listitem>
+
+	<listitem>@branch.dst_uri{[integer]}.transport
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.name
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.type
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.user
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.rn_user
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.pwd
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.host
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.port
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.hostport
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.uri.transport
+	</listitem>
+
+	<listitem>@branch.uriq{[integer]}.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@branch.q{[integer]}
+	</listitem>
+
+	<listitem>@date
+	</listitem>
+
+	<listitem>@identity
+	</listitem>
+
+	<listitem>@identity_info
+	</listitem>
+
+	<listitem>@cfg_get.*
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 359 - 0
doc/select_list/docbook/select_db_ops.xml

@@ -0,0 +1,359 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.db_ops">
+	<title>Selects for db_ops</title>
+	<orderedlist>
+
+
+	<listitem>@db.query[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].is_empty
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].count
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.name
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.type
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.rn_user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.pwd
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.host
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.port
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.hostport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].uri.transport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer]
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.name
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.type
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.rn_user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.pwd
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.host
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.port
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.hostport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].field[integer].uri.transport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer]
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer]
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.name
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.type
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.rn_user
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.pwd
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.host
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.port
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.hostport
+	</listitem>
+
+	<listitem>@db.query[&quot;string&quot;].row[integer].field[integer].uri.transport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.name
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.type
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.rn_user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.pwd
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.host
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.port
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.hostport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].uri.transport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].row_no
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].count
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].is_empty
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer]
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.name
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.type
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.rn_user
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.pwd
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.host
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.port
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.hostport
+	</listitem>
+
+	<listitem>@db.fetch[&quot;string&quot;].field[integer].uri.transport
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 155 - 0
doc/select_list/docbook/select_eval.xml

@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.eval">
+	<title>Selects for eval</title>
+	<orderedlist>
+
+
+	<listitem>@eval.pop[integer]
+	</listitem>
+
+	<listitem>@eval.get[integer]
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.name
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@eval.get[integer].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.type
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.user
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.rn_user
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.pwd
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.host
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.port
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.hostport
+	</listitem>
+
+	<listitem>@eval.get[integer].uri.transport
+	</listitem>
+
+	<listitem>@eval.get[integer].params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.name
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.type
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.user
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.rn_user
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.pwd
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.host
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.port
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.hostport
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].uri.transport
+	</listitem>
+
+	<listitem>@eval.reg[&quot;string&quot;].params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@eval.uuid
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 25 - 0
doc/select_list/docbook/select_list.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<book id="select_list" xmlns:xi="http://www.w3.org/2001/XInclude">
+	<title>Select List</title>
+	<info><revhistory><revision>
+		<revnumber>sip-router git-725c50</revnumber>
+		<revremark>
+			Automatically generated by:
+			make -C doc/select_list all
+		</revremark>
+	</revision></revhistory></info>
+		<xi:include href="select_core.xml"/>
+		<xi:include href="select_timer.xml"/>
+		<xi:include href="select_nathelper.xml"/>
+		<xi:include href="select_eval.xml"/>
+		<xi:include href="select_rr.xml"/>
+		<xi:include href="select_textops.xml"/>
+		<xi:include href="select_avp.xml"/>
+		<xi:include href="select_db_ops.xml"/>
+		<xi:include href="select_tm.xml"/>
+		<xi:include href="select_tls.xml"/>
+		<xi:include href="select_xmlrpc.xml"/>
+</book>

+ 50 - 0
doc/select_list/docbook/select_nathelper.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.nathelper">
+	<title>Selects for nathelper</title>
+	<orderedlist>
+
+
+	<listitem>@nathelper.rewrite_contact[integer]
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.name
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.type
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.user
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.host
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.port
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@nathelper.rewrite_contact[integer].nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 14 - 0
doc/select_list/docbook/select_rr.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.rr">
+	<title>Selects for rr</title>
+	<orderedlist>
+
+
+	<listitem>@rr.dialog_cookie
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 107 - 0
doc/select_list/docbook/select_textops.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.textops">
+	<title>Selects for textops</title>
+	<orderedlist>
+
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.param[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.p[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.type
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.user
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.rn_user
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.pwd
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.host
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.port
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.hostport
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.uri.transport
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.name
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.name
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.type
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.user
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.rn_user
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.pwd
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.host
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.port
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.hostport
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.uri.transport
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.nameaddr.params{[&quot;string&quot;]}
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@hf_value.&lt;string&gt;{[integer]}.&lt;string&gt;
+	</listitem>
+
+	<listitem>@hf_value_exists[&quot;string&quot;].&lt;string&gt;
+	</listitem>
+
+	<listitem>@hf_value2.&lt;string&gt;{[integer]}
+	</listitem>
+
+	<listitem>@hf_value2.&lt;string&gt;{[integer]}.params[&quot;string&quot;]
+	</listitem>
+
+	<listitem>@hf_value2.&lt;string&gt;{[integer]}.&lt;string&gt;
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 17 - 0
doc/select_list/docbook/select_timer.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.timer">
+	<title>Selects for timer</title>
+	<orderedlist>
+
+
+	<listitem>@timer.timer[&quot;string&quot;].enabled
+	</listitem>
+
+	<listitem>@timer.executed
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 1235 - 0
doc/select_list/docbook/select_tls.xml

@@ -0,0 +1,1235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.tls">
+	<title>Selects for tls</title>
+	<orderedlist>
+
+
+	<listitem>@tls
+	</listitem>
+
+	<listitem>@tls.version
+	</listitem>
+
+	<listitem>@tls.desc
+	</listitem>
+
+	<listitem>@tls.description
+	</listitem>
+
+	<listitem>@tls.cipher
+	</listitem>
+
+	<listitem>@tls.cipher.bits
+	</listitem>
+
+	<listitem>@tls.serverName
+	</listitem>
+
+	<listitem>@tls.server_name
+	</listitem>
+
+	<listitem>@tls.peer
+	</listitem>
+
+	<listitem>@tls.peer.subject
+	</listitem>
+
+	<listitem>@tls.peer.subject.cn
+	</listitem>
+
+	<listitem>@tls.peer.subject.commonName
+	</listitem>
+
+	<listitem>@tls.peer.subject.common_name
+	</listitem>
+
+	<listitem>@tls.peer.subject.name
+	</listitem>
+
+	<listitem>@tls.peer.subject.l
+	</listitem>
+
+	<listitem>@tls.peer.subject.localityName
+	</listitem>
+
+	<listitem>@tls.peer.subject.locality_name
+	</listitem>
+
+	<listitem>@tls.peer.subject.locality
+	</listitem>
+
+	<listitem>@tls.peer.subject.c
+	</listitem>
+
+	<listitem>@tls.peer.subject.countryName
+	</listitem>
+
+	<listitem>@tls.peer.subject.country_name
+	</listitem>
+
+	<listitem>@tls.peer.subject.country
+	</listitem>
+
+	<listitem>@tls.peer.subject.st
+	</listitem>
+
+	<listitem>@tls.peer.subject.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.peer.subject.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.peer.subject.state
+	</listitem>
+
+	<listitem>@tls.peer.subject.o
+	</listitem>
+
+	<listitem>@tls.peer.subject.organizationName
+	</listitem>
+
+	<listitem>@tls.peer.subject.organization_name
+	</listitem>
+
+	<listitem>@tls.peer.subject.organization
+	</listitem>
+
+	<listitem>@tls.peer.subject.ou
+	</listitem>
+
+	<listitem>@tls.peer.subject.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.peer.subject.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.peer.subject.unit
+	</listitem>
+
+	<listitem>@tls.peer.subj
+	</listitem>
+
+	<listitem>@tls.peer.subj.cn
+	</listitem>
+
+	<listitem>@tls.peer.subj.commonName
+	</listitem>
+
+	<listitem>@tls.peer.subj.common_name
+	</listitem>
+
+	<listitem>@tls.peer.subj.name
+	</listitem>
+
+	<listitem>@tls.peer.subj.l
+	</listitem>
+
+	<listitem>@tls.peer.subj.localityName
+	</listitem>
+
+	<listitem>@tls.peer.subj.locality_name
+	</listitem>
+
+	<listitem>@tls.peer.subj.locality
+	</listitem>
+
+	<listitem>@tls.peer.subj.c
+	</listitem>
+
+	<listitem>@tls.peer.subj.countryName
+	</listitem>
+
+	<listitem>@tls.peer.subj.country_name
+	</listitem>
+
+	<listitem>@tls.peer.subj.country
+	</listitem>
+
+	<listitem>@tls.peer.subj.st
+	</listitem>
+
+	<listitem>@tls.peer.subj.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.peer.subj.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.peer.subj.state
+	</listitem>
+
+	<listitem>@tls.peer.subj.o
+	</listitem>
+
+	<listitem>@tls.peer.subj.organizationName
+	</listitem>
+
+	<listitem>@tls.peer.subj.organization_name
+	</listitem>
+
+	<listitem>@tls.peer.subj.organization
+	</listitem>
+
+	<listitem>@tls.peer.subj.ou
+	</listitem>
+
+	<listitem>@tls.peer.subj.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.peer.subj.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.peer.subj.unit
+	</listitem>
+
+	<listitem>@tls.peer.issuer
+	</listitem>
+
+	<listitem>@tls.peer.issuer.cn
+	</listitem>
+
+	<listitem>@tls.peer.issuer.commonName
+	</listitem>
+
+	<listitem>@tls.peer.issuer.common_name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.l
+	</listitem>
+
+	<listitem>@tls.peer.issuer.localityName
+	</listitem>
+
+	<listitem>@tls.peer.issuer.locality_name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.locality
+	</listitem>
+
+	<listitem>@tls.peer.issuer.c
+	</listitem>
+
+	<listitem>@tls.peer.issuer.countryName
+	</listitem>
+
+	<listitem>@tls.peer.issuer.country_name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.country
+	</listitem>
+
+	<listitem>@tls.peer.issuer.st
+	</listitem>
+
+	<listitem>@tls.peer.issuer.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.peer.issuer.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.state
+	</listitem>
+
+	<listitem>@tls.peer.issuer.o
+	</listitem>
+
+	<listitem>@tls.peer.issuer.organizationName
+	</listitem>
+
+	<listitem>@tls.peer.issuer.organization_name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.organization
+	</listitem>
+
+	<listitem>@tls.peer.issuer.ou
+	</listitem>
+
+	<listitem>@tls.peer.issuer.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.peer.issuer.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.peer.issuer.unit
+	</listitem>
+
+	<listitem>@tls.peer.verified
+	</listitem>
+
+	<listitem>@tls.peer.revoked
+	</listitem>
+
+	<listitem>@tls.peer.expired
+	</listitem>
+
+	<listitem>@tls.peer.self_signed
+	</listitem>
+
+	<listitem>@tls.peer.version
+	</listitem>
+
+	<listitem>@tls.peer.sn
+	</listitem>
+
+	<listitem>@tls.peer.serialNumber
+	</listitem>
+
+	<listitem>@tls.peer.serial_number
+	</listitem>
+
+	<listitem>@tls.peer.notBefore
+	</listitem>
+
+	<listitem>@tls.peer.not_before
+	</listitem>
+
+	<listitem>@tls.peer.notAfter
+	</listitem>
+
+	<listitem>@tls.peer.not_after
+	</listitem>
+
+	<listitem>@tls.peer.email
+	</listitem>
+
+	<listitem>@tls.peer.emailAddress
+	</listitem>
+
+	<listitem>@tls.peer.email_address
+	</listitem>
+
+	<listitem>@tls.peer.host
+	</listitem>
+
+	<listitem>@tls.peer.hostname
+	</listitem>
+
+	<listitem>@tls.peer.dns
+	</listitem>
+
+	<listitem>@tls.peer.uri
+	</listitem>
+
+	<listitem>@tls.peer.url
+	</listitem>
+
+	<listitem>@tls.peer.urn
+	</listitem>
+
+	<listitem>@tls.peer.ip
+	</listitem>
+
+	<listitem>@tls.peer.IPAddress
+	</listitem>
+
+	<listitem>@tls.peer.ip_address
+	</listitem>
+
+	<listitem>@tls.my
+	</listitem>
+
+	<listitem>@tls.my.subject
+	</listitem>
+
+	<listitem>@tls.my.subject.cn
+	</listitem>
+
+	<listitem>@tls.my.subject.commonName
+	</listitem>
+
+	<listitem>@tls.my.subject.common_name
+	</listitem>
+
+	<listitem>@tls.my.subject.name
+	</listitem>
+
+	<listitem>@tls.my.subject.l
+	</listitem>
+
+	<listitem>@tls.my.subject.localityName
+	</listitem>
+
+	<listitem>@tls.my.subject.locality_name
+	</listitem>
+
+	<listitem>@tls.my.subject.locality
+	</listitem>
+
+	<listitem>@tls.my.subject.c
+	</listitem>
+
+	<listitem>@tls.my.subject.countryName
+	</listitem>
+
+	<listitem>@tls.my.subject.country_name
+	</listitem>
+
+	<listitem>@tls.my.subject.country
+	</listitem>
+
+	<listitem>@tls.my.subject.st
+	</listitem>
+
+	<listitem>@tls.my.subject.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.my.subject.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.my.subject.state
+	</listitem>
+
+	<listitem>@tls.my.subject.o
+	</listitem>
+
+	<listitem>@tls.my.subject.organizationName
+	</listitem>
+
+	<listitem>@tls.my.subject.organization_name
+	</listitem>
+
+	<listitem>@tls.my.subject.organization
+	</listitem>
+
+	<listitem>@tls.my.subject.ou
+	</listitem>
+
+	<listitem>@tls.my.subject.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.my.subject.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.my.subject.unit
+	</listitem>
+
+	<listitem>@tls.my.subj
+	</listitem>
+
+	<listitem>@tls.my.subj.cn
+	</listitem>
+
+	<listitem>@tls.my.subj.commonName
+	</listitem>
+
+	<listitem>@tls.my.subj.common_name
+	</listitem>
+
+	<listitem>@tls.my.subj.name
+	</listitem>
+
+	<listitem>@tls.my.subj.l
+	</listitem>
+
+	<listitem>@tls.my.subj.localityName
+	</listitem>
+
+	<listitem>@tls.my.subj.locality_name
+	</listitem>
+
+	<listitem>@tls.my.subj.locality
+	</listitem>
+
+	<listitem>@tls.my.subj.c
+	</listitem>
+
+	<listitem>@tls.my.subj.countryName
+	</listitem>
+
+	<listitem>@tls.my.subj.country_name
+	</listitem>
+
+	<listitem>@tls.my.subj.country
+	</listitem>
+
+	<listitem>@tls.my.subj.st
+	</listitem>
+
+	<listitem>@tls.my.subj.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.my.subj.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.my.subj.state
+	</listitem>
+
+	<listitem>@tls.my.subj.o
+	</listitem>
+
+	<listitem>@tls.my.subj.organizationName
+	</listitem>
+
+	<listitem>@tls.my.subj.organization_name
+	</listitem>
+
+	<listitem>@tls.my.subj.organization
+	</listitem>
+
+	<listitem>@tls.my.subj.ou
+	</listitem>
+
+	<listitem>@tls.my.subj.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.my.subj.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.my.subj.unit
+	</listitem>
+
+	<listitem>@tls.my.issuer
+	</listitem>
+
+	<listitem>@tls.my.issuer.cn
+	</listitem>
+
+	<listitem>@tls.my.issuer.commonName
+	</listitem>
+
+	<listitem>@tls.my.issuer.common_name
+	</listitem>
+
+	<listitem>@tls.my.issuer.name
+	</listitem>
+
+	<listitem>@tls.my.issuer.l
+	</listitem>
+
+	<listitem>@tls.my.issuer.localityName
+	</listitem>
+
+	<listitem>@tls.my.issuer.locality_name
+	</listitem>
+
+	<listitem>@tls.my.issuer.locality
+	</listitem>
+
+	<listitem>@tls.my.issuer.c
+	</listitem>
+
+	<listitem>@tls.my.issuer.countryName
+	</listitem>
+
+	<listitem>@tls.my.issuer.country_name
+	</listitem>
+
+	<listitem>@tls.my.issuer.country
+	</listitem>
+
+	<listitem>@tls.my.issuer.st
+	</listitem>
+
+	<listitem>@tls.my.issuer.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.my.issuer.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.my.issuer.state
+	</listitem>
+
+	<listitem>@tls.my.issuer.o
+	</listitem>
+
+	<listitem>@tls.my.issuer.organizationName
+	</listitem>
+
+	<listitem>@tls.my.issuer.organization_name
+	</listitem>
+
+	<listitem>@tls.my.issuer.organization
+	</listitem>
+
+	<listitem>@tls.my.issuer.ou
+	</listitem>
+
+	<listitem>@tls.my.issuer.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.my.issuer.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.my.issuer.unit
+	</listitem>
+
+	<listitem>@tls.my.verified
+	</listitem>
+
+	<listitem>@tls.my.revoked
+	</listitem>
+
+	<listitem>@tls.my.expired
+	</listitem>
+
+	<listitem>@tls.my.self_signed
+	</listitem>
+
+	<listitem>@tls.my.version
+	</listitem>
+
+	<listitem>@tls.my.sn
+	</listitem>
+
+	<listitem>@tls.my.serialNumber
+	</listitem>
+
+	<listitem>@tls.my.serial_number
+	</listitem>
+
+	<listitem>@tls.my.notBefore
+	</listitem>
+
+	<listitem>@tls.my.not_before
+	</listitem>
+
+	<listitem>@tls.my.notAfter
+	</listitem>
+
+	<listitem>@tls.my.not_after
+	</listitem>
+
+	<listitem>@tls.my.email
+	</listitem>
+
+	<listitem>@tls.my.emailAddress
+	</listitem>
+
+	<listitem>@tls.my.email_address
+	</listitem>
+
+	<listitem>@tls.my.host
+	</listitem>
+
+	<listitem>@tls.my.hostname
+	</listitem>
+
+	<listitem>@tls.my.dns
+	</listitem>
+
+	<listitem>@tls.my.uri
+	</listitem>
+
+	<listitem>@tls.my.url
+	</listitem>
+
+	<listitem>@tls.my.urn
+	</listitem>
+
+	<listitem>@tls.my.ip
+	</listitem>
+
+	<listitem>@tls.my.IPAddress
+	</listitem>
+
+	<listitem>@tls.my.ip_address
+	</listitem>
+
+	<listitem>@tls.me
+	</listitem>
+
+	<listitem>@tls.me.subject
+	</listitem>
+
+	<listitem>@tls.me.subject.cn
+	</listitem>
+
+	<listitem>@tls.me.subject.commonName
+	</listitem>
+
+	<listitem>@tls.me.subject.common_name
+	</listitem>
+
+	<listitem>@tls.me.subject.name
+	</listitem>
+
+	<listitem>@tls.me.subject.l
+	</listitem>
+
+	<listitem>@tls.me.subject.localityName
+	</listitem>
+
+	<listitem>@tls.me.subject.locality_name
+	</listitem>
+
+	<listitem>@tls.me.subject.locality
+	</listitem>
+
+	<listitem>@tls.me.subject.c
+	</listitem>
+
+	<listitem>@tls.me.subject.countryName
+	</listitem>
+
+	<listitem>@tls.me.subject.country_name
+	</listitem>
+
+	<listitem>@tls.me.subject.country
+	</listitem>
+
+	<listitem>@tls.me.subject.st
+	</listitem>
+
+	<listitem>@tls.me.subject.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.me.subject.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.me.subject.state
+	</listitem>
+
+	<listitem>@tls.me.subject.o
+	</listitem>
+
+	<listitem>@tls.me.subject.organizationName
+	</listitem>
+
+	<listitem>@tls.me.subject.organization_name
+	</listitem>
+
+	<listitem>@tls.me.subject.organization
+	</listitem>
+
+	<listitem>@tls.me.subject.ou
+	</listitem>
+
+	<listitem>@tls.me.subject.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.me.subject.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.me.subject.unit
+	</listitem>
+
+	<listitem>@tls.me.subj
+	</listitem>
+
+	<listitem>@tls.me.subj.cn
+	</listitem>
+
+	<listitem>@tls.me.subj.commonName
+	</listitem>
+
+	<listitem>@tls.me.subj.common_name
+	</listitem>
+
+	<listitem>@tls.me.subj.name
+	</listitem>
+
+	<listitem>@tls.me.subj.l
+	</listitem>
+
+	<listitem>@tls.me.subj.localityName
+	</listitem>
+
+	<listitem>@tls.me.subj.locality_name
+	</listitem>
+
+	<listitem>@tls.me.subj.locality
+	</listitem>
+
+	<listitem>@tls.me.subj.c
+	</listitem>
+
+	<listitem>@tls.me.subj.countryName
+	</listitem>
+
+	<listitem>@tls.me.subj.country_name
+	</listitem>
+
+	<listitem>@tls.me.subj.country
+	</listitem>
+
+	<listitem>@tls.me.subj.st
+	</listitem>
+
+	<listitem>@tls.me.subj.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.me.subj.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.me.subj.state
+	</listitem>
+
+	<listitem>@tls.me.subj.o
+	</listitem>
+
+	<listitem>@tls.me.subj.organizationName
+	</listitem>
+
+	<listitem>@tls.me.subj.organization_name
+	</listitem>
+
+	<listitem>@tls.me.subj.organization
+	</listitem>
+
+	<listitem>@tls.me.subj.ou
+	</listitem>
+
+	<listitem>@tls.me.subj.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.me.subj.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.me.subj.unit
+	</listitem>
+
+	<listitem>@tls.me.issuer
+	</listitem>
+
+	<listitem>@tls.me.issuer.cn
+	</listitem>
+
+	<listitem>@tls.me.issuer.commonName
+	</listitem>
+
+	<listitem>@tls.me.issuer.common_name
+	</listitem>
+
+	<listitem>@tls.me.issuer.name
+	</listitem>
+
+	<listitem>@tls.me.issuer.l
+	</listitem>
+
+	<listitem>@tls.me.issuer.localityName
+	</listitem>
+
+	<listitem>@tls.me.issuer.locality_name
+	</listitem>
+
+	<listitem>@tls.me.issuer.locality
+	</listitem>
+
+	<listitem>@tls.me.issuer.c
+	</listitem>
+
+	<listitem>@tls.me.issuer.countryName
+	</listitem>
+
+	<listitem>@tls.me.issuer.country_name
+	</listitem>
+
+	<listitem>@tls.me.issuer.country
+	</listitem>
+
+	<listitem>@tls.me.issuer.st
+	</listitem>
+
+	<listitem>@tls.me.issuer.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.me.issuer.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.me.issuer.state
+	</listitem>
+
+	<listitem>@tls.me.issuer.o
+	</listitem>
+
+	<listitem>@tls.me.issuer.organizationName
+	</listitem>
+
+	<listitem>@tls.me.issuer.organization_name
+	</listitem>
+
+	<listitem>@tls.me.issuer.organization
+	</listitem>
+
+	<listitem>@tls.me.issuer.ou
+	</listitem>
+
+	<listitem>@tls.me.issuer.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.me.issuer.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.me.issuer.unit
+	</listitem>
+
+	<listitem>@tls.me.verified
+	</listitem>
+
+	<listitem>@tls.me.revoked
+	</listitem>
+
+	<listitem>@tls.me.expired
+	</listitem>
+
+	<listitem>@tls.me.self_signed
+	</listitem>
+
+	<listitem>@tls.me.version
+	</listitem>
+
+	<listitem>@tls.me.sn
+	</listitem>
+
+	<listitem>@tls.me.serialNumber
+	</listitem>
+
+	<listitem>@tls.me.serial_number
+	</listitem>
+
+	<listitem>@tls.me.notBefore
+	</listitem>
+
+	<listitem>@tls.me.not_before
+	</listitem>
+
+	<listitem>@tls.me.notAfter
+	</listitem>
+
+	<listitem>@tls.me.not_after
+	</listitem>
+
+	<listitem>@tls.me.email
+	</listitem>
+
+	<listitem>@tls.me.emailAddress
+	</listitem>
+
+	<listitem>@tls.me.email_address
+	</listitem>
+
+	<listitem>@tls.me.host
+	</listitem>
+
+	<listitem>@tls.me.hostname
+	</listitem>
+
+	<listitem>@tls.me.dns
+	</listitem>
+
+	<listitem>@tls.me.uri
+	</listitem>
+
+	<listitem>@tls.me.url
+	</listitem>
+
+	<listitem>@tls.me.urn
+	</listitem>
+
+	<listitem>@tls.me.ip
+	</listitem>
+
+	<listitem>@tls.me.IPAddress
+	</listitem>
+
+	<listitem>@tls.me.ip_address
+	</listitem>
+
+	<listitem>@tls.myself
+	</listitem>
+
+	<listitem>@tls.myself.subject
+	</listitem>
+
+	<listitem>@tls.myself.subject.cn
+	</listitem>
+
+	<listitem>@tls.myself.subject.commonName
+	</listitem>
+
+	<listitem>@tls.myself.subject.common_name
+	</listitem>
+
+	<listitem>@tls.myself.subject.name
+	</listitem>
+
+	<listitem>@tls.myself.subject.l
+	</listitem>
+
+	<listitem>@tls.myself.subject.localityName
+	</listitem>
+
+	<listitem>@tls.myself.subject.locality_name
+	</listitem>
+
+	<listitem>@tls.myself.subject.locality
+	</listitem>
+
+	<listitem>@tls.myself.subject.c
+	</listitem>
+
+	<listitem>@tls.myself.subject.countryName
+	</listitem>
+
+	<listitem>@tls.myself.subject.country_name
+	</listitem>
+
+	<listitem>@tls.myself.subject.country
+	</listitem>
+
+	<listitem>@tls.myself.subject.st
+	</listitem>
+
+	<listitem>@tls.myself.subject.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.myself.subject.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.myself.subject.state
+	</listitem>
+
+	<listitem>@tls.myself.subject.o
+	</listitem>
+
+	<listitem>@tls.myself.subject.organizationName
+	</listitem>
+
+	<listitem>@tls.myself.subject.organization_name
+	</listitem>
+
+	<listitem>@tls.myself.subject.organization
+	</listitem>
+
+	<listitem>@tls.myself.subject.ou
+	</listitem>
+
+	<listitem>@tls.myself.subject.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.myself.subject.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.myself.subject.unit
+	</listitem>
+
+	<listitem>@tls.myself.subj
+	</listitem>
+
+	<listitem>@tls.myself.subj.cn
+	</listitem>
+
+	<listitem>@tls.myself.subj.commonName
+	</listitem>
+
+	<listitem>@tls.myself.subj.common_name
+	</listitem>
+
+	<listitem>@tls.myself.subj.name
+	</listitem>
+
+	<listitem>@tls.myself.subj.l
+	</listitem>
+
+	<listitem>@tls.myself.subj.localityName
+	</listitem>
+
+	<listitem>@tls.myself.subj.locality_name
+	</listitem>
+
+	<listitem>@tls.myself.subj.locality
+	</listitem>
+
+	<listitem>@tls.myself.subj.c
+	</listitem>
+
+	<listitem>@tls.myself.subj.countryName
+	</listitem>
+
+	<listitem>@tls.myself.subj.country_name
+	</listitem>
+
+	<listitem>@tls.myself.subj.country
+	</listitem>
+
+	<listitem>@tls.myself.subj.st
+	</listitem>
+
+	<listitem>@tls.myself.subj.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.myself.subj.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.myself.subj.state
+	</listitem>
+
+	<listitem>@tls.myself.subj.o
+	</listitem>
+
+	<listitem>@tls.myself.subj.organizationName
+	</listitem>
+
+	<listitem>@tls.myself.subj.organization_name
+	</listitem>
+
+	<listitem>@tls.myself.subj.organization
+	</listitem>
+
+	<listitem>@tls.myself.subj.ou
+	</listitem>
+
+	<listitem>@tls.myself.subj.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.myself.subj.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.myself.subj.unit
+	</listitem>
+
+	<listitem>@tls.myself.issuer
+	</listitem>
+
+	<listitem>@tls.myself.issuer.cn
+	</listitem>
+
+	<listitem>@tls.myself.issuer.commonName
+	</listitem>
+
+	<listitem>@tls.myself.issuer.common_name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.l
+	</listitem>
+
+	<listitem>@tls.myself.issuer.localityName
+	</listitem>
+
+	<listitem>@tls.myself.issuer.locality_name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.locality
+	</listitem>
+
+	<listitem>@tls.myself.issuer.c
+	</listitem>
+
+	<listitem>@tls.myself.issuer.countryName
+	</listitem>
+
+	<listitem>@tls.myself.issuer.country_name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.country
+	</listitem>
+
+	<listitem>@tls.myself.issuer.st
+	</listitem>
+
+	<listitem>@tls.myself.issuer.stateOrProvinceName
+	</listitem>
+
+	<listitem>@tls.myself.issuer.state_or_province_name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.state
+	</listitem>
+
+	<listitem>@tls.myself.issuer.o
+	</listitem>
+
+	<listitem>@tls.myself.issuer.organizationName
+	</listitem>
+
+	<listitem>@tls.myself.issuer.organization_name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.organization
+	</listitem>
+
+	<listitem>@tls.myself.issuer.ou
+	</listitem>
+
+	<listitem>@tls.myself.issuer.organizationalUnitName
+	</listitem>
+
+	<listitem>@tls.myself.issuer.organizational_unit_name
+	</listitem>
+
+	<listitem>@tls.myself.issuer.unit
+	</listitem>
+
+	<listitem>@tls.myself.verified
+	</listitem>
+
+	<listitem>@tls.myself.revoked
+	</listitem>
+
+	<listitem>@tls.myself.expired
+	</listitem>
+
+	<listitem>@tls.myself.self_signed
+	</listitem>
+
+	<listitem>@tls.myself.version
+	</listitem>
+
+	<listitem>@tls.myself.sn
+	</listitem>
+
+	<listitem>@tls.myself.serialNumber
+	</listitem>
+
+	<listitem>@tls.myself.serial_number
+	</listitem>
+
+	<listitem>@tls.myself.notBefore
+	</listitem>
+
+	<listitem>@tls.myself.not_before
+	</listitem>
+
+	<listitem>@tls.myself.notAfter
+	</listitem>
+
+	<listitem>@tls.myself.not_after
+	</listitem>
+
+	<listitem>@tls.myself.email
+	</listitem>
+
+	<listitem>@tls.myself.emailAddress
+	</listitem>
+
+	<listitem>@tls.myself.email_address
+	</listitem>
+
+	<listitem>@tls.myself.host
+	</listitem>
+
+	<listitem>@tls.myself.hostname
+	</listitem>
+
+	<listitem>@tls.myself.dns
+	</listitem>
+
+	<listitem>@tls.myself.uri
+	</listitem>
+
+	<listitem>@tls.myself.url
+	</listitem>
+
+	<listitem>@tls.myself.urn
+	</listitem>
+
+	<listitem>@tls.myself.ip
+	</listitem>
+
+	<listitem>@tls.myself.IPAddress
+	</listitem>
+
+	<listitem>@tls.myself.ip_address
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 59 - 0
doc/select_list/docbook/select_tm.xml

@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.tm">
+	<title>Selects for tm</title>
+	<orderedlist>
+
+
+	<listitem>@tm
+	</listitem>
+
+	<listitem>@tm.method
+	</listitem>
+
+	<listitem>@tm.uas.status
+	</listitem>
+
+	<listitem>@tm.uas.request
+	</listitem>
+
+	<listitem>@tm.uas.req
+	</listitem>
+
+	<listitem>@tm.uas.local_to_tag
+	</listitem>
+
+	<listitem>@tm.uas.response
+	</listitem>
+
+	<listitem>@tm.uas.resp
+	</listitem>
+
+	<listitem>@tm.uac.count
+	</listitem>
+
+	<listitem>@tm.uac.relayed
+	</listitem>
+
+	<listitem>@tm.uac[integer].status
+	</listitem>
+
+	<listitem>@tm.uac[integer].uri
+	</listitem>
+
+	<listitem>@tm.uac[integer].response
+	</listitem>
+
+	<listitem>@tm.uac[integer].resp
+	</listitem>
+
+	<listitem>@tm.uac[integer].request
+	</listitem>
+
+	<listitem>@tm.uac[integer].req
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 14 - 0
doc/select_list/docbook/select_xmlrpc.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- this file is autogenerated, do not edit! -->
+<!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+	"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<chapter id="select_list.xmlrpc">
+	<title>Selects for xmlrpc</title>
+	<orderedlist>
+
+
+	<listitem>@xmlrpc.method
+	</listitem>
+
+	</orderedlist>
+</chapter>

+ 12 - 0
doc/select_list/select_avp.txt

@@ -0,0 +1,12 @@
+Selects for avp
+===============
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @avp.<string>["string"]
+  2. @avp.<string>["string"].nameaddr*
+  3. @attr.<string>["string"]
+  4. @attr.<string>["string"].nameaddr*
+  5. @attribute.<string>["string"]
+  6. @attribute.<string>["string"].nameaddr*

+ 495 - 0
doc/select_list/select_core.txt

@@ -0,0 +1,495 @@
+Selects for core
+================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @ruri
+  2. @ruri.type
+  3. @ruri.user
+  4. @ruri.rn_user
+  5. @ruri.pwd
+  6. @ruri.host
+  7. @ruri.port
+  8. @ruri.params{["string"]}
+  9. @ruri.hostport
+ 10. @ruri.transport
+ 11. @request_uri
+ 12. @request_uri.type
+ 13. @request_uri.user
+ 14. @request_uri.rn_user
+ 15. @request_uri.pwd
+ 16. @request_uri.host
+ 17. @request_uri.port
+ 18. @request_uri.params{["string"]}
+ 19. @request_uri.hostport
+ 20. @request_uri.transport
+ 21. @dst_uri
+ 22. @dst_uri.type
+ 23. @dst_uri.user
+ 24. @dst_uri.rn_user
+ 25. @dst_uri.pwd
+ 26. @dst_uri.host
+ 27. @dst_uri.port
+ 28. @dst_uri.params{["string"]}
+ 29. @dst_uri.hostport
+ 30. @dst_uri.transport
+ 31. @next_hop
+ 32. @next_hop.src_ip
+ 33. @next_hop.type
+ 34. @next_hop.user
+ 35. @next_hop.rn_user
+ 36. @next_hop.pwd
+ 37. @next_hop.host
+ 38. @next_hop.port
+ 39. @next_hop.params{["string"]}
+ 40. @next_hop.hostport
+ 41. @next_hop.transport
+ 42. @from
+ 43. @from.uri
+ 44. @from.uri.type
+ 45. @from.uri.user
+ 46. @from.uri.rn_user
+ 47. @from.uri.pwd
+ 48. @from.uri.host
+ 49. @from.uri.port
+ 50. @from.uri.params{["string"]}
+ 51. @from.uri.hostport
+ 52. @from.uri.transport
+ 53. @from.tag
+ 54. @from.name
+ 55. @from.params["string"]
+ 56. @f
+ 57. @f.uri
+ 58. @f.uri.type
+ 59. @f.uri.user
+ 60. @f.uri.rn_user
+ 61. @f.uri.pwd
+ 62. @f.uri.host
+ 63. @f.uri.port
+ 64. @f.uri.params{["string"]}
+ 65. @f.uri.hostport
+ 66. @f.uri.transport
+ 67. @f.tag
+ 68. @f.name
+ 69. @f.params["string"]
+ 70. @to
+ 71. @to.uri
+ 72. @to.uri.type
+ 73. @to.uri.user
+ 74. @to.uri.rn_user
+ 75. @to.uri.pwd
+ 76. @to.uri.host
+ 77. @to.uri.port
+ 78. @to.uri.params{["string"]}
+ 79. @to.uri.hostport
+ 80. @to.uri.transport
+ 81. @to.tag
+ 82. @to.name
+ 83. @to.params["string"]
+ 84. @t
+ 85. @t.uri
+ 86. @t.uri.type
+ 87. @t.uri.user
+ 88. @t.uri.rn_user
+ 89. @t.uri.pwd
+ 90. @t.uri.host
+ 91. @t.uri.port
+ 92. @t.uri.params{["string"]}
+ 93. @t.uri.hostport
+ 94. @t.uri.transport
+ 95. @t.tag
+ 96. @t.name
+ 97. @t.params["string"]
+ 98. @refer_to
+ 99. @refer_to.uri
+100. @refer_to.uri.type
+101. @refer_to.uri.user
+102. @refer_to.uri.rn_user
+103. @refer_to.uri.pwd
+104. @refer_to.uri.host
+105. @refer_to.uri.port
+106. @refer_to.uri.params{["string"]}
+107. @refer_to.uri.hostport
+108. @refer_to.uri.transport
+109. @refer_to.tag
+110. @refer_to.name
+111. @refer_to.params["string"]
+112. @remote_party_id
+113. @remote_party_id.uri
+114. @remote_party_id.uri.type
+115. @remote_party_id.uri.user
+116. @remote_party_id.uri.rn_user
+117. @remote_party_id.uri.pwd
+118. @remote_party_id.uri.host
+119. @remote_party_id.uri.port
+120. @remote_party_id.uri.params{["string"]}
+121. @remote_party_id.uri.hostport
+122. @remote_party_id.uri.transport
+123. @remote_party_id.tag
+124. @remote_party_id.name
+125. @remote_party_id.params["string"]
+126. @rpid
+127. @rpid.uri
+128. @rpid.uri.type
+129. @rpid.uri.user
+130. @rpid.uri.rn_user
+131. @rpid.uri.pwd
+132. @rpid.uri.host
+133. @rpid.uri.port
+134. @rpid.uri.params{["string"]}
+135. @rpid.uri.hostport
+136. @rpid.uri.transport
+137. @rpid.tag
+138. @rpid.name
+139. @rpid.params["string"]
+140. @contact
+141. @contact.uri
+142. @contact.uri.type
+143. @contact.uri.user
+144. @contact.uri.rn_user
+145. @contact.uri.pwd
+146. @contact.uri.host
+147. @contact.uri.port
+148. @contact.uri.params{["string"]}
+149. @contact.uri.hostport
+150. @contact.uri.transport
+151. @contact.name
+152. @contact.q
+153. @contact.expires
+154. @contact.methods
+155. @contact.received
+156. @contact.instance
+157. @contact.params["string"]
+158. @m
+159. @m.uri
+160. @m.uri.type
+161. @m.uri.user
+162. @m.uri.rn_user
+163. @m.uri.pwd
+164. @m.uri.host
+165. @m.uri.port
+166. @m.uri.params{["string"]}
+167. @m.uri.hostport
+168. @m.uri.transport
+169. @m.name
+170. @m.q
+171. @m.expires
+172. @m.methods
+173. @m.received
+174. @m.instance
+175. @m.params["string"]
+176. @via{[integer]}
+177. @via{[integer]}.name
+178. @via{[integer]}.version
+179. @via{[integer]}.transport
+180. @via{[integer]}.host
+181. @via{[integer]}.port
+182. @via{[integer]}.comment
+183. @via{[integer]}.branch
+184. @via{[integer]}.received
+185. @via{[integer]}.rport
+186. @via{[integer]}.i
+187. @via{[integer]}.alias
+188. @via{[integer]}.params["string"]
+189. @v{[integer]}
+190. @v{[integer]}.name
+191. @v{[integer]}.version
+192. @v{[integer]}.transport
+193. @v{[integer]}.host
+194. @v{[integer]}.port
+195. @v{[integer]}.comment
+196. @v{[integer]}.branch
+197. @v{[integer]}.received
+198. @v{[integer]}.rport
+199. @v{[integer]}.i
+200. @v{[integer]}.alias
+201. @v{[integer]}.params["string"]
+202. @event
+203. @record_route
+204. @record_route.uri
+205. @record_route.uri.type
+206. @record_route.uri.user
+207. @record_route.uri.rn_user
+208. @record_route.uri.pwd
+209. @record_route.uri.host
+210. @record_route.uri.port
+211. @record_route.uri.params{["string"]}
+212. @record_route.uri.hostport
+213. @record_route.uri.transport
+214. @record_route.name
+215. @record_route.params["string"]
+216. @rr
+217. @rr.uri
+218. @rr.uri.type
+219. @rr.uri.user
+220. @rr.uri.rn_user
+221. @rr.uri.pwd
+222. @rr.uri.host
+223. @rr.uri.port
+224. @rr.uri.params{["string"]}
+225. @rr.uri.hostport
+226. @rr.uri.transport
+227. @rr.name
+228. @rr.params["string"]
+229. @cseq
+230. @cseq.num
+231. @cseq.method
+232. @msg
+233. @msg.first_line
+234. @msg.flags
+235. @msg.len
+236. @msg.id
+237. @msg.id.hex
+238. @msg.type
+239. @msg.header
+240. @msg.header.<string>{[integer]}
+241. @msg.header.<string>{[integer]}.nameaddr.name
+242. @msg.header.<string>{[integer]}.nameaddr.uri
+243. @msg.header.<string>{[integer]}.nameaddr.uri.type
+244. @msg.header.<string>{[integer]}.nameaddr.uri.user
+245. @msg.header.<string>{[integer]}.nameaddr.uri.rn_user
+246. @msg.header.<string>{[integer]}.nameaddr.uri.pwd
+247. @msg.header.<string>{[integer]}.nameaddr.uri.host
+248. @msg.header.<string>{[integer]}.nameaddr.uri.port
+249. @msg.header.<string>{[integer]}.nameaddr.uri.params{["string"]}
+250. @msg.header.<string>{[integer]}.nameaddr.uri.hostport
+251. @msg.header.<string>{[integer]}.nameaddr.uri.transport
+252. @msg.header.<string>{[integer]}.nameaddr.params{["string"]}
+253. @msg.header.<string>{[integer]}.params["string"]
+254. @msg.h
+255. @msg.h.<string>{[integer]}
+256. @msg.h.<string>{[integer]}.nameaddr.name
+257. @msg.h.<string>{[integer]}.nameaddr.uri
+258. @msg.h.<string>{[integer]}.nameaddr.uri.type
+259. @msg.h.<string>{[integer]}.nameaddr.uri.user
+260. @msg.h.<string>{[integer]}.nameaddr.uri.rn_user
+261. @msg.h.<string>{[integer]}.nameaddr.uri.pwd
+262. @msg.h.<string>{[integer]}.nameaddr.uri.host
+263. @msg.h.<string>{[integer]}.nameaddr.uri.port
+264. @msg.h.<string>{[integer]}.nameaddr.uri.params{["string"]}
+265. @msg.h.<string>{[integer]}.nameaddr.uri.hostport
+266. @msg.h.<string>{[integer]}.nameaddr.uri.transport
+267. @msg.h.<string>{[integer]}.nameaddr.params{["string"]}
+268. @msg.h.<string>{[integer]}.params["string"]
+269. @msg.body
+270. @msg.body.sdp
+271. @msg.body.sdp.line["string"]
+272. @msg.content
+273. @msg.content.sdp
+274. @msg.content.sdp.line["string"]
+275. @msg.request
+276. @msg.request.method
+277. @msg.request.uri
+278. @msg.request.uri.type
+279. @msg.request.uri.user
+280. @msg.request.uri.rn_user
+281. @msg.request.uri.pwd
+282. @msg.request.uri.host
+283. @msg.request.uri.port
+284. @msg.request.uri.params{["string"]}
+285. @msg.request.uri.hostport
+286. @msg.request.uri.transport
+287. @msg.request.version
+288. @msg.req
+289. @msg.req.method
+290. @msg.req.uri
+291. @msg.req.uri.type
+292. @msg.req.uri.user
+293. @msg.req.uri.rn_user
+294. @msg.req.uri.pwd
+295. @msg.req.uri.host
+296. @msg.req.uri.port
+297. @msg.req.uri.params{["string"]}
+298. @msg.req.uri.hostport
+299. @msg.req.uri.transport
+300. @msg.req.version
+301. @msg.response
+302. @msg.response.version
+303. @msg.response.status
+304. @msg.response.code
+305. @msg.response.reason
+306. @msg.res
+307. @msg.res.version
+308. @msg.res.status
+309. @msg.res.code
+310. @msg.res.reason
+311. @message
+312. @message.first_line
+313. @message.flags
+314. @message.len
+315. @message.id
+316. @message.id.hex
+317. @message.type
+318. @message.header
+319. @message.header.<string>{[integer]}
+320. @message.header.<string>{[integer]}.nameaddr.name
+321. @message.header.<string>{[integer]}.nameaddr.uri
+322. @message.header.<string>{[integer]}.nameaddr.uri.type
+323. @message.header.<string>{[integer]}.nameaddr.uri.user
+324. @message.header.<string>{[integer]}.nameaddr.uri.rn_user
+325. @message.header.<string>{[integer]}.nameaddr.uri.pwd
+326. @message.header.<string>{[integer]}.nameaddr.uri.host
+327. @message.header.<string>{[integer]}.nameaddr.uri.port
+328. @message.header.<string>{[integer]}.nameaddr.uri.params{["string"]}
+329. @message.header.<string>{[integer]}.nameaddr.uri.hostport
+330. @message.header.<string>{[integer]}.nameaddr.uri.transport
+331. @message.header.<string>{[integer]}.nameaddr.params{["string"]}
+332. @message.header.<string>{[integer]}.params["string"]
+333. @message.h
+334. @message.h.<string>{[integer]}
+335. @message.h.<string>{[integer]}.nameaddr.name
+336. @message.h.<string>{[integer]}.nameaddr.uri
+337. @message.h.<string>{[integer]}.nameaddr.uri.type
+338. @message.h.<string>{[integer]}.nameaddr.uri.user
+339. @message.h.<string>{[integer]}.nameaddr.uri.rn_user
+340. @message.h.<string>{[integer]}.nameaddr.uri.pwd
+341. @message.h.<string>{[integer]}.nameaddr.uri.host
+342. @message.h.<string>{[integer]}.nameaddr.uri.port
+343. @message.h.<string>{[integer]}.nameaddr.uri.params{["string"]}
+344. @message.h.<string>{[integer]}.nameaddr.uri.hostport
+345. @message.h.<string>{[integer]}.nameaddr.uri.transport
+346. @message.h.<string>{[integer]}.nameaddr.params{["string"]}
+347. @message.h.<string>{[integer]}.params["string"]
+348. @message.body
+349. @message.body.sdp
+350. @message.body.sdp.line["string"]
+351. @message.content
+352. @message.content.sdp
+353. @message.content.sdp.line["string"]
+354. @message.request
+355. @message.request.method
+356. @message.request.uri
+357. @message.request.uri.type
+358. @message.request.uri.user
+359. @message.request.uri.rn_user
+360. @message.request.uri.pwd
+361. @message.request.uri.host
+362. @message.request.uri.port
+363. @message.request.uri.params{["string"]}
+364. @message.request.uri.hostport
+365. @message.request.uri.transport
+366. @message.request.version
+367. @message.req
+368. @message.req.method
+369. @message.req.uri
+370. @message.req.uri.type
+371. @message.req.uri.user
+372. @message.req.uri.rn_user
+373. @message.req.uri.pwd
+374. @message.req.uri.host
+375. @message.req.uri.port
+376. @message.req.uri.params{["string"]}
+377. @message.req.uri.hostport
+378. @message.req.uri.transport
+379. @message.req.version
+380. @message.response
+381. @message.response.version
+382. @message.response.status
+383. @message.response.code
+384. @message.response.reason
+385. @message.res
+386. @message.res.version
+387. @message.res.status
+388. @message.res.code
+389. @message.res.reason
+390. @method
+391. @version
+392. @status
+393. @code
+394. @reason
+395. @proxy_authorization["string"]
+396. @proxy_authorization["string"].username
+397. @proxy_authorization["string"].username.user
+398. @proxy_authorization["string"].username.domain
+399. @proxy_authorization["string"].realm
+400. @proxy_authorization["string"].nonce
+401. @proxy_authorization["string"].uri
+402. @proxy_authorization["string"].cnonce
+403. @proxy_authorization["string"].nc
+404. @proxy_authorization["string"].response
+405. @proxy_authorization["string"].opaque
+406. @proxy_authorization["string"].algorithm
+407. @proxy_authorization["string"].qop
+408. @authorization["string"]
+409. @authorization["string"].username
+410. @authorization["string"].username.user
+411. @authorization["string"].username.domain
+412. @authorization["string"].realm
+413. @authorization["string"].nonce
+414. @authorization["string"].uri
+415. @authorization["string"].cnonce
+416. @authorization["string"].nc
+417. @authorization["string"].response
+418. @authorization["string"].opaque
+419. @authorization["string"].algorithm
+420. @authorization["string"].qop
+421. @src.ip
+422. @src.port
+423. @src.ip_port
+424. @dst.ip
+425. @dst.port
+426. @dst.ip_port
+427. @received.proto
+428. @received.ip
+429. @received.port
+430. @received.ip_port
+431. @received.proto_ip_port
+432. @call_id
+433. @expires
+434. @max_forwards
+435. @content_type
+436. @content_length
+437. @subject
+438. @organization
+439. @priority
+440. @session_expires
+441. @min_se
+442. @user_agent
+443. @sip_if_match
+444. @sys.pid
+445. @sys.unique
+446. @sys.now
+447. @sys.now.local{["string"]}
+448. @sys.now.gmt{["string"]}
+449. @sys.now.utc{["string"]}
+450. @sys.server_id
+451. @branch.count
+452. @branch.uri{[integer]}
+453. @branch.uri{[integer]}.type
+454. @branch.uri{[integer]}.user
+455. @branch.uri{[integer]}.rn_user
+456. @branch.uri{[integer]}.pwd
+457. @branch.uri{[integer]}.host
+458. @branch.uri{[integer]}.port
+459. @branch.uri{[integer]}.params{["string"]}
+460. @branch.uri{[integer]}.hostport
+461. @branch.uri{[integer]}.transport
+462. @branch.dst_uri{[integer]}
+463. @branch.dst_uri{[integer]}.type
+464. @branch.dst_uri{[integer]}.user
+465. @branch.dst_uri{[integer]}.rn_user
+466. @branch.dst_uri{[integer]}.pwd
+467. @branch.dst_uri{[integer]}.host
+468. @branch.dst_uri{[integer]}.port
+469. @branch.dst_uri{[integer]}.params{["string"]}
+470. @branch.dst_uri{[integer]}.hostport
+471. @branch.dst_uri{[integer]}.transport
+472. @branch.uriq{[integer]}
+473. @branch.uriq{[integer]}.name
+474. @branch.uriq{[integer]}.uri
+475. @branch.uriq{[integer]}.uri.type
+476. @branch.uriq{[integer]}.uri.user
+477. @branch.uriq{[integer]}.uri.rn_user
+478. @branch.uriq{[integer]}.uri.pwd
+479. @branch.uriq{[integer]}.uri.host
+480. @branch.uriq{[integer]}.uri.port
+481. @branch.uriq{[integer]}.uri.params{["string"]}
+482. @branch.uriq{[integer]}.uri.hostport
+483. @branch.uriq{[integer]}.uri.transport
+484. @branch.uriq{[integer]}.params{["string"]}
+485. @branch.q{[integer]}
+486. @date
+487. @identity
+488. @identity_info
+489. @cfg_get.*

+ 122 - 0
doc/select_list/select_db_ops.txt

@@ -0,0 +1,122 @@
+Selects for db_ops
+==================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @db.query["string"]
+  2. @db.query["string"].is_empty
+  3. @db.query["string"].count
+  4. @db.query["string"].nameaddr.name
+  5. @db.query["string"].nameaddr.uri
+  6. @db.query["string"].nameaddr.uri.type
+  7. @db.query["string"].nameaddr.uri.user
+  8. @db.query["string"].nameaddr.uri.rn_user
+  9. @db.query["string"].nameaddr.uri.pwd
+ 10. @db.query["string"].nameaddr.uri.host
+ 11. @db.query["string"].nameaddr.uri.port
+ 12. @db.query["string"].nameaddr.uri.params{["string"]}
+ 13. @db.query["string"].nameaddr.uri.hostport
+ 14. @db.query["string"].nameaddr.uri.transport
+ 15. @db.query["string"].nameaddr.params{["string"]}
+ 16. @db.query["string"].uri.type
+ 17. @db.query["string"].uri.user
+ 18. @db.query["string"].uri.rn_user
+ 19. @db.query["string"].uri.pwd
+ 20. @db.query["string"].uri.host
+ 21. @db.query["string"].uri.port
+ 22. @db.query["string"].uri.params{["string"]}
+ 23. @db.query["string"].uri.hostport
+ 24. @db.query["string"].uri.transport
+ 25. @db.query["string"].field[integer]
+ 26. @db.query["string"].field[integer].nameaddr.name
+ 27. @db.query["string"].field[integer].nameaddr.uri
+ 28. @db.query["string"].field[integer].nameaddr.uri.type
+ 29. @db.query["string"].field[integer].nameaddr.uri.user
+ 30. @db.query["string"].field[integer].nameaddr.uri.rn_user
+ 31. @db.query["string"].field[integer].nameaddr.uri.pwd
+ 32. @db.query["string"].field[integer].nameaddr.uri.host
+ 33. @db.query["string"].field[integer].nameaddr.uri.port
+ 34. @db.query["string"].field[integer].nameaddr.uri.params{["string"]}
+ 35. @db.query["string"].field[integer].nameaddr.uri.hostport
+ 36. @db.query["string"].field[integer].nameaddr.uri.transport
+ 37. @db.query["string"].field[integer].nameaddr.params{["string"]}
+ 38. @db.query["string"].field[integer].uri.type
+ 39. @db.query["string"].field[integer].uri.user
+ 40. @db.query["string"].field[integer].uri.rn_user
+ 41. @db.query["string"].field[integer].uri.pwd
+ 42. @db.query["string"].field[integer].uri.host
+ 43. @db.query["string"].field[integer].uri.port
+ 44. @db.query["string"].field[integer].uri.params{["string"]}
+ 45. @db.query["string"].field[integer].uri.hostport
+ 46. @db.query["string"].field[integer].uri.transport
+ 47. @db.query["string"].row[integer]
+ 48. @db.query["string"].row[integer].field[integer]
+ 49. @db.query["string"].row[integer].field[integer].nameaddr.name
+ 50. @db.query["string"].row[integer].field[integer].nameaddr.uri
+ 51. @db.query["string"].row[integer].field[integer].nameaddr.uri.type
+ 52. @db.query["string"].row[integer].field[integer].nameaddr.uri.user
+ 53. @db.query["string"].row[integer].field[integer].nameaddr.uri.rn_user
+ 54. @db.query["string"].row[integer].field[integer].nameaddr.uri.pwd
+ 55. @db.query["string"].row[integer].field[integer].nameaddr.uri.host
+ 56. @db.query["string"].row[integer].field[integer].nameaddr.uri.port
+ 57. @db.query["string"].row[integer].field[integer].nameaddr.uri.params{["string"]}
+ 58. @db.query["string"].row[integer].field[integer].nameaddr.uri.hostport
+ 59. @db.query["string"].row[integer].field[integer].nameaddr.uri.transport
+ 60. @db.query["string"].row[integer].field[integer].nameaddr.params{["string"]}
+ 61. @db.query["string"].row[integer].field[integer].uri.type
+ 62. @db.query["string"].row[integer].field[integer].uri.user
+ 63. @db.query["string"].row[integer].field[integer].uri.rn_user
+ 64. @db.query["string"].row[integer].field[integer].uri.pwd
+ 65. @db.query["string"].row[integer].field[integer].uri.host
+ 66. @db.query["string"].row[integer].field[integer].uri.port
+ 67. @db.query["string"].row[integer].field[integer].uri.params{["string"]}
+ 68. @db.query["string"].row[integer].field[integer].uri.hostport
+ 69. @db.query["string"].row[integer].field[integer].uri.transport
+ 70. @db.fetch["string"]
+ 71. @db.fetch["string"].nameaddr.name
+ 72. @db.fetch["string"].nameaddr.uri
+ 73. @db.fetch["string"].nameaddr.uri.type
+ 74. @db.fetch["string"].nameaddr.uri.user
+ 75. @db.fetch["string"].nameaddr.uri.rn_user
+ 76. @db.fetch["string"].nameaddr.uri.pwd
+ 77. @db.fetch["string"].nameaddr.uri.host
+ 78. @db.fetch["string"].nameaddr.uri.port
+ 79. @db.fetch["string"].nameaddr.uri.params{["string"]}
+ 80. @db.fetch["string"].nameaddr.uri.hostport
+ 81. @db.fetch["string"].nameaddr.uri.transport
+ 82. @db.fetch["string"].nameaddr.params{["string"]}
+ 83. @db.fetch["string"].uri.type
+ 84. @db.fetch["string"].uri.user
+ 85. @db.fetch["string"].uri.rn_user
+ 86. @db.fetch["string"].uri.pwd
+ 87. @db.fetch["string"].uri.host
+ 88. @db.fetch["string"].uri.port
+ 89. @db.fetch["string"].uri.params{["string"]}
+ 90. @db.fetch["string"].uri.hostport
+ 91. @db.fetch["string"].uri.transport
+ 92. @db.fetch["string"].row_no
+ 93. @db.fetch["string"].count
+ 94. @db.fetch["string"].is_empty
+ 95. @db.fetch["string"].field[integer]
+ 96. @db.fetch["string"].field[integer].nameaddr.name
+ 97. @db.fetch["string"].field[integer].nameaddr.uri
+ 98. @db.fetch["string"].field[integer].nameaddr.uri.type
+ 99. @db.fetch["string"].field[integer].nameaddr.uri.user
+100. @db.fetch["string"].field[integer].nameaddr.uri.rn_user
+101. @db.fetch["string"].field[integer].nameaddr.uri.pwd
+102. @db.fetch["string"].field[integer].nameaddr.uri.host
+103. @db.fetch["string"].field[integer].nameaddr.uri.port
+104. @db.fetch["string"].field[integer].nameaddr.uri.params{["string"]}
+105. @db.fetch["string"].field[integer].nameaddr.uri.hostport
+106. @db.fetch["string"].field[integer].nameaddr.uri.transport
+107. @db.fetch["string"].field[integer].nameaddr.params{["string"]}
+108. @db.fetch["string"].field[integer].uri.type
+109. @db.fetch["string"].field[integer].uri.user
+110. @db.fetch["string"].field[integer].uri.rn_user
+111. @db.fetch["string"].field[integer].uri.pwd
+112. @db.fetch["string"].field[integer].uri.host
+113. @db.fetch["string"].field[integer].uri.port
+114. @db.fetch["string"].field[integer].uri.params{["string"]}
+115. @db.fetch["string"].field[integer].uri.hostport
+116. @db.fetch["string"].field[integer].uri.transport

+ 54 - 0
doc/select_list/select_eval.txt

@@ -0,0 +1,54 @@
+Selects for eval
+================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @eval.pop[integer]
+  2. @eval.get[integer]
+  3. @eval.get[integer].nameaddr.name
+  4. @eval.get[integer].nameaddr.uri
+  5. @eval.get[integer].nameaddr.uri.type
+  6. @eval.get[integer].nameaddr.uri.user
+  7. @eval.get[integer].nameaddr.uri.rn_user
+  8. @eval.get[integer].nameaddr.uri.pwd
+  9. @eval.get[integer].nameaddr.uri.host
+ 10. @eval.get[integer].nameaddr.uri.port
+ 11. @eval.get[integer].nameaddr.uri.params{["string"]}
+ 12. @eval.get[integer].nameaddr.uri.hostport
+ 13. @eval.get[integer].nameaddr.uri.transport
+ 14. @eval.get[integer].nameaddr.params{["string"]}
+ 15. @eval.get[integer].uri.type
+ 16. @eval.get[integer].uri.user
+ 17. @eval.get[integer].uri.rn_user
+ 18. @eval.get[integer].uri.pwd
+ 19. @eval.get[integer].uri.host
+ 20. @eval.get[integer].uri.port
+ 21. @eval.get[integer].uri.params{["string"]}
+ 22. @eval.get[integer].uri.hostport
+ 23. @eval.get[integer].uri.transport
+ 24. @eval.get[integer].params["string"]
+ 25. @eval.reg["string"]
+ 26. @eval.reg["string"].nameaddr.name
+ 27. @eval.reg["string"].nameaddr.uri
+ 28. @eval.reg["string"].nameaddr.uri.type
+ 29. @eval.reg["string"].nameaddr.uri.user
+ 30. @eval.reg["string"].nameaddr.uri.rn_user
+ 31. @eval.reg["string"].nameaddr.uri.pwd
+ 32. @eval.reg["string"].nameaddr.uri.host
+ 33. @eval.reg["string"].nameaddr.uri.port
+ 34. @eval.reg["string"].nameaddr.uri.params{["string"]}
+ 35. @eval.reg["string"].nameaddr.uri.hostport
+ 36. @eval.reg["string"].nameaddr.uri.transport
+ 37. @eval.reg["string"].nameaddr.params{["string"]}
+ 38. @eval.reg["string"].uri.type
+ 39. @eval.reg["string"].uri.user
+ 40. @eval.reg["string"].uri.rn_user
+ 41. @eval.reg["string"].uri.pwd
+ 42. @eval.reg["string"].uri.host
+ 43. @eval.reg["string"].uri.port
+ 44. @eval.reg["string"].uri.params{["string"]}
+ 45. @eval.reg["string"].uri.hostport
+ 46. @eval.reg["string"].uri.transport
+ 47. @eval.reg["string"].params["string"]
+ 48. @eval.uuid

+ 19 - 0
doc/select_list/select_nathelper.txt

@@ -0,0 +1,19 @@
+Selects for nathelper
+=====================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @nathelper.rewrite_contact[integer]
+  2. @nathelper.rewrite_contact[integer].nameaddr.name
+  3. @nathelper.rewrite_contact[integer].nameaddr.uri
+  4. @nathelper.rewrite_contact[integer].nameaddr.uri.type
+  5. @nathelper.rewrite_contact[integer].nameaddr.uri.user
+  6. @nathelper.rewrite_contact[integer].nameaddr.uri.rn_user
+  7. @nathelper.rewrite_contact[integer].nameaddr.uri.pwd
+  8. @nathelper.rewrite_contact[integer].nameaddr.uri.host
+  9. @nathelper.rewrite_contact[integer].nameaddr.uri.port
+ 10. @nathelper.rewrite_contact[integer].nameaddr.uri.params{["string"]}
+ 11. @nathelper.rewrite_contact[integer].nameaddr.uri.hostport
+ 12. @nathelper.rewrite_contact[integer].nameaddr.uri.transport
+ 13. @nathelper.rewrite_contact[integer].nameaddr.params{["string"]}

+ 7 - 0
doc/select_list/select_rr.txt

@@ -0,0 +1,7 @@
+Selects for rr
+==============
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @rr.dialog_cookie

+ 38 - 0
doc/select_list/select_textops.txt

@@ -0,0 +1,38 @@
+Selects for textops
+===================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @hf_value.<string>{[integer]}
+  2. @hf_value.<string>{[integer]}.param["string"]
+  3. @hf_value.<string>{[integer]}.p["string"]
+  4. @hf_value.<string>{[integer]}.uri
+  5. @hf_value.<string>{[integer]}.uri.type
+  6. @hf_value.<string>{[integer]}.uri.user
+  7. @hf_value.<string>{[integer]}.uri.rn_user
+  8. @hf_value.<string>{[integer]}.uri.pwd
+  9. @hf_value.<string>{[integer]}.uri.host
+ 10. @hf_value.<string>{[integer]}.uri.port
+ 11. @hf_value.<string>{[integer]}.uri.params{["string"]}
+ 12. @hf_value.<string>{[integer]}.uri.hostport
+ 13. @hf_value.<string>{[integer]}.uri.transport
+ 14. @hf_value.<string>{[integer]}.name
+ 15. @hf_value.<string>{[integer]}.nameaddr.name
+ 16. @hf_value.<string>{[integer]}.nameaddr.uri
+ 17. @hf_value.<string>{[integer]}.nameaddr.uri.type
+ 18. @hf_value.<string>{[integer]}.nameaddr.uri.user
+ 19. @hf_value.<string>{[integer]}.nameaddr.uri.rn_user
+ 20. @hf_value.<string>{[integer]}.nameaddr.uri.pwd
+ 21. @hf_value.<string>{[integer]}.nameaddr.uri.host
+ 22. @hf_value.<string>{[integer]}.nameaddr.uri.port
+ 23. @hf_value.<string>{[integer]}.nameaddr.uri.params{["string"]}
+ 24. @hf_value.<string>{[integer]}.nameaddr.uri.hostport
+ 25. @hf_value.<string>{[integer]}.nameaddr.uri.transport
+ 26. @hf_value.<string>{[integer]}.nameaddr.params{["string"]}
+ 27. @hf_value.<string>{[integer]}.params["string"]
+ 28. @hf_value.<string>{[integer]}.<string>
+ 29. @hf_value_exists["string"].<string>
+ 30. @hf_value2.<string>{[integer]}
+ 31. @hf_value2.<string>{[integer]}.params["string"]
+ 32. @hf_value2.<string>{[integer]}.<string>

+ 8 - 0
doc/select_list/select_timer.txt

@@ -0,0 +1,8 @@
+Selects for timer
+=================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @timer.timer["string"].enabled
+  2. @timer.executed

+ 414 - 0
doc/select_list/select_tls.txt

@@ -0,0 +1,414 @@
+Selects for tls
+===============
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @tls
+  2. @tls.version
+  3. @tls.desc
+  4. @tls.description
+  5. @tls.cipher
+  6. @tls.cipher.bits
+  7. @tls.serverName
+  8. @tls.server_name
+  9. @tls.peer
+ 10. @tls.peer.subject
+ 11. @tls.peer.subject.cn
+ 12. @tls.peer.subject.commonName
+ 13. @tls.peer.subject.common_name
+ 14. @tls.peer.subject.name
+ 15. @tls.peer.subject.l
+ 16. @tls.peer.subject.localityName
+ 17. @tls.peer.subject.locality_name
+ 18. @tls.peer.subject.locality
+ 19. @tls.peer.subject.c
+ 20. @tls.peer.subject.countryName
+ 21. @tls.peer.subject.country_name
+ 22. @tls.peer.subject.country
+ 23. @tls.peer.subject.st
+ 24. @tls.peer.subject.stateOrProvinceName
+ 25. @tls.peer.subject.state_or_province_name
+ 26. @tls.peer.subject.state
+ 27. @tls.peer.subject.o
+ 28. @tls.peer.subject.organizationName
+ 29. @tls.peer.subject.organization_name
+ 30. @tls.peer.subject.organization
+ 31. @tls.peer.subject.ou
+ 32. @tls.peer.subject.organizationalUnitName
+ 33. @tls.peer.subject.organizational_unit_name
+ 34. @tls.peer.subject.unit
+ 35. @tls.peer.subj
+ 36. @tls.peer.subj.cn
+ 37. @tls.peer.subj.commonName
+ 38. @tls.peer.subj.common_name
+ 39. @tls.peer.subj.name
+ 40. @tls.peer.subj.l
+ 41. @tls.peer.subj.localityName
+ 42. @tls.peer.subj.locality_name
+ 43. @tls.peer.subj.locality
+ 44. @tls.peer.subj.c
+ 45. @tls.peer.subj.countryName
+ 46. @tls.peer.subj.country_name
+ 47. @tls.peer.subj.country
+ 48. @tls.peer.subj.st
+ 49. @tls.peer.subj.stateOrProvinceName
+ 50. @tls.peer.subj.state_or_province_name
+ 51. @tls.peer.subj.state
+ 52. @tls.peer.subj.o
+ 53. @tls.peer.subj.organizationName
+ 54. @tls.peer.subj.organization_name
+ 55. @tls.peer.subj.organization
+ 56. @tls.peer.subj.ou
+ 57. @tls.peer.subj.organizationalUnitName
+ 58. @tls.peer.subj.organizational_unit_name
+ 59. @tls.peer.subj.unit
+ 60. @tls.peer.issuer
+ 61. @tls.peer.issuer.cn
+ 62. @tls.peer.issuer.commonName
+ 63. @tls.peer.issuer.common_name
+ 64. @tls.peer.issuer.name
+ 65. @tls.peer.issuer.l
+ 66. @tls.peer.issuer.localityName
+ 67. @tls.peer.issuer.locality_name
+ 68. @tls.peer.issuer.locality
+ 69. @tls.peer.issuer.c
+ 70. @tls.peer.issuer.countryName
+ 71. @tls.peer.issuer.country_name
+ 72. @tls.peer.issuer.country
+ 73. @tls.peer.issuer.st
+ 74. @tls.peer.issuer.stateOrProvinceName
+ 75. @tls.peer.issuer.state_or_province_name
+ 76. @tls.peer.issuer.state
+ 77. @tls.peer.issuer.o
+ 78. @tls.peer.issuer.organizationName
+ 79. @tls.peer.issuer.organization_name
+ 80. @tls.peer.issuer.organization
+ 81. @tls.peer.issuer.ou
+ 82. @tls.peer.issuer.organizationalUnitName
+ 83. @tls.peer.issuer.organizational_unit_name
+ 84. @tls.peer.issuer.unit
+ 85. @tls.peer.verified
+ 86. @tls.peer.revoked
+ 87. @tls.peer.expired
+ 88. @tls.peer.self_signed
+ 89. @tls.peer.version
+ 90. @tls.peer.sn
+ 91. @tls.peer.serialNumber
+ 92. @tls.peer.serial_number
+ 93. @tls.peer.notBefore
+ 94. @tls.peer.not_before
+ 95. @tls.peer.notAfter
+ 96. @tls.peer.not_after
+ 97. @tls.peer.email
+ 98. @tls.peer.emailAddress
+ 99. @tls.peer.email_address
+100. @tls.peer.host
+101. @tls.peer.hostname
+102. @tls.peer.dns
+103. @tls.peer.uri
+104. @tls.peer.url
+105. @tls.peer.urn
+106. @tls.peer.ip
+107. @tls.peer.IPAddress
+108. @tls.peer.ip_address
+109. @tls.my
+110. @tls.my.subject
+111. @tls.my.subject.cn
+112. @tls.my.subject.commonName
+113. @tls.my.subject.common_name
+114. @tls.my.subject.name
+115. @tls.my.subject.l
+116. @tls.my.subject.localityName
+117. @tls.my.subject.locality_name
+118. @tls.my.subject.locality
+119. @tls.my.subject.c
+120. @tls.my.subject.countryName
+121. @tls.my.subject.country_name
+122. @tls.my.subject.country
+123. @tls.my.subject.st
+124. @tls.my.subject.stateOrProvinceName
+125. @tls.my.subject.state_or_province_name
+126. @tls.my.subject.state
+127. @tls.my.subject.o
+128. @tls.my.subject.organizationName
+129. @tls.my.subject.organization_name
+130. @tls.my.subject.organization
+131. @tls.my.subject.ou
+132. @tls.my.subject.organizationalUnitName
+133. @tls.my.subject.organizational_unit_name
+134. @tls.my.subject.unit
+135. @tls.my.subj
+136. @tls.my.subj.cn
+137. @tls.my.subj.commonName
+138. @tls.my.subj.common_name
+139. @tls.my.subj.name
+140. @tls.my.subj.l
+141. @tls.my.subj.localityName
+142. @tls.my.subj.locality_name
+143. @tls.my.subj.locality
+144. @tls.my.subj.c
+145. @tls.my.subj.countryName
+146. @tls.my.subj.country_name
+147. @tls.my.subj.country
+148. @tls.my.subj.st
+149. @tls.my.subj.stateOrProvinceName
+150. @tls.my.subj.state_or_province_name
+151. @tls.my.subj.state
+152. @tls.my.subj.o
+153. @tls.my.subj.organizationName
+154. @tls.my.subj.organization_name
+155. @tls.my.subj.organization
+156. @tls.my.subj.ou
+157. @tls.my.subj.organizationalUnitName
+158. @tls.my.subj.organizational_unit_name
+159. @tls.my.subj.unit
+160. @tls.my.issuer
+161. @tls.my.issuer.cn
+162. @tls.my.issuer.commonName
+163. @tls.my.issuer.common_name
+164. @tls.my.issuer.name
+165. @tls.my.issuer.l
+166. @tls.my.issuer.localityName
+167. @tls.my.issuer.locality_name
+168. @tls.my.issuer.locality
+169. @tls.my.issuer.c
+170. @tls.my.issuer.countryName
+171. @tls.my.issuer.country_name
+172. @tls.my.issuer.country
+173. @tls.my.issuer.st
+174. @tls.my.issuer.stateOrProvinceName
+175. @tls.my.issuer.state_or_province_name
+176. @tls.my.issuer.state
+177. @tls.my.issuer.o
+178. @tls.my.issuer.organizationName
+179. @tls.my.issuer.organization_name
+180. @tls.my.issuer.organization
+181. @tls.my.issuer.ou
+182. @tls.my.issuer.organizationalUnitName
+183. @tls.my.issuer.organizational_unit_name
+184. @tls.my.issuer.unit
+185. @tls.my.verified
+186. @tls.my.revoked
+187. @tls.my.expired
+188. @tls.my.self_signed
+189. @tls.my.version
+190. @tls.my.sn
+191. @tls.my.serialNumber
+192. @tls.my.serial_number
+193. @tls.my.notBefore
+194. @tls.my.not_before
+195. @tls.my.notAfter
+196. @tls.my.not_after
+197. @tls.my.email
+198. @tls.my.emailAddress
+199. @tls.my.email_address
+200. @tls.my.host
+201. @tls.my.hostname
+202. @tls.my.dns
+203. @tls.my.uri
+204. @tls.my.url
+205. @tls.my.urn
+206. @tls.my.ip
+207. @tls.my.IPAddress
+208. @tls.my.ip_address
+209. @tls.me
+210. @tls.me.subject
+211. @tls.me.subject.cn
+212. @tls.me.subject.commonName
+213. @tls.me.subject.common_name
+214. @tls.me.subject.name
+215. @tls.me.subject.l
+216. @tls.me.subject.localityName
+217. @tls.me.subject.locality_name
+218. @tls.me.subject.locality
+219. @tls.me.subject.c
+220. @tls.me.subject.countryName
+221. @tls.me.subject.country_name
+222. @tls.me.subject.country
+223. @tls.me.subject.st
+224. @tls.me.subject.stateOrProvinceName
+225. @tls.me.subject.state_or_province_name
+226. @tls.me.subject.state
+227. @tls.me.subject.o
+228. @tls.me.subject.organizationName
+229. @tls.me.subject.organization_name
+230. @tls.me.subject.organization
+231. @tls.me.subject.ou
+232. @tls.me.subject.organizationalUnitName
+233. @tls.me.subject.organizational_unit_name
+234. @tls.me.subject.unit
+235. @tls.me.subj
+236. @tls.me.subj.cn
+237. @tls.me.subj.commonName
+238. @tls.me.subj.common_name
+239. @tls.me.subj.name
+240. @tls.me.subj.l
+241. @tls.me.subj.localityName
+242. @tls.me.subj.locality_name
+243. @tls.me.subj.locality
+244. @tls.me.subj.c
+245. @tls.me.subj.countryName
+246. @tls.me.subj.country_name
+247. @tls.me.subj.country
+248. @tls.me.subj.st
+249. @tls.me.subj.stateOrProvinceName
+250. @tls.me.subj.state_or_province_name
+251. @tls.me.subj.state
+252. @tls.me.subj.o
+253. @tls.me.subj.organizationName
+254. @tls.me.subj.organization_name
+255. @tls.me.subj.organization
+256. @tls.me.subj.ou
+257. @tls.me.subj.organizationalUnitName
+258. @tls.me.subj.organizational_unit_name
+259. @tls.me.subj.unit
+260. @tls.me.issuer
+261. @tls.me.issuer.cn
+262. @tls.me.issuer.commonName
+263. @tls.me.issuer.common_name
+264. @tls.me.issuer.name
+265. @tls.me.issuer.l
+266. @tls.me.issuer.localityName
+267. @tls.me.issuer.locality_name
+268. @tls.me.issuer.locality
+269. @tls.me.issuer.c
+270. @tls.me.issuer.countryName
+271. @tls.me.issuer.country_name
+272. @tls.me.issuer.country
+273. @tls.me.issuer.st
+274. @tls.me.issuer.stateOrProvinceName
+275. @tls.me.issuer.state_or_province_name
+276. @tls.me.issuer.state
+277. @tls.me.issuer.o
+278. @tls.me.issuer.organizationName
+279. @tls.me.issuer.organization_name
+280. @tls.me.issuer.organization
+281. @tls.me.issuer.ou
+282. @tls.me.issuer.organizationalUnitName
+283. @tls.me.issuer.organizational_unit_name
+284. @tls.me.issuer.unit
+285. @tls.me.verified
+286. @tls.me.revoked
+287. @tls.me.expired
+288. @tls.me.self_signed
+289. @tls.me.version
+290. @tls.me.sn
+291. @tls.me.serialNumber
+292. @tls.me.serial_number
+293. @tls.me.notBefore
+294. @tls.me.not_before
+295. @tls.me.notAfter
+296. @tls.me.not_after
+297. @tls.me.email
+298. @tls.me.emailAddress
+299. @tls.me.email_address
+300. @tls.me.host
+301. @tls.me.hostname
+302. @tls.me.dns
+303. @tls.me.uri
+304. @tls.me.url
+305. @tls.me.urn
+306. @tls.me.ip
+307. @tls.me.IPAddress
+308. @tls.me.ip_address
+309. @tls.myself
+310. @tls.myself.subject
+311. @tls.myself.subject.cn
+312. @tls.myself.subject.commonName
+313. @tls.myself.subject.common_name
+314. @tls.myself.subject.name
+315. @tls.myself.subject.l
+316. @tls.myself.subject.localityName
+317. @tls.myself.subject.locality_name
+318. @tls.myself.subject.locality
+319. @tls.myself.subject.c
+320. @tls.myself.subject.countryName
+321. @tls.myself.subject.country_name
+322. @tls.myself.subject.country
+323. @tls.myself.subject.st
+324. @tls.myself.subject.stateOrProvinceName
+325. @tls.myself.subject.state_or_province_name
+326. @tls.myself.subject.state
+327. @tls.myself.subject.o
+328. @tls.myself.subject.organizationName
+329. @tls.myself.subject.organization_name
+330. @tls.myself.subject.organization
+331. @tls.myself.subject.ou
+332. @tls.myself.subject.organizationalUnitName
+333. @tls.myself.subject.organizational_unit_name
+334. @tls.myself.subject.unit
+335. @tls.myself.subj
+336. @tls.myself.subj.cn
+337. @tls.myself.subj.commonName
+338. @tls.myself.subj.common_name
+339. @tls.myself.subj.name
+340. @tls.myself.subj.l
+341. @tls.myself.subj.localityName
+342. @tls.myself.subj.locality_name
+343. @tls.myself.subj.locality
+344. @tls.myself.subj.c
+345. @tls.myself.subj.countryName
+346. @tls.myself.subj.country_name
+347. @tls.myself.subj.country
+348. @tls.myself.subj.st
+349. @tls.myself.subj.stateOrProvinceName
+350. @tls.myself.subj.state_or_province_name
+351. @tls.myself.subj.state
+352. @tls.myself.subj.o
+353. @tls.myself.subj.organizationName
+354. @tls.myself.subj.organization_name
+355. @tls.myself.subj.organization
+356. @tls.myself.subj.ou
+357. @tls.myself.subj.organizationalUnitName
+358. @tls.myself.subj.organizational_unit_name
+359. @tls.myself.subj.unit
+360. @tls.myself.issuer
+361. @tls.myself.issuer.cn
+362. @tls.myself.issuer.commonName
+363. @tls.myself.issuer.common_name
+364. @tls.myself.issuer.name
+365. @tls.myself.issuer.l
+366. @tls.myself.issuer.localityName
+367. @tls.myself.issuer.locality_name
+368. @tls.myself.issuer.locality
+369. @tls.myself.issuer.c
+370. @tls.myself.issuer.countryName
+371. @tls.myself.issuer.country_name
+372. @tls.myself.issuer.country
+373. @tls.myself.issuer.st
+374. @tls.myself.issuer.stateOrProvinceName
+375. @tls.myself.issuer.state_or_province_name
+376. @tls.myself.issuer.state
+377. @tls.myself.issuer.o
+378. @tls.myself.issuer.organizationName
+379. @tls.myself.issuer.organization_name
+380. @tls.myself.issuer.organization
+381. @tls.myself.issuer.ou
+382. @tls.myself.issuer.organizationalUnitName
+383. @tls.myself.issuer.organizational_unit_name
+384. @tls.myself.issuer.unit
+385. @tls.myself.verified
+386. @tls.myself.revoked
+387. @tls.myself.expired
+388. @tls.myself.self_signed
+389. @tls.myself.version
+390. @tls.myself.sn
+391. @tls.myself.serialNumber
+392. @tls.myself.serial_number
+393. @tls.myself.notBefore
+394. @tls.myself.not_before
+395. @tls.myself.notAfter
+396. @tls.myself.not_after
+397. @tls.myself.email
+398. @tls.myself.emailAddress
+399. @tls.myself.email_address
+400. @tls.myself.host
+401. @tls.myself.hostname
+402. @tls.myself.dns
+403. @tls.myself.uri
+404. @tls.myself.url
+405. @tls.myself.urn
+406. @tls.myself.ip
+407. @tls.myself.IPAddress
+408. @tls.myself.ip_address

+ 22 - 0
doc/select_list/select_tm.txt

@@ -0,0 +1,22 @@
+Selects for tm
+==============
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @tm
+  2. @tm.method
+  3. @tm.uas.status
+  4. @tm.uas.request
+  5. @tm.uas.req
+  6. @tm.uas.local_to_tag
+  7. @tm.uas.response
+  8. @tm.uas.resp
+  9. @tm.uac.count
+ 10. @tm.uac.relayed
+ 11. @tm.uac[integer].status
+ 12. @tm.uac[integer].uri
+ 13. @tm.uac[integer].response
+ 14. @tm.uac[integer].resp
+ 15. @tm.uac[integer].request
+ 16. @tm.uac[integer].req

+ 7 - 0
doc/select_list/select_xmlrpc.txt

@@ -0,0 +1,7 @@
+Selects for xmlrpc
+==================
+
+                  [ this file is autogenerated, do not edit ]
+
+
+  1. @xmlrpc.method