TODO 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. $Id$
  2. ( - todo, x - done)
  3. x change subst_run/str to return error (different from not found)
  4. x change subst_user as on serdev
  5. x tm : fake_env: fake also bind_address (else the default will be used
  6. in the failure route)
  7. - [core] parse_uri support for new uri params
  8. x [core] on sig_child, kill the processes if they don't exit in a
  9. reasonable time
  10. - [doc] document force_rport()
  11. - [fifo] fix fgets error handling (it does not set errno always,
  12. , right now kills all ser if interrupted by a signal on ?solaris?)
  13. - [mem] make shm_realloc be fragmentation friendly: call shm_compact_frags
  14. for the small frags?, don't produce smaller frags -- be wastefull?
  15. - [mem] qm_compact_frags (compacts frags if possible), keep a
  16. fragment count/bucket and if too much mem. is blocked in one bucket
  17. de-frag.
  18. x [mem] investigate: don't produce frag if frag size < request
  19. (should reduce the unrequested fragments number)
  20. x [mem] investigate: keep an used/unused flag per fragment, on free
  21. check if neighboring frags were not used and if so defragment
  22. - [timer] multiple timers? at least ticks should no be affected by the amount
  23. of work done in the timer handlers
  24. - [tcp] ser intiated tcp connections use INADDR_ANY (they should be bound first
  25. to some ip/port ?function of the dest?)
  26. - [tcp] need to confirm fd receipt after send_fd, before closing it (this might
  27. happen in tcp_send new conn.) (see FreeBSD send BUGS for more info)
  28. x [tcp] make send_all, send non-blocking ready ?
  29. x [tcp] tcp_send w/ timeout (to avoid waiting forever to send DOS)
  30. - forward port fixes from testing
  31. - [udp] use recvmsg to get the dst ip address in udp_rcv_loop
  32. (it won't work on solaris, but...)
  33. x nathelper: extract_body broken-> uses content_length value form the
  34. message instead of recalculating it + duplicate code for get_body()
  35. - fix check_sel_op -- add proto for uri proto checks
  36. - [tcp] add setting for infinite tcp conn life?
  37. - fix 2 different fixups for diff. no of parameter
  38. (add no of params to struct action?) -- linked to var. no. of params
  39. x alias support fot tcp/tls port numbers
  40. - warning builder set_advertised address support
  41. - grep parse_uri & replace with parse_sip_msg_uri (e.g do_action!)
  42. x update AUTHORS, debian/copyright, ser.8, ser.cfg.5 from stable
  43. x update Makefile* from stable
  44. x update all package specs from stable
  45. - [tcp] add BUG checks for fd > 0 && fd <= maxfd to all selects?
  46. - [tcp] switch to poll if HAVE_POLL defined (it's unifix so everybody
  47. should have it, but it would be slower on systems emulating it, like
  48. older linuxes)
  49. - [tcp] switch to epoll if HAVE_EPOLL defined (linux 2.6.*)
  50. - [tcp] switch to SIGIO if no epoll (linux only, better than poll)
  51. x tcp_main_loop: BUG cases should "conitnue;"
  52. x change len_gt into and expr (e.g msg:len).
  53. x sipit: uri == myself doesn't match tls port = 5061
  54. -- updated: new socket_info list code should fix it
  55. x sipit: fix check_self & *_alias to work with tcp & tls
  56. -- updated: new socket_info list code should fix it
  57. x sipit: fix ipv6 references in check_self
  58. x regex subst on uris?
  59. x port receive.c pre_script_cb fix from stable
  60. x extend alias to include port numbers :
  61. something like alias= foo1.bar:5080 foo2.bar foo3.bar:*
  62. x extend listen and alias to include port numbers and protocol:
  63. tcp foo.bar:5063, udp foo.bar:5062, foo2.bar
  64. x added set_advertised_{address,port} -- was: add force_via, force_srcip a.s.o
  65. (the advertised addresses should be overwritable from the script).
  66. x ? add force_outbound_socket(ip)? (choose an apropriate socket from the
  67. listen list for sending the msg; works on udp only)
  68. release:
  69. - unlink_timer_lists -- unsafe ???
  70. x print_cseq_num max. size fix.
  71. x backport: tcp conn id fix to stable + destroy_tcp
  72. x backport: acc mem. leak fixes
  73. x backport: dns mem. leak fixes (resolve.[ch])
  74. x backport: id_builder receive_msg mem. leak (msg_translator.c)
  75. x backport: check_self ipv6/case fixes (forward.c)
  76. x change tcp timeouts to 2 or 3 min?
  77. x check via ipv6 fixes and backport to stable
  78. x fix kill(0, SIGTERM) on startup error (will kill also the launching shell
  79. if non-interactive)
  80. - fix modules destroy (some modules will try to free uninitialized resources
  81. if modules_init was not called first)
  82. x fix CC_VER bug in newer Makefile (move DEFS after CC?)
  83. x openbsd 3.2 packages -> doc in share/doc (and not in doc)
  84. - openbsd 3.2 -> add jabber and mysql to the package
  85. x fix modules makefiles (so that cd modules/foo; make will also link the proper
  86. libs)
  87. x fix -march=..., or compile w/ i386 for the release
  88. x resolver should resolve [ipv6]
  89. x remove parse_uri debugging info
  90. - fix DBG("<%.*s>", len, _null_)
  91. x add -t, -w, -u -g equivalents to the config file
  92. x force add rport : force_rport()
  93. - kill all the fprintf
  94. see also tcp & tm
  95. not so critical:
  96. x replace remaining mallocs/frees at least in msg_translator.c
  97. - add $(INCLUDES) to the Makefiles
  98. x make ser suncc ready
  99. - fix parse_cseq!!! (it doesnt parse 1234\n INVITE a.s.o)
  100. x fix 0 parameter module f. call
  101. x better Via parsing (handle ' ' in uri, eg: foo.bar : 1234 ; received=) and
  102. ipv6 addresses ([fec0:aa::01]).
  103. - fix format string vulnerability in log()
  104. - fix alignment access problems (warning on Sun)
  105. x (different way) add request header bitmap field for the modules
  106. - introduce variables & function in the script language (cfg. file)
  107. - ? variable number of params functions in script (no longer limited to 2)?
  108. - kill bind_idx
  109. x fix bind_address for tcp (in some way)
  110. x add conflict in debs/rpms/etc (conflict w/ older ser-mysql, ser-jabber)
  111. x new packages ser-radius etc
  112. x tcp_destroy (called on ser exit)
  113. - BUG:?? ipv6 only and try to send to ipv4 => getsendsocket=>0 (send_ipv6=0)
  114. the reverse is also true
  115. - SUBST lumps for replies (involves setting the send_socket in forward_reply,
  116. before build_res_from_res, & adding it to buid_res_from_res).
  117. High priority:
  118. x- parse_uri should not copy anymore the uri members (and it should not 0
  119. terminate them anylonger).
  120. x fix/replace T_REF/T_UNREF
  121. x review all the tm locking
  122. x if () {} else {}
  123. x plugin interface
  124. x ipv6 support
  125. x reply ("response line")
  126. x drop ACKs for our replies
  127. x add To-tag (for the replies)
  128. x add User-Agent (for the replies)
  129. Low priority:
  130. - icmp error handling
  131. x fix via address someday
  132. - fix listen=0.0.0.0 case (see [udp] use recvmsg...)
  133. x forward to received= if present
  134. - make it easier to register a statically linkable module.
  135. x add support for -u user and -g group (not only -u uid, -g uid)
  136. x change uid/gid after opening the sockets
  137. - exec improvments (add format strings to it)
  138. x command line switch for checking the config file syntax
  139. - config file version (a la sendmail)
  140. 0 loop detection
  141. - cfg. file reload
  142. - flags for using names or ip adresses in Via ?
  143. - escape char injection/printing fix (verify all log/printed messages
  144. for terminal escapes and remove them)
  145. x handle SIGCHLD, SIGHUP
  146. - use a standard lex compatible .lex format (instead of flex)
  147. x try & use native compiler & ld if possible
  148. x make install
  149. x init.d scripts (and rc.local? for *BSD or Slackware)
  150. x man page
  151. - autoconf scripts
  152. x Debian package build files
  153. x the same for rpm
  154. x the same for *BSD
  155. x jku: branch hash computation over canonical values
  156. 0 jku: loop checking
  157. - jku: try CRC as opposed to MD5
  158. x freopen stdin, stdout, stderr to /dev/null
  159. - add a section on building ser & configuring it for maximum performance
  160. (-DF_MALLOC, -DNO_DBG, ... sip_warning=0, a.s.o)
  161. x add src_port, dst_port, proto to cfg.{y,lex}
  162. x generic locking lib
  163. x convert tm to use new locking lib
  164. optimizations:
  165. - better timer interface with hashes (a la openbsd)
  166. - change lumps (flags for malloc type, recursive? see COND lumps )
  167. - atomic ops?
  168. - assembly for some very common used function
  169. - getsock* cache
  170. - fd cache for tcp_send
  171. - dns cache? (see DNS)
  172. - make option to use openssl MD5 (HMAC_Init(hmac_ctx, (void*)key, 16, md5_md))
  173. [ 0.9.7 version is really fast ]
  174. tcp stuff:
  175. x timeout on long sends
  176. x tcp disable nagle
  177. x set TOS to minimize delay
  178. x tcp locking/atomic ops review
  179. - tcp fix simultaneous connects (ser process is blocked until connect timeouts
  180. => possible DOS)
  181. tm optimizations:
  182. - inline/macro/drop for: get_tm_table, set_kr, lock_hash, unlock_hash,
  183. set_t, get_t
  184. - replace snprintfs int build_uac_request, *_dlg
  185. - fix the huge param no. in this functions (use structs if neccessary):
  186. build_uac_request, build_uac_request_dlg, t_uac, t_uac_dlg
  187. - uri2proxy - t_uac_dlg => extra malloc/free (no üroxy needed here)
  188. dns stuff:
  189. - dns cache
  190. - support for NAPTR (naptr(domain, pref_proto)=> srv_rec + proto => srv(srv_rec, proto) => A or AAAA => A/AAAA(name))
  191. - support for fallback (inside the same A/AAAA record, other ip; if fails => other SRV ; if it fails too other NAPTR
  192. [see rfc3263]