Merge remote branch 'origin/sr_3.0'
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Mon, 1 Feb 2010 11:44:30 +0000 (12:44 +0100)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Mon, 1 Feb 2010 11:44:30 +0000 (12:44 +0100)
* origin/sr_3.0:
  tm: fix setting the pre-T callbacks
  drouting: register MI commands
  drouting(k): Makefile updated to link libs
  registrar(k): preserve old bflags upon lookup
  pv: fixed author name
  tm: set request and reply for TMCB_RESPONSE_SENT
  tm: run release function for tmcb parameters
  tm: t_on_xyz("0") fixup updates
  core: usage of drop in onsend_route for Kamailio compatibility
  core: exit() is now equivalent to exit 1
  core: drop reply ser compatibility
  core: drop reply in K compatible style
  sanity: fix include file due to previous re-location
  sanity: moved module from modules_s to modules

683 files changed:
COPYING
Makefile
Makefile.defs
Makefile.rules
README-MODULES
action.c
action.h
atomic/atomic_alpha.h
atomic/atomic_arm.h
atomic/atomic_common.h
atomic/atomic_mips2.h
atomic/atomic_native.h
atomic/atomic_ppc.h
atomic/atomic_sparc.h
atomic/atomic_sparc64.h
atomic/atomic_unknown.h
atomic/atomic_x86.h
atomic_ops.c
atomic_ops.h
atomic_ops_init.h
basex.c
basex.h
bit_scan.c
bit_scan.h
cfg/cfg.c
cfg/cfg.h
cfg/cfg_ctx.c
cfg/cfg_ctx.h
cfg/cfg_script.c
cfg/cfg_script.h
cfg/cfg_select.c
cfg/cfg_select.h
cfg/cfg_struct.c
cfg/cfg_struct.h
cfg_core.c
cfg_core.h
cfg_parser.c
cfg_parser.h
clist.h
comp_defs.h
compiler_opt.h
config.h
core_cmd.c
core_cmd.h
crc.c
daemonize.c
daemonize.h
data_lump.c
data_lump.h
data_lump_rpl.c
data_lump_rpl.h
dns_cache.c
dns_cache.h
dns_wrappers.h
doc/cfg.txt
doc/cvs-commit-rules.txt
doc/dns.txt
doc/doxygen/main.dox
doc/doxygen/ser.doxygen
doc/dst_blacklist.txt
doc/locking.txt
doc/logging-api.txt
doc/management_api.txt [new file with mode: 0644]
doc/modules_init.txt
doc/presence/biblio.xml
doc/presence/cfg/full_ps.cfg
doc/presence/cfg/ps.cfg
doc/presence/draft_iptel_im_rules.xml
doc/presence/examples.xml
doc/presence/install.xml
doc/presence/intro.xml
doc/presence/presence_book.xml
doc/presence/trouble.xml
doc/presence/xcap.xml
doc/ser_radius/ser_radius.xml
doc/sr-coding-style.txt [moved from doc/ser-coding-style.txt with 72% similarity]
doc/tcp_tunning.txt
doc/timers.txt
docbook/entities.xml
dprint.c
dprint.h
dset.c
dset.h
dst_blacklist.c
dst_blacklist.h
endianness.c
endianness.h
error.c
error.h
etc/dictionary.kamailio [moved from etc/dictionary.radius with 100% similarity]
etc/sip-router-oob.cfg
etc/sip-router.cfg
events.c
fix_lumps.h
flags.c
forward.c
hash_func.c
id.c
io_wait.c
ip_addr.c
lib/srdb1/db.c
lib/srdb1/db.h
lib/srdb1/schema/kamailio-mtree.xml [new file with mode: 0644]
lib/srdb1/schema/kamailio-uac.xml [new file with mode: 0644]
lib/srdb1/schema/mtree.xml [new file with mode: 0644]
lib/srdb1/schema/uacreg.xml [new file with mode: 0644]
lib/srdb2/schema/Makefile
lib/srdb2/schema/attr_types.xml
lib/srdb2/schema/global_attrs.xml
local_timer.c
lock_ops.c
lvalue.c
main.c
md5.c
md5utils.c
mod_fix.c
modparam.c
modules/app_lua/Makefile [new file with mode: 0644]
modules/app_lua/README [new file with mode: 0644]
modules/app_lua/app_lua_api.c [new file with mode: 0644]
modules/app_lua/app_lua_api.h [new file with mode: 0644]
modules/app_lua/app_lua_exp.c [new file with mode: 0644]
modules/app_lua/app_lua_exp.h [new file with mode: 0644]
modules/app_lua/app_lua_mod.c [new file with mode: 0644]
modules/app_lua/app_lua_sr.c [new file with mode: 0644]
modules/app_lua/app_lua_sr.h [new file with mode: 0644]
modules/app_lua/doc/Makefile [new file with mode: 0644]
modules/app_lua/doc/app_lua.xml [new file with mode: 0644]
modules/app_lua/doc/app_lua_admin.xml [new file with mode: 0644]
modules/app_python/Makefile [new file with mode: 0644]
modules/app_python/handler.py [new file with mode: 0644]
modules/app_python/python_exec.c [new file with mode: 0644]
modules/app_python/python_exec.h [new file with mode: 0644]
modules/app_python/python_iface.c [new file with mode: 0644]
modules/app_python/python_iface.h [new file with mode: 0644]
modules/app_python/python_mod.c [new file with mode: 0644]
modules/app_python/python_mod.h [new file with mode: 0644]
modules/app_python/python_msgobj.c [new file with mode: 0644]
modules/app_python/python_msgobj.h [new file with mode: 0644]
modules/app_python/python_support.c [new file with mode: 0644]
modules/app_python/python_support.h [new file with mode: 0644]
modules/auth_identity/README
modules/auth_identity/auth_crypt.c
modules/auth_identity/auth_dynstr.c
modules/auth_identity/auth_hdrs.c
modules/auth_identity/auth_http.c
modules/auth_identity/auth_identity.c
modules/auth_identity/auth_identity.h
modules/auth_identity/auth_tables.c
modules/auth_identity/doc/auth_identity.xml
modules/avpops/README
modules/avpops/doc/avpops_admin.xml
modules/carrierroute/README
modules/carrierroute/carrierroute.c
modules/carrierroute/carrierroute.h
modules/carrierroute/cr_carrier.c
modules/carrierroute/cr_carrier.h
modules/carrierroute/cr_config.c
modules/carrierroute/cr_config.h
modules/carrierroute/cr_data.c
modules/carrierroute/cr_data.h
modules/carrierroute/cr_db.c
modules/carrierroute/cr_db.h
modules/carrierroute/cr_domain.c
modules/carrierroute/cr_domain.h
modules/carrierroute/cr_fifo.c
modules/carrierroute/cr_fifo.h
modules/carrierroute/cr_fixup.c
modules/carrierroute/cr_fixup.h
modules/carrierroute/cr_func.c
modules/carrierroute/cr_func.h
modules/carrierroute/cr_map.c
modules/carrierroute/cr_map.h
modules/carrierroute/cr_rule.c
modules/carrierroute/cr_rule.h
modules/carrierroute/doc/carrierroute_admin.xml
modules/carrierroute/prime_hash.c
modules/carrierroute/prime_hash.h
modules/cfg_db/README
modules/cfg_db/doc/cfg_db.xml
modules/cfg_rpc/README
modules/cfg_rpc/doc/cfg_rpc.xml
modules/ctl/README
modules/ctl/doc/ctl.xml
modules/ctl/doc/params.xml
modules/ctl/doc/rpc.xml
modules/db_berkeley/README
modules/db_berkeley/bdb_cmd.c
modules/db_berkeley/bdb_cmd.h
modules/db_berkeley/bdb_con.c
modules/db_berkeley/bdb_con.h
modules/db_berkeley/bdb_fld.c
modules/db_berkeley/bdb_fld.h
modules/db_berkeley/bdb_lib.c
modules/db_berkeley/bdb_lib.h
modules/db_berkeley/bdb_mod.c
modules/db_berkeley/bdb_mod.h
modules/db_berkeley/bdb_res.c
modules/db_berkeley/bdb_res.h
modules/db_berkeley/bdb_uri.c
modules/db_berkeley/bdb_uri.h
modules/db_berkeley/doc/db_berkeley_admin.xml
modules/db_berkeley/km_bdb_lib.c
modules/db_berkeley/km_bdb_lib.h
modules/db_berkeley/km_bdb_mi.c
modules/db_berkeley/km_bdb_mi.h
modules/db_berkeley/km_bdb_res.c
modules/db_berkeley/km_bdb_res.h
modules/db_berkeley/km_bdb_util.c
modules/db_berkeley/km_bdb_util.h
modules/db_berkeley/km_bdb_val.c
modules/db_berkeley/km_bdb_val.h
modules/db_berkeley/km_db_berkeley.c
modules/db_berkeley/km_db_berkeley.h
modules/db_flatstore/README
modules/db_flatstore/doc/db_flatstore.xml [new file with mode: 0644]
modules/db_flatstore/doc/flatstore.xml [deleted file]
modules/db_postgres/pg_fld.c
modules/dialplan/README
modules/dialplan/dialplan.c
modules/dialplan/dialplan.h
modules/dialplan/doc/dialplan_admin.xml
modules/dialplan/dp_db.c
modules/dialplan/dp_db.h
modules/dialplan/dp_repl.c
modules/enum/README
modules/enum/doc/enum_admin.xml
modules/enum/enum.c
modules/enum/enum.h
modules/enum/enum_mod.c
modules/enum/enum_mod.h
modules/geoip/Makefile [new file with mode: 0644]
modules/geoip/README [new file with mode: 0644]
modules/geoip/doc/Makefile [new file with mode: 0644]
modules/geoip/doc/geoip.xml [new file with mode: 0644]
modules/geoip/doc/geoip_admin.xml [new file with mode: 0644]
modules/geoip/geoip_mod.c [new file with mode: 0644]
modules/geoip/geoip_pv.c [new file with mode: 0644]
modules/geoip/geoip_pv.h [new file with mode: 0644]
modules/lcr/README
modules/lcr/doc/lcr_admin.xml
modules/lcr/hash.c
modules/lcr/hash.h
modules/lcr/lcr_mod.c
modules/lcr/lcr_mod.h
modules/lcr/lcr_rpc.c
modules/lcr/lcr_rpc.h
modules/lcr/mi.c
modules/lcr/mi.h
modules/misc_radius/README
modules/misc_radius/doc/misc_radius_admin.xml
modules/mtree/Makefile [new file with mode: 0644]
modules/mtree/README [new file with mode: 0644]
modules/mtree/doc/Makefile [new file with mode: 0644]
modules/mtree/doc/mtree.xml [new file with mode: 0644]
modules/mtree/doc/mtree_admin.xml [new file with mode: 0644]
modules/mtree/mtree.c [new file with mode: 0644]
modules/mtree/mtree.h [new file with mode: 0644]
modules/mtree/mtree_mod.c [new file with mode: 0644]
modules/pdb/README
modules/pdb/doc/pdb_admin.xml
modules/peering/README
modules/peering/doc/peering_admin.xml
modules/privacy/Makefile [new file with mode: 0644]
modules/privacy/doc/Makefile [new file with mode: 0644]
modules/privacy/doc/privacy.xml [new file with mode: 0644]
modules/sanity/README
modules/sanity/doc/functions.xml
modules/sanity/doc/params.xml
modules/sanity/doc/sanity.xml
modules/tls/README
modules/tls/doc/certs_howto.xml
modules/tls/doc/params.xml
modules/tls/doc/tls.xml
modules/tls/fixed_c_zlib.h
modules/tls/tls_config.c
modules/tls/tls_config.h
modules/tls/tls_domain.c
modules/tls/tls_domain.h
modules/tls/tls_init.c
modules/tls/tls_init.h
modules/tls/tls_locking.c
modules/tls/tls_locking.h
modules/tls/tls_mod.c
modules/tls/tls_mod.h
modules/tls/tls_rpc.c
modules/tls/tls_rpc.h
modules/tls/tls_select.c
modules/tls/tls_select.h
modules/tls/tls_server.c
modules/tls/tls_server.h
modules/tls/tls_util.c
modules/tls/tls_util.h
modules/tls/tls_verify.c
modules/tls/tls_verify.h
modules/tm/README
modules/tm/callid.c
modules/tm/callid.h
modules/tm/config.c
modules/tm/config.h
modules/tm/defs.h
modules/tm/dlg.c
modules/tm/dlg.h
modules/tm/doc/api.xml
modules/tm/h_table.c
modules/tm/h_table.h
modules/tm/tm.c
modules/topoh/README
modules/topoh/doc/topoh_admin.xml
modules/topoh/th_mask.c
modules/topoh/th_mask.h
modules/topoh/th_msg.c
modules/topoh/th_msg.h
modules/topoh/topoh_mod.c
modules/utils/conf.c
modules/utils/conf.h
modules/utils/functions.c
modules/utils/functions.h
modules/utils/pidf.c
modules/utils/pidf.h
modules/utils/utils.c
modules/utils/utils.h
modules/utils/xcap_auth.c
modules/utils/xcap_auth.h
modules_k/acc/README
modules_k/acc/doc/acc_admin.xml
modules_k/auth/index.c
modules_k/auth/nonce.c
modules_k/auth_db/README
modules_k/auth_db/doc/auth_db_admin.xml
modules_k/benchmark/README
modules_k/benchmark/doc/benchmark_admin.xml
modules_k/cfgutils/README
modules_k/cfgutils/doc/cfgutils_admin.xml
modules_k/db_oracle/doc/db_oracle_admin.xml
modules_k/domainpolicy/README
modules_k/domainpolicy/doc/domainpolicy_admin.xml
modules_k/group/re_group.c
modules_k/h350/doc/h350_admin.xml
modules_k/imc/doc/imc_admin.xml
modules_k/kex/README
modules_k/kex/doc/kex_admin.xml
modules_k/ldap/README
modules_k/ldap/doc/ldap_admin.xml
modules_k/ldap/doc/ldap_devel.xml
modules_k/ldap/etc/ldap.cfg
modules_k/ldap/ldap_api_fn.c
modules_k/mi_datagram/README
modules_k/mi_datagram/doc/mi_datagram_faq.xml
modules_k/msilo/doc/msilo_admin.xml
modules_k/nat_traversal/doc/nat_traversal_admin.xml
modules_k/nathelper/README
modules_k/nathelper/doc/nathelper_admin.xml
modules_k/nathelper/nathelper.c
modules_k/osp/doc/osp_admin.xml
modules_k/osp/doc/osp_devel.xml
modules_k/perl/doc/perl_admin.xml
modules_k/permissions/README
modules_k/permissions/doc/permissions_admin.xml
modules_k/presence/bind_presence.c
modules_k/presence/bind_presence.h
modules_k/presence/doc/presence_admin.xml
modules_k/presence/event_list.c
modules_k/presence/publish.c
modules_k/presence/subscribe.c
modules_k/presence_mwi/README
modules_k/presence_mwi/add_events.c
modules_k/presence_mwi/add_events.h
modules_k/presence_mwi/doc/presence_mwi_admin.xml
modules_k/presence_mwi/presence_mwi.c
modules_k/presence_mwi/presence_mwi.h
modules_k/presence_xml/doc/presence_xml_admin.xml
modules_k/pua/README
modules_k/pua/doc/pua_admin.xml
modules_k/pua/doc/pua_devel.xml
modules_k/pua_usrloc/README
modules_k/pua_usrloc/doc/pua_usrloc_admin.xml
modules_k/pua_usrloc/pua_usrloc.c
modules_k/pua_usrloc/pua_usrloc.h
modules_k/pua_usrloc/ul_publish.c
modules_k/purple/README
modules_k/purple/doc/purple_admin.xml
modules_k/pv/pv.c
modules_k/pv/pv_branch.c
modules_k/pv/pv_branch.h
modules_k/pv/pv_time.c
modules_k/pv/pv_time.h
modules_k/ratelimit/README
modules_k/ratelimit/config.c [new file with mode: 0644]
modules_k/ratelimit/config.h [new file with mode: 0644]
modules_k/ratelimit/doc/ratelimit_admin.xml
modules_k/ratelimit/ratelimit.c
modules_k/regex/doc/regex_admin.xml
modules_k/registrar/README
modules_k/registrar/doc/registrar_admin.xml
modules_k/registrar/doc/registrar_faq.xml
modules_k/rls/doc/rls_admin.xml
modules_k/rr/README
modules_k/rr/doc/rr_admin.xml
modules_k/seas/doc/seas_admin.xml
modules_k/seas/doc/seas_devel.xml
modules_k/siptrace/doc/siptrace_admin.xml
modules_k/siputils/README
modules_k/siputils/checks.c
modules_k/siputils/checks.h
modules_k/siputils/contact_ops.c
modules_k/siputils/contact_ops.h
modules_k/siputils/doc/siputils_admin.xml
modules_k/siputils/options.c
modules_k/siputils/options.h
modules_k/siputils/ring.c
modules_k/siputils/ring.h
modules_k/siputils/sipops.c
modules_k/siputils/sipops.h
modules_k/siputils/siputils.c
modules_k/siputils/utils.c
modules_k/siputils/utils.h
modules_k/sl/README
modules_k/sl/doc/sl_admin.xml
modules_k/snmpstats/doc/snmpstats_faq.xml
modules_k/speeddial/README
modules_k/speeddial/doc/speeddial_admin.xml
modules_k/sqlops/README
modules_k/sqlops/doc/sqlops_admin.xml
modules_k/sqlops/sql_api.c
modules_k/sqlops/sql_api.h
modules_k/sqlops/sql_var.c
modules_k/sqlops/sql_var.h
modules_k/sqlops/sqlops.c
modules_k/sst/README
modules_k/sst/doc/sst_admin.xml
modules_k/sst/sst.c
modules_k/sst/sst_handlers.c
modules_k/sst/sst_handlers.h
modules_k/sst/sst_mi.c
modules_k/sst/sst_mi.h
modules_k/textops/doc/textops_admin.xml
modules_k/tmx/README
modules_k/tmx/doc/tmx_admin.xml
modules_k/uac/Makefile
modules_k/uac/README
modules_k/uac/auth.c
modules_k/uac/auth.h
modules_k/uac/auth_alg.h
modules_k/uac/auth_hdr.c
modules_k/uac/auth_hdr.h
modules_k/uac/doc/uac.xml
modules_k/uac/doc/uac_admin.xml
modules_k/uac/uac.c
modules_k/uac/uac_reg.c [new file with mode: 0644]
modules_k/uac/uac_reg.h [new file with mode: 0644]
modules_k/uac/uac_send.c
modules_k/userblacklist/README
modules_k/userblacklist/doc/userblacklist_admin.xml
modules_k/xcap_client/README
modules_k/xcap_client/doc/xcap_client_admin.xml
modules_k/xcap_client/doc/xcap_client_devel.xml
modules_k/xlog/README
modules_k/xlog/doc/xlog.xml
modules_k/xlog/doc/xlog_admin.xml
modules_k/xlog/xl_lib.c
modules_k/xlog/xlog.c
modules_k/xmpp/doc/xmpp_admin.xml
modules_k/xmpp/xmpp.c
modules_s/fifo/README [new file with mode: 0644]
modules_s/presence_b2b/README
modules_s/presence_b2b/doc/functions.xml
modules_s/presence_b2b/doc/params.xml
modules_s/presence_b2b/doc/presence_b2b.xml
modules_s/rr/avp_cookie.c
modules_s/tls/doc/tls.xml
modules_s/unixsock/README [new file with mode: 0644]
msg_translator.c
nonsip_hooks.c
parser/case_acce.h
parser/case_allo.h
parser/case_auth.h
parser/case_call.h
parser/case_cont.h
parser/case_cseq.h
parser/case_date.h
parser/case_dive.h
parser/case_even.h
parser/case_expi.h
parser/case_from.h
parser/case_iden.h
parser/case_max.h
parser/case_min.h
parser/case_orga.h
parser/case_path.h
parser/case_prio.h
parser/case_priv.h
parser/case_prox.h
parser/case_reco.h
parser/case_refe.h
parser/case_reje.h
parser/case_remo.h
parser/case_requ.h
parser/case_retr.h
parser/case_rout.h
parser/case_serv.h
parser/case_sess.h
parser/case_sip.h
parser/case_subj.h
parser/case_subs.h
parser/case_supp.h
parser/case_to.h
parser/case_unsu.h
parser/case_user.h
parser/case_via.h
parser/case_www.h
parser/hf.c
parser/hf.h
parser/keys.h
parser/msg_parser.c
parser/msg_parser.h
parser/parse_allow.c
parser/parse_allow.h
parser/parse_body.c
parser/parse_body.h
parser/parse_content.c
parser/parse_content.h
parser/parse_cseq.c
parser/parse_cseq.h
parser/parse_date.c
parser/parse_date.h
parser/parse_def.h
parser/parse_disposition.c
parser/parse_disposition.h
parser/parse_diversion.c
parser/parse_diversion.h
parser/parse_event.c
parser/parse_event.h
parser/parse_expires.c
parser/parse_expires.h
parser/parse_fline.c
parser/parse_fline.h
parser/parse_from.c
parser/parse_from.h
parser/parse_hname2.c
parser/parse_hname2.h
parser/parse_hostport.c
parser/parse_hostport.h
parser/parse_identity.c
parser/parse_identity.h
parser/parse_identityinfo.c
parser/parse_identityinfo.h
parser/parse_methods.c
parser/parse_methods.h
parser/parse_nameaddr.c
parser/parse_nameaddr.h
parser/parse_param.c
parser/parse_param.h
parser/parse_refer_to.c
parser/parse_refer_to.h
parser/parse_retry_after.c
parser/parse_retry_after.h
parser/parse_rpid.c
parser/parse_rpid.h
parser/parse_rr.c
parser/parse_rr.h
parser/parse_sipifmatch.c
parser/parse_sipifmatch.h
parser/parse_subscription_state.c
parser/parse_subscription_state.h
parser/parse_to.c
parser/parse_to.h
parser/parse_uri.c
parser/parse_uri.h
parser/parse_via.c
parser/parse_via.h
parser/parser_f.c
parser/parser_f.h
pass_fd.c
pkg/debian/control
pkg/freebsd/pkg-plist
pkg/gentoo/ser-0.8.10.ebuild
pkg/gentoo/ser-0.8.9.ebuild
pkg/netbsd/PLIST
pkg/openbsd/pkg/PLIST
pkg/opensuse/ser.spec
pkg/rpm/ser.spec-4.1
pkg/solaris/prototype
pkg/suse/ser.spec
proxy.c
pt.c
pv_core.c
pvapi.c
qvalue.c
re.c
receive.c
resolve.c
route.c
route_struct.c
rpc_lookup.c
rvalue.c
script_cb.c
scripts/dbtext/ser_db/attr_types
scripts/dbtext/ser_db/global_attrs
scripts/mysql/my_create.sql
scripts/mysql/my_data.sql
scripts/oracle/or_data.sql
scripts/postgres/pg_data.sql
sctp_options.c
sctp_server.c
select.c
select_buf.c
select_core.c
ser_stun.c
signals.c
sip_msg_clone.c
socket_info.c
sr_compat.c
sr_module.c
stats.c
switch.c
tcp_main.c
tcp_options.c
tcp_read.c
test/unit/11.cfg
test/unit/11.sh
test/unit/12.cfg
test/unit/15.sh
test/unit/18.sh
test/unit/19.cfg
test/unit/19.sh
test/unit/20.cfg
test/unit/20.sh
test/unit/21.cfg
test/unit/21.sh
test/unit/24.sh
test/unit/25.cfg
test/unit/25.sh
test/unit/26.sh
test/unit/28.cfg
test/unit/28.sh
test/unit/29.sh
test/unit/32.sh
test/unit/33.cfg
test/unit/33.sh
test/unit/34.cfg
test/unit/34.sh
test/unit/36.sh
test/unit/40.cfg
test/unit/40.sh
test/unit/41.cfg
test/unit/41.sh
test/unit/42.sh
test/unit/43.sh
test/unit/5.cfg
test/unit/5.sh
timer.c
timer.h
timer_funcs.h
timer_proc.c
timer_proc.h
timer_ticks.h
tls_hooks.c
tls_hooks.h
tls_hooks_init.h
tsend.c
udp_server.c
usr_avp.c
ut.c
utils/README-UTILS [new file with mode: 0644]
utils/kamctl/db_berkeley/kamailio/dr_gateways [new file with mode: 0644]
utils/kamctl/db_berkeley/kamailio/dr_groups [new file with mode: 0644]
utils/kamctl/db_berkeley/kamailio/dr_gw_lists [new file with mode: 0644]
utils/kamctl/db_berkeley/kamailio/dr_rules [new file with mode: 0644]
utils/kamctl/db_berkeley/kamailio/version
utils/kamctl/dbtext/kamailio/dr_gateways [new file with mode: 0644]
utils/kamctl/dbtext/kamailio/dr_groups [new file with mode: 0644]
utils/kamctl/dbtext/kamailio/dr_gw_lists [new file with mode: 0644]
utils/kamctl/dbtext/kamailio/dr_rules [new file with mode: 0644]
utils/kamctl/dbtext/kamailio/version
utils/kamctl/mysql/mtree-create.sql [new file with mode: 0644]
utils/kamctl/mysql/uac-create.sql [new file with mode: 0644]
utils/kamctl/oracle/mtree-create.sql [new file with mode: 0644]
utils/kamctl/oracle/uac-create.sql [new file with mode: 0644]
utils/kamctl/postgres/mtree-create.sql [new file with mode: 0644]
utils/kamctl/postgres/uac-create.sql [new file with mode: 0644]
utils/sercmd/sercmd.c
version.h

