$Id: NEWS 2 2005-06-13 16:47:24Z bogdan_iancu $

******************************************************************
*                Release notes for OpenSER                       *
******************************************************************


0.9.0 changes

NOTE: OpenSER is derived from SER v0.9.2, having new feature added and
   being 99% compatible with SER configuration file and database structure
   (see README for more details). To avoid confusion and overlapping of
   files between OpenSER and SER, all names and paths that included "ser"
   are now with "openser".

NOTE: The next list presents what OpenSER brings new from SER 0.8.14. With
   (NEW) are marked the differences between OpenSER and SER 0.9.2.

new archs:
 - alpha experimental support
 - mips2/cobalt experimental support
 - x86_64 support
 - OS X (darwin) support
 - sparc32 single cpu highly experimental support
 - ppc64 experimental support

modules:
 ACC
   features:
   -(NEW) extra accounting - all accounting bakends (syslog, mysql, 
    radius, diameter) extended to support extra date to be logged. What 
    to be additionally logged can be dynamically configured via module 
    parameters.
   fixes:
   -(NEW) TM callbacks - fixed a callback type which was never
   triggered by TM -> fix missed_calls accounting

 AUTH
   features:
   -(NEW) RPID AVP accepts full AVP specification (ID, NAME, Alias).
   -(NEW) add parser function for the specifications of the
    additional credentials to be loaded during authentication. To be
    used by auth backends (only auth_db) for the moment.
   -(NEW) new internal API

 ATUH_DB
   features:
   -(NEW) load_credential list (credentials to be additionally
    loaded during authentication) supports full AVP specification
    (ID, NAME, Alias).

 ATUH_RADIUS
   features:
   -(NEW) additional credentials - RADIUS authentication response
    may contain several SIP-AVP RADIUS AVPs carrying additional
    credentials (format is AVP_NAME:INT_VAL or AVP_NAME#STR_VAL).
    These additional credentials will be loaded in SER NAME AVPs.
    For backward compatibility reasons, old A_SIP_RPID (containing
    the RPID value) may still be recognize and loaded if the
    module parameter rpid_old_compat is turned on. In this case
    the RPIS will be saved in SIP AVP, it's name being taken from
    the auth module via the API.

 ENUM
   features:
   -support for more than one NAPTR

 MSILO
   features:
   -explicit multidomain support -- recipient's user ID is stored in
    the columns username and domain -- r_uri column kept for compatibility
    reasons (will be removed in future) but not filled by this version of
    module

 MYSQL
   feature:
   -implements a connection pool, all modules will use same connection
    to access the database

 NATHELPER
   features (backported from cvs head):
   -multiple balanced RTPProxys supported
   -support for multiple media streams (audio or/and video) added
   -generic media support (not only audio) - enables proper fax support
   -uac received port  test (flag 16 for nat_uac_test): compares the
    source port of the message with sip port in the first Via and returns
    true if different.
   -(NEW) nat ping are sent out from the same interface as REGISTER
    received on (fetched via USRLOC)

 PDT
   features (backported from from cvs head):
   -no delimiter is required anymore after prefix
   -longest prefix match implemented
   -prefixes definition cached at startup from DB
   - ADD and REMOVE prefix FIFO function added

 PERMISSIONS
   features:
   -support for multiple allow/deny files via function parameters
   -allow_register() new function
   -allow_trusted() new function -- checks based on request's source 
    address, protocol, and from field if request can be trusted without 
    authentication. Based on database with or without caching.

 PIKE
   fixes:
   -(NEW)several race conditions fixed
   -(NEW)brought the stable version

 REGISTRAR
   features:
   -save_memory() new function - saves the registered contacts only
    in memory without being flushed to database (if DB support is 
    enabled).
   -max_contacts new module parameter - maximum accepted contacts
    per user
   -received_avp new module parameter - avp which my contain 
    the original received information (proto,ip, port)
   -rcv_param new module parameter - URI parameter name used for 
    appending the received information (proto,ip, port) to the
    contacts in REGISTER's replies.
   -(NEW) add_sock_hdr() new function - adds to request a new header
    with all information about received socket - useful when
    replicating REGISTER with NAT info.
   -(NEW) sock_hdr_name new module parameter - use the socket info
    from this header instead of the real received socket info
    (useful for replicated REGISTERs)
   -(NEW) sock_flag new module parameter - flag which enable the
    sock_hdr_name lookup.

 RR
   feature:
   -(NEW) add_rr_param() new function - adds a parameter to the
    Record-Route URI
   -(NEW) check_route_param() new function - checks the URI parameters
    of the local Route header
   -add_username new module parameter - if the user part should be added
    in Record-Route header
   -loose_route() performs internal check for preloaded routing set.

 SL
   features:
   -(NEW) replies are sent back exactly from the same interface as
    the request was received on

 TEXTOPS
   features:
   -append_time() new function - adds a date header

 TM
   fixes:
   -(NEW) proper CANCEL-ling of branches with no reply - instead of ignoring 
    them (which was leading to timeout), they are terminated
   -(NEW) callbacks test - fixed the test if a callback type is or not
    registered for a transaction
   -(NEW) dst_uri proper reset - avoid to inherit dst_uri from a previous
    branch.
   -msg_cloner fixed - auth_hooks mixed during cloning
   -race in ACK sending fixed
   features:
   -restart_fr_on_each_reply new module parameter - if set (default)
    fr_inv timer will be restarted for each provisional reply, if not set
    it will be restarted only for the first reply and for replies >=180
    (but only if increasing, eg.: 180, 181 ...). Useful when dealing with bad
    UAs that re-transmit 180s.
   -proper management of AVP list - TM saves the AVP list into transactions
    and make it available into callbacks, failure and reply routes.
   -t_write_unix("announcement","/tmp/sems.sock") new function- sends a 
    message using unix socket interface instead of FIFO interface.
   -tw_append new module parameter - defines lists of additional information
    (AVPs, hdrs) to be written by t_write_fifo and t_write_unix
   -unix_tx_timeout new module parameter-- it specifies the transmit timeout
    of t_write_sock
   -VM functionality was transferred into TM module. vm() function was 
    replaced with t_write_req(). Instead of being fetch from DB (as VM), the 
    email value will be additionally specify as AVP via tw_append.
   -vm_reply() fifo functions was replaced by TM with t_reply() fifo function
    NOTE!! because current version of SEMS may try to send reply via vm_reply,
    it might not work with this TM version.
   -fr_timer_avp new module parameter - AVP specs (ID, NAME, ALIAS) which may
    contain a new value for the final response timeout -> custom timeout per
    transaction
   -fr_inv_timer_avp new module parameter - AVP specs (ID, NAME, ALIAS) which 
    may contain a new value for the INVITE final response timeout -> custom 
    timeout per transaction
   -(NEW) t_flush_flags function - takes no parameter and flush the flags only
    from request to transaction
   -(NEW) t_local_replied new function - tells if last or all replies were
    local generated (and not received from downstream)
   -(NEW) proper serial forking - branch selection is done only from the last
    serial forked set of branches - ensure proper branch selection during
    sequential forks.
   -(NEW) light tm_load - more compact and light version of tm_load - the TM
    API is loaded without find_export() -> no need to export via module 
    interface
    all inter-modules functions.
   -(NEW) replies are sent back exactly from the same interface as the request
    was received on

 URI
   features:
   -uri_param("param") and uri_param("param","value") new function - looks if
    the RURI has a specific param (and a specific value)
   -add_uri_param("param") new function - adds a new param to RURI
   -tel2sip() new function - converts Request-URI, if it is tel URI,
    to SIP URI

 USRLOC
   features:
   -ZOMBIE states removed; all internal "replicate" and "state" stuff removed
    -> "replicate" and "state" columns removed from DB.
   -"received from" information -source- (proto,IP,port) saved in usrloc ->
    "received" new column in DB; useful for NAT traversal
   -(NEW) received socket information -local socket destination- (IP,port)
    saved in usrloc -> "socket" new column DB; useful for proper NAT traversal
    and for multi-homed systems.

 XLOG (backported from cvs head)
   features:
   -printing the body of any header by specifying the name.
   -new specifiers for user-agent, message buffer, message length, message's 
    flags, message id.
   -(NEW)new specifiers for printing any header or AVP
   -(NEW)new specifiers for printing dst_uri and message's flags in hexa format


new modules:
 - alias_db - per user alias engine based only on database queries without any
   caching (easy to provision).
 - avp_radius - load AVPs via RADIUS
 - avpops - flexible module for operations with avps and database, introducing
   a pseudo-variable support in OpenSER configuration file (backported from cvs
   head)
 - cpl-c - implementation of Call Processing Language interpreter
 - dispatcher - implements a dispatcher for incoming requests using hashes
   over parts of the request to select the destination
 - diversion - implements the Diversion extensions as per 
   draft-levy-sip-diversion-08
 - flatstore - simple module that implements very fast inserts for accounting
   purposes
 - gflags - keeps a bitmap of flags in shared memory and may be used to change
   behavior of server based on value of the flags
 - options - answer server options requests
 - speeddial - provides on-server per user speed dial facilities
 - uri_db - split from uri module, performs various checks related to SIP URI
   over database fields

removed modules:
 - vm - the functionality was transferred to tm module (see t_write_req(...)
   method)
 -(NEW) extcmd - the functionality not required anymore
 -(NEW) ext - the functionality overlaps to exec
 -(NEW) print - demo module


core:
 - fixes:
   -(NEW) if script functions return 0, the entire script will be terminated,
    not only the top route; It's important since many TM functions relay 
    on this behavior.
   -(NEW) exit - terminates the whole script, not only the current route


 - new parts:
    - UNIX domain socket server implemented
    - AVP (Attribute-Value Pair) core implemented
    - global AVP alias support implemented

 - changes: 
    - command line: removed -p port and extended -l:
       -l [proto:]addr[:port] , where proto=udp|tcp and 
       addr= host|ip_address|interface_name. The format is the same
       as for listen in the config file. ipv6 addresses must be enclosed in
       [].
    - multicast support added (see mcast_loopback & mcast_ttl)
    - saving of process group id enabled, if the -G option is specified
      (a safe way to quickly kill all ser processes)
    - core dump-ing is enabled by default, see also disable_core_dump
    -(NEW) dset (destination set) stores also the socket to be used for
      sending the branch -. each branch of the same transaction may be
      be sent out on different interfaces.

  - Database API
 
    -database api changed to support usage of different drivers
     simultaneously. The database URL must start now with the name of the
     driver (module). Example: for mysql the DB URL
     'sql://user:password@dbhost:port/database' must be specified now as
     'mysql://user:password@dbhost:port/database'

 - new config features

    - added from_uri & to_uri: behave exactly like uri but use the
      "From:"/"To:" uris
       (e.g.: if (from_uri==myself) ..., if (to_uri=~"^sip:test@")... )
    - config: better escape support in strings (e.g. \", \<cr>, \x0a, \012)
    - bad network addresses are now automatically fixed
      (e.g. 192.168.1.80/27 => 192.168.1.64/27)
    - protocol and port can be specified in the alias and listen lines, e.g.:
        alias= tcp:foo.bar:* udp:test.bar:5080 foo.com
        listen= eth0   tcp:eth0:5065 udp:127.0.0.1 [3ffe::1]
    - multiple operator support: ==, != for special operations (e.g myself, ip)
                              ==, !=, ~= for strings
                              ==, !=, >, <, >=, <= for integers

 - new config variables:

   mcast_loopback = <yes/no> - loopback sent multicast datagram, default no.
   mcast_ttl = number - set multicast ttl, default OS specific (usually 1).
   sock_mode = <permissions> (e.g. sock_mode=0600:  default value = 0660)
       ser unix sockets and fifo will be created with this permissions
       (old name fifo_mode is still supported, but deprecated)
   sock_user = username|"uid"
   sock_group = groupname|"gid"
      change the owner and/or group of the ser unix sockets or fifo
      Short example config snippet:
           sock_mode=0600        # ser socket/fifo mode
           sock_user="www-data"  # ser socket/fifo owner
           sock_group=nogroup  
           user=nobody       # ser user (ser will suid to it)
   disable_core_dump= yes|no 
       by default core dump limits are set to unlimited or a high enough
       value, set this config variable o yes to disable core dump-ing
       (will set core limits to 0)
   open_files_limit= number
       if set and bigger than the current open file limit, ser will try
       to increase its open file limit to this number. Note: ser must be
       started as root to be able to increase a limit past the hard limit
       (which, for open files, is 1024 on most systems)
   tcp_connect_timeout= seconds
       time before an ongoing connect will be aborted
   tcp_send_timeout= seconds
       time after a tcp connection will be closed if it is not available 
       for writing in this interval (and ser wants to send something on it)
   tcp_accept_aliases= yes|no
       if a message received over a tcp connection has "alias" in its via
       a new tcp alias port will be created for the connection the message
       came from (the alias port will be set to the via one).
       Based on draft-ietf-sip-connect-reuse-00.txt, but using only the port
       (host aliases are too dangerous IMHO, involve extra DNS
        lookups and the need for them is questionable)
       See force_tcp_alias for more details.
   log_facility = LOG_LOCAL0
       if ser logs to syslog, you can control the facility for logging. Very
       useful when you want to divert all ser logs to a different log file.
       See man page syslog(3) for more details.
   unix_sock = "/tmp/ser.sock"
       The name of the socket the unixsock server should listen on.
   unix_sock_children = 1
       The number of children that will listen on the unix domain socket.
   unix_tx_timeout = 2000
       Timeout (in ms) used when sending replies through unix sockets.

 - new script commands:
   (NEW) return(int) - exits from the current route and sets "int" as
       route returning code. Now you can easily return and test the code
       from sub-routes.
   force_send_socket([proto:]address[:port])
       sends the message from the specified socket (it _must_ be one of the
       sockets ser listens on). If the protocol doesn't match (e.g. udp
       message "forced" to a tcp socket) the closest socket of the same
       protocol is used.
   force_tcp_alias()
   force_tcp_alias(port)
       adds a tcp port alias for the current connection (if tcp).
       Useful if you want to send all the traffic to port_alias through
       the same connection this request came from [it could help 
       for firewall or nat traversal].
       With no parameters adds the port from the message via as the alias.
       When the "aliased" connection is closed (e.g. it's idle for too
       much time), all the port aliases are removed.
       Note: by default ser closes idle connection after 3 minutes (stable)
       or 1 minute (unstable) so to take full advantage of tcp aliases for
       things like firewall and nat traversal, redefine TCP_CON_*TIMEOUT
       in tcp_conn.h and recompile. Also right now there can be maximum
       3 port aliases to a connection (you shouldn't need more than one).
       To change this redefine TCP_CON_MAX_ALIASES in the same file
       (set it to you desired value + 1; 1 is needed for the real port).

utilities:
 - (NEW) you can create resource file for openserctl (formerly serctl) and
   place it in your home directory as ".openserctlrc". You can set in this
   file the values of the variables from openserctl, helpful to avoid
   overwriting of changed openserctl values at a new installation.
 - (NEW) you can create resource file for openser_mysql.sh (formerly
   ser_mysql.sh) and  place it in your home directory as ".opensermysqlrc"
 - (NEW) openserctl includes now commands for managing AVPs, speeddial and
   database aliases (alias_db).
 - ngrep patch for displaying new lines in captured SIP messages is no longer
   needed; use ngrep V 1.42 with the option "-W byline".


