Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
history:ser-9-years [2010/09/03 17:02]
miconda
history:ser-9-years [2010/09/03 23:36] (current)
miconda
Line 10: Line 10:
 **SIP Express Router** (aka **SER**) is a high-performance, configurable, free Session Initiation Protocol (SIP) server licensed under the open-source GNU license, offering a large set of features. Started before the publishing of RFC3261 (SIP v2.0), SER pioneered the development of many SIP extensions and pushed further the real-time communications over IP. **SIP Express Router** (aka **SER**) is a high-performance, configurable, free Session Initiation Protocol (SIP) server licensed under the open-source GNU license, offering a large set of features. Started before the publishing of RFC3261 (SIP v2.0), SER pioneered the development of many SIP extensions and pushed further the real-time communications over IP.
  
-It is the oldest open source SIP server, routing **billions of VoIP minutes every month world wide**, being used from Telcos and Carriers to ITSP and SOHO  environments. If you haven't heard of it so far, it is very likely because your VoIP provider routes the calls fast and reliable with SER-based SIP servers, so you don't need to build your own system.+Initial project web site was: 
 +  * http://iptel.org/ser 
 + 
 +Now the web site of development version is: 
 +  * http://sip-router.org 
 + 
 +{{ http://sip-router.org/wp-images/ser-logo.jpg }} 
 + 
 +It is the oldest and most robust open source SIP server, routing **billions of VoIP minutes every month world wide**, being used from Telcos and Carriers to ITSP and SOHO  environments. If you haven't heard of it so far, it is very likely because your VoIP provider routes the calls fast and reliable with SER-based SIP servers, so you don't need to build your own system.
  
 First source code commit of SER was done **9 years ago**: **Sep 3, 2001**. According to GIT log, first three commits were: First source code commit of SER was done **9 years ago**: **Sep 3, 2001**. According to GIT log, first three commits were:
Line 22: Line 30:
 </code> </code>
  
-That is **3286 days** of continuous development, with over 70 registered developers and hundreds of contributors.+That is **3286 days** of continuous development, with over **70** registered developers and hundreds of contributors, estimated cost of development: **over 8 000 000 USD**.
  
 ===== Summary of Evolution ===== ===== Summary of Evolution =====
  
   * **September 2001** - initial commit, SER was then developed for about one year internally at FhG FOKUS Institute, Berlin, Germany   * **September 2001** - initial commit, SER was then developed for about one year internally at FhG FOKUS Institute, Berlin, Germany
-  * **Autumn 2002** - SER was released as GPL, code published on berlios.de +  * **Autumn 2002** - SER was released as GPL, code published on BerliOS: http://developer.berlios.de/projects/ser/ 
-  * **June 2005** - OpenSER forked from SER, code hosted by sourceforge.net +  * **June 2005** - [[http://www.openser-project.org|OpenSER]] forked from SER, code hosted by Source Forge: http://sourceforge.net/projects/openser/ 
-  * **July 2008** - OpenSER was renamed to Kamailio+  * **July 2008** - OpenSER was renamed to [[http://www.kamailio.org|Kamailio]]
   * **November 2008** - SER and Kamailio teams decide to join development efforts and merge the source code trees of the two applications   * **November 2008** - SER and Kamailio teams decide to join development efforts and merge the source code trees of the two applications
 +    * development portal for both changed to: http://sip-router.org
   * **January 2010** - version 3.0.0 is released, from a source code tree containing both SER and Kamailio   * **January 2010** - version 3.0.0 is released, from a source code tree containing both SER and Kamailio
   * **September 2010** - expect next major release, version 3.1.0   * **September 2010** - expect next major release, version 3.1.0
Line 37: Line 46:
  
 SER code and architecture was and still is the foundation for other projects that forked over years from it or from its forks, which still keep majority of inherited code untouched. SER code and architecture was and still is the foundation for other projects that forked over years from it or from its forks, which still keep majority of inherited code untouched.
 +
 +As you can notice, **SER** and **Kamailio** are now same application (completely the same source code). The difference is made by what modules are you using for same purpose (e.g., user authentication, location, accounting) because the variants have a different database structure (you can notice later the existence of modules with same name, but located in different folders).
 +
 +{{ http://www.kamailio.org/wp-images/kamailio-rock-logo.jpg }}
 +
 +Of course you can combine to some extent, for example use Kamailio-specific accounting module with SER-specific database user authentication module. The limitation comes to modules that have dependencies, for example registrar module depends on usrloc module -- you have to use both from one side.
  
 ==== Public Releases ==== ==== Public Releases ====
  
-There were 12 numbering versions used over the years, internal VCS branching representations were:+There were 11 distinct numbering versions used over the years (0.9.x was overlapping, counted once), internal VCS branching representations were:
  
 === SER Only Versions === === SER Only Versions ===
  
  
-  * SER 0.8.x +  * 2002-09-25: SER 0.8.x 
-  * SER 0.9.x +  * 2005-07-04: SER 0.9.x 
-  * SER 2.0.x +  * 2008-08-06: SER 2.0.x 
-  * SER 2.1.x+  * 2009-02-28: SER 2.1.x
  
 === Kamailio (OpenSER) Only Versions === === Kamailio (OpenSER) Only Versions ===
  
  
-  * Kamailio (OpenSER) 0.9.x +  * 2005-06-14: Kamailio (OpenSER) 0.9.x - release built mainly out of SER 0.9.x 
-  * Kamailio (OpenSER) 1.0.x +  * 2005-10-25: Kamailio (OpenSER) 1.0.x 
-  * Kamailio (OpenSER) 1.1.x +  * 2006-07-10: Kamailio (OpenSER) 1.1.x 
-  * Kamailio (OpenSER) 1.2.x +  * 2007-03-12: Kamailio (OpenSER) 1.2.x 
-  * Kamailio (OpenSER) 1.3.x +  * 2007-12-13: Kamailio (OpenSER) 1.3.x - [[http://www.kamailio.org/dokuwiki/doku.php/features:new-in-1.3.x|See what was added in 1.3.x]] 
-  * Kamailio (OpenSER) 1.4.x +  * 2008-08-07: Kamailio (OpenSER) 1.4.x - [[http://www.kamailio.org/dokuwiki/doku.php/features:new-in-1.4.x|See what was added in 1.4.x]] 
-  * Kamailio (OpenSER) 1.5.x+  * 2009-03-02: Kamailio (OpenSER) 1.5.x - [[http://www.kamailio.org/dokuwiki/doku.php/features:new-in-1.5.x|See what was added in 1.5.x]] 
  
 === Combined Versions === === Combined Versions ===
  
  
-  * SER and Kamailio (OpenSER) 3.0.x+  * 2010-01-11: SER and Kamailio (OpenSER) 3.0.x 
 +    * [[http://www.kamailio.org/dokuwiki/doku.php/features:new-in-3.0.x|See what was added in 3.0.x]]
  
 === Next Combined Version === === Next Combined Version ===
Line 71: Line 88:
   * 3.1.x-devel - scheduled for September 2010   * 3.1.x-devel - scheduled for September 2010
     * see what is coming with it at: http://sip-router.org/wiki/features/new-in-devel     * see what is coming with it at: http://sip-router.org/wiki/features/new-in-devel
 +
 +==== SER Arguments ====
 +
 +The command line arguments of SER changed over the years, but you can notice that it has **IPv6** support since 2002 (well, we still wait for ISPs...).
 +
 +Output of **ser -h** and **ser -V** at very young age (recompiled today):
 +
 +<code>
 +# ser -h
 +version: ser 0.8.7-99 (i386/linux)
 +Usage: ser -l address [-p port] [-l address [-p port]...] [options]
 +Options:
 +    -f file      Configuration file (default /usr/local/etc/ser/ser.cfg)
 +    -p port      Listen on the specified port (default: 5060)
 +                 applies to the last address in -l and to all 
 +                 following that do not have a corespponding -p
 +    -l address   Listen on the specified address (multiple -l mean
 +                 listening on more addresses). The default behaviour
 +                 is to listen on the addresses returned by uname(2)
 +
 +    -n processes Number of child processes to fork per interface
 +                 (default: 8)
 +
 +    -r           Use dns to check if is necessary to add a "received="
 +                 field to a via
 +    -R           Same as `-r` but use reverse dns;
 +                 (to use both use `-rR`)
 +
 +    -v           Turn on "via:" host checking when forwarding replies
 +    -d           Debugging mode (multiple -d increase the level)
 +    -D           Do not fork into daemon mode
 +    -E           Log to stderr
 +    -V           Version number
 +    -h           This help message
 +    -b nr        Maximum receive buffer size which will not be exceeded by
 +                 auto-probing procedure even if  OS allows
 +    -m nr        Size of shared memory allocated in Megabytes
 +    -w  dir      change the working directory to "dir" (default "/")
 +    -t  dir      chroot to "dir"
 +    -u uid       change uid 
 +    -g gid       change gid 
 +    -P file      create a pid file
 +    -i fifo_path create a fifo (usefull for monitoring ser) 
 +
 +
 +# ser -V
 +version: ser 0.8.7-99 (i386/linux)
 +flags: STATS:Off, USE_IPV6, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, F_MALLOC, FAST_LOCK-ADAPTIVE_WAIT
 +ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 3040
 +@(#) $Id: main.c,v 1.119 2002-09-25 19:20:26 andrei Rel $
 +main.c compiled on 17:11:29Sep  3 2010 with gcc 4.4
 +
 +</code>
 +
 +
 +Output of **ser -h** and **ser -V** nowadays:
 +
 +<code>
 +# ser -h
 +version: ser 3.0.99-dev1 (i386/linux) b72876
 +Usage: ser [options]
 +Options:
 +    -f file      Configuration file (default: /usr/local/etc/ser/ser.cfg)
 +    -L path      Modules search path (default: /usr/local/lib/ser/modules:/usr/local/lib/ser/modules_s:/usr/local/lib/ser/modules_k)
 +    -c           Check configuration file for errors
 +    -l address   Listen on the specified address/interface (multiple -l
 +                  mean listening on more addresses).  The address format is
 +                  [proto:]addr_lst[:port], where proto=udp|tcp|tls|sctp, 
 +                  addr_lst= addr|(addr, addr_lst) and 
 +                  addr= host|ip_address|interface_name. 
 +                  E.g: -l locahost, -l udp:127.0.0.1:5080, -l eth0:5062,
 +                  -l "sctp:(eth0)", -l "(eth0, eth1, 127.0.0.1):5065".
 +                  The default behaviour is to listen on all the interfaces.
 +    -n processes Number of child processes to fork per interface
 +                  (default: 8)
 +    -r           Use dns to check if is necessary to add a "received="
 +                  field to a via
 +    -R           Same as `-r` but use reverse dns;
 +                  (to use both use `-rR`)
 +    -v           Turn on "via:" host checking when forwarding replies
 +    -d           Debugging mode (multiple -d increase the level)
 +    -D no        1..do not fork (almost) anyway, 2..do not daemonize creator
 +                  3..daemonize (default)
 +    -E           Log to stderr
 +    -T           Disable tcp
 +    -N           Number of tcp child processes (default: equal to `-n')
 +    -W type      poll method (depending on support in OS, it can be: poll,
 +                  epoll_lt, epoll_et, sigio_rt, select, kqueue, /dev/poll)
 +    -V           Version number
 +    -h           This help message
 +    -b nr        Maximum receive buffer size which will not be exceeded by
 +                  auto-probing procedure even if  OS allows
 +    -m nr        Size of shared memory allocated in Megabytes
 +    -w dir       Change the working directory to "dir" (default: "/")
 +    -t dir       Chroot to "dir"
 +    -u uid       Change uid 
 +    -g gid       Change gid 
 +    -P file      Create a pid file
 +    -G file      Create a pgid file
 +    -O nr        Script optimization level (debugging option)
 +    -a mode      Auto aliases mode: enable with yes or on,
 +                  disable with no or off
 +    -A define    Add config pre-processor define (e.g., -A WITH_AUTH)
 +
 +# ser -V
 +version: ser 3.0.99-dev1 (i386/linux) b72876
 +flags: STATS: Off, USE_IPV6, USE_TCP, USE_TLS, TLS_HOOKS, USE_RAW_SOCKS,
 +DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, DBG_QM_MALLOC,
 +USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
 +ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535, PKG_SIZE 4MB
 +poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
 +id: b72876 
 +compiled on 17:16:21 Sep  3 2010 with gcc 4.4.3
 +
 +</code>
  
 ===== Source Code Repository Statistics ===== ===== Source Code Repository Statistics =====
Line 76: Line 208:
 ==== Commits ==== ==== Commits ====
  
-Nine years later since first one, the number of commits is 14200:+Nine years later since first one, the number of new development commits is **14200**:
  
 <code> <code>
Line 176: Line 308:
 | Top Month | March | 1727 | 12.16 | | Top Month | March | 1727 | 12.16 |
 | Top Year | 2009 | 2267 | 15.96 | | Top Year | 2009 | 2267 | 15.96 |
 +
 +**Here are the screenshots with detailed representation over the time of commits:**
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-hour-of-day.png }}
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-hour-of-day-graph.png }}
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-hour-of-week.png }}
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-day-of-week.png }}
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-month-of-year.png }}
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-by-year.png }}
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-commits-by-year-table.png }}
 +
 +==== Ohloh Statistics ====
 +
 +Many other statistics can be found at:
 +  * http://www.ohloh.net/p/sip-router
 +
 +For example, estimated cost to develop the project from scratch is over **8 millions USD**:
 +
 +
 +{{ http://sip-router.org/pub/img/9-years/ser-ohloh-project-cost.png }}
  
 ===== Config Files ===== ===== Config Files =====
Line 324: Line 482:
 ==== Default Configs Over Years ==== ==== Default Configs Over Years ====
  
-Nowadays we build two applications from same source code: Kamailio and SER. Next sections show the latest versions of default config files. If you want to see the evolution for each major version, then follow the links:+Nowadays we build two applications from same source code: **Kamailio** and **SER**. 
 + 
 +Next sections show the latest versions of default config files. If you want to see the evolution for each major version, then follow the links:
  
   * [[http://sip-router.org/pub/configs/ser-0.8.x.cfg|Default config for SER 0.8.x]]   * [[http://sip-router.org/pub/configs/ser-0.8.x.cfg|Default config for SER 0.8.x]]
Line 346: Line 506:
 === SER Default Config === === SER Default Config ===
  
 +You can notice in this config the modularity with sub-routes and the usage of string names for routes (e.g., route[REGISTRAR]), first ever introduced by SER in 2007.
  
 <code c> <code c>
Line 901: Line 1062:
 === Kamailio Default Config === === Kamailio Default Config ===
  
 +You can notice here the usage of **config defines** (#!define XYZ, #!ifdef XYZ, ...) which makes very easy to enable/disable features as well as defining values for tokens that are replaced later in config (e.g., DBURL). The config provides advanced features such as NAT traversal with RTPProxy or presence server.
  
 <code c> <code c>

Navigation

Wiki

Other

QR Code
QR Code history:ser-9-years (generated for current page)