diff --git a/COPYING b/COPYING
index 21550e8..5d1f230 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -2,18 +2,19 @@
 -------------------------------------------------------------------------
 IMPORTANT NOTES
 
-1) The GPL applies to this copy of SIP Express Router software (ser).
+1) The GPL applies to this copy of SIP Router software (sip-router).
 
-2) ser software allows programmers to plug-in external modules to the
+2) SIP-router software allows programmers to plug-in external modules to the
    core part. Note that GPL mandates all plug-ins developed for the
-   ser software released under GPL license to be GPL-ed or use a GPL
-   compatible free software license.
+   SIP-router software are to be released under GPL license to be GPL-ed or 
+   use a GPL compatible free software license.
 
    (see http://www.gnu.org/copyleft/gpl-faq.html#GPLAndPlugins
     for a detailed explanation)
 
 3) Note that the GPL bellow is copyrighted by the Free Software Foundation,
-   but the ser software is copyrighted by FhG
+   but the SIP-router software is copyrighted by multiple individuals and
+   companies.
 
 -------------------------------------------------------------------------
 
@@ -22,11 +23,12 @@ GNU Licence FAQ
 This FAQ provides answers to most frequently asked questions. To fully
 understand implications of the GNU license, read it.
 
-- you can run SER for any purpose
+- you can run SIP-router for any purpose
 - you can redistribute it as long as you include source code and
   license conditions with the distribution
-- you cannot release programs derived from SER without releasing
+- you cannot release programs derived from SIP-router without releasing
   their source code
+- you can not change the copyright of any part of SIP-router
 
 
 -------------------------------------------------------------------------
index 0fcb418..b6dc645 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -287,6 +287,12 @@ else
        # excluded because they do not compile (remove them only after they are
        #  fixed) -- andrei
        exclude_modules+= bdb dbtext iptrtpproxy pa rls
+       # depends on libgeoip
+       exclude_modules+= geoip
+       # depends on liblua5.1-dev
+       exclude_modules+= app_lua
+       # depends on libpython-dev
+       exclude_modules+= app_python
 endif
 
 # always exclude the CVS dir
@@ -422,7 +428,11 @@ C_INSTALL_BIN=     # sercmd is now installed by ctl
 
 # which utils know to install themselves and should be installed
 # along the core (list of utils directories)
+ifeq ($(FLAVOUR),kamailio)
+C_INSTALL_UTILS= utils/kamctl
+else
 C_INSTALL_UTILS=
+endif
 # list of scripts that should be installed along the core 
 # (here a script is something that doesn't have a Makefile)
 C_INSTALL_SCRIPTS=
@@ -802,6 +812,10 @@ bin:
 deb:
        -@if [ -d debian ]; then \
                dpkg-buildpackage -rfakeroot -tc; \
+       elif [ -d pkg/$(MAIN_NAME)/debian ]; then \
+               ln -s pkg/$(MAIN_NAME)/debian debian; \
+               dpkg-buildpackage -rfakeroot -tc; \
+               rm debian; \
        else \
                ln -s pkg/debian debian; \
                dpkg-buildpackage -rfakeroot -tc; \
@@ -876,26 +890,42 @@ $(man_prefix)/$(man_dir)/man5:
 
 # note: sed with POSIX.1 regex doesn't support |, + or ? (darwin, solaris ...) 
 install-cfg: $(cfg_prefix)/$(cfg_dir)
