TODO
1f531ed6
 $Id$
 
f20a56a2
 ( - todo, x - done)
7dfb54d7
 x change subst_run/str to return error (different from not found)
 x change subst_user as on serdev
 x tm : fake_env: fake also bind_address (else the default will be used
a9fae28b
  in the failure route)
71fd3ebd
 - [core] parse_uri support for new uri params
7dfb54d7
 x [core] on sig_child, kill the processes if they don't exit in a 
71fd3ebd
   reasonable time
518c9339
 - [doc] document force_rport()
2d0f29be
 - [fifo] fix fgets error handling (it does not set errno always,
    , right now kills all ser if interrupted by a signal on ?solaris?)
0cc11fe6
 - [mem] make shm_realloc be fragmentation friendly: call shm_compact_frags
    for the small frags?, don't produce smaller frags -- be wastefull?
71fd3ebd
 - [mem] qm_compact_frags (compacts frags if possible), keep a 
         fragment count/bucket and if too much mem. is blocked in one bucket
         de-frag.
7dfb54d7
 x [mem] investigate: don't produce frag if frag size < request
71fd3ebd
       (should reduce the unrequested fragments number)
7dfb54d7
 x [mem] investigate: keep an used/unused flag per fragment, on free
71fd3ebd
       check if neighboring frags were not used and if so defragment
0cc11fe6
 - [timer] multiple timers? at least ticks should no be affected by the amount
    of work done in the timer handlers
71fd3ebd
 - [tcp] ser intiated tcp connections use INADDR_ANY (they should be bound first
   to some ip/port ?function of the dest?)
0cc11fe6
 - [tcp] need to confirm fd receipt after send_fd, before closing it (this might
6cfeede0
  happen in tcp_send new conn.) (see FreeBSD send BUGS for more info)
2d0f29be
 x [tcp] make send_all, send  non-blocking ready ?
 x [tcp] tcp_send w/ timeout (to avoid waiting forever to send DOS)
0cc11fe6
 
804ca8ba
 - forward port fixes from testing
0cc11fe6
 - [udp] use recvmsg to get the dst ip address in udp_rcv_loop
