– Kamailio SIP Server –

OpenSER Web Interface will be developed in true OOP fashion, meaning compatability will only be with PHP 5.0+. The program will be composed of the traditional three layers: View, Logic, and Data.

Common OOP patters will be employed to solve many of the problems involved with this project. The next three sections will describe the three layers from top-to-bottom, or view-to-data.

View Layer

Front Controller

  • Single point of entry, everything goes through index.php
  • Easy authentication control and program setup
  • Minimize duplication of setup in various pages

Application Controller

  • Loads configurations from file or database, holds for program use
  • Caches expensive data loads, such as parsing an XML configuration file
  • Acts as DB Singleton and holds DB settings

Command Resolver

  • Modularizes resolution of commands
  • Allows for easier refactoring to support other input methods (HTTP, XML RPC, SOAP, etc.)


  • Primary responsible is to pass data to and from commands
  • Holds all incoming request data
  • Passes return results from commands
  • Passes DB handle to commands

Context Interpretor

  • Allows multiple sources of input, compare to command resolver (HTTP, XML RPC, SOAP, etc.)
  • Builds context for commands to use
  • Responsible for filtering dangerous data, but not for validating data



  • Creates “real” objects, executes methods, does something
  • Acts on contexts
  • Responsible for validating form data
  • Will return simple status codes, passes returned data back into the context


Domain Objects

  • Are the real objects in the system, i.e. User, VoicemailBox, SipProxy, etc.
  • Primary responsiblity is to DO something



  • Map Domain Objects to the database or other storage layer
  • Domain Objects will be unaware of mappers
  • Will support four standard operations: Save, Delete, Load, and Update
  • Can load collections of objects from arrays of raw data
  • Allow for finding/searching for object, returning a collection of possibilities


Collections with Lazy Load

* Implements PHP Iterator interface
* Type specific collection
* Given DB result and a Mapper to build collection of objects with

Identity Mapper and Unit of Work

  • All Domain Objects are added to this, preventing duplicate objects
  • Simplifies database saving, all objects are marked for necessary database operations that are done when the destructor of the mapper is called