Original URL – http://mfnboer.home.xs4all.nl/twinkle/

About

Twinkle is a softphone for your voice over IP and instant messaging communcations using the SIP protocol. You can use it for direct IP phone to IP phone communication or in a network using a SIP proxy to route your calls and messages.

Twinkle version 1.4.2 is now available for download.

Twinkle is available for Linux only (GPL license).

Features

In addition to making basic voice calls Twinkle provides you the following features:

  • 2 call appearances (lines)
  • Multiple active call identities
  • Custom ring tones
  • Call Waiting
  • Call Hold
  • 3-way conference calling
  • Mute
  • Call redirection on demand
  • Call redirection unconditional
  • Call redirection when busy
  • Call redirection no answer
  • Reject call redirection request
  • Blind call transfer
  • Call transfer with consultation (attended call transfer)
  • Reject call transfer request
  • Call reject
  • Repeat last call
  • Do not disturb
  • Auto answer
  • Message Waiting Inidication
  • Voice mail speed dial
  • User defineable scripts triggered on call events
    E.g. to implement selective call reject or distinctive ringing
  • RFC 2833 DTMF events
  • Inband DTMF
  • Out-of-band DTMF (SIP INFO)
  • STUN support for NAT traversal
  • Send NAT keep alive packets when using STUN
  • NAT traversal through static provisioning
  • Persistent TCP connections for NAT traversal
  • Missed call indication
  • History of call detail records for incoming, outgoing, successful and missed calls
  • DNS SRV support
  • Automatic failover to an alternate server if a server is unavailable
  • Other programs can originate a SIP call via Twinkle, e.g. call from address book
  • System tray icon
  • System tray menu to quickly originate and answer calls while Twinkle stays hidden
  • User defineable number conversion rules
  • Simple address book
  • Support for UDP and TCP as transport for SIP
  • Presence
  • Instant messaging
  • Simple file transfer with instant message
  • Instant message composition indication
  • Command line interface (CLI)

VoIP security

  • Secure voice communication by ZRTP/SRTP
  • MD5 digest authentication support for all SIP requests
  • AKAv1-MD5 digest authentication support for all SIP requests
  • Identity hiding

If you want to know more about VoIP security and ZRTP, then you can read this paper.

Audio codecs

Twinkle supports the following audio codecs.

  • G.711 A-law (64 kbps payload, 8 kHz sampling rate)
  • G.711 μ-law (64 kbps payload, 8 kHz sampling rate)
  • GSM (13 kbps payload, 8 kHz sampling rate)
  • Speex narrow band (15.2 kbps payload, 8 kHz sampling rate)
  • Speex wide band (28 kbps payload, 16 kHz sampling rate)
  • Speex ultra wide band (36 kbps payload, 32 kHz sampling rate)
  • iLBC (13.3 or 15.2 kbps payload, 8 kHz sampling rate)
  • G.726 (16, 24, 32 or 40 kbps payload, 8 kHz sampling rate)

Note: the payload bandwidth for the speex codecs are measured on the constant bit rate variant without voice activation detection.

For all codecs the following preprocessing options are available to improve quality at the far end of a call.

  • Automatic gain control (AGC)
  • Noise reduction
  • Voice activity detection (VAD)
  • Acoustic echo control (AEC) [experimental]

Audio drivers

Twinkle supports the following audio drivers.

  • Open Sound System (OSS)
  • Advanced Linux Sound Architecture (ALSA)

Presence

Twinkle supports basic presence functionality using a presence agent that must be offered by your SIP provider.

Only the basic online and offline presence states (PIDF) are supported. Your buddy lists are stored locally on your computer.

Instant messaging

Twinkle has basic instant messaging capabilties. You can send plain text messages. You can receive plain text or rich text (html) messages.

KDE goodies

These features are only available when your system provides KDE libraries. Twinkle can also run on systems without KDE libraries, but you will lack these features.

  • Balloon popup from system tray when a call comes in
  • Interface to KAddressBook: dial phone numbers from your address book
  • Display names from KAddressBook on incoming calls
  • Display photos from KAddressBook on incoming calls

Languages

Twinkle is available in the following languages

  • Czech, Dutch, English, French, German, Swedish

Standards support