804ca8ba
  (it won't work on solaris, but...)
0cc11fe6
 x nathelper: extract_body broken-> uses content_length value form the 
59653eb8
  message instead of recalculating it + duplicate code for get_body()
50d5fa87
 - fix check_sel_op -- add proto for uri proto checks
0cc11fe6
 - [tcp] add setting for infinite tcp conn life?
50d5fa87
 
9f4c52ce
 - fix 2 different fixups for diff. no of parameter
59653eb8
  (add no of params to struct action?) -- linked to var. no. of params
 x alias support fot tcp/tls port numbers
4c37101e
 - warning builder set_advertised address support
172403d1
 - grep parse_uri & replace with parse_sip_msg_uri (e.g do_action!)
d48f0d9b
 x update AUTHORS, debian/copyright, ser.8, ser.cfg.5 from stable
 x update Makefile*  from stable
 x update all package specs from stable
0cc11fe6
 - [tcp] add BUG checks for  fd > 0 && fd <= maxfd to all selects?
a46e0068
 - [tcp] switch to poll if HAVE_POLL defined (it's unifix so  everybody 
    should have it, but it would be slower on systems emulating it, like
    older linuxes)
 - [tcp] switch to epoll if HAVE_EPOLL defined (linux 2.6.*)
71fd3ebd
 - [tcp] switch to SIGIO if no epoll (linux only, better than poll)
75e2f1a6
 x tcp_main_loop: BUG cases should "conitnue;"
dda578ba
 x change len_gt into and expr (e.g msg:len).
59653eb8
 x sipit: uri == myself doesn't match tls port = 5061 
   -- updated: new socket_info list code should fix it
 x sipit: fix check_self & *_alias to work with tcp & tls
   -- updated: new socket_info list code should fix it
880c030d
 x sipit: fix ipv6 references in check_self
75e2f1a6
 x regex subst on uris?
6d44652c
 x port receive.c pre_script_cb fix from stable
59653eb8
 x extend alias to include port numbers :
a0b5a680
     something like alias= foo1.bar:5080 foo2.bar foo3.bar:*
59653eb8
 x extend listen and alias to include port numbers and protocol:
627b66ef
        tcp foo.bar:5063, udp foo.bar:5062, foo2.bar
6bfaa042
 x added set_advertised_{address,port} -- was: add force_via, force_srcip a.s.o
 (the advertised addresses should be overwritable from the script).
7dfb54d7
 x ? add force_outbound_socket(ip)? (choose an apropriate socket from the
172403d1
  listen list for sending the msg; works on udp only)
a0b5a680
 
3e8c3475
 release:
172403d1
 - unlink_timer_lists -- unsafe ???
d48f0d9b
 x print_cseq_num max. size fix.
75e2f1a6
 x backport: tcp conn id fix to stable + destroy_tcp 
 x backport: acc mem. leak fixes
 x backport: dns mem. leak fixes (resolve.[ch])
 x backport: id_builder receive_msg mem. leak (msg_translator.c)
 x backport: check_self ipv6/case fixes (forward.c)
 x change tcp timeouts to 2 or 3 min?
a0b5a680
 x check via ipv6 fixes and backport to stable
9c01c860
 x fix kill(0, SIGTERM) on startup error (will kill also the launching shell
b2e24e1d
  if non-interactive)
 - fix modules destroy (some modules will try to free uninitialized resources
    if modules_init was not called first)
176e7a13
 x fix CC_VER bug in newer Makefile (move DEFS after CC?)
0cbace85
 x openbsd 3.2 packages -> doc in share/doc (and not in doc)
9561ba45
 - openbsd 3.2 -> add jabber and mysql to the package
3141b20a
 x fix modules makefiles (so that cd modules/foo; make will also link the proper
04f302c6
    libs)
3141b20a
 x fix -march=..., or compile w/ i386 for the release
e09e5e44
 x resolver should resolve [ipv6]
3141b20a
 x remove parse_uri debugging info
3e8c3475
 - fix DBG("<%.*s>", len, _null_)
e09e5e44
 x add -t, -w, -u -g equivalents to the config file
3e8c3475
 x force add rport : force_rport()
 - kill all the fprintf
 see also tcp & tm
 
 
 
 not so critical:
d31fcdf0
 x replace  remaining mallocs/frees at least in msg_translator.c
b748ffc7
 - add $(INCLUDES) to the Makefiles
d31fcdf0
 x make ser suncc ready
e4067ffb
 - fix parse_cseq!!! (it doesnt parse 1234\n INVITE a.s.o)
49ee1aa0
 x fix 0 parameter module f. call
 x better Via parsing (handle ' ' in uri, eg: foo.bar : 1234 ; received=) and
1f531ed6
  ipv6 addresses ([fec0:aa::01]).
831faabf
 - fix format string vulnerability in log()
ab130758
 - fix alignment access problems (warning on Sun)
49ee1aa0
 x (different way) add request header bitmap field for the modules
c9fc9d63
 - introduce variables & function in the script language (cfg. file)
d31fcdf0
 - ? variable number of params functions in script (no longer limited to 2)?
7ec958f3
 - kill bind_idx
3e8c3475
 x fix bind_address for tcp (in some  way)
428e3b83
 x add conflict in debs/rpms/etc (conflict w/ older ser-mysql, ser-jabber)
 x new packages ser-radius etc
74250efc
 x tcp_destroy (called on ser exit)
4b50480e
 - BUG:?? ipv6 only and try to send to ipv4 => getsendsocket=>0 (send_ipv6=0)
   the reverse is also true
607fcb90
 - SUBST lumps for replies (involves setting the send_socket in forward_reply, 
   before build_res_from_res, & adding it to buid_res_from_res).
c9fc9d63
 
1f531ed6
 
 High priority:
8aeb47e2
 x- parse_uri should not copy anymore the uri members (and it should not 0
6ee62314
  terminate them anylonger).
caf80ae6
 x fix/replace T_REF/T_UNREF
 x review all the tm locking
f20a56a2
 x if () {} else {}
223ec030
 x plugin interface
c9fc9d63
 x ipv6 support
caf80ae6
 x reply ("response line")
 x drop ACKs for our replies
 x add To-tag (for the replies)
 x add User-Agent (for the replies)
1f531ed6
 
 Low priority:
0cc11fe6
 - icmp error handling
c9fc9d63
 x fix via address someday
0cc11fe6
 - fix listen=0.0.0.0 case (see [udp] use recvmsg...)
c9fc9d63
 x forward to received= if present
6eb22d94
 - make it easier to register a statically linkable module.
f3f0a4de
 x add support for -u user and -g group (not only -u uid, -g uid)
7dfb54d7
 x change uid/gid after opening the sockets
831faabf
 - exec improvments (add format strings to it)
dda578ba
 x command line switch for checking the config file syntax
45072d7a
 - config file version (a la sendmail)
caf80ae6
 0 loop detection
1f531ed6
 - cfg. file reload
 - flags for using names or ip adresses in Via ?
a1e488b4
 - escape char injection/printing fix (verify all log/printed messages
  for terminal escapes and remove them)
1f531ed6
 
49ee1aa0
 x handle SIGCHLD, SIGHUP
92d818f3
 - use a  standard lex compatible .lex format (instead of flex)
d31fcdf0
 x try & use native compiler & ld if possible
45072d7a
 
c9fc9d63
 x make install
f3f0a4de
 x init.d scripts (and rc.local? for *BSD or Slackware)
c9fc9d63
 x man page
550bb8c3
 - autoconf scripts
c9fc9d63
 x Debian package build files
 x the same for rpm
59653eb8
 x the same for *BSD
550bb8c3
 
 
caf80ae6
 x jku: branch hash computation over canonical values
 0 jku: loop checking
0a6afa42
 - jku: try CRC as opposed to MD5
e833d08a
 
 
6ee62314
 x freopen stdin, stdout, stderr to /dev/null
f2f969dd
 - add a section on building ser & configuring it for maximum performance
  (-DF_MALLOC, -DNO_DBG, ... sip_warning=0, a.s.o)
20581c5a
 x add src_port, dst_port, proto to cfg.{y,lex}
8aeb47e2
 x generic locking lib
d31fcdf0
 x convert tm to use new locking lib
e29d027b
 
d31fcdf0
 optimizations:
 - better timer interface with hashes (a la openbsd)
20581c5a
 - change lumps (flags for malloc type, recursive? see COND lumps )
d31fcdf0
 - atomic ops?
 - assembly for some very common used function
 - getsock* cache
 - fd cache for tcp_send
4776dc11
 - dns cache? (see DNS)
172403d1
 - make option to use openssl MD5 (HMAC_Init(hmac_ctx, (void*)key, 16, md5_md))
  [ 0.9.7 version is really fast ]
d31fcdf0
 
 
 tcp stuff:
2d0f29be
 x timeout on long sends
d31fcdf0
 x tcp disable nagle 
4290c43f
 x set TOS to minimize delay
0cc11fe6
 x tcp locking/atomic ops review
80c40124
 - tcp fix simultaneous connects (ser process is blocked until connect timeouts
  => possible DOS)
d31fcdf0
 
d531a5d5
 tm optimizations:
 
172403d1
 - inline/macro/drop for: get_tm_table, set_kr, lock_hash, unlock_hash,
   set_t, get_t
d531a5d5
 - replace snprintfs int build_uac_request, *_dlg
 - fix the huge param no. in this functions (use structs if neccessary):
   build_uac_request, build_uac_request_dlg, t_uac, t_uac_dlg
5dcfb23d
 - uri2proxy - t_uac_dlg => extra malloc/free (no �roxy needed here)
d531a5d5
   
4776dc11
 dns stuff:
  - dns cache
  - support for NAPTR (naptr(domain, pref_proto)=> srv_rec + proto => srv(srv_rec, proto) => A or AAAA => A/AAAA(name))
  - support for fallback (inside the same A/AAAA record, other ip; if fails => other SRV ; if it fails too other NAPTR
 [see rfc3263]