VoIP/SIP client (softphone) for Windows
When looking for a SIP and media stack I've spotted libre/librem/baresip from creytiv.com. It has I believe pretty unique combination of simplicity, completeness and most of all permissive BSD-style license allowing commercial and closed-source derivatives.
Minimal subset (no video support, no codecs besides G.711, just the essentials for voice calls)
of libre/librem/baresip as a console application built with Turbo C++ 2006 Explorer. If you're not
a Borland products user stay with original source code that can be used with i.e. VC++ 2003.
bsip_tc_20111215.7z - source only
GUI SIP client
SIP client with graphical user interface built upon re/rem/baresip stack.
Feature set is very limited, but whole project is self-contained and easy to compile -
no external dependencies. GUI is using simplest possible model: single registration
account and single call at a time, but application is portable and using configuration
from a local JSON file, so many instances can be run simultaneously with different configurations.
Each instance takes ~1.8 MB of disc space (including wave files with signals such as ringing).
- Initial release: Version 0.1
tSIP_0_1_src.7z (435 kB)
- 2012.01.11 Minor fixes
- lib project dependencies handled in a better way (#pragma link "re.lib", library search directory changed depending on current build configuration),
- FIXED: possible Access Violation errors on quit or restart,
- added missing handling of transport and expires configuration parameters,
- ignoring incorrect stale=FALSE (treating always as stale=TRUE) parameter put by some other device with SIP/401 message that was causing periodical loss of registration; hopefully this would be only temporary change.
- 2012.01.16 tSIP_0_1_2_bin.7z,
- re/rem/baresip sources updated to version 0.4,
- winwave.c: fix for small, non-recurrent memleak,
- added baresip portaudio module and necessary PortAudio v19/DirectSound statically linked library; PortAudio is now default sound backend, WaveIn/WaveOut is left as an alternative,
- removed unnecessary parts from displayed call URI.
- 2012.01.28 tSIP_0_1_3_bin.7z,
- added baresip speex module and required statically linked library,
- added transmitted and received SIP message logging option,
- ua_find(): trying to match incoming requests using AOR if matching by Contact fails; matching by Contact only may cause interoperability problems (see Nokia: Problems with incoming VoIP 3.x calls).
- 2012.04.28 tSIP_0_1_4_bin.7z,
- re/rem/baresip sources updated to version 0.4.1,
- GUI: added auth username to configuration,
- GUI: fixed problem with temporary freezing when opening log window after long work time.
- 2012.05.10 tSIP_0_1_5_bin.7z,
- added baresip gsm module and statically linked gsm library,
- added module for G.726-32 codec and G.726 code from older SpanDSP version (copyright Sun Microsystems and Steve Underwood, public domain),
- added codec set configuration (enable/disable particular codecs).
- 2012.07.22 tSIP_0_1_6_bin.7z,
- added local address setting - equivalent of baresip "sip_listen", may be required when using on machines with more than one network interface to specify interface to bind to.
- 2013.11.20 tSIP_0_1_7_bin.7z,
- application version that handles multiple accounts and multiple calls was moved to separate branch (mtSIP),
- updated re (0.4.5), rem (0.4.4), baresip (0.4.6) sources,
- log window: added "Save to file" to context menu and "Log to file" checkbox (duplicating settings),
- added re-register button (forcing immediate re-registration),
- eliminated GUI freezing when application was closing during registration that would fail due to no response from 2nd party,
- auto-answer with specified SIP code,
- added (very crude) call history,
- added redial button,
- making call: assumed that if sip: prefix is present uri domain does not have to be added (previously: unable to call i.e. sip:192.168.1.11 uri, call function was assuming that domain was not present if "@" in uri was not present).
- 2014.03.19 tSIP_0_1_8_bin.7z,
- moved baresip code into separate static library (mostly to speed up often unnecessarly forced by TC++ whole project rebuilds),
- dialpad: added A, B, C, D DTMFs,
- added Flash button (sent as DTMF event),
- added Hold function,
- added blind transfer function.
- 2014.05.27 tSIP_0_1_9_bin.7z,
- added Speed Dial / BLF panel (application/dialog-info+xml subscription).
- 2014.06.01 tSIP_0_1_10_bin.7z,
- FIXED: account configuration: entering password is not required,
- FIXED: FLASH is no longer displayed as 'R' when dialing,
- FIXED: inconsistent application state when UA was restarted (configuration changed) during a call,
- making call with [Enter] in number edit field,
- auto-repetition for "backspace" button.
- 2014.08.07 tSIP_0_1_11_bin.7z,
Added Accept header to SUBSCRIBE message. Although it shouldn't be required (see RFC6665, 3.1.3), Asterisk 11.9.0 is dropping these type of message with error: WARNING: chan_sip.c:27847 handle_request_subscribe: SUBSCRIBE failure: no Accept header: pvt: stateid: -1, laststate: 0, dialogver: 0, subscribecont: '', subscribeuri: ''. Thanks to Barry Mercer for reporting.
- 2014.09.27 tSIP_0_1_12_bin.7z,
- added WebRTC Acoustic Echo Canceller as static library,
- AEC selection: none/Speex/WebRTC,
- fixed audio problem with WaveIn audio input (waveInUnprepareHeader() misorder).
Note: this is local echo canceller - it eliminates echo introduced by local speakerphone-microphone audio path (and heard by our caller), not echo that may be heard from second party.
- 2014.10.03 tSIP_0_1_13_bin.7z,
- separate audio module selection for audio source, output and output for ringing.
- 2014.10.05 tSIP_0_1_14_bin.7z,
- crude contact list / phonebook,
- json-cpp code moved into separate static library,
- fixed status text when account changed to account without registration,
- added CALL_STATE_OUTGOING, UA_EVENT_CALL_OUTGOING (feedback before contacting 2nd party on outgoing call),
- added CALL_EVENT_TRYING, UA_EVENT_CALL_TRYING (info on receiving SIP/100).
- 2014.10.16 tSIP_0_1_15_bin.7z,
- fixed audio device selection for winwave output (default device was always opened),
- tray icon, File/Minimize to tray, "X" button minimizes to tray,
- settings: Start minimized to tray,
- status text as tray hint,
- cleanup: Hangup()/CALL_STATE_CLOSED code duplication,
- simple tray notifier window, related settings added.
- 2014.11.02 tSIP_0_1_16_bin.7z,
- replaced str_error calls in SIP replies with fixed text (when replying to re-INVITE with image media only invalid message was generated with "Unknown error" followed by empty line),
- fixed minor built problems: reference to missing module with webrtc, not all projects included in main project group, missing (strangely only with particular TC++ copy installed) mmsystem.h include,
- fixed: no ring tones when working directory was different than application directory (e.g. when using start softphone01\tSIP.exe from batch file),
- clearing BLF icon from speed dial panel when BLF subscription is disabled,
- settings: delay for the auto answer, randomized (for fuzzing purposes) from specified range.
- 2014.11.23 tSIP_0_1_17_bin.7z,
- fixed audio device enumeration in settings window,
- GUI scaling (main window),
- intercom/paging (separate audio output on incoming INVITE with Call-Info with answer-after),
- winwave: fixed handle leaks (waveInUnprepareHeader called after waveInClose, with invalid dev handle),
- configurable buttons (in a similar way to e.g. Yealink phones): type, caption and basic number, height, margin top, margin bottom, images selection: image hidden, images for non-BLF button type, for BLF terminated/early/confirmed state
- setting: double width for speed dial.
- 2014.11.29 tSIP_0_1_18_1_bin.7z,
- additional configuration for BLF buttons: number dialed when button is pressed can be changed to different than number for subscription and depend on subscribed number state; this can be treated as generalized "Call pickup" function available e.g. on Yealink phones (to get identical behavior mark "early" for override and enter complete number that has to be used to pickup call from other extension on PABX)
- new button type: unsolicited MWI (dislaying number of new and old messages on voice mail); image shown when there are new messages is shared with BLF "early" setting
- new button type: MUTE
- 2014.12.06 tSIP_0_1_19_bin.7z, tSIP_0_1_19_src.7z
- 2015.01.04 Version 0.1.21
- fixed command line execution when other instance was not found (accessing released memory)
- settings: console-only mode - intended to work as an extra console for desktop phone
- changed registration expires in default configuration to 0; this disables registration by default - deregistration attempt from non-existent server (long timeout) is annoying and it's not very likely that default registration server address (i.e. localhost) would match user registrar
- moved ring initialization to top level project (fixes issue with short ringtone being played even with auto-answer with zero delay)
- separate ringtones selection for INVITEs with Alert-Info: info=<Bellcore-dr1> header (Bellcore-dr1 ... Bellcore-dr8) and for default ring; note: wav files have to be placed in application directory
- new function and button type: mute ring
- settings: action for "X" button in main window: minimize to tray or close
- 2015.01.15 tSIP_0_1_22_bin.7z,
- FIXED: SIP/500 response was sent since v0.1.21 on missing Alert-Info,
- new setting for BLF button: action when button is pressed during call:
- none (= no action, same as in previous version)
- DTMF dialing with optional prefix to be added (prefix can be PABX transfer code or even "R" for FLASH if PABX supports it)
- blind transfer using REFER (default)
- (again) more console columns (up to 5 + 1 "basic") giving up to 55 buttons (up to 75 with reduced button height); minor clean-up to make adding more columns later easier (change EXT_CONSOLE_COLUMNS + add item to combobox in settings window),
- version info: added file description (presented e.g. in Process Explorer and some firewalls).
- 2015.01.19 tSIP_0_1_23_bin.7z,
minor improvements to call history:
- keeping only user part of URI from incoming call
- size increased to 1000 entries
- not skipping entries with duplicated numbers / URIs
- storing call time
- displaying call direction and completion
settings: shortcuts (local to the application)
- hide application
- answer/hangup call
- equivalent of pressing configurable (console) button; for button ID check caption of button edit window
- settings: width for console columns
- minor improvements to call history:
- 2015.01.31 tSIP_0_1_24_bin.7z,
- fixed console-only mode
- switching to/from console-only mode does not require restart
- note: you can use 0.0.0.0:XXXX to bind to specific port without entering any specific IP address
- log: added timestamp to log entries with SIP sent/received messages
- global hotkeys (hotkeys that work even when application is hidden); since it may be quite hard to find unique hotkey combinations use them sparingly - my recommendation would be using global hotkeys for show/hide app and answer/hangup and local hotkeys for other actions