VoIP/SIP client (softphone) for Windows
Download the latest release: tSIP_0_3_06_bin.zip (basic version, without video support).
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.
Quick specification
Note: page is organized in chronological way. This specification refers to latest version.
- portable, small (~8.6MB disk space) Win32 application with settings stored as JSON
- customizable GUI suitable for specialized purposes like kiosk applications
- single account (although multiple instances can run simultaneously)
- single call by default but since version 0.3 able to handle multiple calls with conferencing and attended transfer
- UDP/TCP/TLS signaling transports, RTP/SRTP/ZRTP media
- programmable buttons (similar to many bench phones: Speed dial/BLF/MWI/DTMF/Redial/Blind transfer/Hold/Mute/...)
- BLF with state-based number dialed on click (call transfer, call pickup with BLF)
- presence subscription
- console-only mode (intended to work as additional BLF console / extra sidecar for desk phone)
- click-to-call / "callto" web browser integration / command-line control
- Bellcore-dr1...dr8 ring selection
- call recording (as mono or stereo wave or Opus/OGG files) with separate records browser and call transcribing using whisper.cpp
- RTP streaming (unicast/multicast paging, transmitter only)
- plugin interface for external software/hardware integration and odd functionality
- customizable local and global hotkeys allowing e.g. calling to number copied to clipboard, answer/hangup call without restoring application from tray
- separate audio device selection for input, output, ringing and paging/intercom
- switching audio input (e.g. playing wav file) and output ("speakerphone") devices during call
- auto-answer after time and/or with respect to Call-info answer-after parameter
- Lua scripting - scripts assigned to buttons or events, allowing to implement e.g. SIP originate function
- video support (enabled by compile-time switch) with OpenH264
- BSD license; customizable and brandable without the need of going open source
Console application
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 ~3 MB of disk 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
tSIP_0_1_1_bin.7z
tSIP_0_1_1_src.7z- 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,
tSIP_0_1_2_src.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,
tSIP_0_1_3_src.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,
tSIP_0_1_4_src.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,
tSIP_0_1_5_src.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,
tSIP_0_1_6_src.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,
tSIP_0_1_7_src.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,
tSIP_0_1_8_src.7z
- moved baresip code into separate static library (mostly to speed up often unnecessarily 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,
tSIP_0_1_9_src.7z
- added Speed Dial / BLF panel (application/dialog-info+xml subscription).
- 2014.06.01 tSIP_0_1_10_bin.7z,
tSIP_0_1_10_src.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,
tSIP_0_1_11_src.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[14547]: 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,
tSIP_0_1_12_src.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,
tSIP_0_1_13_src.7z
- separate audio module selection for audio source, output and output for ringing.
- 2014.10.05 tSIP_0_1_14_bin.7z,
tSIP_0_1_14_src.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,
tSIP_0_1_15_src.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,
tSIP_0_1_16_src.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,
tSIP_0_1_17_src.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 (disabled, speed dial, BLF, DTMF, redial, transfer, hold, ...)
- caption - displayed text
- basic number (if applicable for selected type)
- height - allowing customize different buttons size or just fit more buttons in a column
- top and bottom margins - allowing to insert some space before/after button or just get rid of excessive buttons leaving only few visible (buttons are using flow layout)
- show/hide image
- images selection for non-BLF and BLF type buttons; customized images are intended for better representation of information type supplied e.g. with custom asterisk hints
- note: multiple buttons of the same type can be programmed and their state is synchronized; in case of BLF there is only single subscription to server if multiple buttons with same number are added
- removed A, B, C, D DTMF keys from main keypad; note: these signs can be programed with DTMF type (programmable) key
- setting: double width for speed dial.
- 2014.11.29 tSIP_0_1_18_1_bin.7z,
tSIP_0_1_18_1_src.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 (displaying number of new and old messages on voice mail); image shown when there are new messages is shared with BLF "early" setting, example images are included - see screenshot
- 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 nonexistent 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,
tSIP_0_1_22_src.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 cleanup 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,
tSIP_0_1_23_src.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,
tSIP_0_1_24_src.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 (and you may need binding to fixed port if you'd like to e.g. make calls using IP address, without registering to any server)
- 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
- 2015.02.07 tSIP_0_1_25_src.7z
- build options: instruction set changed to Pentium Pro for all projects and targets
- TimeCounter.h: time measurement utility for basic testing
- setting focus to call number edit box on startup and when application is called with global show/hide hotkey (allowing dialing number without using mouse while keeping application hidden normally)
- hotkeys: new action available: redial (although same effect can be achieved by assigning redial function to one of the speed dial keys and then assigning this button as action)
- fixed: uninitialized values for new hotkey button (i.e. "global" checkbox often set by default)
- fixed: halt in global buttons unregister loop
- contacts: note field added
- contact note popup window (auto popup on incoming and/or outgoing call if note is not empty and specified option is set); window position and size is stored in configuration
- new button type: show contact note popup
- 2015.02.18 tSIP_0_1_25_1_bin.7z,
tSIP_0_1_25_1_src.7z
- fixed regression (0.1.25): "Cannot focus disabled or invisible window" exception when starting application minimized to tray
- Branding.[h|c] - common application name/protocol handler definition to reduce differences between branded and regular version
- 2015.02.28 tSIP_0_1_26_bin.7z,
tSIP_0_1_26_src.7z
- (very basic) call recording
- settings: on/off switch (all calls are recorder automatically when enabled)
- writing files to \recordings subdirectory
- filename contains date, time, direction ("1" for incoming, "0" for outgoing) and 2nd party number/URI encoded in base64
- output format: WAV, both direction mixed into single channel, PCM 8000sps, 16bit (~55MB per hour)
- (very basic) call recording
- 2015.03.04 tSIP_0_1_27_bin.7z,
tSIP_0_1_27_src.7z
- recording can be disabled and hidden altogether (e.g. for legal reasons) without recompiling by opening executable with resource editor and changing "RECORDING_ENABLED" string to any other value; for extra protection from user manipulation Yoda's Protector or similar tool may be used
- settings window can be closed with Esc key
- new hotkey action type: call to number from clipboard (select number in web browser, hit Ctrl+C and than assigned global shortcut to call; I'd suggest using global hotkey with Ctrl, e.g. Ctrl + Browser Forward Key for this purpose)
- fixed: global hotkeys not working with Win Vista and earlier systems because of MOD_NOREPEAT flag used; added OS detection and app-based antirepeat (with 1s timeout) for systems older than Win7
- settings: restore minimized / bring main window to front on incoming call
- settings: show tray notifier window on outgoing call (e.g. when using global hotkeys)
- 2015.04.11 tSIP_0_1_28_bin.7z,
tSIP_0_1_28_src.7z
- DLL plugin system for interfacing external devices; implemented interface for EX-03 USB phone (aka @phone); most likely compatible also with EX-02 and few other similar devices
- FIXED: incorrect parameter (branding module not used) in protocol handler links
- protocol handler: added "ANSWER" parameter (next to "HANGUP")
- 2015.04.16 tSIP_0_1_29_bin.7z,
tSIP_0_1_29_src.7z
- FIXED: global hotkey unregistration and phone interface shutdown with "X" button when this button was configured to minimize to tray; added TfrmMain::Finalize()
- 2015.05.04 RingAction.7z: mini-plugin that executes hidden command line shell (cmd.exe) with specified
parameter (command) when softphone starts ringing. In my particular usage this is intended to stop media player (that is SMplayer) on incoming
call. SMplayer can be controlled with -send-command option:
D:\progs\smplayer\smplayer -send-action play && D:\progs\smplayer\smplayer -send-action pause
Each time both play and pause commands are sent to handle both cases when SMplayer is playing or is not playing at the moment (pause command itself works as play/pause switch). Command to execute is specified with JSON .cfg file, using JSON editor might help with proper escaping for complex command lines. - 2015.05.10 RingPCSpeaker.7z: mini-plugin: ringing using PC speaker (with WinAPI Beep() - does not work as expected with 64-bit windows version as it is routed to default sound device instead of activating physical PC speaker as with 32-bit windows).
- 2015.05.31 tSIP_0_1_30_bin.7z,
tSIP_0_1_30_src.7z
- FIXED: regression: call history not saved on system shutdown (WM_ENDSESSION handler)
- fixed handling of missing plugin DLL
- contacts: CSV import
- 2015.06.06 tSIP_0_1_31_bin.7z,
tSIP_0_1_31_src.7z
- contact note popup and contact node editor: URLs are highlighted and opened in default browser when clicked
- recordings: custom directory can be set for output (e.g. located on shared network drive)
- added exe location to "About" window (click to open application directory)
- call duration is displayed in "Connected" state
- 2015.07.04 tSIP_0_1_33_bin.7z,
tSIP_0_1_33_src.7z
- recording: encoding of number/URI in wav file name changed to filesystems-safe version of base64 alphabet
- new button type: HTTP query - open specified URL (e.g. search engine or web-based corporate database) with number from last (or current) incoming call passed as parameter; by default google is used
- settings: added RTP/RTCP local port range selection
- 2015.07.06 RecordViewer - simple browser for recorder calls
- 2015.08.08 tSIP_0_1_34_bin.7z,
tSIP_0_1_34_src.7z
- added SIP presence subscription
- 2015.08.15 tSIP_0_1_35_bin.7z,
tSIP_0_1_35_src.7z
- presence button shares more settings with BLF: when pressed in-call works as blind transfer or DTMF sequence with optional prefix for attended transfer
- new button type: UNREGISTER
- recording: option to record calls in stereo, that is each call side into separate wave file channel; useful e.g. for echo and delay testing; note: this doubles resulting file size (effectively 256kbps, 110MB/h)
- 2015.08.28 tSIP_0_1_36_bin.7z,
tSIP_0_1_36_src.7z
- fixed regression (0.1.35) in single channel call recording
- added baresip aufile (wave file as sound source) adapted to Win32
- presented as another (next to WaveIO and Portaudio) sound module for audio input
- requires S16LE, 1ch, 8kSps wave file, located in application directory
- call is disconnected at the end of file
- allows making call with no system sound device (MB with jack auto detection)
- poor man's voicemail (when combining announcement with silence at the end with call recording and auto answer)
- ACTION_SHOWWINDOW (SHOWWINDOW command line parameter) - bring application from tray
- new setting in "General" page: single instance (bring previous instance to front if already running); uses SHOWWINDOW action and same mechanism as click-to-call
- 2015.09.02 tSIP_0_1_36_1_bin.7z
- FIXED: problem with ring and wave source files selection (case sensitivity)
- 2015.09.11 tSIP_0_1_36_2_bin.7z
- FIXED: in default configuration input device type was set to wave file (while file itself was not selected resulting in immediate call drop)
- FIXED: NUL (0) characters were written in log file at the end of every line; strangely neither notepad nor notepad++ care about it
- 2015.10.24 Plugin for running simple scripts using Lua
- 2015.12.05 tSIP_0_1_37_bin.7z,
tSIP_0_1_37_src.7z
- new button type: execute arbitrary application; may be used to run RecordViewer or e.g. notepad passing number from last call as part of command line arguments or file name to open/edit
- 2016.01.24 tSIP_0_1_38_1_bin.7z, tSIP_0_1_38_1_src.7z
- new function: RTP streaming (paging, sender only)
- new button type
- target address can be specified as unicast or multicast (e.g. 192.168.1.10:4000)
- for each button that starts streaming separate wave file to stream can be specified; if wave file is not specified then default audio source from configuration (e.g. microphone) is used
- note: at the moment only G.711a can be used for streaming and enabling G.711a/u in configuration is required
- extended plugin interface while keeping it backward compatible (optional functions to be exported by dlls)
- SetPagingTxCallback - set function to be called by dll to start paging
- SetPagingTxState - inform dll about started/stopped paging
- ClearDial - clear number edit content
- account settings: added outbound proxy (equals to baresip outbound1 parameter for account but by convention - same as with SIP server - sip: prefix should not be included)
- minor cleanup for account configuration window with separating
- basic settings (server, UDP/TCP, user, password and registration Expires/disabling)
- from optional extra settings
- new function: RTP streaming (paging, sender only)
- 2016.02.02 tSIP_0_1_39_bin.7z, tSIP_0_1_39_src.7z
- FIXED regression (0.1.34): not working MWI
- handling NOTIFY with "Event: talk" (answering call remotely, intended for interoperability with some CRM using asterisk AMI to control softphone), new setting in "Call" tab
- 2016.02.13 tSIP_0_1_40_bin.7z, tSIP_0_1_40_src.7z
- configuration of programmable buttons moved to separate file (tSIP_buttons.json) to reduce main configuration file grow and possibly make it easier to share keys configuration between users or application instances
- if new keys config file is not found application will try to create it by moving settings from main config file; if earlier application version would be started next (downgrade) it would not find new settings so manual JSON merge may be needed
- maximum number of sidecar columns increased from 5 to 12 giving up to 132 programmable buttons (with reduced buttons height: up to 180); note that to use full 12 columns with default column width screen with 1440px width would be required
- FIXED: problem with inconsistent sidecar columns order when switching number of columns without restart
- added "Reset all" button to edit window for programmable buttons
- minor changes to programmable button edit window: separated visual settings
- custom background colors (including system colors) can be assigned for programmable buttons (visual grouping for BLF)
- FIXED: if programmable button with type = Disabled was clicked there was log line: "Unhandled BTN type = some_big_number"
- SpeedDial button type shares with BLF and Presence setting for action when pressed during call (DTMF or transfer)
- 2016.02.24 tSIP_0_1_41_bin.7z, tSIP_0_1_41_src.7z
- FIXED: with message logging: message body was not displayed (only headers) for incoming messages
- added action (= new possible keyboard shortcut): toggle sidecar
- modified settings window (categories tree on the left side)
- separated network settings (bind address, RTP ports)
- Polycom-style Call-Info: Answer-After=X in incoming invite is recognized (in addition to previous Call-Info: <uri>;answer-after=X)
- new account setting, "answer any"; if enabled account is treated as "local account" and used to process any incoming message that would be otherwise answered with SIP/404 if account for which it was intended was not found; intended to allow using softphone for some testing purposes like simulating PABX that is processing any call
- 2016.03.12 tSIP_0_1_42_bin.7z, tSIP_0_1_42_src.7z
- [Display Name] is used as description line if number was not found in phonebook
- new setting: show only user part (if present) of URI as CLIP
- Contacts: filter matches also phone numbers / URIs
- added filtering to call history
- call history stores display names from incoming INVITEs
- call history displays contact names if available, then display names and finally numbers if names are empty
- FIXED: memory leak: contact_any
- added G.722 codec; note: WebRTC AEC is currently disabled for 16kHz sampling
- 2016.05.03 tSIP_0_1_43_bin.zip, tSIP_0_1_43_src.7z
- added jitter buffer configuration; use only if needed, e.g. with extreme cases of VoIP over multiple layers of VPN or Tor
- new button type: script
- 2016.05.13 tSIP_0_1_44_bin.zip, tSIP_0_1_44_src.7z
- quick fix for problem with passwords containing "@" (problem with AOR decoding solved by passing password separately when creating account)
- codec selection (PCMA/PCMU/G.722) for paging; make sure that selected codec is enabled in configuration
- added (optional) network adapter selection that may help with other than expected SDP c line address if there are multiple network adapters installed: adapter list dump in log on startup, new setting in "Network" tab - use full adapter ID, on windows with curly brackets ("{012345678-0123-0123-0123-ABCDEF012345678}")
- 2016.05.22 tSIP_0_1_45_bin.zip, tSIP_0_1_45_src.7z
- DLL modules (to be placed in "modules" subdirectory); only codec modules are handled at the moment
- G.729 codec module template intended to be built with Code::Blocks/MinGW
- changing tray icon on missed call or new voice mail image (MWI)
- FIXED: possible integer overflow and access underrun (reading) while encoding G.711a/u
- 2016.05.24 tSIP_0_1_45_1_bin.zip
- call history popup menu:
- add/edit contact
- copy number to clipboard
- HTTP query (same as with programmable button, opening browser searching with google for number by default)
- contact editor can be closed using Esc
- 3 numbers per contact; first nonempty used as default when calling using double click, use popup menu to call using specific number
- added "Company" to contacts
- new setting: Contacts: Filter using contact note
- [Enter] in contacts and history filters moves focus to list
- call history popup menu:
- 2016.05.29 tSIP_0_1_46_bin.zip, tSIP_0_1_46_src.7z
- minor fixes to GUI scaling + button images
- changed handling of button images larger than 16x16 - images are centered but not cropped
- button labels are transparent and on front thus button image can be used as sort of background
- added background image selection for dialpad
- turned off TabStop for dialpad 0...9*# buttons
- FIXED: memory leak when restarting stack (i.e. changing configuration) or closing application while paging is running
- 2016.06.02 tSIP_0_1_46_3_bin.zip, tSIP_0_1_46_3_src.7z
- branding: application name and default application protocol (for "click-to-call") can be changed by editing resources
- FIXED: for HTTP query function full SIP URI (not number) from current incoming call was used
- additional setting for HTTP query function: starting automatically on incoming call or when incoming call is accepted
- 2016.06.22 tSIP_0_1_47_bin.zip, tSIP_0_1_47_src.7z
- plugin interface: added GetNumberDescription() function (get phone number description from phone book or possibly other future data bank)
- text-to-speech plugin (talking ringtone)
- 2016.08.24 URL-hit plugin (silently sending HTTP GET request on incoming call)
- 2016.09.03 tSIP_0_1_48_bin.zip, tSIP_0_1_48_src.7z
- new setting in "General" tab: "Do not beep when using [Enter] in main window to dial or transfer call" - this beep was unintentional but I guess someone might get used to it as a confirmation signal
- new setting: "History"/"Do not store history to file"
- [BREAKING] codecs settings from previous version are not preserved; PCMU + PCMA are set as default
- [BREAKING] codecs from dynamic modules (i.e. G.729) are not enabled by default after loading module
- new, "correct" (as intended in baresip) way of configuring audio codecs, allowing independently enable/disable codecs if there are multiple codecs registered from single module and prioritize enabled codecs
- codecs settings are now associated with account, although since number of accounts is limited to 1 at the moment - separate "Codecs" tab in settings is kept
- codec selection for RTP streaming no longer requires separately enabling specified codec in configuration
- added L16 codec (unchanged baresip module)
- added L16/44100 to codec selection for RTP streaming; note that with default 20ms ptime these frames would be fragmented
- added ptime setting to RTP paging
- RTP timestamps are starting from random value and few other minor fixes from re/rem/baresip
- 2016.10.16 tSIP_0_1_49_bin.zip, tSIP_0_1_49_src.7z
- new settings in "General" page: custom main icon file (.ico) and custom tray icon image for unanswered calls notification (.bmp, 16x16), both from /img/ subdirectory; this is intended to help to distinguish multiple application instances (possibly using each instance for separate account) running simultaneously
- background image can be assigned to tray notifier
- tray notifier settings moved to separate page
- new settings: "Hide settings" that may be used to protect configuration from end user, in particular if combined with restricting write rights for main configuration file
- 2016.10.23 tSIP_0_1_50_bin.zip, tSIP_0_1_50_src.7z
- support for Access-URL header in incoming INVITE - opening page specified in SIP message
- settings ("Integration"): open manually, open depending on "mode" parameter or always open automatically
- new button type: "Access SIP URL" for opening received URL manually
- support for Access-URL header in incoming INVITE - opening page specified in SIP message
- 2016.11.05 tSIP_0_1_51_bin.zip, tSIP_0_1_51_src.7z
- RTP timeout ("Network" tab) - disconnecting call when no RTP packets are received for specified time; improving resilience to network problems in scenarios when softphone is running unattended with auto answer
- new button types: switching audio source and audio output during call ("speakerphone")
- 2016.11.19 tSIP_0_1_52_bin.zip, tSIP_0_1_52_src.7z
- included speex audio preprocessor module from baresip (i.e. speex-based denoise for microphone path)
- settings: AEC card renamed to "Audio Processing", including AEC and audio preprocessor settings
- adding audio filters to chain continues if filter installation fails for one of the filters (WebRTC EC supports only 8kHz codecs at the moment; if e.g. G.722 was used with WebRTC EC then recording was not running)
- no onmouseover for programmable buttons (looking bad on touch screen when mouse cursor is not visible and button is still down), replaced with onmouseup/onmousedown
- no focus for Call/Answer and Hangup buttons; assumption: local hotkey would be better way to terminate call than tab-cycling
- settings: disabling context menu for speed dial panels / programmable keys in order to avoid accidental editing when using with touch screen
- added L16/48000 to codecs set
- settings: logging: log file flushing (disabled by default to reduce disk activity)
- settings: logging: log file size limit, 10MB by default, resetting file if exceeded
- settings: added button to refresh DLL plugin list
- 2016.11.26 tSIP_0_1_53_bin.zip, tSIP_0_1_53_src.7z
- FIXED: division by zero in speex audio preprocessor
- audio source switching works also with RTP streaming (paging)
- Lua scripting (integrated):
- scripts can be executed on events (on call state change, on streaming state change - previously only when button was clicked)
- added new setting page to assign event scripts
- ScriptExec: context map for multiple scripts running simultaneously
- added function SwitchAudioSource (e.g. SwitchAudioSource("aufile", "test.wav"))
- added function SendDtmf (e.g. SendDtmf("1234*#))
- added function BlindTransfer (e.g. BlindTransfer("123"))
- added function GetCallState (returning int as in Callback::ua_state_e enum)
- added function IsCallIncoming()
- added function GetCallPeer() (returning either caller or called number)
- added function GetStreamingState() (returning int as in Callback::paging_tx_state_e enum)
- FIXED: added missing Sleep(milliseconds) function
- added function set to pass variables (states) between script(s) executions:
- SetVariable("name", "value")
- value, isset = GetVariable("name") (returning 2 variables, isset == 0 if variable with that name is not set)
- ClearVariable("name")
- ClearAllVariables()
- added GetInitialCallTarget() and SetInitialCallTarget(number) functions allowing to override number dialed by the user and use softphone for call origination
- settings/Speed Dial: option to ignore presence note (text from server displayed as second line)
- 2016.12.03 tSIP_0_1_54_bin.zip, tSIP_0_1_54_src.7z
- FIXED: making more than one simultaneous outgoing call was possible
- FIXED: WebRTC AEC config was not read back from setting file
- Lua scripting: added ShellExecute() function (avoiding command line that is displayed by os.execute())
- Lua scripting: added "on timer" script
- 2017.01.06 tSIP_0_1_55_bin.zip, tSIP_0_1_55_src.7z
- added option to specify custom User-Agent ("General" page)
- Lua scripting: added GetRegistrationState() (returning values as in Callback::reg_state_e)
- Lua scripting: added SetTrayIcon("fileFromImgSubdir.bmp"); on my PC it seems to require 8-bit bmp files for correct transparency handling
- note: after first function run tSIP stops updating tray icon on its own (regular icon or unanswered call/MWI notification icon)
- Lua scripting: added "on registration state" script
- Lua: changed path search order to avoid CodeGuard problems in debug build
- plugin interface: plugins can now set script variables
- Lua scripting: added "Answer()" function
- Lua scripting: added "MessageBox" function - direct equivalent of WinAPI function with same name but with window handle parameter skipped
- 2017.01.16 GetIdleTime.zip - plugin that sets "InputIdleTime" variable for Lua scripts to number of seconds there is no user activity (mouse, keyboard)
- 2017.01.29 tSIP_0_1_56_bin.zip, tSIP_0_1_56_src.7z
- Lua:
- added "on startup" (running once) script selection
- added SetButtonCaption(btnId, text)
- added SetButtonDown(btnId, state) - set button to "pressed" state or back
- added SetButtonImage(btnId, "file.bmp") - set image for for btn #btnId
- added PluginSendMessageText(dllName, text) - method for passing data/control from script to plugin
- added srcType, srcTypeIsSet = GetExecSourceType() and srcId, srcIdIsSet = GetExecSourceId(): function set that allows reading execution context (i.e. how the script was started, id of the button that script was associated to); this allows using same script file for multiple buttons
- added InputQuery, allowing to take text input from the user, direct equivalent of VCL function with same name: text, isAccepted = InputQuery(caption, prompt, defaultText)
- added GetRecordFile() function (returning name of call recording file, empty string if there is no recording); valid after call is established (recording started), cleared on new call, intended to be used mostly at CALL_STATE_CLOSED state
- added command line APP_QUIT action (can be used as "tsip /tsip=APP_QUIT" from command line or from browser through tsip:APP_QUIT link); this action causes previous application instance to quit and is intended to help with provisioning based on swapping configuration files with downloaded ones (it should be done when application is not running, otherwise configuration file would be overwritten)
- "Number" label and edit are not displayed when editing "Script" button
- Lua:
- 2017.01.29 CommState plugin - using cheap USB-UART converter as physical interface (GPIO: 2 outputs, 4 inputs available) for softphone.
- 2017.02.25 tSIP_0_1_56_1_bin.zip: changes for video doorphone function using RTSP network camera
- Lua updated to version 5.3.4 (support for integers and bitwise operators)
- Lua: added "on BLF (dialog-info) state" event script; numeric ID of the contact that changed state is passed through GetExecSourceId()
- Lua: added function returning phone number and BLF state for specified contact ID (to be used inside "on BLF state" event script): number, state = GetBlfState(contactId)
- Lua: added "tsip_winapi" built-in module, intended to hold some functions corresponding directly to Windows API and act as namespace; this module need to be imported with "require" and included functions are not put into global table directly
- FindWindow
- SendMessage
- MessageBox (duplicating same function in global namespace at the moment)
- Beep (duplicating same function in global namespace at the moment)
- 2017.03.03 tSIP_0_1_56_2_bin.zip
- added option to start recording in call progress state, that is recording early media (ringback or other announcements from operators before call is connected or if call cannot be connected)
- 2017.03.26 tSIP_0_1_57_bin.zip, tSIP_0_1_57_src.7z
- new setting, replacing option added in 0.1.56.2 (breaking compatibility): recording start can be set to manual (using Lua script), on call confirmed or on call progress
- Lua: added function to manually start call recording (if not started automatically): status = RecordStart(filename, channels), where filename = full path and name for record file to create, channels (1 or 2) = mono or stereo (independent channels for call parties) recording
- Lua: added GetExeName() function, returning full path and application exe name
- Lua: added GetRecordingState() function, allowing to check if recording is running; might be used if few buttons / scripts able to start recording are defined
- 2017.04.08 tSIP_0_1_58_bin.zip, tSIP_0_1_58_src.7z
- added ptime configuration (Account tab, as in baresip); changing ptime to 10 is required to make L16/44100 call with pjsip/pjsua on the other side, otherwise there would PJ_ASSERT_RETURN in pjsip l16 encoder
- Lua: added ForceDirectories(dir) function, same as VCL function but returning 0 on success - to be used before RecordStart() if target directory does not exist yet; requires fully-qualified path, usage: ForceDirectories("D:\\test\\test123")
- button edit window can be closed using Esc
- dial buttons, Dialpad/Contacts/History tabs and sidecar open buttons no longer hold the focus (thus focus is always in number edit field allowing using keyboard for dialing and DTMFs all the time)
- digits entered in number edit during call are generating DTMFs
- removed trailing newline from text returned by strerror()
- fixed "Unknown error" log entries after e.g. normal call clearing by second party, added some more descriptive messages
- reason for registration failure (e.g. 404 Not Found) is shown in status bar (might not fit with long register server name but should be visible if sidecar is open)
- added "on dial" script, running when user presses one of dialpad keys or is editing main number with keyboard; purpose: generating local audio feedback for dialed digits and DTMFs
- 2017.06.16 tSIP_0_1_59_bin.zip, tSIP_0_1_59_src.7z
- Lua: added GetCallInitialRxInvite() function, returning full text of first incoming INVITE of incoming call; allows to extract and process custom header lines from "on call state" script, e.g. using Remote-Party-ID to show extra CLIP on one of the buttons
- Lua: added function description = GetContactName(number) to get contact description
- settings: added option to force "Contact" user (instead of default random looking hex string)
- Lua: added GetRxDtmf() function, returning single DTMF sign (or empty string) from reception queue; sign is removed from queue
- added software volume control for both directions
- 2017.08.27 tSIP_0_1_59_4_bin.zip
- FIXED: inconsistent application state when handling incoming REFER (call being transferred)
- added simplified handler for out-of-dialog REFER - this is supposed to work with ANVEO CTI; as this seems little dangerous this is opt-in feature with new settings in "Calls" tab added; note: depending on setup using "Answer any" account option might be required
- added kiosk mode ("General" tab, later moved to "Locking" tab)
- added new button types: show settings (blocked if "Hide settings" is used), minimize, show log and exit
- increased max value allowed for GUI scaling setting to 500%
- fixed scaling for phonebook and call history list columns width
- added "Hide mouse cursor" option ("General" tab)
- added option to set 2 caption lines for programmable buttons, e.g. description + number for BLF button
- 2017.10.11 tSIP_0_1_60_2_bin.zip, tSIP_0_1_60_2_src.7z
- added separate audio output device selection for ring (incoming call)
- application version is stored in configuration to help with seamless upgrade (now: copying alert sound device to ring sound device for older version)
- 2017.11.01 tSIP_0_1_60_3_bin.zip
- added "nullaudio" input (generating silence) and output (discarding samples) audio device; intended to be used on machines with no audio I/O, e.g. with no microphone connected and autosensing jack, virtual machines or when running as service
- 2017.11.12 tSIP_0_1_60_4_bin.zip
- added "Display"/"Decode Display Name (UTF) to local (ANSI) code page" parameter
- 2017.12.23 tSIP_0_1_61_bin.zip, tSIP_0_1_61_src.7z
- attempt to remove bug related to TCP transport - reported 100% CPU load on disconnection, seemingly fixed by additional conn_close(tc, 0) in tcp.c on recv() error
- Settings/Calls: custom/extra header lines can be added to outgoing INVITEs (e.g. Call-Info with answer-after or Answer-After to make second party answer call automatically)
- 2018.04.06 tSIP_0_1_62_bin.zip, tSIP_0_1_62_src.7z
- removed "tool" line from SDP - suspected to be causing "488 SDP Parameter Error In SIP Request" error when calling using t-mobile.de operator
- settings: added GUI scaling for tray notifier window
- added Lua ShowTrayNotifier(description, uri, incoming) function (mainly for testing)
- neither Answer nor Hangup button is active by default in tray notifier window
- FIXED: bug in limiting tray notifier window position resulting in not restoring previous position if notifier was near the screen right/down edge
- interoperability (supervoip.pl, some other German operator): using username as default contact name if contact name is empty instead of semi-random contact name based on memory address
- "level" label in settings disabled for audio preprocessing
- added hints for volume reset buttons
- settings window moved from desktop center to screen center position
- added Settings/Delete call history menu item (deleting immediately history file content and clearing items from dial combobox)
- Log and "About" windows can be closed with Esc
- if call is closed from reason other than normal disconnection - call state label displays reason (e.g. "488 Not Acceptable Here", "480 Temporarily Unavailable") for 8 seconds
- 2018.05.19 tSIP_0_1_62_4_bin.zip
- added options to hide "View" and "Help" menu (limiting access for the operator together with option to hide settings menu)
- new command line option: PROGRAMMABLE_BTN_xxx (i.e. "tSIP.exe /tsip=PROGRAMMABLE_BTN_023") - simulating programmable button with ID = xxx (0...100+) being pressed
- added Lua GetUserName() function, returning user name from configuration - intended to be used to differentiate instances, e.g. fetch list of numbers to call from shared folder with path depending on user name / login
- FIXED: due to hazard between callback and control queues ring audio might be started after call ended (for calls with CANCEL immediately after INVITE) and not stopped; forcing ring stop on end of call event
- new settings: "Show main form when answering call" and "Hide tray notifier when answering call"
- added "General (2)" settings tab
- 2018.07.21 tSIP_0_1_63_bin.zip, tSIP_0_1_63_src.7z
- Lua: added ProgrammableButtonClick(buttonId) function - simulating clicking on specified button
- numeric code is added to text (quite often meaningless "Unknown error") generated by strerror
- registration client: reduced "failwait" saturation time, i.e. maximum time to retry registration from 1800s to 300s (time is randomized and increases exponentially up to this limit)
- subscription client: removed RESUB_FAILC_MAX limit, added "failwait" similar to registration with 900s limit
- 2018.11.12 tSIP_0_1_64_bin.zip, source: tSIP-0.1.64.zip
- added "logrotate" mechanism; configuration: number of old files to keep (0...5)
- added queues as new mechanism for connecting scripts and plugins (similar to variables)
- added Lua FindWindowByCaptionAndExeName(caption, exeName) function
- added sxmlc library source to re
- BLF buttons can now show remote identity and call direction (number calling / number called) as 2nd line (opt-out)
This feature seems to be supported by FreeSWITCH and with some issues by FreePBX - fixed few error log lines
- 2018.11.12 tSIP_0_1_64_1_bin.zip
- FIXED: BLF interoperability with FreeSWITCH (missing "terminated" icon)
- 2019.01.29 tSIP_0_1_65_bin.zip, source: tSIP_0_1_65_src.7z
- FIXED: nullaudio audio output module not working in release build due to uninitialized variable
- FIXED: project dependency on gsm.lib not showing in IDE
- command line: target starting with "sip:" is treated as direct IP call
- FIXED: (repeated) delayed auto-answer on answer error
- added options to set custom application title and main form caption
- added speex resampler to aufile (wave file) audio input module
- added window ("Tools" menu) for script editing / ad hoc scripting based on Scintilla (this is making script plugin obsolete)
- script editor can be used directly from settings window (script assignment) editing existing script or creating new one
- rewritten reading main config and button config file - using previous values as defaults when reading JSON
- added RefreshAudioDevicesList() and GetAudioDevice() Lua functions
- added UpdateSettings(jsonText) Lua function
- 2019.04.14 source: tSIP_0_1_66_src.7z
- separated few settings into "Locking" tab (kiosk mode and other settings disabling functionality)
- added "Hide Tools menu" option
- fixed wrong interpretation of number of console column settings (broken in 0.1.65)
- corrected main window height to match exactly default console buttons height (broken in 0.1.65)
- added Lua WinAPI GetAsyncKeyState() function - allowing to e.g. modify script button action depending on Ctrl/Shift/Alt state
- added options to record only one side of the call (local or remote)
- extended Lua RecordStart(file, channels, side) function; third (optional) argument specifies which side(s) of the call should be recorded (0 = both/mixed, 1 = local, 2 = remote); third parameter applies only to single channel recording (channels = 1), otherwise call parties are recorded in separate left/right channels as previously
- added command line option to specify settings/profile directory; allows sharing single exe by multiple instances or multiple users; example: tSIP.exe /profiledir="E:\zrzut\aa bb"
- added Lua function: GetProfileDir()
- added "Hide tray notifier when call is auto-answered" setting
- FIXED: UTF8 decoding not applied to BLF remote identity display name
- added P-Asserted-Identity handling
- added REINVITE event handling (updating CLIP from PAI)
- added BLF settings: "Keep previous remote identity info if remote identity is missing in notification" and "Ignore or clear remote identity if call state is set to terminated"
- added Lua PlaySound() function (WinAPI equivalent in tsip_winapi module)
- script window accepts file drag-and-drop
- added "on programmable button" script event and "SetHandled" Lua function
- added Lua GetButtonType(btnId) and GetButtonNumber(btnId) functions
- 2019.04.15 tSIP_0_1_66_1_bin.zip
- FIXED: missing checking if "on programmable button" event script was set
- 2019.05.25 tSIP_0_1_67_bin.zip, source: tSIP_0_1_67_src.zip
- FIXED: missing checking if "on programmable button" event script was set (problem of 0.1.66)
- added separate width setting for each speed dial column
- added missing onClick handler to label2 of programmable button
- using PAI from 200/OK reply (updating callee number/name after pickup)
- added Help/Troubleshooting function
- added main window height setting
- added option allowing to hide speed dial toggle button
- added option modifying behavior on audio error (not disconnecting call) - Call settings tab
- added "on audio device error" script event
- added audio device error event to plugin interface
- extended plugin interface with capability of running scripts
- extended plugin interface: SetProfileDir(dir) function
- change wav audio source: releasing input file immediately after reading
- FIXED: error handler possibly not being called for resampled aufile
- prevent divide by zero exception if switching to nullaudio before CONFIRMED state
- new plugin: Text-To-Speech input (see github)
- 2019.07.17 tSIP_0_1_68_bin.zip, source: tSIP_0_1_68_src.7z
- added options hiding sensitive account settings
- intended to increase security when using on shared PC
- selected settings are not visible in GUI and not stored in file
- double click on plugin list enables/disables selected plugin
- added math.random() to Lua call loop example
- added setting to not use "sip:" as direct IP call mark from command line
- added "Show main form when making call" option, intended to be used when making call with global shortcut, command line or protocol handler
- moved some code into common.lib project
- Troubleshooting function: added checks for no and too many codecs
- call history: added settings to prefer PAI information for display and for dialing
- scripting: break signal is sent to running scripts before exiting application
- fixed tab order in contact editor window
- added hint with additional info for call history entries
- default configuration / first run: added extra button with hint that buttons can be edited with right-click
- added options hiding sensitive account settings
- 2019.09.07 tSIP_0_1_69_bin.zip, source: tSIP_0_1_69_src.7z
- added option formatting call duration in call history as minutes:seconds
- added codec name to history (hint, opt-out)
- storing history window list column widths in settings
- Lua: added codecName = GetCallCodecName() function
- added hints to software volume constrol sliders
- added scaling to main window height setting (may need manual changing when upgrading if scaling was other than 100%)
- Lua: added PluginEnable(dllName, state) function, e.g. PluginEnable("TTS.dll", 1)
- account settings: added configuration (RFC2833 / SIP INFO) for "DTMF" transmit method
- added configuration for logging window font (default font looked ugly under Wine)
- jsoncpp.lib: added few convenience functions and AnsiString handling
- Lua: added MainMenuShow(state) function (state = 0/1)
- added options ("Locking") hiding main menu and status bar
- FIXED: browser integration: previous window not being found if custom window caption was used
- FIXED: browser integration: commands from links like tsip:HANGUP not working
- scripting: added second timer as event source
- Lua: added SetButtonCaption2(btnId, text) function
- Lua: added state = GetButtonDown(btnId) function (state = 0/1)
- script window: added example determining event source type and id for script
- increased command and callback queues sizes to 1024
- mechanism for sending sustom requests
- Lua: requestId = SendCustomRequest(uri, method, extraHeaderLines), e.g.<br>
- local requestUid = SendCustomRequest("sip:192.168.1.12", "OPTIONS", "Accept: application/sdp\r\nContent-Length: 0\r\n\r\n")
- Lua: ClearCustomRequests() - deleting state of all custom requests
- Lua: DeleteCustomRequest(requestId)
- Lua: uri, method, extraHeaderLines = GetCustomRequest(requestId)
- Lua: haveReply, error, sipStatusCode = GetCustomRequestReply(requestId)
- Lua: replyText = GetCustomRequestReplyText(requestId)
- "on custom request reply" script event
- script window: example for scanning local network with OPTIONS
- some effort to improve aufile work on low-end PC (Atom N270, L16/44100, 10ms framing) - using waitable timer
- some code cleanup and reorganization for tSIP.exe project
- 2019.11.05 tSIP_0_1_70_bin.zip, source: tSIP_0_1_70_src.7z
- added aufile_mm audio source module (wave file with multimedia timer - working better on low end PC)
- Lua:
- added ApplicationClose()
- added SetCallTarget(target) for preprocessing number with "on make call" script event, e.g. removing some of the pasted characters
- added "Do not pass parameters to previous instance" setting (example use: launch application for single call and forget, closing application after the call)
- add button opening recordings folder
- FIXED: plugin profile directory was not updated on plugin reload
- HWND_TOPMOST/HWND_NOTOPMOST trick bringing window to front on incoming call
- Troubleshooting: add checking for Windows private IP
- more convenient network interface selection - interfaces list
- stopping wav playback (e.g. busy.wav) on Hangup button
- added winwave2 module - thread-based
- added simple AGC for RX direction
- added portaudio suggestedLatency settings
- FIXED: problem with tray notifier not closing when application was minimized
- FIXED: wrong call history entry on outgoing unanswered call if PAI was used
- added very basic support for call messaging
- 2020.01.27 tSIP_0_1_71_bin.zip, source: tSIP_0_1_71_src.7z
- using ofNoChangeDir for open/save dialogs, disabled ofHideReadOnly for open dialogs
- Lua: added GetAudioErrorCount() function, returning counter incremented when audio file ends
- Lua: added GetAudioRxSignalLevel() function
- added "Lenny" example
- extracting number from PAI also on outgoing calls
- added button opening script editor for programmable button edit window
- settings window: separed few items from "General" to "Branding" tab
- added Opus codec
- FIXED: no playback for short aufile files
- winwave play: trying to keep audio frame size more consistent
- moved dynamic modules loading before account initialization (fixing problem with G729.dll)
- added option enabling additional aubuf debugging logs
- Lua: added ReadContacts() functions, re-reading whole phonebook from JSON file
- 2020.05.01 tSIP_0_1_72_bin.zip, source: tSIP_0_1_72_src.7z
- file (path) can be assigned to each contact / phonebook entry
- new button type: "Contact file" - opening (using ShellExecute "open") file associated with last contact entry on request
- options to automatically open file associated with contact on incoming / outgoing call
- added "on contact note open" script event and AppendContactNoteText Lua function
- added display name configuration for account
- selected but not found audio device (e.g. detached USB device) is shown on the lists with [NOT FOUND] text
- FIXED: log file size setting
- added Portaudio locking (possible crash if audio devices are enumerated in script e.g. on startup)
- hotkey editor: hidden ID selection if not applicable for particular action type
- FIXED/improved: MESSAGE to window matching for incoming text messages (IM)
- added target display to text message window caption
- added sound played on incoming MESSAGE
- passing back status for sent MESSAGE, displaying in windows if status is other than SIP/200
- FIXED: ringtone files not being updated if edited manually
- added bitmaps/icons from Andi Topp (/img subdirectory, opt-in)
- bitmaps for buttons from main window (backspace, microphone, speaker) are now configurable
- added window for patching settings with JSON - paste part of configuration or drop JSON file to change configuration without looking through settings window
- added new button type: user agent restart
- added new button type: send text message (IM)
- Lua scripting: added SendTextMessage(uri, text, sendImmediately) function
- 2020.06.29 source: tSIP_0_1_73_src.7z
- plugin interface: added function allowing adding tray context menu item from plugin, making tSIP suitable to work as host for general purpose plugins
- plugin interface: added function setting application status
- new plugin: HTTPstatus - showing temperature/humidity/pressure from my sensor as tray hint
- new plugin: SystemShutdown - suspending (S3/S4) or turning off PC at specified time
- added Lua SetAppStatus function
- added inband DTMF generation option
- contact hist and call history: added options to send MESSAGEs
- added Lua example for SendTextMessage
- text editor in JSON configuration patching window changed to Scrintilla
- increased size of account audio codec list to 16
- jsoncpp: added Value::getString()
- handling incoming MESSAGEs: reply code and reason can be specified, softphone can be configured to not reply for incoming MESSAGE, generating timeout
- added Lua example sending single SIP request
- added StaticCheck.h / C++ STATIC_CHECK
- added pause function for recording
- new button types: recording start (starting with default parameters or resuming), recording pause
- new script event: on recording state
- Lua: added GetRecordingState(id) function
- added option to not restore taskbar button (hopefully helping with Windows RDP taskbar mess)
- show received reply status reason text for sent MESSAGE to the user
- minor changes for compatibility with early BDS2006 release, some cleanup, changed the way re compatibility with TC++ is achieved
- 2020.08.11 tSIP_0_1_74_bin.zip, source: tSIP_0_1_74_src.7z
- fixed some WIN32 typos from 0.1.73
- merged some re/rem/baresip updates
- change tray icon if initialization fails
- logging: clearing whole TRichEdit instead of removing oldest content line by line
- added Lua UpdateButtons(json) function
- added window for patching buttons configuration
- automatic restart on initialization error (e.g. temporary problem with network card resulting in bind failure)
- few other minor fixes
- 2020.10.28 tSIP_0_1_75_bin.zip, source: tSIP_0_1_75_src.7z
- contacts: differentiate popup menu depending on contact number/uri count
- added option to not create tray icon
- added option to hide dialpad
- changing tray icon on registration error
- fixed resizing of contact editor window: added constraints, changed anchors, changed labels text
- translation mechanism (only for few base controls at the moment)
- JSON translation files (structure: key -> text) in translations subdirectory
- UTF8 to ANSI conversion - depends on current code page for non-Unicode applications
- translation file selection: "General" settings tab
- added translation to TfrmTrayNotifier
- tray notifier: hide "Answer" button if call is confirmed
- option to start/pause recording from command line (or browser)
- added import of Yealink-like XML phonebook
- added Lua example fetching with curl and loading XML phonebook
- added option to log only first lines of SIP messages
- added option to skip encoding number in recording file with base64
- few other minor fixes and changes
- 2020.12.08 tSIP_0_1_76_bin.zip, source: tSIP_0_1_76_src.7z
- added German translation - thanks to Andi Topp (www.comfine.de)
- added option changing main window layout - call controls in dialpad
- added dialing combobox sorting order setting: by number/time
- added option to do not change tray notifier position
- added new button type: auto answer/DND (depending on SIP code)
- added luacheck integration to scripting window
- made SetHandled(0|1) work for "on make call" script
- added logs with error reasons for calling from command line
- accepting/processing script from command line (/tsip=SCRIPT=xxx) [opt-in]
- FIXED: button configuration not being saved after Lua UpdateButtons()
- restarting UA if needed after updating button settings
- fixed some of the luacheck warnings from script examples
- FIXED: UDP transport being used instead of TCP for some calls
- measuring button configuration read (OutputDebugString at the start) and write times (log)
- 2021.02.07 tSIP_0_2_00_bin.zip, source: tSIP_0_2_00_src.7z
- big changeset focused on GUI customization and kiosk-like applications
- [BREAKING] not all settings are kept when upgrading - please backup tSIP.json and tSIP_buttons.json before updating executable; as there are major changes you might also consider delaying update
- changed overall application layout - console is now main part of the window, main panel (dialpad, etc.) is on top of it
- buttons are now not organized in columns, can be moved and resized freely (context menu)
- two button containers: one small on the main panel ("Redial", etc. in default configuration), holding 15 buttons and large, covering whole window, holding 180 buttons
- button opening/closing console now changes main window size (hiding/uncovering part of the button container) and changes main panel position (allowing to e.g. "expand" console on the left side of main panel)
- new button container context menu
- new simple dialog window for copying button properties
- background bitmap can be assigned to button container
- added multiple new button properties:
- size and position
- visibility
- inactivity
- down/up state
- positioning for caption lines
- positioning for image
- font configuration for two caption lines
- bevel width + option to use custom, flat bevel
- state-depending colors for background, font and bevel
- extended Lua function list, mostly related to new button properties: SetButtonVisible, SetButtonInactive, SetButtonDown, SetButtonImage, SetButtonCaption2
- optimized button configuration saving (mostly affecting Debug/CodeGuard builds) - saving only properties different than default unless "saveAllSettings" option is used
- replaced "SpeedDialOnly" setting with set of "HideCallPanel" + "HideMainPanel"
- call controls panel and Dialpad/Contacts/History panel can be hidden and positioned independently
- new scripting event: "on programmable button mouse up/down", passing button id as source id
- Lua: added GetButtonMouseDown(buttonId) function
- separate background image setting for each button container
- showing button id and type on button popup menu
- 2021.02.23 tSIP_0_2_00_4_bin.zip, source: tSIP_0_2_00_4_src.7z - minor bugfix release
- removed button "noIcon" setting
- added button "labelLeft" setting
- FIXED: do not use initial button settings ("Redial", etc.) if settings exist (problem related to default settings not being stored in file since 0.2)
- added new hotkey action type: answer/hangup depending on call state (intended to be used with single button on BT headset)
- added French translation (thanks to Thierry Pimont)
- added Russian translation (thanks to https://github.com/homedimon)
- 2021.05.11 tSIP_0_2_02_bin.zip, source: tSIP_0_2_02_src.7z
- removed dialpadBackgroundImage - it is not replaced by bitmap for first button container that covers whole dialpad area
- numeric buttons are now configurable; button container covers whole dialpad area
- added configuration of dialpad elements other than programmable buttons (hiding, sizes and position)
- added setting to use ClientWidth/ClientHeight instead of Width/Height for main window
- added tone generator with Lua GenerateTones(ampl, freq); GenerateTones() takes up to 4 amplitude (as a fraction of full scales) + frequency (Hz) pairs; calling GenerateTones with empty parameter lists stops generator; tone generator is placed before softvol
- added setting to loop ring wave file without silence period
- added Lua function: state = GetButtonBlfState(btnId)
- reduced subscriptions retry times to maximum of 3600 s
- added Expires configuration for each dialog-info and presence panel/button
- 2021.05.18 source: tSIP_0_2_03_src.7z - minor bugfix release
- FIXED: missing dialpad keys when upgrading from version < 0.2
- avoid binding to VirtualBox/VMvare/Hyper-V network interface
- 2021.05.25 tSIP_0_2_03_1_bin.zip, source: tSIP_0_2_03_1_src.7z - another bugfix release
- FIXED: bug in pl_advance introduced in 0.2.03, affecting RFC2833 DTMF transmission
- 2021.07.17 tSIP_0_2_04_bin.zip, source: tSIP_0_2_04_src.7z
- added ZRTP support
- added translation mechanism for contacts, history, contact editor
- added Spanish translation
- FIXED: importing numbers #2 and #3 from CSV to contacts
- added note import when importing contacts from CSV
- added "SCRIPT_B64=" command line parameters - sometimes it might be easier to encode script with base64 than to escape it for command line
- increased buffer size for registrar URI, added log if adding account failed
- 2021.08.28 tSIP_0_2_05_bin.zip, source: tSIP_0_2_05_src.7z
- added TLS and SRTP support
- IMPORTANT: libcrypto-1_1.dll and libssl-1_1.dll (OpenSSL libraries) are now parts of the distribution - copy these files from zip if updating executable
- IMPORTANT: libcrypto-1_1.dll and libssl-1_1.dll are requiring installation of Visual Studio 2015 runtime (there is high chance you may have this already installed) or manually adding VCRUNTIME140.dll
- 2021.11.09 tSIP_0_2_05_3_bin.zip, source: tSIP_0_2_05_3_src.7z
- added "SCRIPT_FILE=" command line parameter - starting specified script file from /scripts subfolder
- use GetProcessImageFileName instead of GetModuleFileNameEx for FindWindowByCaptionAndExeName() Lua function (compatibility with 64-bit OS)
- FIXED: missing early media audio when SRTP was enabled
- added vcruntime140.dll to distributed binaries
- 2022.01.10 tSIP_0_2_06_bin.zip, source: tSIP_0_2_06_src.7z
- saving last SIP reply code and reply text in call history, can be added to history list hint
- added Lua GetPreviousCallStatusCode() and GetPreviousCallReplyLine() returning information about last failed call (after this call has ended, e.g. using "on call state" CALL_CLOSED event)
- added 3 extra returned values to GetBlfState(contactId) function: remote identity URI, remote identity display name, call direction
- Lua: added contactId = GetContactId(blfUser) function (number to contact id conversion to be used with GetBlfState() function)
- added new setting: SpeedDial/"Preferred state if multiple dialog elements are received in NOTIFY XML"
- added separate error codes/texts for opening wave files and opening audio devices
- call state label shows also local error information like error opening audio device (when call ends)
- Lua Hangup() takes SIP code and reason text as optional arguments
- added reason text to auto answer configuration, auto answer/DND button configuration and custom hangup button configuration
- added hint/tooltip to contact list (numbers + note)
- showing button ID + description on button editor frame
- exiting button editing (resizing/moving) with Esc
- added window with short (very short at the moment) description for each custom Lua function, accessible from Script window / Help
- 2022.03.08 tSIP_0_2_07_bin.zip, source: tSIP_0_2_07_src.7z
- FIXED: audio devices configuration was reset after config merge
- few minor updates to Lua help window
- log window: added buttons copying all and last 400 lines
- replying with 200 instead of 415 for NOTIFY with terminated/noresource (less mess in logs when working with FreeSWITCH)
- FIXED few bugs related to global hotkeys
- added new main window settings: offset allowing to change window position when switching between "normal" and "expanded" state, e.g. for anchoring window to right side of the desktop
- FIXED exception when in codec selection list codec was moved below last item list
- added option to start audio source early (actually opening it twice) - intended to fight with initial audio delay on Mairdi Bluetooth headset when switching profiles
- 2022.03.13 HidControl.dll
- 2022.04.10 TcpServer.dll
- 2022.04.30 tSIP_0_2_08_bin.zip, source: tSIP_0_2_08_src.7z
- FIXED option clearing BLF remote identity on call disconnection
- changed code responsible for restoring main window and showing tray notification to avoid stealing focus
- link in "About" window is now configurable and default value can be changed by editing resources
- refactored managing of settings pages
- settings pages can now be hidden individually
- settings (fixed/forced) can now be embedded as a resource, allowing e.g. to prevent some settings from editing by the end user by editing JSON file
- scripts can now be assigned to hotkeys directly (without previously needed programmable key middleman)
- added WinAPI keybd_event Lua function (e.g. for simulating Ctrl+C to copy selected text and make call using number from clipboard)
- FIXED "Message" contact popup menu item for contacts with single number
- added Lua HideTrayNotifier() function, fixed unused texts from ShowTrayNotifier()
- Troubleshooting: hints if bitmaps intended for BLF (dialog-info) are left after switching button type to Presence
- FIXED: button image was always centered vertically regardless of configuration
- Lua window: added File/New (mostly for convenience when working with kiosk-like GUI missing main menu)
- button configuration: number setting is not hidden for "Script" button (number may be read by script and then few buttons might use same script)
- FIXED: if main menu was hidden in settings, it was still visible at startup for a short moment
- FIXED: incoherent GUI state after making the call that failed immediately due to no network
- Locking: added separate setting making main window borderless
- added option (SpeedDial tab) to move main window by dragging button container (for semi-kiosk borderless applications)
- 2022.07.05 tSIP_0_2_09_bin.zip, source: tSIP_0_2_09_src.7z
- file format selection for call recording, calls can be now recorder also as Opus/OGG
- libopusenc.lib project is added
- Lua StartRecording(): new optional parameter selecting recording format (0 = WAVE, 1 = Opus/OGG)
- note: selecting very low bitrate for Opus would switch it to mono mode even if recording is configured as stereo
- updated French translation file - thanks to lyonelf
- file format selection for call recording, calls can be now recorder also as Opus/OGG
- 2022.10.25 tSIP_0_2_10_bin.zip, source: tSIP_0_2_10_src.7z
- FIXED: possible buffer overrun / crash in call recording, observed (mainly?) when ending the call with L16/48000/1 codec
- FIXED: confusing missing "Registering" status of startup that should be visible in case of any problems with registration
- added human-readable names to network adapters list (binding to network interface)
- added MessageBox if loading translation from file fails (e.g. due to invalid JSON)
- added MessageBox if file edit button in contact editor was pressed but file was not specified
- updated distributed OpenSSL DLLs to version 1.1.1g
- unified aufile and aufile_mm source, fixing playback of short wave files in aufile_mm
- renamed Settings "Phones" page to "Plugins / phones" and "WaveIn, WaveOut (2) - experimental" to "WaveIn, WaveOut v2"
- few other minor changes
- 2022.11.30 New option for G.729 codec, tSIP-plugin-g729.
- 2022.12.15 tSIP_0_2_11_bin.zip, source: tSIP_0_2_11_src.7z
- FIXED: WebRTC AEC was not working for 16 ksps codecs
- added support for G.711a/u (in addition to S16_LE) wave files playback as audio source (aufile/aufile_mm)
- programmable button config window: added missing handling of aufile_mm audio source module
- call recording: using saturation when recording in mono mode (both sides mixed)
- added access to call recordings from call history context menu
- new setting: History / Show record file in hint
- Help / Troubleshooting: added checking if network interface specified in Settings / Network is missing
- updated some translations
- do not lock "Settings" in main menu when UA is (re)starting
- this was initially added to prevent PortAudio crash when using by two threads at the same time (audio devices were enumerated when settings window was opened), later this problem fixed by adding PortAudioLock
- this fixes missing reenabling for this menu item for APP_START_FAILED state
- added configurable audio (noise) gate for TX direction (from local microphone)
- 2022.12.30 New, separate version with video support.
- 2023.03.23 tSIP_0_2_12_bin.zip, tSIP_0_2_12_video_bin.7z, source: tSIP_0_2_12_src.7z
- splitting binaries into separate "regular" and "video" versions
- "audio only" version should be preferred if you don't need video and don't need avformat audio input capabilities
- video support (moved back from tSIP-video), enabled by compile-time USE_VIDEO switch:
- separate binaries with some drawbacks
- LGPL licensing for FFmpeg
- openh264.dll needs to be downloaded separately from Cisco page due to licensing reasons (download openh264-2.3.1-win32.dll.bz2 and extract it (using e.g. 7-zip), rename openh264-2.3.1-win32.dll to openh264.dll and put it next to application executable)
- larger size (for this version 13 MB more, heavily depending on options used for FFmpeg compilation)
- lots of linked third-party code, not tested at the moment for compatibility with Win98/2000/XP or Wine
- some known issues and limitations, probably more of them unknown
- video source modules:
- DirectShow (regular cameras)
- FFmpeg avformat (common mp4 files with e.g. H.264+AAC, possibly rtsp cameras)
- colorbar generator: two versions, with and without animation
- nullvideo (black screen)
- video output modules:
- SDL, displaying in separate window or on specified programmable button (note that button sizes/layout are customizable)
- nullvideo (discarding received video stream)
- selfview module with picture-in-picture option
- codecs:
- H.264 with packetization modes 0 and 1
- H.263
- MP4V-ES
- new programmable button type, switching video source module and device during the call
- switching between cameras or camera/video file/colorbar generator
- might be used for video "mute" function, switching to e.g. animated colorbar generator
- this button type would be visible also in "audio only" build, but would not take effect
- new Lua function: SwitchVideoSource(module, device)
- FFmpeg avformat module can be also used as audio input, adding support for e.g.:
- mp3 files
- audio from mp4 and other video files
- internet radio stations (http-based, https is not supported with my current FFmpeg build)
- separate binaries with some drawbacks
- "About" window shows whether binary was compiled with or without video support; if video is enabled there are also additional configuration options in settings window
- audio source device/file and newly added video source device/file
- can now be used with relative path (taking precedence) or with absolute path, allowing e.g. to use big mp4 file as video or audio source without copying it to application folder
- audio/video source device does not have to be file now as avformat accepts also http or rtsp protocols, e.g. internet radio link
- default configuration: added "ABC", "DEF", "GHI", etc. letters to "DTMF" buttons
- small change for programmable button labels automatic vertical spacing in situation when button height is smaller than a sum of labels height
- contacts: locale-aware comparing/sorting using AnsiCompareIC (e.g. L and £ should be next to each other)
- winwave2 is now the default audio input module (due to winwave issue with detaching audio device while this device is in use)
- default configuration: RTP timeout is now enabled with 300 s time
- incoming call: tSIP now responds with 488 instead of accepting "silent" call when there are no common codecs
- removed inline definition for C files, hopefully this would help with related compiler issue
- fixed INT64_MIN/INT64_MAX/UINT64_MAX definitions in TC++ stdint.h (tSIP/_doc folder)
- 2023.03.30 HidPhone.dll
- 2023.04.08 tSIP_0_2_13_bin.zip, tSIP_0_2_13_video_bin.7z, source: tSIP_0_2_13_src.7z
- fixed distorted audio / incorrect audio timing at the start of the call if using AAC internet radio as audio source
- fixed crash when name of the file used as avformat source contained non-ASCII characters
- L16/44100 (and up) no longer should require manual ptime limiting through account settings
- fixed timing and audio buffer sizing for L16 codecs with high sampling rate, low ptime like L16/48000/2
- add volume control (Settings / Audio IO) for alerting and ring audio
- changed start failure handling: faster initial restart, slowing for subsequent errors (better handling of e.g. slow to connect WiFi or detached network cable when starting PC)
- bunch of minor changes and code cleanup
- 2023.05.27 New major function for RecordViewer: transcribing call recordings to text.
- 2023.06.29 source: tSIP_0_2_14_src.7z - replaced by bugfix release 0.2.14.1
- limited maximum auto-restart time (no network) to 600 seconds
- audio recorder code is now reentrant / capable of handling multiple calls
- clarified description in windows patching main settings and button settings
- delayed creation of most of the windows until they are needed
- fixed position and sizes of dialpad elements (volume trackbars and buttons, transfer edit) if GUI scaling was used
- fixed call history column sizes changing each run if GUI scaling was used
- added two extra modes for handling Access-URL: delaying automatic URL opening until call is confirmed
- added Lua GenerateTones() example
- added Lua (SIP account) Unregister() and Reregister() functions
- troubleshooting: added warning if wave file selected as audio source does not exist
- recognizing "Call completed elsewhere" reason in received CANCEL
- application tray icon is not changed for these calls like for unanswered calls
- option to not store calls with this reason in call history
- new icon in call history for this call type - like for regular call unanswered but grayed out
- option to show disconnection reason text received with CANCEL in call history
- 2023.07.03 tSIP_0_2_14_1_bin.zip, tSIP_0_2_14_1_video_bin.7z, source: tSIP_0_2_14_1_src.7z
- fixed crash from v0.2.14 when call was disconnected by the other party
- passing BYE message from handler, potentially allowing to use Reason from it
- 2023.09.05 tSIP_0_3_bin.zip, tSIP_0_3_video_bin.7z, source: tSIP_0_3_src.7z
Support for multiple calls, call waiting, attended transfer, conference calls. - 2024.01.01 tSIP_0_3_01_bin.zip, tSIP_0_3_01_video_bin.7z, tSIP_0_3_01_src.7z
- FIXED: in v0.3 call history entry for outgoing call was unnecessary containing full SIP URI is user dialed with just a number/user part
- FIXED: DTMF reception using scripting was broken in v0.3
- direct URI dialing is not requiring "sip:" prefix if dialed string contains "@" in the middle or if it looks like a valid quad-dotted decimal IPv4 address
- Tools menu: added window with current scripts and plugins variables
- not requiring sip: prefix for common direct IP/URI dialing; for calling and messaging account domain is not appended if dialed string starts with "sip:", contains "@" in the middle or is a valid quad-dotted decimal IPv4
- reducing number of client transaction retransmission when shutting down application or restarting SIP stack to speed up these operation
- 2024.02.19 tSIP_0_3_02_bin.zip, tSIP_0_3_02_video_bin.7z, tSIP_0_3_02_src.7z
- plugin interface: added SetMute function
- scripting:
- added SetMute, ToggleMute, GetMute functions
- added SetHold, ToggleHold, GetHold functions
- added GetCallPeerName function
- fixed multiple-call variants of functions switching audio/video inputs and outputs during the call
- added devices = GetAudioDevicesList(moduleName, direction) function, returning array/table
- if GetAudioDevice or GetAudioDevicesList is called and audio devices list was not yet refreshed for the first time (initialized), it is done automatically
- added ApplicationShow(focused) function
- added/fixed closing with Esc in few windows
- button configuration editor:
- entered text for caption #1 and caption #2 can be multiline
- splitted settings into few pages like for main configuration
- added preview for color selection
- added preview for "BLF"/dialog/presence bitmaps
- default button configuration: "basic" column is slightly moved to the right and slightly slimmer
- default button configuration: added button with voip.ms affiliate link (note that this won't affect existing users)
- modified / extended button copy dialog
- removed most of the window size and position restrictions (better multi-monitor support)
- call state short name (visible on the LINE buttons) and description (longer text in main window) can be translated
- programmable button context menu: added options to copy to clipboard caption #1 and #2 text (e.g. text set previously by some Lua script or text from user presence status)
- direct IP dialing is not requiring "sip:" prefix when using IP:PORT as target
- FIXED issue with volume sliders for audio volume in settings moving slightly to the left each time settings are accepted if configured volume was low due to rounding errors
- added new configuration window with button container properties; this is replacing two existing items (setting/clearing bitmap) from container popup menu
- added background color to container configuration (lighter than using bitmap for the same purpose)
- multiple calls:
- added new settings to auto-deny incoming call if another call is active
- "LINE" buttons: using user-configured captions for idle state
- FIXED minor issue with main call display not refreshed in multiple call setup when there are two incoming calls and first one (from selected one) is disconnected and then incoming again
- FIXED: each call holds now its own instance of audio file player (ring, ringback, etc.) fixing possible problems with multiple calls
- 2024.03.28 tSIP_0_3_03_bin.zip, tSIP_0_3_03_video_bin.7z, tSIP_0_3_03_src.7z
- FIXED: AV when using "Mute Ring" while no call is active
- "Mute Ring" button is applied to all current calls
- FIXED unintentional change at version ~0.3: dialing combobox was not cleared at the end of the call
- Lua:
- FIXED: GetCallInitialRxInvite() function
- added ApplicationHide() function
- added GetCallUidFromLineButton(buttonId) function - allows to create script buttons associated with specific LINE button
- added GetButtonHandle(buttonId) function - allows to pass Windows HANDLE to tSIP_mpv.dll plugin
- few other minor fixes/improvements
- 2024.05.17 tSIP_0_3_04_bin.zip, tSIP_0_3_04_video_bin.7z, tSIP_0_3_04_src.7z
- added new key types to plugin/phone interface (needed for Philips VOIP1511 USB handset support)
- application toggle ("Skype" key on Philips)
- mute toggle
- call answer; it might be weird that it was not added earlier, but previously only cradle hook-off switch was needed
- call hangup
- using queue to separate plugin thread from VCL thread when passing events
- fixed "on recording state" scripting (broken in 0.3)
- Lua: added GetCallButtonId(callId) function (call id -> assigned button id)
- removed winwave module (with some issues and obsoleted by winwave2)
- if anyone still used winwave: transition should be transparent, scripts acccept both module names selecting always winwave2
- added new button containers
- on the panel with Answer/Hangup button
- on the tray notifier window, example use: answering doorphone and playing announcements to the visitors
- note: popup menus (all together for 4 containers) can be disabled from Settings/Tray Notifier
- added extra settings for tray notifier window
- window size
- hiding/moving standard GUI elements, possibly replacing them altogether with custom ones
- few minor improvements for button container configuration dialog
- BREAKING: tray notifier window no longer has background image property - it is replaced by background image of button container that is now placed on tray notifier window
- added "transparent" configuration for button container background image
- added "Make or answer the call" and "Answer the current call" button types (though script buttons could be used previously for the same purposes)
- for button(s) with "Blind transfer" type: target can be set in button configuration, if it is empty - number from the main window, "Transfer to..." is used as previously
- FIXED: hint/default text for blind transfer target edit was not showing up at startup
- blind transfer hint in the main window can be translated
- FIXED re-INVITE handling / updating CLIP/COLP with P-Asserted-Identity, broken in 0.3
- call is not disconnected on audio error or end of file if SetHandled(1) is called from Lua script, regardless of Calls/DisconnectCallOnAudioError setting
- added new key types to plugin/phone interface (needed for Philips VOIP1511 USB handset support)
- 2024.09.16 tSIP_0_3_05_bin.zip, tSIP_0_3_05_video_bin.7z, tSIP_0_3_05_src.7z
- added transport selection for outbound proxy
- FIXED H.264 RTP loss (setting SO_RCVBUF)
- added Lua SwitchAudioSourceToConfigured(OPTIONAL_callUid) function
- FIXED hangup and switching audio source for RTP multicast/unicast streaming function (broken in 0.3)
- 2024.10.14 WS2812.dll - controlling LED strip
- 2024.10.16 tSIP_0_3_06_bin.zip, tSIP_0_3_06_video_bin.7z, tSIP_0_3_06_src.7z
- FIXED button font style selection, added underline and strikeout effects
- FIXED auto-answer/DND buttons not being set down after restart
- using SENDONLY direction for hold
- video, avformat: fixed vidts overflow for mp3 playback
- video, avformat: fixed playback of mp3 files with MJPEG cover
- video: fixed exception when using colorbar generators or nullaudio video source modules
- 2024.11.24 tSIP_0_3_07_bin.zip, tSIP_0_3_07_video_bin.7z, tSIP_0_3_07_src.7z
- BLF + presence: added workaround for FreeSWITCH issue #1532
- FIXED: applying GUI scaling for tray notifier window
- Lua:
- added GetCallDurationFromStart() and GetCallDurationFromConfirmed() functions
- added winapi.GetAdaptersInfoIp() function
- skipping empty Supported line (this was crashing Zenitel)
- fixes related to handling HID headsets, mainly for multiple simultaneous calls
- added options to hide default Call/Answer and Hangup buttons
- few other minor fixes/improvements
RecordViewer.exe - browser for call recordings
tSIP on github
Note: tSIP version with video support requires openh264.dll that needs to be downloaded separately from Cisco page due to licensing reasons. Download openh264-2.3.1-win32.dll.bz2 and extract it (using e.g. 7-zip), rename openh264-2.3.1-win32.dll to openh264.dll and put it next to application executable.
Latest compilation (exe only, to be replaced in regular release) may be often found here.