Twinkle supports the following standards (some partial).

  • RFC 2327 – SDP: Session Description Protocol
  • RFC 2782 – A DNS RR for specifying the location of services (DNS SRV)
  • RFC 2833 – RTP Payload for DTMF Digits
  • RFC 2976 – The SIP INFO Method
  • RFC 3261 – SIP: Session Initiation Protocol
  • RFC 3262 – Reliability of Provisional Responses in SIP
  • RFC 3263 – Session Initiation Protocol (SIP): Locating SIP Servers
  • RFC 3264 – An Offer/Answer Model with the Session Description Protocol (SDP)
  • RFC 3265 – Session Initiation Protocol (SIP)-Specific Event Notification
  • RFC 3310 – Hypertext Transfer Protocol (HTTP) Digest Authentication Using Authentication and Key Agreement (AKA)
  • RFC 3323 – A Privacy Mechanism for the Session Initiation Protocol (SIP)
  • RFC 3325 – Private Extensions to the Session Initiation Protocol (SIP) for Asserted Identity within Trusted Networks
  • RFC 3420 – Internet Media Type message/sipfrag
  • RFC 3428 – Session Initiation Protocol (SIP) Extension for Instant Messaging
  • RFC 3489 – Simple Traversal of UDP Through Network Address Translators (NATs)
  • RFC 3515 – The Session Initiation Protocol (SIP) Refer Method
  • RFC 3550 – RTP: A Transport Protocol for Real-Time Applications
  • RFC 3551 – RTP Profile for Audio and Video Conferences with Minimal Control
  • RFC 3581 – An extension to SIP for Symmetric Response Routing
  • RFC 3608 – Session Initiation Protocol (SIP) Extension Header Field for Service Route Discovery During Registration
  • RFC 3711 – The Secure Real-time Transport Protocol (SRTP)
  • RFC 3842 – A Message Summary and Message Waiting Indication Event Package for the Session Initiation Protocol (SIP)
  • RFC 3856 – A Presence Event Package for the Session Initiation Protocol (SIP)
  • RFC 3863 – Presence Information Data Format (PIDF)
  • RFC 3891 – The Session Initiation Protocol (SIP) “Replaces” Header
  • RFC 3892 – The Session Initiation Protocol (SIP) Referred-By Mechanism
  • RFC 3903 – Session Initiation Protocol (SIP) Extension for Event State Publication
  • RFC 3951 – Internet Low Bit Rate Codec (iLBC)
  • RFC 3952 – Real-time Transport Protocol (RTP) Payload Format for internet Low Bit Rate Codec (iLBC) Speech
  • RFC 3994 – Indication of Message Composition for Instant Messaging
  • RFC 4320 – Actions Addressing Identified Issues with the Session Initiation Protocol’s (SIP) Non-INVITE Transaction
  • RFC 4488 – Suppression of Session Initiation Protocol (SIP) REFER Method Implicit Subscription
  • draft-zimmermann-avt-zrtp-01 – ZRTP: Extensions to RTP for Diffie-Hellman Key Agreement for SRTP

RFC 3261 is not fully supported yet.

  • No multi-part MIME or S/MIME bodies
  • Only sip: URI support, no sips: URI support

Road map

Some of the features I have on my wish list (in no particular order) to implement in future versions of Twinkle are:

  • Rich presence (RPIDF, datamodel)
  • Support for watcher info
  • XCAP
  • Instant message emoticons
  • Video
  • Recording of calls
  • IPv6
  • Migration to Qt4
  • MSRP

Download

Twinkle is available for Linux only.

 

The Twinkle SIP client supports executing a script when an incoming call is received and I’m sure many others do as well. To get something like this working in Twinkle, you’d write a script like the one below, then go into Edit->User Profile->Scripts and select /path/to/my/script for “Incoming Call”.

#!/usr/bin/env python
import os
import re

def get_caller_id(from_hdr):
clid, uri = from_hdr.split(” <sip”)
clid = re.sub(“\””, “”, clid)
# Insert ASCII code for spaces
if re.search(“\s”, clid):
clid = re.sub(“\s”, “%20”, clid)
return clid
if “SIP_FROM” in os.environ:
from_hdr = os.environ[“SIP_FROM”]
if re.match(“\”[A-Za-z0-9\s]+\””, from_hdr):
cmd = “firefox ”
url = “http://www.google.com/search?q=”
caller_id = get_caller_id(from_hdr)
cmd_string = cmd + url + caller_id

# Launch Browser
os.system(cmd_string)

 

Information from forum – http://superuser.com/questions/182954/sip-client-to-open-a-web-page-with-caller-id