Overview

OverSIP is a SIP proxy & server built on top of Ruby EventMachine-LE async library which follows the Reactor Design Pattern.

The SIP stack of OverSIP has been tested in several environments and interoperability with other (nice) SIP devices is guaranteed.

Features

  • Fully asynchronous event-based design.
  • SIP over UDP, TCP, TLS and WebSocket transports.
  • Full support for IPv4, IPv6 and DNS resolution (NAPTR, SRV, A, AAAA).
  • Fully programmable using Ruby language.
  • The perfect Outbound Edge Proxy.

Events and Callbacks

OverSIP provides user-programmable callbacks for different kinds of events. Those callbacks are custom Ruby code written by the user. Examples of OverSIP events are:

  • SIP request/response received.
  • Error sending a SIP request.
  • WebSocket connection/disconnection.
  • SIP or WebSocket inbound/outbound TLS connection.
  • OverSIP starts/terminates.
  • OverSIP is reloaded.

SIP Standards

OverSIP implements the following SIP specifications:

  • RFC 3261SIP: Session Initiation Protocol”
  • RFC 3263 “Locating SIP Servers”
  • RFC 3326 “The Reason Header Field”
  • RFC 3327 “Extension Header Field for Registering Non-Adjacent Contacts” (Path header)
  • RFC 3581 “An Extension for Symmetric Response Routing” (rport parameter)
  • RFC 4320 “Actions Addressing Identified Issues with the Non-INVITE Transaction”
  • RFC 5393 “Addressing an Amplification Vulnerability in Forking Proxies”
  • RFC 5626 “Managing Client-Initiated Connections” (Outbound mechanism)
  • RFC 5630 “The Use of the SIPS URI Scheme”
  • RFC 5922 “Domain Certificates in SIP
  • RFC 5954 “Essential Correction for IPv6 ABNF and URI Comparison in RFC 3261”
  • RFC 6026 “Correct Transaction Handling for 2xx Responses to INVITE Requests”
  • draft-ietf-sipcore-sip-websocket “The WebSocket Protocol as a Transport for SIP

Not (Yet) Implemented or Planned

Due to the nature and purpose of OverSIP, the following SIP features are not implemented:

  • HTTP/SIP Authentication.
  • Registration.
  • Parallel forking.