$Id$

( - todo, x - done)

release:
x resolver should resolve [ipv6]
- remove parse_uri debugging info
- fix DBG("<%.*s>", len, _null_)
x add -t, -w, -u -g equivalents to the config file
x force add rport : force_rport()
- kill all the fprintf
see also tcp & tm



not so critical:
x replace  remaining mallocs/frees at least in msg_translator.c
- add $(INCLUDES) to the Makefiles
x make ser suncc ready
- fix parse_cseq!!! (it doesnt parse 1234\n INVITE a.s.o)
x fix 0 parameter module f. call
x better Via parsing (handle ' ' in uri, eg: foo.bar : 1234 ; received=) and
 ipv6 addresses ([fec0:aa::01]).
- fix format string vulnerability in log()
- fix alignment access problems (warning on Sun)
x (different way) add request header bitmap field for the modules
- introduce variables & function in the script language (cfg. file)
- ? variable number of params functions in script (no longer limited to 2)?
- kill bind_idx
x fix bind_address for tcp (in some  way)
- add conflict in debs/rpms/etc (conflict w/ older ser-mysql, ser-jabber)
- new packages ser-radius etc
- tcp_destroy (called on ser exit)
- BUG:?? ipv6 only and try to send to ipv4 => getsendsocket=>0 (send_ipv6=0)
  the reverse is also true


High priority:
x- parse_uri should not copy anymore the uri members (and it should not 0
 terminate them anylonger).
x fix/replace T_REF/T_UNREF
x review all the tm locking
x if () {} else {}
x plugin interface
x ipv6 support
x reply ("response line")
x drop ACKs for our replies
- icmp error handling
x add To-tag (for the replies)
x add User-Agent (for the replies)

Low priority:
x fix via address someday
- fix listen=0.0.0.0 case
x forward to received= if present
- make it easier to register a statically linkable module.
x add support for -u user and -g group (not only -u uid, -g uid)
- change uid/gid after opening the sockets
- exec improvments (add format strings to it)
- command line switch for checking the config file syntax
- config file version (a la sendmail)
0 loop detection
- cfg. file reload
- flags for using names or ip adresses in Via ?

x handle SIGCHLD, SIGHUP
- use a  standard lex compatible .lex format (instead of flex)
x try & use native compiler & ld if possible

x make install
x init.d scripts (and rc.local? for *BSD or Slackware)
x man page
- autoconf scripts
x Debian package build files
x the same for rpm
- the same for FreeBSD and Slackware


x jku: branch hash computation over canonical values
0 jku: loop checking
- jku: try CRC as opposed to MD5


x freopen stdin, stdout, stderr to /dev/null
- add a section on building ser & configuring it for maximum performance
 (-DF_MALLOC, -DNO_DBG, ... sip_warning=0, a.s.o)
x add src_port, dst_port, proto to cfg.{y,lex}
x generic locking lib
x convert tm to use new locking lib

optimizations:
- better timer interface with hashes (a la openbsd)
- change lumps (flags for malloc type, recursive? see COND lumps )
- atomic ops?
- assembly for some very common used function
- getsock* cache
- fd cache for tcp_send
- dns cache?


tcp stuff:
x tcp disable nagle 
- set TOS to minimize delay
- tcp locking/atomic ops review
- tcp fix simultaneous connects (ser process is blocked until connect timeouts
 => possible DOS)

tm optimizations:

- 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