-               @sed $(foreach m,$(modules_dirs),\
-                               -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
-                       < etc/$(CFG_NAME)-basic.cfg > \
-                       $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample
-               @chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample
-               @if [ -z "${skip_cfg_install}" -a \
-                               ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg ]; then \
-                       mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample \
-                               $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg; \
+               @if [ -f etc/$(CFG_NAME).cfg ]; then \
+                       sed $(foreach m,$(modules_dirs),\
+                                       -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
+                               < etc/$(CFG_NAME).cfg > \
+                               $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample; \
+                       chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample; \
+                       if [ -z "${skip_cfg_install}" -a \
+                                       ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg ]; then \
+                               mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg.sample \
+                                       $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME).cfg; \
+                       fi; \
+               fi
+               @if [ -f etc/$(CFG_NAME)-basic.cfg ]; then \
+                       sed $(foreach m,$(modules_dirs),\
+                                       -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
+                               < etc/$(CFG_NAME)-basic.cfg > \
+                               $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg.sample; \
+                       chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg.sample; \
+                       if [ -z "${skip_cfg_install}" -a \
+                                       ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg ]; then \
+                               mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg.sample \
+                                       $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-basic.cfg; \
+                       fi; \
                fi
-               @sed $(foreach m,$(modules_dirs),\
-                       -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
-                       < etc/$(CFG_NAME)-oob.cfg \
-                       > $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample
-               @chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample
-               @if [ -z "${skip_cfg_install}" -a \
-                               ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg ]; \
-               then \
-                       mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample \
-                               $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg; \
+               @if [ -f etc/$(CFG_NAME)-oob.cfg ]; then \
+                       sed $(foreach m,$(modules_dirs),\
+                               -e "s#/usr/[^:]*lib/$(CFG_NAME)/$(m)\([:/\"]\)#$($(m)_target)\1#g") \
+                               < etc/$(CFG_NAME)-oob.cfg \
+                               > $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample; \
+                       chmod 644 $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample; \
+                       if [ -z "${skip_cfg_install}" -a \
+                                       ! -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg ]; \
+                       then \
+                               mv -f $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg.sample \
+                                       $(cfg_prefix)/$(cfg_dir)$(MAIN_NAME)-advanced.cfg; \
+                       fi; \
                fi
                # other configs
                @for r in $(C_INSTALL_CFGS) ; do \
index eca85ad..a015244 100644 (file)
@@ -113,7 +113,15 @@ $(info normal Makefile.defs exec)
 endif # verbose
 
 # flavour: sip-router, ser or kamailio
-FLAVOUR=sip-router
+FLAVOUR?=sip-router
+
+#prefix for various configs and scripts
+#config name/name-prefix for distributed configs
+CFG_NAME=sip-router
+#config name/name-prefix for distributed scripts
+SCR_NAME=sip-router
+#name in source tree
+SRC_NAME=sip-router
 
 ifeq ($(FLAVOUR),sip-router)
 # main binary name
@@ -124,27 +132,25 @@ MAIN_NAME=ser
 else ifeq ($(FLAVOUR),kamailio)
 # main binary name
 MAIN_NAME=kamailio
+# use kamailio config
+CFG_NAME=kamailio
+# kamailio statistics on
+KMSTATS ?= 1
+# fast malloc statistics on
+FMSTATS ?= 1
 else # default:
 # main binary name
 MAIN_NAME=sip-router
 endif
 
-#prefix for various configs and scripts
-#config name/name-prefix for distributed configs
-CFG_NAME=sip-router
-#config name/name-prefix for distributed scripts
-SCR_NAME=sip-router
-#name in source tree
-SRC_NAME=sip-router
-
 # what to install
 INSTALL_FLAVOUR=$(FLAVOUR)
 
 #version number
-VERSION = 2
-PATCHLEVEL = 99
+VERSION = 3
+PATCHLEVEL = 0
 SUBLEVEL =  99
-EXTRAVERSION = -pre3
+EXTRAVERSION = -dev1
 
 SER_VER = $(shell expr $(VERSION) \* 1000000 + $(PATCHLEVEL) \* 1000 + \
                        $(SUBLEVEL) )
@@ -650,6 +656,9 @@ endif
 ifeq ($(KMSTATS), 1)
        C_DEFS+= -DSTATISTICS
 endif
+ifeq ($(FMSTATS), 1)
+       C_DEFS+= -DMALLOC_STATS
+endif
 
 ifneq ($(STUN),)
        C_DEFS+= -DUSE_STUN
index 8f254f4..e2ba439 100644 (file)
@@ -251,8 +251,13 @@ clean-tmp:
 .PHONY: doxygen
 doxygen:
        -@mkdir -p $(doxygen_dir)
-       doxygen ./$(COREPATH)/doc/doxygen/ser.doxygen
-
+       -@echo "Create Doxygen documentation"
+       # disable call graphes, because of the DOT dependencies
+       (cat ./$(COREPATH)/doc/doxygen/ser.doxygen; \
+       echo "HAVE_DOT=no" ;\
+       echo "PROJECT_NAME=SIP-ROUTER" ;\
+       echo "PROJECT_NUMBER=$(NAME)-$(RELEASE)" )| doxygen -
+       -@echo "Doxygen documentation created"
 
 .PHONY: clean_doxygen
 clean_doxygen:
index fb8eaa9..8861ec6 100644 (file)
@@ -12,7 +12,9 @@ provide some modules in two versions, which means that we have three set of modu
  - modules_s:  SER modules
 
 All modules are compatible with the core, so regardless if you are a new user or 
-an existing, you are free to make a choice between the three sets.
+an existing, you are free to make a choice between the three sets as well as
+mix and match between them.
+
 Note that if you are currently using one product, you want to select the module
 that exists in the K/S directories first to get a smooth upgrade path.
 
@@ -33,26 +35,41 @@ A module providers up to three different APIs:
 
 A single module may provide a selection of this, maybe only one of them.
 
+Why do we have two modules with the same name?
+==============================================
+Some modules exists both in modules_k and modules_s - like xlog. If you are
+upgrading from Kamailio, we recommend using the one in modules_k for backwards
+compatibility, if you are using SER then select the one in modules_s.
+In the future the development team will try to integrate modules that are
+split like this into one integrated module.
+
 Core modules
 ------------
+auth_identity          SIP Identity support (RFC 4474)
 auth_radius            Radius authentication
 avpops                 Attribute-value pair operations ("variables")
 carrierroute           A telephony routing module
+cfg_db                 Database driver for configuration API
+cfg_rpc
+ctl
 db_berkeley            Database :: Berkeley DB (Oracle)
 db_flatstore           Database :: Flatstore
 db_mysql               Database :: Mysql
 db_postgres            Database :: PostgreSQL
 dialplan               Dialplan management
 enum                   Enum support
+iptrtpproxy            NAT traversal :: Kernel based RTP proxy
 lcr                    Least cost routing
 mediaproxy             Nat traversal :: Mediaproxy (AG projects)
 mi_rpc                 Management Interface :: XML RPC support
 misc_radius            Various Radius functions
-pdb                    ???
+pdb                    Number portabilityusing external server
 peering                        SIP peering between service providers
 tls                    SSL/TLS support
 tm                     SIP transaction support (stateful proxy)
+topoh                  Topology hinding
 utils                  Various utilities (http query, xcap status)
+xmlrpc
 
 Kamailio modules
 ----------------
@@ -64,7 +81,7 @@ auth_diameter         Authentication based on Diameter
 benchmark              Development benchmark module
 call_control           Call timeouts and management (depends on Dialog module)
 cfgutils               Various configuration utilities
-cpl-c
+cpl-c                  Implementation of SIP Call Processing Language (RFC 3880)
 db_oracle              Database :: Oracle support
 db_text                        Database :: Text support
 db_unixodbc            Database :: Unix ODBC support
@@ -72,9 +89,9 @@ dialog                        Dialog ("call") state module
 dispatcher             Load balancing and failover
 diversion              Call redirect support (SIP Diversion: header)
 domain                 Proxy :: Multiple domain support using databases
-domainpolicy
+domainpolicy           Proxy :: Obsolete module - This module is no longer maintained
 drouting               Proxy :: Dynamic routing
-exec
+exec                   External exec module
 group                  Utils :: Group membership checking
 h350                   LDAP/ITU H.350 multimedia schema support
 htable                 Utils :: Hash table support
@@ -101,14 +118,14 @@ presence          Presence :: Core presence module
 presence_dialoginfo    Presence :: Dialog info
 presence_mwi           Presence :: Message waiting indication
 presence_xml           Presence :: XML handler
-pua
-pua_bla
-pua_dialoginfo
+pua                    Presence :: Common module
+pua_bla                        Presence :: BLA
+pua_dialoginfo         Presence :: Dialog Info support
 pua_mi                 Presence :: Management interface
-pua_usrloc
+pua_usrloc             Presence :: USRLOC integration
 pua_xmpp               Presence :: XMPP/Jabber gateway
 purple                 Presence :: Libpurple support
-pv
+pv                     Pseudo-variable implementation
 qos                    Dialogs :: SDP management 
 ratelimit              Security :: Rate limit
 regex                  Regular expression support
@@ -123,16 +140,16 @@ siputils          Various utilities for SIP call handling
 sl                     Proxy :: Stateless handling of SIP messages
 sms                    SMS gateway support
 snmpstats              SNMP support (net-snmp agentx)
-speeddial
-sqlops
-sst
-statistics
+speeddial              Per-user speed-dial controller module
+sqlops                 SQL operations
+sst                    SIP Session Timers implementation
+statistics             Script statistics support
 textops                        Text operations
 tmx                    Proxy :: Kamailio transaction extensions (TM module)
-uac
-uac_redirect
-uri_db
-userblacklist
+uac                    UAC functions (From: mangling and UAC auth)
+uac_redirect           UAC redirection support
+uri_db                 URI operation with database support
+userblacklist          User-specific blacklists
 usrloc                 Proxy :: Location server
 xcap_client            Presence :: XCAP support
 xlog                   Utils :: Extended logging support
@@ -140,65 +157,59 @@ xmpp                      Presence/IM :: XMPP/jabber gateway
 
 SER modules
 -----------
-acc_db
-acc_radius
-acc_syslog
-auth
-auth_db
-auth_identity
-avp
-avp_db
-bdb
-blst
-cfg_db
-cfg_rpc
-cpl-c
-ctl
-db_ops
-dbg
-dbtext
+acc_db                 Authentication :: acc module is used to report on transactions to database
+acc_radius             Authentication :: acc module is used to report on transactions to RADIUS.
+acc_syslog             Authentication :: acc module is used to report on transactions to syslog
+auth                   Authentication backend (needs additional modules)
+auth_db                        Database authentication
+avp                    functions used to manipulate the contents of Attribute-Value pairs
+avp_db                 Attribute-value pairs in database
+bdb                    Database :: Berkeley DB (Oracle)
+blst                   Blacklist management
+cpl-c                  CPL support in SIP-router
+db_ops                 Database :: SQL operations from configurtion script
+dbg                    Debugging support
+dbtext                 Database :: Text
 dialog
-dispatcher
+dispatcher             Load balancing ::  a dispatcher for destination addresses
 diversion              Proxy :: Call redirection support (Diversion: header)
 domain                 Proxy :: Multiple domain support
-eval
+eval                   implements expression evaluation in route script
 exec                   Proxy :: External script support (modify route set)
-fifo           
+fifo                   Obsolete :: This module is replaced by the modules/ctl module
 gflags                 Proxy :: Global flags
-iptrtpproxy            NAT traversal :: Kernel based RTP proxy
 jabber                 IM :: Jabber gateway
 ldap                   LDAP directory server support
-mangler
+mangler                        SDP mangling
 maxfwd                 Proxy :: Loop prevention (max-forwards header)
-msilo
+msilo                  Offline message storage
 nathelper              NAT traversal :: RTP proxy (SIPPY software)
 options                        Proxy :: Support for SIP OPTION request
 oracle                 Database :: Oracle
 osp                    Open Settlement Protocol
-pa
-pdt
+pa                     Presence :: server
+pdt                    Proxy :: Simple routing on number prefixes
 permissions            Security :: ACL support like TCP wrappers
-pike
-prefix_route
-presence_b2b
-print
-print_lib
-ratelimit
-registrar
-rls
-rr
-sanity
-sl
-sms
-speeddial
-textops
-timer
-tls
-uac
-unixsock
-uri
-uri_db
-usrloc
-xcap
+pike                   Security :: Rate limit control
+prefix_route           Proxy :: Routing based on a set of prefixes from the database
+presence_b2b           Presence :: Back2back UA
+print                  Example module for developers
+print_lib              Example module for developers
+ratelimit              Security :: Rate limit of SIP requests
+registrar              Registrar (for REGISTER requests)
+rls                    Resource list server (for presence)
+rr                     Proxy :: Record routing logic
+sanity                 Implement several sanity checks on incoming requests
+sl                     Proxy :: Stateless replies
+sms                    SMS gateway
+speeddial              Proxy :: Speed dialing for users
+textops                        Text operations (search, replace)
+timer                  triggering specific route block on timer
+tls                    TLS module * DEPRECATED * Use the modules/tls module instead
+uac                    User agent client
+unixsock               Obsolete :: This module is replaced by the modules/ctl module
+uri                    URI checks
+uri_db                 URI checks with database support
+usrloc                 Location server
+xcap                   Presence :: XCAP integration
 xlog                   Extended logging support
-xmlrpc
index ddbf445..d23b61d 100644 (file)
--- a/action.c
+++ b/action.c
  *  2009-09-15  added SET_{FWD,RPL}_NO_CONNECT, SET_{FWD,RPL}_CLOSE (andrei)
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
+
 
 #include "comp_defs.h"
 
index c07b9ae..c11baa9 100644 (file)
--- a/action.h
+++ b/action.h
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+/*!
+ * \file
+ * \brief SIP-router core ::
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 #ifndef action_h
 #define action_h
index 1037b18..cc88236 100644 (file)
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
- *  atomic operations and memory barriers (alpha specific)
+
+/** @file
+ *  @brief atomic operations and memory barriers (alpha specific)
+ *
  *  WARNING: atomic ops do not include memory barriers
  *  see atomic_ops.h for more details 
  *
index 521e61d..71a048a 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file      @brief
  *  atomic ops and memory barriers for arm (>= v3)
  *  see atomic_ops.h for more details 
  *
index 691e35f..ddd7b0b 100644 (file)
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file       @brief
  * common part for all the atomic operations (atomic_t and common operations)
- *  See atomic_ops.h for more info.
+ *  See @ref atomic_ops.h for more info.
  */
+
 /* 
  * History:
  * --------
 #ifndef __atomic_common
 #define __atomic_common
 
-/* atomic_t defined as a struct to easily catch non atomic ops. on it,
+/** @brief atomic_t defined as a struct to easily catch non atomic ops. on it,
  * e.g.  atomic_t  foo; foo++  will generate a compile error */
 typedef struct{ volatile int val; } atomic_t; 
 
 
-/* store and load operations are atomic on all cpus, note however that they
+/** @name AtomicOps store and load operations are atomic on all cpus, note however that they
  * don't include memory barriers so if you want to use atomic_{get,set} 
  * to implement mutexes you must use the mb_* versions or explicitely use
  * the barriers */
 
+/*@{ */
+
 #define atomic_set_int(pvar, i) (*(int*)(pvar)=i)
 #define atomic_set_long(pvar, i) (*(long*)(pvar)=i)
 #define atomic_get_int(pvar) (*(int*)(pvar))
@@ -50,5 +54,6 @@ inline static int atomic_get(atomic_t *v)
        return atomic_get_int(&(v->val));
 }
 
+/*@} */
 
 #endif
index 32342a7..2e07377 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  atomic operations and memory barriers (mips isa 2 and mips64 specific)
  *  WARNING: atomic ops do not include memory barriers
  *  see atomic_ops.h for more details 
index e378cbc..02ff528 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  include file for native (asm) atomic operations and memory barriers
  *  WARNING: atomic ops do not include memory barriers
  *  See atomic_ops.h for more info.
index fde0517..a8f45e3 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  atomic operations and memory barriers (powerpc and powerpc64 versions)
  *  WARNING: atomic ops do not include memory barriers
  *  see atomic_ops.h for more details 
index b774550..7ad4c40 100644 (file)
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  memory barriers for sparc32 ( version < v 9))
  *  see atomic_ops.h for more details 
  *
  * Config defines: NOSMP
  */
+
 /* 
  * History:
  * --------
index 9c39958..8401324 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  atomic operations and memory barriers (sparc64 version, 32 and 64 bit modes)
  *  WARNING: atomic ops do not include memory barriers
  *  see atomic_ops.h for more details 
@@ -25,6 +26,7 @@
  *                               sparc32plus code)
  *               - NOSMP
  */
+
 /* 
  * History:
  * --------
index b2e190c..4d55a7e 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  atomic operations and memory barriers implemented using locks
  *  (for architectures not yet supported via inline asm)
  *
index d098625..e62600a 100644 (file)
@@ -15,7 +15,8 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+
+/** @file @brief
  *  atomic operations and memory barriers (x86 and x86_64/amd64 specific)
  *  WARNING: atomic ops do not include memory barriers
  *  see atomic_ops.h for more details 
index f9e5c2f..e631f9f 100644 (file)
  *  2006-03-08  created by andrei
  *  2007-05-11  added lock_set support (andrei)
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 #include "atomic_ops_init.h"
 #include "atomic_ops.h"
index 22e281d..7b0d1f8 100644 (file)
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
+
+/*!
+ * \file
+ * \brief SIP-router core :: Atomic operations and memory barriers
+ * \ingroup core
+ * Module: \ref core
+ * See \ref atomicops
+ */
+
 /*
- *  atomic operations and memory barriers
+ * \page atomicops  Atomic operations and memory barriers
+ *
  *  WARNING: atomic ops do not include memory barriers
  *  
  *  memory barriers:
 
 #include "atomic/atomic_native.h"
 
-/* if no native operations, emulate them using locks */
+/*! \brief if no native operations, emulate them using locks */
 #if  ! defined HAVE_ASM_INLINE_ATOMIC_OPS || ! defined HAVE_ASM_INLINE_MEMBAR
 
 #include "atomic/atomic_unknown.h"
index 4de6e40..49adccf 100644 (file)
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
  * ser is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
-/*
- * atomic_ops init functions
- * (needed for lock intializing if no native asm locks are available
- *  for the current arch./compiler combination, see atomic_ops.c)
+
+/*!
+ * \file
+ * \brief SIP-router core :: atomic_ops init functions
+ *
+ * \ingroup core
+ * Module: \ref core
+ *
+ * Needed for lock intializing if no native asm locks are available
+ *  for the current arch./compiler combination, see \ref atomic_ops.c
  */
 /* 
  * History:
@@ -38,9 +39,9 @@
 #ifndef __atomic_ops_init_h
 #define __atomic_ops_init_h
 
-/* init atomic ops */
+/*! \brief init atomic ops */
 int init_atomic_ops();
-/* destroy atomic ops (e.g. frees the locks, if locks are used) */
+/*! \brief destroy atomic ops (e.g. frees the locks, if locks are used) */
 void destroy_atomic_ops();
 
 #endif
diff --git a/basex.c b/basex.c
index 9f42875..472c254 100644 (file)
--- a/basex.c
+++ b/basex.c
  * --------
  *  2008-06-11  created by andrei
  */
+/*!
+ * \file
+ * \brief SIP-router core :: convert/decode to/from ascii using various bases
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 #include "basex.h"
 
diff --git a/basex.h b/basex.h
index fea6e9a..15a635f 100644 (file)
--- a/basex.h
+++ b/basex.h
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
- * Functions:
- *  init_basex()                              - inits internal lookup tables
- *  HEX_HI(unsigned char c)                   - returns the first 4 bits of
- *                                              c converted to a hex digit
- *  HEX_LOW(unsigned char c)                  - returns the low 4 bits of
- *                                              c converted to a hex digit
- *  UNHEX(unsigned char hex_digit)            - converts hex_digit to a
- *                                              number (0..15); it might
- *                                              return 0xff for invalid 
- *                                              digit (but with some compile
- *                                              option it won't check)
+
+/*!
+ * \file
+ * \brief SIP-router core :: convert/decode to/from ascii using various bases
  *
- *  base16_enc(src, src_len, dst, dst_len)    - encode to standard hex
- *  base16_dec(src, src_len, dst, dst_len)    - decode from standard hex
- *  base16_enc_len(len)                       - length needed to encode len
- *                                              bytes (macro)
- *  base16_max_dec_len(len)                   - length needed to decode a 
- *                                              string of size len
+ * \ingroup core
  *
- *  base64_enc(src, src_len, dst, dst_len)    - encode to base64, standard
- *                                              alphabet
- *  base64_dec(src, src_len, dst, dst_len)    - decode from base64, standard
- *                                              alphabet
- *  base64_enc_len(len)                       - length needed to encode
- *                                               len bytes (macro)
- *  base64_max_dec_len(len)                   - maximum length needed to
- *                                               decode len bytes (macro)
- *  base64_dec_len(str, len)                  - size of the decoded str 
+ * Module: \ref core
  *
  *
- *  q_base64_enc(src, src_len, dst, dst_len)  - encode to special base64
- *                                              alphabet (non standard)
+ * Functions:
+ *  - base16_enc(src, src_len, dst, dst_len)    : encode to standard hex
+ *  - base16_dec(src, src_len, dst, dst_len)    : decode from standard hex
+ *  - base16_enc_len(len)                       : length needed to encode len bytes (macro)
+ *  - base16_max_dec_len(len)                   : length needed to decode a string of size len
+ *
+ *  - base64_enc(src, src_len, dst, dst_len)    : encode to base64, standard alphabet
+ *  - base64_dec(src, src_len, dst, dst_len)    : decode from base64, standard  alphabet
+ *  - base64_enc_len(len)                       : length needed to encode len bytes (macro)
+ *  - base64_max_dec_len(len)                   : maximum length needed to decode len bytes (macro)
+ *  - base64_dec_len(str, len)                  : size of the decoded str 
+ *  - q_base64_enc(src, src_len, dst, dst_len)  : encode to special base64 alphabet (non standard)
+ *  - q_base64_dec(src, src_len, dst, dst_len)  - decode from special non-standard base64 alphabet
  *
- *  q_base64_dec(src, src_len, dst, dst_len)  - decode from special non-
- *                                              standard base64 alphabet
  *  All the above functions return the size used (in dst) on success and
  *   0 or a negative number (which is -1*size_needed) on error.
  *
@@ -65,6 +53,7 @@
  *  for some interesting tests and ideeas).
  *
  *  Test results for 40 bytes  (typical ser nounce) in average cpu cycles:
+\verbatim
  *                    lookup   lookup_large lookup8k no-lookup
  *  base16_enc           211/231  218/199      -       1331
  *  base16_dec           252/251  236          -       1226
  *  q_base64_enc         -                              288
  *  q_base64_dec         -                              281
  *  (see test/basex.txt for more results)
+\endverbatim
  *
  * Defines:
- *  BASE64_LOOKUP_TABLE/NO_BASE64_LOOKUP_TABLE - use (default)/don't use
+ *  - BASE64_LOOKUP_TABLE/NO_BASE64_LOOKUP_TABLE : use (default)/don't use
  *     small lookup tables for conversions (faster in general).
- *  BASE64_LOOKUP_LARGE    - use large lookup tables (2560 bytes for 
+ *  - BASE64_LOOKUP_LARGE    : use large lookup tables (2560 bytes for 
  *    encoding and 256 bytes for decoding; without it 64 bytes are used for
  *    encoding and 85 bytes for decoding.
- *  BASE64_LOOKUP_8K - use even larger lookup tables (8K for encoding and
+ *  - BASE64_LOOKUP_8K : use even larger lookup tables (8K for encoding and
  *    256 for decoding); also try to write 2 bytes at a time (short) if
  *    the destination is 2 byte aligned
  *
- *  BASE16_LOOKUP_TABLE/NO_BASE16_LOOKUP_TABLE - use (default)/don't use
+ *  - BASE16_LOOKUP_TABLE/NO_BASE16_LOOKUP_TABLE : use (default)/don't use
  *     small lookup tables for conversions (faster in general).
- *  BASE16_LOOKUP_LARGE  - use large lookup tables (512 bytes for 
+ *  - BASE16_LOOKUP_LARGE  : use large lookup tables (512 bytes for 
  *    encoding and 256 bytes for decoding
- *  BASE16_READ_WHOLE_INTS - read an int at a time
+ *  - BASE16_READ_WHOLE_INTS : read an int at a time
  *
  * History:
  * --------
        defined BASE64_LOOKUP_8K
 #include "endianness.h"
 
-/* aligns p to a type* pointer, type must have a 2^k size */
+/*! \brief aligns p to a type* pointer, type must have a 2^k size */
 #define ALIGN_POINTER(p, type) \
        ((type*) ((long)((char*)(p)+sizeof(type)-1)&~(long)(sizeof(type)-1)))
 
 #ifdef BASE16_LOOKUP_TABLE
 
 #ifdef BASE16_LOOKUP_LARGE
-/* use large tables: 512 for lookup and 256 for decode */
+/*! \brief use large tables: 512 for lookup and 256 for decode */
 
 extern unsigned char _bx_hexdig_hi[256];
 extern unsigned char _bx_hexdig_low[256];
 
+/*! \brief returns the first 4 bits of c converted to a hex digit */
 #define HEX_HI(h)      _bx_hexdig_hi[(unsigned char)(h)]
+/*! \brief returns the low 4 bits of converted to a hex digit */
 #define HEX_LOW(h)     _bx_hexdig_low[(unsigned char)(h)]
 
 extern unsigned char _bx_unhexdig256[256];
 
+/*! \brief  converts hex_digit to a number (0..15); it might
+ *      \return 0xff for invalid digit (but with some compile
+ *      option it won't check)
+ */
 #define UNHEX(h)       _bx_unhexdig256[(h)]
 
 #else /* BASE16_LOOKUP_LARGE */
-/* use small tabes: 16 bytes for lookup and 32 for decode */
+/*! \brief use small tabes: 16 bytes for lookup and 32 for decode */
 
 extern unsigned char _bx_hexdig[16+1];
 
@@ -254,39 +250,40 @@ extern unsigned char _bx_ub64[0x54+1];
 
 
 
-/* lenght needed for encoding l bytes */
+/*! \brief lenght needed for encoding l bytes */
 #define base16_enc_len(l) (l*2)
-/* maximum lenght needed for decoding l bytes */
+/*! \brief maximum lenght needed for decoding l bytes */
 #define base16_max_dec_len(l) (l/2)
-/* actual space needed for decoding a string b of size l */
+/*! \brief actual space needed for decoding a string b of size l */
 #define base16_dec_len(b, l) base16_max_dec_len(l)
-/* minimum valid source len for decoding */
+/*! \brief minimum valid source len for decoding */
 #define base16_dec_min_len() 2
-/* minimum valid source len for encoding */
+/*! \brief minimum valid source len for encoding */
 #define base16_enc_min_len() 0
 
-/* space needed for encoding l bytes */
+/*! \brief space needed for encoding l bytes */
 #define base64_enc_len(l) (((l)+2)/3*4)
-/* maximum space needed for encoding l bytes */
+/*! \brief maximum space needed for encoding l bytes */
 #define base64_max_dec_len(l) ((l)/4*3)
-/* actual space needed for decoding a string b of size l, l>=4 */
+/*! \brief actual space needed for decoding a string b of size l, l>=4 */
 #define base64_dec_len(b, l) \
        (base64_max_dec_len(l)-((b)[(l)-2]=='=') -((b)[(l)-1]=='='))
-/* minimum valid source len for decoding */
+/*! \brief minimum valid source len for decoding */
 #define base64_dec_min_len() 4
-/* minimum valid source len for encoding */
+/*! \brief minimum valid source len for encoding */
 #define base64_enc_min_len() 0
 
 
 #ifdef BASE16_READ_WHOLE_INTS
 
-/* params: 
- * returns: size used from the output buffer (dst) on success,
+/*! 
+ * \params: 
+ * \return: size used from the output buffer (dst) on success,
  *          -size_needed on error
+ *
  * WARNING: the output string is not 0-term
  */
-inline static int base16_enc(unsigned char* src, int slen,
-                                                        unsigned char*  dst, int dlen)
+inline static int base16_enc(unsigned char* src, int slen, unsigned char*  dst, int dlen)
 {
        unsigned int* p;
        unsigned char* end;
@@ -454,10 +451,11 @@ inline static int base16_enc(unsigned char* src, int slen,
 #else /* BASE16_READ_WHOLE_INTS */
 
 
-/* params: 
- * returns: size used from the output buffer (dst) on success,
+/*!
+ * \return : size used from the output buffer (dst) on success,
  *          -size_needed on error
- * WARNING: the output string is not 0-term
+ *
+ * \note WARNING: the output string is not 0-term
  */
 inline static int base16_enc(unsigned char* src, int slen,
                                                         unsigned char*  dst, int dlen)
@@ -479,8 +477,7 @@ inline static int base16_enc(unsigned char* src, int slen,
 
 #endif /* BASE16_READ_WHOLE_INTS */
 
-inline static int base16_dec(unsigned char* src, int slen,
-                                                        unsigned char* dst, int dlen)
+inline static int base16_dec(unsigned char* src, int slen, unsigned char* dst, int dlen)
 {
        unsigned char* end;
        int osize;
@@ -498,8 +495,8 @@ inline static int base16_dec(unsigned char* src, int slen,
 
 
 
-/* helper internal function: encodes v (6 bits value)
- * returns char ascii encoding on success and 0xff on error
+/*! \brief helper internal function: encodes v (6 bits value)
+ * \return char ascii encoding on success and 0xff on error
  * (value out of range) */
 inline static unsigned char base64_enc_char(unsigned char v)
 {
@@ -519,8 +516,8 @@ inline static unsigned char base64_enc_char(unsigned char v)
        return 0xff;
 }
 
-/* helper internal function: decodes a base64 "digit",
- * returns value on success (0-63) and 0xff on error (invalid)*/
+/*! \brief helper internal function: decodes a base64 "digit",
+ * \return value on success (0-63) and 0xff on error (invalid)*/
 inline static unsigned base64_dec_char(unsigned char v)
 {
        switch(v){
@@ -557,10 +554,11 @@ inline static unsigned base64_dec_char(unsigned char v)
 
 
 #ifdef BASE64_LOOKUP_8K
-/* params: 
- * returns: size used from the output buffer (dst) on success ((slen+2)/3*4)
+/*!
+ * \return : size used from the output buffer (dst) on success ((slen+2)/3*4)
  *          -size_needed on error
- * WARNING: the output string is not 0-term
+ *
+ * \note WARNING: the output string is not 0-term
  */
 inline static int base64_enc(unsigned char* src, int slen,
                                                        unsigned char* dst,  int dlen)
@@ -614,10 +612,10 @@ inline static int base64_enc(unsigned char* src, int slen,
        return osize;
 }
 #else /*BASE64_LOOKUP_8K*/
-/* params: 
- * returns: size used from the output buffer (dst) on success ((slen+2)/3*4)
+/*! \brief Convert to base64
+ * \return size used from the output buffer (dst) on success ((slen+2)/3*4)
  *          -size_needed on error
- * WARNING: the output string is not 0-term
+ * \note WARNING: the output string is not 0-term
  */
 inline static int base64_enc(unsigned char* src, int slen,
                                                        unsigned char* dst,  int dlen)
@@ -655,10 +653,10 @@ inline static int base64_enc(unsigned char* src, int slen,
 
 
 
-/* params: 
- * returns: size used from the output buffer (dst) on success (max: slen/4*3)
+/*! \brief
+ * \return size used from the output buffer (dst) on success (max: slen/4*3)
  *          -size_needed on error or 0 on bad base64 encoded string
- * WARNING: the output string is not 0-term
+ * \note WARNING: the output string is not 0-term
  */
 inline static int base64_dec(unsigned char* src, int slen,
                                                        unsigned char* dst,  int dlen)
@@ -721,13 +719,12 @@ inline static int base64_dec(unsigned char* src, int slen,
 
 
 
-/*
- * same as base64_enc but with a different alphabet, that allows simpler and
+/*! \brief
+ * same as \ref base64_enc() but with a different alphabet, that allows simpler and
  *  faster enc/dec
- * params: 
- * returns: size used from the output buffer (dst) on success ((slen+2)/3*4)
+ * \return size used from the output buffer (dst) on success ((slen+2)/3*4)
  *          -size_needed on error
- * WARNING: the alphabet includes ":;<>?@[]\`", so it might not be suited
+ * \note WARNING: the alphabet includes ":;<>?@[]\`", so it might not be suited
  *  in all cases (e.g. encoding something in a sip uri).
  */
 inline static int q_base64_enc(unsigned char* src, int slen,
@@ -769,14 +766,13 @@ inline static int q_base64_enc(unsigned char* src, int slen,
 
 
 
-/*
- * same as base64_enc but with a different alphabet, that allows simpler and
+/*! \brief
+ * same as \ref base64_enc() but with a different alphabet, that allows simpler and
  *  faster enc/dec
- * params: 
- * params: 
- * returns: size used from the output buffer (dst) on success (max: slen/4*3)
+ *
+ * \return size used from the output buffer (dst) on success (max: slen/4*3)
  *          -size_needed on error or 0 on bad base64 encoded string
- * WARNING: the output string is not 0-term
+ * \note WARNING: the output string is not 0-term
  */
 inline static int q_base64_dec(unsigned char* src, int slen,
                                                        unsigned char* dst,  int dlen)
@@ -863,6 +859,7 @@ inline static int q_base64_dec(unsigned char* src, int slen,
 #undef q_b64_pad
 }
 
+/*! \brief inits internal lookup tables */
 int init_basex();
 
 
index 7513fdd..24b5219 100644 (file)
  * --------
  *  2007-06-23  created by andrei
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 #include "bit_scan.h"
 
index 96279e9..6745bd7 100644 (file)
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
+/*!
+ * \file
+ * \brief SIP-router core :: bit scan operations
+ * \ingroup core
+ * Module: \ref core
+ *
  *  bit scan operations
- *  int bit_scan_forward(unsigned long v)   - returns the index of the first
+ *
+ *  - int bit_scan_forward(unsigned long v)   - returns the index of the first
  *                                          set bit (undefined value if v==0)
- *  int bit_scan_forward32(unsigned int v)   - returns the index of the first
+ *  int bit_scan_forward32(unsigned int v)   - returns the index of the first
  *                                          set bit (undefined value if v==0)
- *  int bit_scan_forward64(long long v)      - returns the index of the first
+ *  int bit_scan_forward64(long long v)      - returns the index of the first
  *                                          set bit (undefined value if v==0)
- *  int bit_scan_reverse(unsigned long v)   - returns the index of the last
+ *  int bit_scan_reverse(unsigned long v)   - returns the index of the last
  *                                          set bit (undefined value if v==0)
- *  int bit_scan_reverse32(unsigned int v)  - returns the index of the last
+ *  int bit_scan_reverse32(unsigned int v)  - returns the index of the last
  *                                          set bit (undefined value if v==0)
- *  int bit_scan_reverse64(long long v)     - returns the index of the last
+ *  int bit_scan_reverse64(long long v)     - returns the index of the last
  *                                          set bit (undefined value if v==0)
  *
  * Config defines:   CC_GCC_LIKE_ASM  - the compiler support gcc style
@@ -46,7 +52,7 @@
 
 #include <limits.h>
 
-/* fix __CPU_i386 -> __CPU_x86 */
+/*! \brief fix __CPU_i386 -> __CPU_x86 */
 #if defined __CPU_i386 && ! defined __CPU_x86
 #define __CPU_x86
 #endif
@@ -59,7 +65,7 @@
 #endif
 
 
-/* set default bitscan versions, depending on the architecture
+/*! \brief set default bitscan versions, depending on the architecture
  * In general the order is  asm, debruijn, br, slow for bit_scan_forward
  *  and asm, br, slow, debruijn for bit_scan_reverse. */
 #ifdef BIT_SCAN_ASM
 #endif /* __CPU_XXX */
 
 
-/* try to use the right version for bit_scan_forward(unisgned long l)
+/*! \brief try to use the right version for bit_scan_forward(unisgned long l)
  */
 #if (defined (ULONG_MAX) && ULONG_MAX > 4294967295) || defined LP64
-/* long is 64 bits */
+/*! \brief long is 64 bits */
 #define bit_scan_forward(l)    bit_scan_forward64((unsigned long long)(l))
 #define bit_scan_reverse(l)    bit_scan_reverse64((unsigned long long)(l))
 
 #else
-/* long is 32 bits */
+/*! \brief long is 32 bits */
 #define bit_scan_forward(l)    bit_scan_forward32((l))
 #define bit_scan_reverse(l)    bit_scan_reverse32((l))
 #endif
 
 #ifdef BIT_SCAN_DEBRUIJN
 
-/* use a de Bruijn sequence to get the index of the set bit for a number
+/*! \brief use a de Bruijn sequence to get the index of the set bit for a number
  *  of the form 2^k (DEBRUIJN_HASH32() and DEBRUIJN_HASH64()).
  *  bit_scan_forward & bit_scan_reverse would need first to convert
  *  the argument to 2^k (where k is the first set bit or last set bit index)-
index a881fc2..0ae9ddb 100644 (file)
--- a/cfg/cfg.c
+++ b/cfg/cfg.c
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
 #include "cfg_script.h"
 #include "cfg.h"
 
-/* declares a new cfg group
+/*! \brief declares a new cfg group
+ *
  * handler is set to the memory area where the variables are stored
- * return value is -1 on error
+ * \return value is -1 on error
  */
 int cfg_declare(char *group_name, cfg_def_t *def, void *values, int def_size,
                        void **handle)
index 4a77233..8691805 100644 (file)
--- a/cfg/cfg.h
+++ b/cfg/cfg.h
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index a504588..677a070 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
@@ -573,7 +568,7 @@ int cfg_set_delayed(cfg_ctx_t *ctx, str *group_name, str *var_name,
                                if (changed->group != group) continue;
 
                                memcpy( temp_handle + changed->var->offset,
-                                       changed->new_val,
+                                       changed->new_val.vraw,
                                        cfg_var_size(changed->var));
                        }
                } else {
@@ -595,7 +590,8 @@ int cfg_set_delayed(cfg_ctx_t *ctx, str *group_name, str *var_name,
        }
 
        /* everything went ok, we can add the new value to the list */
-       size = sizeof(cfg_changed_var_t) + cfg_var_size(var) - 1;
+       size = sizeof(cfg_changed_var_t) -
+                       sizeof(((cfg_changed_var_t*)0)->new_val) + cfg_var_size(var);
        changed = (cfg_changed_var_t *)shm_malloc(size);
        if (!changed) {
                LOG(L_ERR, "ERROR: cfg_set_delayed(): not enough shm memory\n");
@@ -608,7 +604,7 @@ int cfg_set_delayed(cfg_ctx_t *ctx, str *group_name, str *var_name,
        switch (CFG_VAR_TYPE(var)) {
 
        case CFG_VAR_INT:
-               *(int *)changed->new_val = (int)(long)v;
+               changed->new_val.vint = (int)(long)v;
                break;
 
        case CFG_VAR_STRING:
@@ -616,18 +612,18 @@ int cfg_set_delayed(cfg_ctx_t *ctx, str *group_name, str *var_name,
                s.s = v;
                s.len = (s.s) ? strlen(s.s) : 0;
                if (cfg_clone_str(&s, &s)) goto error;
-               *(char **)changed->new_val = s.s;
+               changed->new_val.vp = s.s;
                break;
 
        case CFG_VAR_STR:
                /* clone the string to shm mem */
                s = *(str *)v;
                if (cfg_clone_str(&s, &s)) goto error;
-               memcpy(changed->new_val, &s, sizeof(str));
+               changed->new_val.vstr=s;
                break;
 
        case CFG_VAR_POINTER:
-               *(void **)changed->new_val = v;
+               changed->new_val.vp=v;
                break;
 
        }
@@ -804,7 +800,7 @@ int cfg_commit(cfg_ctx_t *ctx)
                }
 
                memcpy( p,
-                       changed->new_val,
+                       changed->new_val.vraw,
                        cfg_var_size(changed->var));
        }
 
@@ -870,8 +866,8 @@ int cfg_rollback(cfg_ctx_t *ctx)
 
                if ((CFG_VAR_TYPE(changed->var) == CFG_VAR_STRING)
                || (CFG_VAR_TYPE(changed->var) == CFG_VAR_STR)) {
-                       if (*(char **)(changed->new_val))
-                               shm_free(*(char **)(changed->new_val));
+                       if (changed->new_val.vp)
+                               shm_free(changed->new_val.vp);
                }
                shm_free(changed);
        }
@@ -1016,7 +1012,7 @@ int cfg_diff_next(void **h,
                        unsigned int *val_type)
 {
        cfg_changed_var_t       *changed;
-       void    *p;
+       union cfg_var_value* pval;
        static str      old_s, new_s;   /* we need the value even
                                        after the function returns */
 
@@ -1031,29 +1027,30 @@ int cfg_diff_next(void **h,
        /* use the module's handle to access the variable
        It means that the variable is read from the local config
        after forking */
-       p = *(changed->group->handle) + changed->var->offset;
+       pval = (union cfg_var_value*)
+                       (*(changed->group->handle) + changed->var->offset);
 
        switch (CFG_VAR_TYPE(changed->var)) {
        case CFG_VAR_INT:
-               *old_val = (void *)(long)*(int *)p;
-               *new_val = (void *)(long)*(int *)changed->new_val;
+               *old_val = (void *)(long)pval->vint;
+               *new_val = (void *)(long)changed->new_val.vint;
                break;
 
        case CFG_VAR_STRING:
-               *old_val = (void *)*(char **)p;
-               *new_val = (void *)*(char **)changed->new_val;
+               *old_val = pval->vp;
+               *new_val = changed->new_val.vp;
                break;
 
        case CFG_VAR_STR:
-               memcpy(&old_s, p, sizeof(str));
+               old_s=pval->vstr;
                *old_val = (void *)&old_s;
-               memcpy(&new_s, changed->new_val, sizeof(str));
+               new_s=changed->new_val.vstr;
                *new_val = (void *)&new_s;
                break;
 
        case CFG_VAR_POINTER:
-               *old_val = *(void **)p;
-               *new_val = *(void **)changed->new_val;
+               *old_val = pval->vp;
+               *new_val = changed->new_val.vp;
                break;
 
        }
index e738c96..cdbb9c2 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
 #include "cfg.h"
 #include "cfg_struct.h"
 
-/* linked list of variables with their new values */
+
+/* variable values */
+union cfg_var_value{
+       void* vp;
+       long vlong;
+       int vint;
+       str vstr;
+       unsigned char   vraw[1]; /* variable length */
+};
+
+
+/** linked list of variables with their new values. */
 typedef struct _cfg_changed_var {
        cfg_group_t     *group;
        cfg_mapping_t   *var;
        struct _cfg_changed_var *next;
 
        /* blob that contains the new value */
-       unsigned char   new_val[1];
+       union cfg_var_value new_val; /* variable size */
 } cfg_changed_var_t;
 
-/* callback that is called when a new group is declared */
+/*! \brief callback that is called when a new group is declared */
 typedef void (*cfg_on_declare)(str *, cfg_def_t *);
 
-/* linked list of registered contexts */
+/*! \brief linked list of registered contexts */
 typedef struct _cfg_ctx {
        /* variables that are already changed
        but have not been committed yet */
@@ -70,14 +76,14 @@ typedef struct _cfg_ctx {
 #define CFG_CTX_LOCK(ctx)      lock_get(&(ctx)->lock)
 #define CFG_CTX_UNLOCK(ctx)    lock_release(&(ctx)->lock)
 
-/* creates a new config context that is an interface to the
+/*! \brief creates a new config context that is an interface to the
  * cfg variables with write permission */
 int cfg_register_ctx(cfg_ctx_t **handle, cfg_on_declare on_declare_cb);
 
-/* free the memory allocated for the contexts */
+/*! \brief free the memory allocated for the contexts */
 void cfg_ctx_destroy(void);
 
-/* set the value of a variable without the need of explicit commit */
+/*! \brief set the value of a variable without the need of explicit commit */
 int cfg_set_now(cfg_ctx_t *ctx, str *group_name, str *var_name,
                        void *val, unsigned int val_type);
 int cfg_set_now_int(cfg_ctx_t *ctx, str *group_name, str *var_name, int val);
@@ -91,33 +97,34 @@ int cfg_set_delayed_int(cfg_ctx_t *ctx, str *group_name, str *var_name, int val)
 int cfg_set_delayed_string(cfg_ctx_t *ctx, str *group_name, str *var_name, char *val);
 int cfg_set_delayed_str(cfg_ctx_t *ctx, str *group_name, str *var_name, str *val);
 
-/* commits the previously prepared changes within the context */
+/*! \brief commits the previously prepared changes within the context */
 int cfg_commit(cfg_ctx_t *ctx);
 
-/* drops the not yet committed changes within the context */
+/*! \brief drops the not yet committed changes within the context */
 int cfg_rollback(cfg_ctx_t *ctx);
 
-/* returns the value of a variable */
+/*! \brief returns the value of a variable */
 int cfg_get_by_name(cfg_ctx_t *ctx, str *group_name, str *var_name,
                        void **val, unsigned int *val_type);
 
-/* returns the description of a variable */
+/*! \brief returns the description of a variable */
 int cfg_help(cfg_ctx_t *ctx, str *group_name, str *var_name,
                        char **ch, unsigned int *input_type);
 
-/* notify the drivers about the new config definition */
+/*! \brief notify the drivers about the new config definition */
 void cfg_notify_drivers(char *group_name, int group_name_len, cfg_def_t *def);
 
-/* convert the value to the requested type */
+/*! \brief convert the value to the requested type */
 int convert_val(unsigned int val_type, void *val,
                        unsigned int var_type, void **new_val);
 
-/* initialize the handle for cfg_get_group_next() */
+/*! \brief initialize the handle for cfg_get_group_next() */
 #define cfg_get_group_init(handle) \
        (*(handle)) = (void *)cfg_group
 
-/* returns the group name and the cfg structure definition,
+/*! \brief returns the group name and the cfg structure definition,
  * and moves the handle to the next group
+ *
  * Return value:
  *     0: no more group
  *     1: group exists
@@ -133,15 +140,16 @@ int convert_val(unsigned int val_type, void *val,
 int cfg_get_group_next(void **h,
                        str *gname, cfg_def_t **def);
 
-/* Initialize the handle for cfg_diff_next()
+/*! \brief Initialize the handle for cfg_diff_next()
  * WARNING: keeps the context lock held, do not forget
  * to release it with cfg_diff_release()
  */
 int cfg_diff_init(cfg_ctx_t *ctx,
                void **h);
 
-/* return the pending changes that have not been
+/*! \brief return the pending changes that have not been
  * committed yet
+ *
  * can be used as follows:
  *
  * void *handle;
@@ -160,7 +168,7 @@ int cfg_diff_next(void **h,
                        void **old_val, void **new_val,
                        unsigned int *val_type);
 
-/* destroy the handle of cfg_diff_next() */
+/*! \brief destroy the handle of cfg_diff_next() */
 void cfg_diff_release(cfg_ctx_t *ctx);
 
 #endif /* _CFG_CTX_H */
index 8804e40..5f33ffd 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2008 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index 94fca11..e53236e 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2008 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index d8871ba..68c7e41 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2008 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index 6a03dd2..b7d454e 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2008 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index c204573..f2f5bfe 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index 0be608e..c72573b 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
 #include "../compiler_opt.h"
 #include "cfg.h"
 
-/* indicates that the variable has been already shmized */
+/*! \brief indicates that the variable has been already shmized */
 #define cfg_var_shmized        1U
 
-/* structure used for variable - pointer mapping */
+/*! \brief structure used for variable - pointer mapping */
 typedef struct _cfg_mapping {
-       cfg_def_t       *def;           /* one item of the cfg structure definition */
-       int             name_len;       /* length of def->name */
+       cfg_def_t       *def;           /*!< one item of the cfg structure definition */
+       int             name_len;       /*!< length of def->name */
 
        /* additional information about the cfg variable */
-       int             offset; /* offest within the memory block */
-       unsigned int    flag;   /* flag indicating the state of the variable */
+       int             offset; /*!< offest within the memory block */
+       unsigned int    flag;   /*!< flag indicating the state of the variable */
 } cfg_mapping_t;
 
-/* linked list of registered groups */
+/*! \brief linked list of registered groups */
 typedef struct _cfg_group {
-       int             num;            /* number of variables within the group */
-       cfg_mapping_t   *mapping;       /* describes the mapping betweeen
+       int             num;            /*!< number of variables within the group */
+       cfg_mapping_t   *mapping;       /*!< describes the mapping betweeen
                                        the cfg variable definition and the memory block */
-       char            *vars;          /* pointer to the memory block where the values
+       char            *vars;          /*!< pointer to the memory block where the values
                                        are stored -- used only before the config is
                                        shmized. */
-       int             size;           /* size of the memory block that has to be
+       int             size;           /*!< size of the memory block that has to be
                                        allocated to store the values */
-       int             offset;         /* offset of the group within the
+       int             offset;         /*!< offset of the group within the
                                        shmized memory block */
-       void            **handle;       /* per-process handle that can be used
+       void            **handle;       /*!< per-process handle that can be used
                                        by the modules to access the variables.
                                        It is registered when the group is created,
                                        and updated every time the block is replaced */
 
-       unsigned char   dynamic;        /* indicates whether the variables within the group
+       unsigned char   dynamic;        /*!< indicates whether the variables within the group
                                        are dynamically allocated or not */
        struct _cfg_group       *next;
        int             name_len;       
        char            name[1];
 } cfg_group_t;
 
-/* single memoy block that contains all the cfg values */
+/*! \brief single memoy block that contains all the cfg values */
 typedef struct _cfg_block {
-       atomic_t        refcnt;         /* reference counter,
+       atomic_t        refcnt;         /*!< reference counter,
                                        the block is automatically deleted
                                        when it reaches 0 */
-       char            **replaced;     /* set of the strings that must be freed
+       char            **replaced;     /*!< set of the strings that must be freed
                                        together with the block. The content depends
                                        on the block that replaces this one */
-       unsigned char   vars[1];        /* blob that contains the values */
+       unsigned char   vars[1];        /*!< blob that contains the values */
 } cfg_block_t;
 
-/* Linked list of per-child process callbacks.
+/*! \brief Linked list of per-child process callbacks.
  * Each child process has a local pointer, and executes the callbacks
  * when the pointer is not pointing to the end of the list.
  * Items from the begginning of the list are deleted when the starter
  * pointer is moved, and no more child process uses them.
  */
 typedef struct _cfg_child_cb {
-       atomic_t                refcnt; /* number of child processes
+       atomic_t                refcnt; /*!< number of child processes
                                        referring to the element */
-       atomic_t                cb_count;       /* This counter is used to track
+       atomic_t                cb_count;       /*!< This counter is used to track
                                                 * how many times the callback needs
                                                 * to be executed.
                                                 * >0 the cb needs to be executed
                                                 * <=0 the cb no longer needs to be executed
                                                 */
-       str                     gname, name;    /* name of the variable that has changed */
-       cfg_on_set_child        cb;     /* callback function that has to be called */
+       str                     gname, name;    /*!< name of the variable that has changed */
+       cfg_on_set_child        cb;     /*!< callback function that has to be called */
 
        struct _cfg_child_cb    *next;
 } cfg_child_cb_t;
index edebb9b..75fa69c 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2007 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *  2007-12-03 Initial version (Miklos)
  *  2008-01-31  added DNS resolver parameters (Miklos)
  */
+/*!
+ * \file
+ * \brief SIP-router core ::  Core configuration parser
+ * \ingroup core
+ * Module: \ref core
+ *
+ * See 
+ * - \ref ConfigCoreDoc
+ * - \ref ConfigEngine
+ * - \ref cfg_core.h
+ */
+/*!
+ * \page ConfigCoreDoc Documentation of configuration parser
+ * \section ConfigParser Configuration parser
+ * Further information
+ * - \ref ConfigEngine
+ * - \ref cfg_core.h
+ * \verbinclude cfg.txt
+ *
+ */
 
 #include "dprint.h"
 #ifdef USE_DST_BLACKLIST
 #include "cfg_core.h"
 
 struct cfg_group_core default_core_cfg = {
-       L_WARN,         /*  print only msg. < L_WARN */
-       LOG_DAEMON,     /* log_facility -- see syslog(3) */
-       L_DBG,  /* memdbg */
+       L_WARN,         /*!<  print only msg. < L_WARN */
+       LOG_DAEMON,     /*!< log_facility -- see syslog(3) */
+       L_DBG,  /*!< memdbg */
 #ifdef USE_DST_BLACKLIST
        /* blacklist */
-       0, /* dst blacklist is disabled by default */
+       0, /*!< dst blacklist is disabled by default */
        DEFAULT_BLST_TIMEOUT,
        DEFAULT_BLST_MAX_MEM,
 #endif
        /* resolver */
 #ifdef USE_IPV6
-       1,  /* dns_try_ipv6 -- on by default */
+       1,  /*!< dns_try_ipv6 -- on by default */
 #else
-       0,  /* dns_try_ipv6 -- off, if no ipv6 support */
+       0,  /*!< dns_try_ipv6 -- off, if no ipv6 support */
 #endif
-       0,  /* dns_try_naptr -- off by default */
-       30,  /* udp transport preference (for naptr) */
-       20,  /* tcp transport preference (for naptr) */
-       10,  /* tls transport preference (for naptr) */
-       20,  /* sctp transport preference (for naptr) */
-       -1, /* dns_retr_time */
-       -1, /* dns_retr_no */
-       -1, /* dns_servers_no */
-       1,  /* dns_search_list */
-       1,  /* dns_search_fmatch */
-       0,  /* dns_reinit */
+       0,  /*!< dns_try_naptr -- off by default */
+       30,  /*!< udp transport preference (for naptr) */
+       20,  /*!< tcp transport preference (for naptr) */
+       10,  /*!< tls transport preference (for naptr) */
+       20,  /*!< sctp transport preference (for naptr) */
+       -1, /*!< dns_retr_time */
+       -1, /*!< dns_retr_no */
+       -1, /*!< dns_servers_no */
+       1,  /*!< dns_search_list */
+       1,  /*!< dns_search_fmatch */
+       0,  /*!< dns_reinit */
        /* DNS cache */
 #ifdef USE_DNS_CACHE
-       1,  /* use_dns_cache -- on by default */
-       0,  /* dns_cache_flags */
-       0,  /* use_dns_failover -- off by default */
-       0,  /* dns_srv_lb -- off by default */
-       DEFAULT_DNS_NEG_CACHE_TTL, /* neg. cache ttl */
-       DEFAULT_DNS_CACHE_MIN_TTL, /* minimum ttl */
-       DEFAULT_DNS_CACHE_MAX_TTL, /* maximum ttl */
-       DEFAULT_DNS_MAX_MEM, /* dns_cache_max_mem */
-       0, /* dns_cache_del_nonexp -- delete only expired entries by default */
+       1,  /*!< use_dns_cache -- on by default */
+       0,  /*!< dns_cache_flags */
+       0,  /*!< use_dns_failover -- off by default */
+       0,  /*!< dns_srv_lb -- off by default */
+       DEFAULT_DNS_NEG_CACHE_TTL, /*!< neg. cache ttl */
+       DEFAULT_DNS_CACHE_MIN_TTL, /*!< minimum ttl */
+       DEFAULT_DNS_CACHE_MAX_TTL, /*!< maximum ttl */
+       DEFAULT_DNS_MAX_MEM, /*!< dns_cache_max_mem */
+       0, /*!< dns_cache_del_nonexp -- delete only expired entries by default */
 #endif
 #ifdef PKG_MALLOC
-       0, /* mem_dump_pkg */
+       0, /*!< mem_dump_pkg */
 #endif
 #ifdef SHM_MEM
-       0, /* mem_dump_shm */
+       0, /*!< mem_dump_shm */
 #endif
-       DEFAULT_MAX_WHILE_LOOPS, /* max_while_loops */
-       0, /* udp_mtu (disabled by default) */
-       0, /* udp_mtu_try_proto -> default disabled */
-       0,  /* force_rport */
-       L_DBG, /* memlog */
-       1 /* mem_summary -flags: 0 off, 1 shm/pkg_status, 2 shm/pkg_sums */
+       DEFAULT_MAX_WHILE_LOOPS, /*!< max_while_loops */
+       0, /*!< udp_mtu (disabled by default) */
+       0, /*!< udp_mtu_try_proto -> default disabled */
+       0,  /*!< force_rport */
+       L_DBG, /*!< memlog */
+       1 /*!< mem_summary -flags: 0 off, 1 shm/pkg_status, 2 shm/pkg_sums */
 };
 
 void   *core_cfg = &default_core_cfg;
index b37aacc..a1124b9 100644 (file)
  * -------
  *  2007-12-03 Initial version (Miklos)
  */
+/*!
+ * \file
+ * \brief SIP-router core :: Core configuration
+ * \ingroup core
+ *
+ * Module: \ref core
+ */
+
 
 #ifndef _CFG_CORE_H
 #define _CFG_CORE_H
 
 extern void    *core_cfg;
 
+/*! \brief configuration default values */
 struct cfg_group_core {
        int     debug;
        int     log_facility;
-       int memdbg; /*< log level for memory debugging messages */
+       int memdbg; /*!< log level for memory debugging messages */
 #ifdef USE_DST_BLACKLIST
        /* blacklist */
-       int     use_dst_blacklist; /* 1 if blacklist is enabled */
-       unsigned int    blst_timeout; /* blacklist entry ttl */
-       unsigned int    blst_max_mem; /* maximum memory used for the
+       int     use_dst_blacklist; /*!< 1 if blacklist is enabled */
+       unsigned int    blst_timeout; /*!< blacklist entry ttl */
+       unsigned int    blst_max_mem; /*!< maximum memory used for the
                                        blacklist entries */
 #endif
        /* resolver */
@@ -87,11 +96,11 @@ struct cfg_group_core {
        int mem_dump_shm;
 #endif
        int max_while_loops;
-       int udp_mtu; /**< maximum send size for udp, if > try another protocol*/
-       int udp_mtu_try_proto; /**< if packet> udp_mtu, try proto (e.g. TCP) */
-       int force_rport; /**< if set rport will always be forced*/
-       int memlog; /*< log level for memory status/summary info */
-       int mem_summary; /**< display memory status/summary info on exit */
+       int udp_mtu; /*!< maximum send size for udp, if > try another protocol*/
+       int udp_mtu_try_proto; /*!< if packet> udp_mtu, try proto (e.g. TCP) */
+       int force_rport; /*!< if set rport will always be forced*/
+       int memlog; /*!< log level for memory status/summary info */
+       int mem_summary; /*!< display memory status/summary info on exit */
 };
 
 extern struct cfg_group_core default_core_cfg;
index 690230d..8a2c4e4 100644 (file)
  * with this program; if not, write to the Free Software Foundation, Inc., 
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ *
+ * Module: \ref core
+ *
+ * See \ref ConfigEngine
+ *
+ * \page ConfigEngine
+ * In file \ref cfg_parser.c 
+ * Configuration examples
+ * - \ref ConfigExample1
+ * - \ref ConfigExample2
+ * - \ref ConfigExample3
+ * - \ref ConfigExample4
+ * - \ref ConfigExample5
+ * - \ref ConfigExample6
+ * - \ref ConfigExample7
+ * - \ref ConfigExample8
+ *
+ * <b>Run-time Allocated Destination Variables</b>
+ * - the destination variable pointers in arrays are assigned at compile time
+ * - The address of variables allocated on the heap (typically in dynamically allocated
+ *   structures) is not know and thus we need to assign NULL initially and change the pointer
+ *   at runtime.
+ *   (provide an example).
+ *
+ * <b>Built-in parsing functions</b>
+ *
+ * *_val functions parse the whole option body (including =)
+ */
+
 
-/** Example 1: Options without values
+/*! \page ConfigExample1  Configuration engine Example 1: Options without values
  *
+\verbatim
  *     str file = STR_STATIC_INIT("test.cfg");
  *     cfg_parser_t* parser;
  *     int feature_a = 0, feature_b = 0;
  *     }
  *
  *     cfg_parser_close(parser);
+\endverbatim
  */
 
-/** Example 2: Options with integer values
+/*! \page ConfigExample2  Configuration engine Example 2: Options with integer values
+\verbatim
  *     cfg_option_t options[] = {
  *             {"max_number",   .param = &max_number,   .f = cfg_parse_int_val },
  *             {"extra_checks", .param = &extra_checks, .f = cfg_parse_bool_val},
  *             {0}
  *     };
+\endverbatim
  */
 
-/** Example 3: Enum options
+/*! \page ConfigExample3 Configuration engine Example 3: Enum options
+\verbatim
  * int scope;
  *
  *     cfg_option_t scopes[] = {
  *             {"scope", .param = scopes, .f = cfg_parse_enum_val},
  *             {0}
  *     };
+\endverbatim
  */
 
-/** Example 4: Options with string values
- *     str filename = STR_NULL;
+/*! \page ConfigExample4 Configuration engine Example 4: Options with string values
+\verbatim
+*      str filename = STR_NULL;
  *
  *     cfg_option_t options[] = {
  *             {"filename", .param = &filename, .f = cfg_parse_str_val},
  *   by a subsequent call
  * - There are flags to tell the function to copy the resuting string in a pkg, shm, glibc,
  *   or static buffers
+\endverbatim
  */
 
-/** Example 5: Custom value parsing
+/*! \page ConfigExample5 Configuration engine Example 5: Custom value parsing
  * TBD
  */
 
-/** Example 6: Parsing Sections
+/*! \page ConfigExample6 Configuration engine Example 6: Parsing Sections
  * TBD
  */
 
-/** Example 7: Default Options
+/*! \page ConfigExample7 Configuration engine Example 7: Default Options
  * TBD
  */
 
-/** Example 8: Memory management of strings
- * - Data types with fixed size are easy, they can be copied into a pre-allocated memory
+/*! \page ConfigExample8 Configuration engine Example 8: Memory management of strings
+ *
+ * Data types with fixed size are easy, they can be copied into a pre-allocated memory
  * buffer, strings cannot because their length is unknown.
  */
 
-/** Run-time Allocated Destination Variables
- * - the destination variable pointers in arrays are assigned at compile time
- * - The address of variables allocated on the heap (typically in dynamically allocated
- *   structures) is not know and thus we need to assign NULL initially and change the pointer
- *   at runtime.
- *   (provide an example).
- */
-
-/** Built-in parsing functions
- * *_val functions parse the whole option body (including =)
- */
-
 #include "cfg_parser.h"
 
 #include "mem/mem.h"
 #include <libgen.h>
 
 
-/* The states of the lexical scanner */
+/*! \brief The states of the lexical scanner */
 enum st {
-       ST_S,  /**< Begin */
-       ST_A,  /**< Alphanumeric */
-       ST_AE, /**< Alphanumeric escaped */
-       ST_Q,  /**< Quoted */
-       ST_QE, /**< Quoted escaped */
-       ST_C,  /**< Comment */
-       ST_CE, /**< Comment escaped */
-       ST_E,  /**< Escaped */
+       ST_S,  /*!< Begin */
+       ST_A,  /*!< Alphanumeric */
+       ST_AE, /*!< Alphanumeric escaped */
+       ST_Q,  /*!< Quoted */
+       ST_QE, /*!< Quoted escaped */
+       ST_C,  /*!< Comment */
+       ST_CE, /*!< Comment escaped */
+       ST_E,  /*!< Escaped */
 };
 
 
-/* Test for alphanumeric characters */
+/*! \brief Test for alphanumeric characters */
 #define IS_ALPHA(c) \
     (((c) >= 'a' && (c) <= 'z') || \
      ((c) >= 'A' && (c) <= 'Z') || \
@@ -156,7 +186,7 @@ enum st {
      (c) == '_')
 
 
-/* Test for delimiter characters */
+/*! \brief Test for delimiter characters */
 #define IS_DELIM(c) \
     ((c) == '=' || \
      (c) == ':' || \
@@ -181,7 +211,7 @@ enum st {
      (c) == '\'')
 
 
-/* Whitespace characters */
+/*! \brief Whitespace characters */
 #define IS_WHITESPACE(c) ((c) == ' ' || (c) == '\t' || (c) == '\r') 
 #define IS_QUOTE(c)      ((c) == '\"')  /* Quote characters */
 #define IS_COMMENT(c)    ((c) == '#')   /* Characters that start comments */
@@ -189,9 +219,8 @@ enum st {
 #define IS_EOL(c)        ((c) == '\n')  /* End of line */
 
 
-/*
- * Append character to the value of current
- * token
+/*! \brief
+ * Append character to the value of current token
  */
 #define PUSH(c)                            \
     if (token->val.len >= MAX_TOKEN_LEN) { \
@@ -206,7 +235,7 @@ enum st {
     token->val.s[token->val.len++] = (c);
 
 
-/*
+/*! \brief
  * Return current token from the lexical analyzer
  */
 #define RETURN(c)               \
@@ -217,7 +246,7 @@ enum st {
     return 0;
 
 
-/*
+/*! \brief
  * Get next character and update counters
  */
 #define READ_CHAR      \
index 648b438..4399b6c 100644 (file)
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: Standalone Configuration File Parser
+ *
+ * \ingroup core
+ * Module: \ref core
+ *
+ * See \ref ConfigEngine
+ */
+
 #ifndef _CFG_PARSER_H
 #define _CFG_PARSER_H
 
 #include "str.h"
 #include <stdio.h>
 
-#define MAX_TOKEN_LEN 512 /**< Token names cannot be longer than this value */
+#define MAX_TOKEN_LEN 512 /*!< Token names cannot be longer than this value */
 
 
+/*! \brief Configuration flags */
 typedef enum cfg_flags {
-       /** Extended tokens can contain also delimiters, in addition to
+       /*! \brief Extended tokens can contain also delimiters, in addition to
         * alpha-numeric characters, this is used on the righ side of assignments
         * where no quotes are used.
         */
        CFG_EXTENDED_ALPHA = (1 << 0),
 
-       /** The parser performs case-insensitive comparisons of token strings by
+       /*! \brief The parser performs case-insensitive comparisons of token strings by
         * default. The parser will use case-sensitive comparison instead if this
         * flag is set.
         */
        CFG_CASE_SENSITIVE = (1 << 1), 
 
-       /** This is a flag that can be set in the last element of cfg_option
+       /*! \brief This is a flag that can be set in the last element of cfg_option
         * arrays (this is the one with 0 as token name). When this flag is set
         * then the value or parsing function of the element will be used for
         * options that do not match any other element in the array.
@@ -52,30 +63,30 @@ typedef enum cfg_flags {
        CFG_DEFAULT = (1 << 2),
 
 
-       /** When this flag is set then the name of the options is a prefix and all
+       /*! \brief When this flag is set then the name of the options is a prefix and all
         * options that have the same prefix will be matched by this entry.
         */
        CFG_PREFIX = (1 << 3),
 
-       /** The result of cfg_parse_str_val will be in a buffer allocated by
+       /*! \brief The result of cfg_parse_str_val will be in a buffer allocated by
         * pkg_malloc, if the destination varaiable contains a pointer to a buffer
         * already then it will be freed with pkg_free first.
         */
        CFG_STR_PKGMEM = (1 << 4),
 
-       /** The result of cfg_parse_str_val will be in a buffer allocated by
+       /*! \brief The result of cfg_parse_str_val will be in a buffer allocated by
         * shm_malloc, if the destination variable contains a pointer to a buffer
         * already then it will be freed with shm_free first.
         */
        CFG_STR_SHMMEM = (1 << 5),
 
-       /** The result of cfg_parse_str_val will be in a buffer allocated by
+       /*! \brief The result of cfg_parse_str_val will be in a buffer allocated by
         * malloc, if the destination variable contains a pointer to a buffer
         * already then it will be freed with free first.
         */
        CFG_STR_MALLOC = (1 << 6),
 
-       /** The result of cfg_parse_str_val will be copied into a pre-allocated
+       /*! \brief The result of cfg_parse_str_val will be copied into a pre-allocated
         * buffer with a fixed size, a pointer to str variable which contains the
         * buffer and its size is passed to the function in parameter 'param'.
         */
@@ -91,14 +102,14 @@ enum cfg_token_type {
 };
 
 
-/** Structure representing a lexical token */
+/*! \brief Structure representing a lexical token */
 typedef struct cfg_token {
        char buf [MAX_TOKEN_LEN];
-       int type;  /**< Token type */
-       str val;   /**< Token value */
-       struct {   /**< Position of first and last character of token in file */
-               int line; /**< The starting/ending line of the token */
-               int col;  /**< The starting/ending column of the token */
+       int type;  /*!< Token type */
+       str val;   /*!< Token value */
+       struct {   /*!< Position of first and last character of token in file */
+               int line; /*!< The starting/ending line of the token */
+               int col;  /*!< The starting/ending column of the token */
        } start, end;
 } cfg_token_t;
 
@@ -109,31 +120,32 @@ typedef int (*cfg_func_f)(void* param, struct cfg_parser* st,
                                                  unsigned int flags);
 
 
-/** Token mapping structure.
+/*! \brief Token mapping structure.
+ *
  * This structure is used to map tokens to values or function calls. Arrays of
  * such structures are typically provided by the caller of the parser.
  */
 typedef struct cfg_option {
-       char* name;    /**< Token name */
+       char* name;    /*!< Token name */
        unsigned int flags;
-       void* param;   /**< Pointer to the destination variable */
-       int val;       /**< Value */
-       cfg_func_f f;  /**< Parser function to be called */
+       void* param;   /*!< Pointer to the destination variable */
+       int val;       /*!< Value */
+       cfg_func_f f;  /*!< Parser function to be called */
 } cfg_option_t;
 
 
-/* Parser state */
+/*! \brief Parser state */
 typedef struct cfg_parser {
-       FILE* f;                 /**< Handle of the currently open file */
-       char* file;              /**< Current file name */
-       int line;                /**< Current line */
-       int col;                 /**< Column index */
-       struct cfg_option* options; /**< Array of supported options */
+       FILE* f;                 /*!< Handle of the currently open file */
+       char* file;              /*!< Current file name */
+       int line;                /*!< Current line */
+       int col;                 /*!< Column index */
+       struct cfg_option* options; /*!< Array of supported options */
        struct {
-               cfg_func_f parser;   /**< Section parser function */
-               void* param;         /**< Parameter value for the parser function */
+               cfg_func_f parser;   /*!< Section parser function */
+               void* param;         /*!< Parameter value for the parser function */
        } section;
-       struct cfg_token* cur_opt; /**< Current option */
+       struct cfg_token* cur_opt; /*!< Current option */
 } cfg_parser_t;
 
 
@@ -151,7 +163,7 @@ void cfg_parser_close(struct cfg_parser* st);
 
 struct cfg_option* cfg_lookup_token(struct cfg_option* options, str* token);
 
-/*Interface to the lexical scanner */
+/*! ! \briefInterface to the lexical scanner */
 int cfg_get_token(struct cfg_token* token, struct cfg_parser* st, unsigned int flags);
 
 /* Commonly needed parser functions */
@@ -160,13 +172,13 @@ int cfg_eat_equal(struct cfg_parser* st, unsigned int flags);
 
 int cfg_eat_eol(struct cfg_parser* st, unsigned int flags);
 
-/* Parse section identifier of form [section]. The function expects parameter
+/*! \brief Parse section identifier of form [section]. The function expects parameter
  * param to be of type (str*). The result string is allocated using pkg_malloc
  * and is zero terminated. To free the memory use pkg_free(((str*)param)->s)
  */
 int cfg_parse_section(void* param, struct cfg_parser* st, unsigned int flags);
 
-/* Parse string parameter value, either quoted or unquoted */
+/*! \brief Parse string parameter value, either quoted or unquoted */
 int cfg_parse_str_opt(void* param, struct cfg_parser* st, unsigned int flags);
 
 int cfg_parse_str(void* param, struct cfg_parser* st, unsigned int flags);
@@ -175,12 +187,12 @@ int cfg_parse_enum_opt(void* param, struct cfg_parser* st, unsigned int flags);
 
 int cfg_parse_enum(void* param, struct cfg_parser* st, unsigned int flags);
 
-/* Parser integer parameter value */
+/*! \brief Parser integer parameter value */
 int cfg_parse_int_opt(void* param, struct cfg_parser* st, unsigned int flags);
 
 int cfg_parse_int(void* param, struct cfg_parser* st, unsigned int flags);
 
-/* Parse boolean parameter value */
+/*! \brief Parse boolean parameter value */
 int cfg_parse_bool_opt(void* param, struct cfg_parser* st, unsigned int flags);
 
 int cfg_parse_bool(void* param, struct cfg_parser* st, unsigned int flags);
diff --git a/clist.h b/clist.h
index f10c104..c96a93e 100644 (file)
--- a/clist.h
+++ b/clist.h
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
  * ser is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: circular list maintenance macros
+ *
+ * \ingroup core
+ * Module: \ref core
+ */
+
 /* History:
  * --------
  *  2005-08-08  created by andrei
@@ -35,7 +38,7 @@
 #ifndef _clist_h
 #define _clist_h
 
-/* circular list */
+/*! \brief circular list */
 #define clist_init(c, next, prev) \
        do{ \
                (c)->next=(void*)(c); \
 
 
 
-/* adds an entire sublist { s,e } (including s & e )
+/*! \brief adds an entire sublist { s,e } (including s & e )
  * after head
- * WARNING: clist_insert_sublist(head, n, n->prev) won't work,
+ *
+ * \note WARNING: clist_insert_sublist(head, n, n->prev) won't work,
  *          same for clist_insert_sublist(head, n->next, n)
  *  (macro!), use  e=n->prev; clist_insert_sublist(head, n, e, ...)
  *  instead!
@@ -61,8 +65,9 @@
 
 
 
-/* appends an entire sublist { s,e } (including s & e )
+/*! \brief appends an entire sublist { s,e } (including s & e )
  * at the end of the list
+ *
  * WARNING: clist_append_sublist(head, n, n->prev, ...) won't work,
  *  (macro!), use  e=n->prev; clist_append_sublist(head, n, e, ...)
  *  instead!
@@ -78,7 +83,7 @@
 
 
 
-/* remove sublist { s,e } (including s & e )
+/*! \brief remove sublist { s,e } (including s & e )
  * always, if start is the beginning of the list use
  * clist_rm_sublist(head->next, e, next, prev )
  * WARNING: clist_rm_sublist(n, n->prev, ...) won't work,
 
 
 
-/* insert after (head) */
+/*! \brief insert after (head) */
 #define clist_insert(head, c, next, prev) \
        clist_insert_sublist(head, c, c, next, prev)
 
 
 
-/* append at the end of the list (head->prev) */
+/*! \brief  append at the end of the list (head->prev) */
 #define clist_append(head, c, next, prev) \
        clist_append_sublist(head, c, c, next, prev)
 
 
 
-/* remove and element */
+/*! \brief  remove and element */
 #define clist_rm(c, next, prev) \
        clist_rm_sublist(c, c, next, prev)
 
 
 
-/* iterate on a clist */
+/*! \brief  iterate on a clist */
 #define clist_foreach(head, v, dir) \
        for((v)=(head)->dir; (v)!=(void*)(head); (v)=(v)->dir)
 
-/* iterate on a clist, safe version (requires an extra bak. var)
+/*! \brief  iterate on a clist, safe version (requires an extra bak. var)
  * (it allows removing of the current element) */
 #define clist_foreach_safe(head, v, bak,  dir) \
        for((v)=(head)->dir, (bak)=(v)->dir; (v)!=(void*)(head); \
index 3df3ec1..05eb61e 100644 (file)
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
  * ser is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-/* compatibility defs for emergency roll-back if things do not work ;
+/*! \brief compatibility defs for emergency roll-back if things do not work ;
  * if that happens:
- * a) define PRESERVE_ZT (affects most of parser)
- * b) define DONT_REMOVE_ZT (affects first line)
- * c) define SCRATCH
- * d) undefine REMOVE_ALL_ZT (affects via)
+ *     - a) define PRESERVE_ZT (affects most of parser)
+ *     - b) define DONT_REMOVE_ZT (affects first line)
+ *     - c) define SCRATCH
+ *     - d) undefine REMOVE_ALL_ZT (affects via)
  */
 
 
index fd39638..3a90297 100644 (file)
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-/*
- * compiler specific optimizations:
- * --------------------------------
+
+/*!
+ * \file
+ * \brief SIP-router core :: Compiler specific optimizations
+ * \see \ref CompilerOptions
+ *
+ * \ingroup core
+ * Module: \ref core
  *
- *   likely(expr)         - branch predicition optimization - is more likely
+ * \page CompilerOptions compiler specific optimizations:
+ *
+\verbatim
+ *   - likely(expr)         - branch predicition optimization - is more likely
  *                          that expr value will be 1 so optimize for this 
  *                          case.
  *                          Example: if (likely(p!=NULL)) {... }
- *   unlikely(expr)       - branch prediction optimization - is unlikely that 
+ *   unlikely(expr)       - branch prediction optimization - is unlikely that 
  *                          expr will be true, so optimize for this case
- *   prefetch(addr)        - will prefetch addr. for reading
- *   prefetch_w(addr)      - will prefetch addr. for writing
- *   prefetch_loc_r(addr, loc) - prefetch for reading, data at addr has
+ *   prefetch(addr)        - will prefetch addr. for reading
+ *   prefetch_w(addr)      - will prefetch addr. for writing
+ *   prefetch_loc_r(addr, loc) - prefetch for reading, data at addr has
  *                                no temporal locality (loc==0), a short
  *                                degree of temporal locality (loc==1), 
  *                                moderate (loc==2) or high (loc==3).
  *                                prefetch(addr) is equiv. to 
  *                                prefetch_loc_r(addr, 3).
  *  prefetch_loc_w(addr, loc) - like above but for writing.
+\endverbatim
  */
+
 /* 
  * History:
  * --------
index a2de7bc..83ba64c 100644 (file)
--- a/config.h
+++ b/config.h
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2001-2003 FhG Fokus
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: Configuration options
+ *
+ * These settings are settable by the user before compilation
+ *
+ * \ingroup core
+ * Module: \ref core
+ */
 
 
 
 
 #include "types.h"
 
-/* default sip port if none specified */
-#define SIP_PORT  5060
-#define SIPS_PORT 5061
+#define SIP_PORT  5060 /*!< default SIP port if none specified */
+#define SIPS_PORT 5061 /*!< default SIP port for TLS if none specified */
 
 #define CFG_FILE CFG_DIR NAME ".cfg"
 
-#define TLS_PKEY_FILE "cert.pem" 
-#define TLS_CERT_FILE "cert.pem"
-#define TLS_CA_FILE 0 /* no CA list file by default */
+#define TLS_PKEY_FILE "cert.pem"       /*!< The certificate private key file */
+#define TLS_CERT_FILE "cert.pem"       /*!< The certificate file */
+#define TLS_CA_FILE 0                  /*!< no CA list file by default */
 
 
-/* maximum number of addresses on which we will listen */
-#define MAX_LISTEN 16
+#define MAX_LISTEN 16                  /*!< maximum number of addresses on which we will listen */
 
-/* default number of child processes started */
-#define CHILD_NO    8
+#define CHILD_NO    8                  /*!< default number of child processes started */
 
-#define RT_NO 2 /* routing tables number */
-#define FAILURE_RT_NO RT_NO /* on_failure routing tables number */
-#define ONREPLY_RT_NO RT_NO /* on_reply routing tables number */
-#define BRANCH_RT_NO RT_NO /* branch_route routing tables number */
-#define ONSEND_RT_NO 1  /* onsend_route routing tables number */
-#define EVENT_RT_NO RT_NO /* event_route routing tables number */
-#define DEFAULT_RT 0 /* default routing table */
+#define RT_NO 2                        /*!< routing tables number */
+#define FAILURE_RT_NO RT_NO            /*!< on_failure routing tables number */
+#define ONREPLY_RT_NO RT_NO            /*!< on_reply routing tables number */
+#define BRANCH_RT_NO RT_NO             /*!< branch_route routing tables number */
+#define ONSEND_RT_NO 1                 /*!< onsend_route routing tables number */
+#define EVENT_RT_NO RT_NO              /*!< event_route routing tables number */
+#define DEFAULT_RT 0                   /*!< default routing table */
 
-#define MAX_REC_LEV 100 /* maximum number of recursive calls */
-#define ROUTE_MAX_REC_LEV 100 /* maximum number of recursive calls
-                                                          for route()*/
+#define MAX_REC_LEV 100                /*!< maximum number of recursive calls */
+#define ROUTE_MAX_REC_LEV 100          /*!< maximum number of recursive calls for route()*/
 
-#define MAX_URI_SIZE 1024      /* used when rewriting URIs */
+#define MAX_URI_SIZE 1024              /*!< Max URI size used when rewriting URIs */
 
-#define MAX_PATH_SIZE 256 /* Maximum length of path header buffer */
+#define MAX_PATH_SIZE 256              /*!< Maximum length of path header buffer */
 
 #define MY_VIA "Via: SIP/2.0/UDP "
 #define MY_VIA_LEN (sizeof(MY_VIA) - 1)
 
 #define SRV_MAX_PREFIX_LEN SRV_TLS_PREFIX_LEN
 
-/*used only if PKG_MALLOC is defined*/
-#define PKG_MEM_POOL_SIZE 4*1024*1024
+#define PKG_MEM_POOL_SIZE 4*1024*1024          /*!< used only if PKG_MALLOC is defined*/
 
-/*used if SH_MEM is defined*/
-#define SHM_MEM_SIZE 32
+#define SHM_MEM_SIZE 32                                /*!< used if SH_MEM is defined*/
 
 
 /* dimensioning buckets in q_malloc */
-/* size of the size2bucket table; everything beyond that asks for
+/*! \brief size of the size2bucket table; everything beyond that asks for
    a variable-size kilo-bucket
  */
 #define MAX_FIXED_BLOCK         3072
-/* distance of kilo-buckets */
-#define BLOCK_STEP                      512
-/* maximum number of possible buckets */
-#define MAX_BUCKET             15
+#define BLOCK_STEP              512            /*!< distance of kilo-buckets */
+#define MAX_BUCKET             15              /*!< maximum number of possible buckets */
 
-/* receive buffer size -- preferably set low to
+/*! \brief receive buffer size -- preferably set low to
    avoid terror of excessively huge messages; they are
    useless anyway
 */
 #define BUF_SIZE 65535
 
-/* forwarding  -- Via buffer dimensioning */
-#define MAX_VIA_LINE_SIZE      240
-#define MAX_RECEIVED_SIZE      57
-#define MAX_RPORT_SIZE         13
+#define MAX_VIA_LINE_SIZE      240     /*!< forwarding  -- Via buffer dimensioning */
+#define MAX_RECEIVED_SIZE      57      /*!< forwarding  -- Via buffer dimensioning - Received header */
+#define MAX_RPORT_SIZE         13      /*!< forwarding  -- Via buffer dimensioning - Rport */
 
-/* maximum number of branches per transaction */
-#define MAX_BRANCHES    12
+#define MAX_BRANCHES           12      /*!< maximum number of branches per transaction */
 
-/* max length of the text of fifo 'print' command */
-#define MAX_PRINT_TEXT 256
+#define MAX_PRINT_TEXT                 256     /*!< max length of the text of fifo 'print' command */
 
-/* maximum length of Contact header field in redirection replies */
-#define MAX_REDIRECTION_LEN 512
+#define MAX_REDIRECTION_LEN    512     /*!< maximum length of Contact header field in redirection replies */
 
-/* used by FIFO statistics in module to terminate line;
+/*! \brief used by FIFO statistics in module to terminate line;
    extra whitespaces are used to overwrite remainders of
    previous line if longer than current one
 */
 #define CLEANUP_EOL "      \n"
 
-/* magic cookie for transaction matching as defined in RFC3261 */
-#define MCOOKIE "z9hG4bK"
+#define MCOOKIE "z9hG4bK"              /*!< magic cookie for transaction matching as defined in RFC3261 */
 #define MCOOKIE_LEN (sizeof(MCOOKIE)-1)
-/* Maximum length of values appended to Via-branch parameter */
+/*! \brief Maximum length of values appended to Via-branch parameter */
 #define MAX_BRANCH_PARAM_LEN  (MCOOKIE_LEN+8 /*int2hex*/ + 1 /*sep*/ + \
                                                                MD5_LEN /* max(int2hex, MD5_LEN) */ \
                                                                + 1 /*sep*/ + 8 /*int2hex*/ + \
                                                                1 /*extra space, needed by t_calc_branch*/)
 
-#define DEFAULT_SER_KILL_TIMEOUT 60 /* seconds */
+#define DEFAULT_SER_KILL_TIMEOUT 60    /*!< Kill timeout : seconds */
 
-/* maximum path length */
-#define PATH_MAX_GUESS 1024
+#define PATH_MAX_GUESS 1024            /*!< maximum path length */
 
 #ifdef OPENSER_MOD_INTERFACE
        #define DEFAULT_DB_URL "mysql://openser:openserrw@localhost/openser"
        #define DEFAULT_RODB_URL_LEN (sizeof(DEFAULT_RODB_URL) - 1)
 #endif
 
-/* table holding versions of other ser tables */
-#define VERSION_TABLE "version"
-#define VERSION_COLUMN "table_version"
-#define TABLENAME_COLUMN "table_name"
+#define VERSION_TABLE "version"                        /*!< table holding versions of other ser tables */
+#define VERSION_COLUMN "table_version"         /*!< Column holding version number in version table */
+#define TABLENAME_COLUMN "table_name"          /*!< Column holding module name in version table */
 
-/* minimum packet size; smaller packets will be dropped silently */
-#define MIN_UDP_PACKET        32
+#define MIN_UDP_PACKET        32               /*!< minimum UDP packet size; smaller packets will be dropped silently */
 
-#define MIN_SCTP_PACKET  MIN_UDP_PACKET 
+#define MIN_SCTP_PACKET  MIN_UDP_PACKET        /*!< minimum size of SCTP packet */
 
-#define DEFAULT_RADIUS_CONFIG "/usr/local/etc/radiusclient/radiusclient.conf"
+#define DEFAULT_RADIUS_CONFIG "/usr/local/etc/radiusclient/radiusclient.conf"  /*!< Default FreeRadius configuration file */
 
 #define DEFAULT_DID "_default"
 
-/*  maximum allowed iterations for a while (to catch runaways) */
-#define DEFAULT_MAX_WHILE_LOOPS 100
+#define DEFAULT_MAX_WHILE_LOOPS 100            /*!< Maximum allowed iterations for a while (to catch runaways) */
 
 #endif
index 8533802..75d4e72 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2005 iptelorg GmbH
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
+
 #include <time.h>
 #include <sys/types.h>
 #include <signal.h>
index ab90c9e..caebc17 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 #ifndef _CORE_CMD_H
 #define _CORE_CMD_H
 
diff --git a/crc.c b/crc.c
index d57f239..776b917 100644 (file)
--- a/crc.c
+++ b/crc.c
@@ -5,19 +5,14 @@
  *
  * Copyright (C) 2001-2003 FhG Fokus
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  * along with this program; if not, write to the Free Software 
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+/*!
+ * \file
+ * \brief SIP-router core ::  Crc - 32 + 16 BIT ANSI X3.66 + CCITT CRC checksum files
+ * \ingroup core
+ *
+ * Module: \ref core
+ */
+
 
 
 #include <stdio.h>
index e87bec2..dee40ee 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2001-2003 FhG Fokus
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *  2007-06-07  added mlock_pages (no swap) support (andrei)
   *             added set_rt_prio() (andrei)
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 
 #include <sys/types.h>
 
-#define _XOPEN_SOURCE   /* needed on linux for the  getpgid prototype,  but
+#define _XOPEN_SOURCE   /*!< needed on linux for the  getpgid prototype,  but
                            openbsd 3.2 won't include common types (uint a.s.o)
                            if defined before including sys/types.h */
-#define _XOPEN_SOURCE_EXTENDED /* same as above */
-#define __USE_XOPEN_EXTENDED /* same as above, overrides features.h */
-#define __EXTENSIONS__ /* needed on solaris: if XOPEN_SOURCE is defined
+#define _XOPEN_SOURCE_EXTENDED /*!< same as \ref _XOPEN_SOURCE */
+#define __USE_XOPEN_EXTENDED /*!< same as \ref _XOPEN_SOURCE, overrides features.h */
+#define __EXTENSIONS__ /*!< needed on solaris: if XOPEN_SOURCE is defined
                           struct timeval defintion from <sys/time.h> won't
                           be included => workarround define _EXTENSIONS_
                            -andrei */
@@ -79,7 +81,7 @@
 #define MAX_FD 32 /* maximum number of inherited open file descriptors,
                    (normally it shouldn't  be bigger  than 3) */
 
-/* daemon init, return 0 on success, -1 on error */
+/*! \brief daemon init, return 0 on success, -1 on error */
 int daemonize(char*  name)
 {
        FILE *pid_stream;
@@ -260,7 +262,7 @@ error:
 
 
 
-/* try to increase the open file limit */
+/*! \brief try to increase the open file limit */
 int increase_open_fds(int target)
 {
        struct rlimit lim;
@@ -314,7 +316,7 @@ error:
 
 
 
-/* enable core dumps */
+/*! \brief enable core dumps */
 int set_core_dump(int enable, int size)
 {
        struct rlimit lim;
@@ -369,7 +371,7 @@ error:
 
 
 
-/* lock pages in memory (make the process not swapable) */
+/*! \brief lock pages in memory (make the process not swapable) */
 int mem_lock_pages()
 {
 #ifdef HAVE_MLOCKALL
@@ -388,7 +390,7 @@ error:
 }
 
 
-/* tries to set real time priority 
+/*! \brief tries to set real time priority 
  * policy: 0 - SCHED_OTHER, 1 - SCHED_RR, 2 - SCHED_FIFO */
 int set_rt_prio(int prio, int policy)
 {
index d59d1b5..d1964d2 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2001-2003 FhG Fokus
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
index 4174e30..024f602 100644 (file)
@@ -3,19 +3,14 @@
  *
  * Copyright (C) 2001-2003 FhG Fokus
  *
- * This file is part of ser, a free SIP server.
+ * This file is part of SIP-router, a free SIP server.
  *
- * ser is free software; you can redistribute it and/or modify
+ * SIP-router is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
- * ser is distributed in the hope that it will be useful,
+ * SIP-router is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *  2003-10-28  added extra checks (paranoia) for {anchor,del}_lump (andrei)
  *  2005-03-24  the type of type attribute changed to enum _hdr_types_t (janakj)
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 
 #include "data_lump.h"
index 7605e48..9fe82f4 100644 (file)
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
  * ser is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
@@ -26,6 +21,7 @@
  * along with this program; if not, write to the Free Software 
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
 /* History:
  * --------
  *  2003-01-29  s/int/enum ... more convenient for gdb (jiri)
  *
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: Data_lumps
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 #ifndef data_lump_h
 #define data_lump_h
 #include "parser/msg_parser.h"
 #include "parser/hf.h"
 
-/* adds a header to the end */
+/*! \brief adds a header to the end */
 struct lump* append_new_lump(struct lump** list, char* new_hdr,
                                                         int len, enum _hdr_types_t type);
-/* inserts a header to the beginning */
+/*! \brief inserts a header to the beginning */
 struct lump* insert_new_lump(struct lump** list, char* new_hdr,
                                                          int len, enum _hdr_types_t type);
 struct lump* insert_new_lump_after(struct lump* after,
                                                                        char* new_hdr, int len, enum _hdr_types_t type);
 struct lump* insert_new_lump_before(struct lump* before, char* new_hdr,
                                                                        int len,enum _hdr_types_t type);
-/* substitutions (replace with ip address, port etc) */
+/*! \brief substitutions (replace with ip address, port etc) */
 struct lump* insert_subst_lump_after(struct lump* after,  enum lump_subst subst,
                                                                        enum _hdr_types_t type);
 struct lump* insert_subst_lump_before(struct lump* before,enum lump_subst subst,
                                                                        enum _hdr_types_t type);
 
-/* conditional lumps */
+/*! \brief conditional lumps */
 struct lump* insert_cond_lump_after(struct lump* after, enum lump_conditions c,
                                                                        enum _hdr_types_t type);
 struct lump* insert_cond_lump_before(struct lump* after, enum lump_conditions c,
                                                                        enum _hdr_types_t type);
 
-/* removes an already existing header */
+/*! \brief removes an already existing header */
 struct lump* del_lump(struct sip_msg* msg, int offset, int len, enum _hdr_types_t type);
-/* set an anchor */
+/*! \brief set an anchor */
 struct lump* anchor_lump(struct sip_msg* msg, int offset, int len, enum _hdr_types_t type);
 
 
 
-/* duplicates a lump list shallowly in pkg-mem */
+/*! \brief duplicates a lump list shallowly in pkg-mem */
 struct lump* dup_lump_list( struct lump *l );
-/* frees a shallowly duplicated lump list */
+/*! \brief frees a shallowly duplicated lump list */
 void free_duped_lump_list(struct lump* l);
 
 
-/* remove all non-SHMEM lumps from the list */
+/*! \brief remove all non-SHMEM lumps from the list */
 void del_nonshm_lump( struct lump** lump_list );
 
 #endif
index d7ddd71..67b24a7 100644 (file)
  *               returns a lump_rpl**, making a specific lump removal much
  *               more easy (andrei)
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 
 #include <string.h>
index 54c65bb..b4320f7 100644 (file)
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
  * ser is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  *               more easy (andrei)
  */
 
+/*!
+ * \file
+ * \brief SIP-router core :: Data lumps
+ * \ingroup core
+ * Module: \ref core
+ */
+
+
 
 #ifndef data_lump_rpl_h
 #define data_lump_rpl_h
@@ -59,7 +62,7 @@ struct lump_rpl
 struct lump_rpl** add_lump_rpl2(struct sip_msg *, char *, int , int );
 
 
-/* compatibility wrapper for the old add_lump_rpl version */
+/*! \brief compatibility wrapper for the old add_lump_rpl version */
 inline static struct lump_rpl* add_lump_rpl(struct sip_msg* msg,
                                                                                                char* s, int len , int flags )
 {
index e382373..1e657ea 100644 (file)
  *  2009-03-30  EBL record support (andrei)
  *  2009-04-01  PTR record support (andrei)
  */
+/*!
+ * \file
+ * \brief SIP-router core :: 
+ * \ingroup core
+ * Module: \ref core
+ */
+
 
 #ifdef USE_DNS_CACHE
 
index d197190..72ad971 100644 (file)
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version
  *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- *    info@iptel.org
- *
  * ser is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
@@ -26,6 +21,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
+
 /* History:
  * --------
  *  2006-07-13  created by andrei
  *  2007-07-30  DNS cache measurements added (Gergo)
  */
 
+/**
+ * @file
+ * @brief SIP-router core :: resolver/dns related functions, dns cache and failover
+ * @ingroup core
+ * Module: @ref core
+ */
+
+
 
 #ifndef __dns_cache_h
 #define __dns_cache_h
 #define DEFAULT_DNS_CACHE_MAX_TTL ((unsigned int)(-1)) /* (maxint) */
 #define DEFAULT_DNS_MAX_MEM 500 /* 500 Kb */
 
-/* uncomment the define below for SRV weight based load balancing */
+/** @brief uncomment the define below for SRV weight based load balancing */
 #define DNS_SRV_LB
 
 #define DNS_LU_LST
 
-/* dns functions return them as negative values (e.g. return -E_DNS_NO_IP)
+/** @brief dns functions return them as negative values (e.g. return -E_DNS_NO_IP)
+ *
  * listed in the order of importance ( if more errors, only the most important
  * is returned)
  */
 enum dns_errors{
                                        E_DNS_OK=0,
-                                       E_DNS_EOR, /* no more records (not an error)
+                                       E_DNS_EOR, /**< no more records (not an error)
                                                      -- returned only by the dns_resolve*
                                                                  functions when called iteratively,; it
                                                                  signals the end of the ip/records list */
-                                       E_DNS_UNKNOWN /* unkown error */,
-                                       E_DNS_INTERNAL_ERR /* internal error */,
+                                       E_DNS_UNKNOWN /**< unkown error */,
+                                       E_DNS_INTERNAL_ERR /**< internal error */,
                                        E_DNS_BAD_SRV_ENTRY,
-                                       E_DNS_NO_SRV /* unresolvable srv record */,
+                                       E_DNS_NO_SRV /**< unresolvable srv record */,
                                        E_DNS_BAD_IP_ENTRY,
-                                       E_DNS_NO_IP /* unresolvable a or aaaa records*/,
-                                       E_DNS_BAD_IP /* the ip is invalid */,
-                                       E_DNS_BLACKLIST_IP /* the ip is blacklisted */,
-                                       E_DNS_NAME_TOO_LONG /* try again with a shorter name */,
-                                       E_DNS_AF_MISMATCH /* ipv4 or ipv6 only requested, but
+                                       E_DNS_NO_IP /**< unresolvable a or aaaa records*/,
+                                       E_DNS_BAD_IP /**< the ip is invalid */,
+                                       E_DNS_BLACKLIST_IP /**< the ip is blacklisted */,
+                                       E_DNS_NAME_TOO_LONG /**< try again with a shorter name */,
+                                       E_DNS_AF_MISMATCH /**< ipv4 or ipv6 only requested, but
                                                                                 name contains an ip addr. of the
                                                                                 opossite type */ ,
-                                       E_DNS_NO_NAPTR /* unresolvable naptr record */,
-                                       E_DNS_CRITICAL /* critical error, marks the end
+                                       E_DNS_NO_NAPTR /**< unresolvable naptr record */,
+                                       E_DNS_CRITICAL /**< critical error, marks the end
                                                                          of the error table (always last) */
 };
 
 
 
-/* return a short string, printable error description (err <=0) */
+/** @brief return a short string, printable error description (err <=0) */
 const char* dns_strerror(int err);
 
-/* dns entry error flags */
+/** @brief dns entry error flags */
 #define DNS_BAD_NAME     1 /* unresolvable */
 
-/* dns requests flags */
+/** @name dns requests flags */
+/*@{ */
 #define DNS_NO_FLAGS   0
 #define DNS_IPV4_ONLY  1
 #define DNS_IPV6_ONLY  2
 #define DNS_IPV6_FIRST 4
-#define DNS_SRV_RR_LB  8  /* SRV RR weight based load balancing */
-#define DNS_TRY_NAPTR  16 /* enable naptr lookup */
+#define DNS_SRV_RR_LB  8  /**< SRV RR weight based load balancing */
+#define DNS_TRY_NAPTR  16 /**< enable naptr lookup */
+/*@} */
 
 
-/* ip blacklist error flags */
+/** @name ip blacklist error flags */
+/*@{ */
 #define IP_ERR_BAD_DST      2 /* destination is marked as bad (e.g. bad ip) */
 #define IP_ERR_SND          3 /* send error while using this as destination */
 #define IP_ERR_TIMEOUT      4 /* timeout waiting for a response */
 #define IP_ERR_TCP_CON      5 /* could not establish tcp connection */
+/*@} */
 
 
-/* stripped down dns rr */
+/** @brief stripped down dns rr 
+       @note name, type and class are not needed, contained in struct dns_query */
 struct dns_rr{
        struct dns_rr* next;
-       void* rdata; /* depends on the type */
-       /* name, type and class are not needed, contained in struct dns_query */
-       ticks_t expire; /* = ttl + crt_time */
-       unsigned char err_flags; /* if 0 everything is ok */
+       void* rdata; /**< depends on the type */
+       ticks_t expire; /**< = ttl + crt_time */
+       unsigned char err_flags; /**< if 0 everything is ok */
 
 };
 
@@ -163,15 +172,15 @@ typedef unsigned long long srv_flags_t;
 #endif
 
 struct dns_srv_handle{
-       struct dns_hash_entry* srv; /* srv entry */
-       struct dns_hash_entry* a;   /* a or aaaa current entry */
+       struct dns_hash_entry* srv; /**< srv entry */
+       struct dns_hash_entry* a;   /**< a or aaaa current entry */
 #ifdef DNS_SRV_LB
        srv_flags_t srv_tried_rrs;
 #endif
-       unsigned short port; /* current port */
-       unsigned char srv_no; /* current record no. in the srv entry */
-       unsigned char ip_no;  /* current record no. in the a/aaaa entry */
-       unsigned char proto;  /* protocol number */
+       unsigned short port; /**< current port */
+       unsigned char srv_no; /**< current record no. in the srv entry */
+       unsigned char ip_no;  /**< current record no. in the a/aaaa entry */
+       unsigned char proto;  /**< protocol number */
 };
 
 
@@ -209,7 +218,7 @@ inline static void dns_srv_handle_put(struct dns_srv_handle* h)
 
 
 
-/* use it when copying, it manually increases the ref cound */
+/** @brief use it when copying, it manually increases the ref cound */
 inline static void dns_srv_handle_ref(struct dns_srv_handle *h)
 {
        if (h){
@@ -222,7 +231,7 @@ inline static void dns_srv_handle_ref(struct dns_srv_handle *h)
 
 
 
-/* safe copy increases the refcnt, src must not change while in this function
+/** @brief safe copy increases the refcnt, src must not change while in this function
  * WARNING: the copy must be dns_srv_handle_put ! */
 inline static void dns_srv_handle_cpy(struct dns_srv_handle* dst,
                                                                                struct dns_srv_handle* src)
@@ -233,7 +242,7 @@ inline static void dns_srv_handle_cpy(struct dns_srv_handle* dst,
 
 
 
-/* same as above but assume shm_lock held (for internal tm use only) */
+/** @brief same as above but assume shm_lock held (for internal tm use only) */
 inline static void dns_srv_handle_put_shm_unsafe(struct dns_srv_handle* h)
 {
        if (h){
@@ -250,7 +259,7 @@ inline static void dns_srv_handle_put_shm_unsafe(struct dns_srv_handle* h)
 
 
 
-/* get "next" ip next time a dns_srv_handle function is called
+/** @brief get "next" ip next time a dns_srv_handle function is called
  * params: h   - struct dns_srv_handler
  *         err - return code of the last dns_*_resolve* call
  * returns: 0 if it doesn't make sense to try another record,
@@ -278,7 +287,7 @@ inline static void dns_srv_handle_init(struct dns_srv_handle* h)
 
 
 
-/* performes a srv query on name
+/** @brief performes a srv query on name
  * Params:  name  - srv query target (e.g. _sip._udp.foo.bar)
  *          ip    - result: first good ip found
  *          port  - result: corresponding port number
@@ -288,7 +297,7 @@ inline static void dns_srv_handle_init(struct dns_srv_handle* h)
 int dns_srv_get_ip(str* name, struct ip_addr* ip, unsigned short* port,
                                        int flags);
 
-/* performs an A, AAAA (or both) query/queries
+/** @brief performs an A, AAAA (or both) query/queries
  * Params:  name  - query target (e.g. foo.bar)
  *          ip    - result: first good ip found
  *          flags - resolve options (like ipv4 only, ipv6 prefered a.s.o)
@@ -300,7