TODOs, in random order: ======================= - siproxd daemonized: looks like clashes between threads - lost 200 ACK immediately before RTP starts... - /var/run PID file - check via loop and private IP addresses can comment be used to store a unique ID in there? - multiple inbound interfaces - do I need to be aware of inbound at all? - Documentation (yeah, yeah...) - general security issues - security tests for received SIP messages (function securitycheck) - automagically create a proper config file during install - get_ip_by_host: reduce DNS timeouts (seems to be a more complex problem...) - via loop detection: send 482 error code - support Record-Route header - feature: don't bind to 0.0.0.0 address, but only to inbound/outbound IF's (defined by IFNAME) - support IPTABLES for RTP proxying -> use libiptc - rtpproxy_masq: RACE CONDITIONS! A slot may be timed out, even if the actual masquerading tunnel is still active. A following new INVITE then tries to use the believed free port -> Buh - Can we poll (/proc/something) to figure out if the tunnel is still active before deleting? This would require knowledge of the text layout in /proc/xxx. - are there some other possibilities (netfilter/libiptc)? - introduce some kind of connection STATE to the proxy table. Timeout based discarding only is active for non-established. An INVITE would set the STATE to CONNECTING, the following ACK to CONNECTED. A CONNECTED entry can only be deleted by a BYE or CANCEL. - NETFILTER: during startup (RTP initialization) siproxd should clean left over entries that are within the RTP proxy port range - NETFILTER masquerading: it looks like it is not possible to create an entry in the ip_conntrack table from an userspace application. How do we proceed? We just might insert/delete DNAT entries in the PREROUTE NAT table. This the means that we must implement a connection state into the proxy table.