VoIP software

The micro-blog is written by Sergey Aleshin, lead developer and owner of Its purpose is to provide better transparency of development and to get some feedback and ideas from users. The blog is started on 2014-06-25. Previous activity for "SIP Tester" product is published here.

2017-03-24 New API method "/API/MainViewModel/Originators/CreateOriginator" to integrate softswitch with VoIP originator's signup webpage

2017-03-20 We are hiring a person to establish and manage relations with GSM gateway owners in various countries. Budget is 30K USD/year for 100 countries. Also we are looking for GSM gateway owners to connect with us - send incoming test calls from GSM gateways to our server - for 50..100 USD / month. More details here

2017-03-18 We have published first version of our VoIP routes test system (CLI testing) here. You are welcome to test your CLI routes with our new system

2017-03-15 Having our website on 3rd position in Google for keywords "continuous speed test". CTR is good, also usage statistics looks promising

2017-03-13 We have got our softswitch running in at least 3 countries. It is live NCLI (GSM termination) traffic. We continue development of the VoIP softswitch according to feature requests from customers

2017-03-11 Published price for commercial license of VoIP readiness test system: 240USD/year initially. The price includes technical support.

2017-03-09 For VoIP wholesale carriers who need to test new CLI routes: we are working on a service similar to (our competitor), and we invite you to make free test calls with our beta version of the caller ID delivery testing service. Please contact us for details

2017-03-06 CallXML: saving multiple SDP attributes with same name into separate CallXML variables (it is useful to access "fmtp" SDP attributes)

2017-03-02 Softswitch: flag 'enabled' for routes and tariff rates, it can be used for blacklisting - block calls to specified prefix or call center number

2017-02-24 Started a new product based on StarTrinity softswitch: VoIP routes tester. Target users: VoIP wholesale carriers, tier1 operators. Functions: CLI verification, audio quality testing (MOS, RTT), FAS detection, bypass (blending) detection

2017-02-21 CallXML: implemented "getcdrcallscount" element for advanced TCG logic

2017-02-10 Implemented "floor()", "ceil()", "round()" expressions in CallXML element "assign", attribute "mathvalue"

2017-02-06 Implemented "routing and billing" log in VoIP softswitch, it allows easy troubleshooting from CDR web interface

2017-02-02 Implemented saving SIP trace as TXT files, splitted for every SIP call: settings SaveSipPacketsToDiskAsTxt, SaveSipPacketsToDiskAsTxt_PathPattern (was requested by a customer)

2017-01-11 Cleaned code for routing in StarTrinity VoIP softswitch. Performed minor refactoring

2017-01-10 Added CallXML variable "callNumberInBurst" for advanced testing of conference servers

2016-12-25 Added parameter "sipCallId" into web API method "GetCallsJSON"

2016-12-22 Started to get fairly good traffic from google by keywords "continuous speed test", "continuous bandwidth test", "speed test HTML5". This could mean a new business direction for us

2016-12-20 Adding more features into VoIP readiness testing system for a new customer from US, NV. Testing internet connection stability of few local (Russian) mobile internet providers: there are downtimes, bandwidth is not stable for all providers even if mobile phone is in static position near window with strong signal

2016-12-18 New web API method: /API/MainViewModel/Cdr/GetCallsJSON

2016-12-11 Published a continuous speed test to generate additional network load when running a VoIP test

2016-12-08 Added new setting "EnableRtcpXr" to turn off RTCP-XR reports, because some SIP servers don't support RTCP-XR

2016-12-04 Published an online internet connectivity test to quickly check stability of internet connection before running a SIP test

2016-12-02 Supported SSL v.2, SSL v.3, TLS v.1.2 for SIPS transport

2016-11-30 New API methods: GetCurrentCallsCount, GetVersion

2016-11-28 Supported SRV DNS records (for customers in US and Canada)

2016-11-21 Published an example of integrating VoIP readiness test into a website

2016-11-17 Implemented limit of REGISTER requests per second to avoid overloads of tested PBX

2016-11-12 Published VoIP readiness testing manual with StarTrinity Network Tester

2016-11-06 Improving performance of StarTrinity softswitch, as we got complaint from a customer

2016-10-31 CallXML: implemented "considerThisCall" parameter for "ifcallexists" element

2016-10-28 Implemented HTML-based chart for packet loss, jitter and MOS in StarTrinity Network Tester

2016-10-20 Implemented G.107 MOS measurements in StarTrinity Network Tester

2016-09-22 Improved VoIP recording algorithm in case of VAD and RTP clock skew

2016-09-14 Developed web user interface to manage audio files (for SIP Tester and softswitch IVR systems)

2016-09-07 Developed a CallXML script which checks audio quality and DTMF in 2 ways (for someone in UK)

2016-09-03 Set up demo access to our softswitch with sample configurations

2016-08-18 Using SIP Tester as a test call generator (TCG) to fight with over-the-top (OTT) (Viber) bypass fraud. The Viber international VoIP bypass becomes a bigger problem for telcos in EU

2016-08-09 Minor improvements in CDR and status web UI

2016-08-01 Added CDR field "CalledIP" (requested by some telco)

2016-07-05 Extended web API method "CreateCall_Post", added new method "DestroyCall"

2016-07-05 Loading SIP trace from previously saved PCAP file, if displayed call is loaded from CDR data file after restarting the software
WebUI for passive mode: showing UAC and UAS SIP messages in different colors

2016-07-03 Added setting "CdrDisplaySource" to automatically load calls from CSV CDR files

2016-06-21 Added setting "NatList" to explicitly handle NAT when linking captured RTP streams to SIP call

2016-06-20 Published Web API documentation for SIP Tester and Softswitch; added new method "CreateCall_Post" for someone in Germany

2016-06-17 Implemented basic routing in softswitch

2016-06-16 Fixed a memory leak in VoIP recorder (it is being used by a telecom operator in Turkey)

2016-06-11 Softswitch: implemented call transfer mode "suppressAnswerBeforeRbt", parameters "disconnectOnSilenceLevel" and "disconnectOnSilenceTimeout"

2016-06-07 Implemented multi-tenancy for the softswitch (usage of single server by multiple independent VoIP business owners, shared hosting)

2016-06-02 Successfully tested SIP Tester as VoIP recorder: 420 concurrent G.729 calls, 1.6M totally; 1700 concurrent G711A calls, 1M totally
Added setting "UseSipsInRequestLineUriForTls" to enable "sip:" request-line URI with TLS transport

2016-05-29 SIP Tester as VoIP recorder: new setting "SaveRtpPacketsToMixedWav", requested by someone from Turkey

2016-05-22 Softswitch: implemented AAA and billing, tested

2016-05-21 Softswitch: defined and implemented entities "Terminator" and "Originator"

2016-05-08 UAC registrations: new field "Use for calls only" = "Don't send REGISTER"

2016-05-06 CallXML: added element "disableuacregistration" for someone in US

2016-05-04 Improved RTP stream lookup procedure for passive-mode monitoring, when port is changed by NAT (for a major telco in Brasil)

2016-04-28 CallXML: added "contactHeaderFormat" into "register" element
Added "LocalIpAddress" field into "UAC registrations"
CallXML: "maxansweredtime" parameter for "transfer", "maxansweredtime" event

2016-04-27 CLI: 'infinite' TotalCalls parameter value, to allow continuous generation of calls from command line

2016-04-22 WebUI: call details web page with CDR fields and SIP trace

2016-04-18 CallXML: added "var" attribute into "call" element (requested by customer)

2016-04-17 CallXML: added "from" and "to" attributes into "switch" - "case" elements

2016-04-16 Improved software update procedure

2016-04-12 Extended settings SaveSipPacketsToDisk_PathPattern and SaveSipAndRtpPacketsToDisk_PathPattern settings: now it can contain different patterns for different calls (e.g. incoming and outgoing calls)

2016-04-11 Added a command-line parameter "NumberOfCallsPerBurst" (was requested by customer)

2016-04-10 Published a report of 2-week test between SIPP and StarTrinity SIP Tester

2016-04-07 Recorded a screencast of 8000-channel testing for someone in Japan:

2016-04-07 Sending 200 OK response for PUBLISH and other SIP requests

2016-03-29 Opened public free access to the task management system that I use to get high efficiency - With the MyWorkState I can work work 5..20 hours per week, develop StarTrinity SIP Tester and other products without hiring employees, provide technical support. New users are welcome.

2016-03-26 CallXML: extended "setcallgeneratorparams" for random interval between calls (for someone in Beirut)

2016-03-23 RFC2833 DTMF generation in WinPCAP RTP sender mode
Added CDR field "RTP packets count"

2016-03-22 Testing stability of SIP Tester in WinPCAP RTP sender mode with WAV audio playback: 100CPS, 8000 G711 channels, random call duration: 13M calls are OK with no crashes, no memory leaks, no errors

2016-03-21 Manual aborting (hangup) of current calls in GUI

2016-03-20 Improved performance: got 8000 G711 and 9000 G729 channels with RTP WAV audio playback. Using an Intel 4-port 1Gbit NIC card.

2016-03-08 CallXML: "expires" parameter for "register" element

2016-03-07 Supported SIP URIs like "sip:xxxx@domain;user=phone" for outgoing calls

2016-03-06 UAC REGISTER performance improvements: simulated 100K extensions without CPU overload

2016-03-01 Continuing development of softswitch for France-based telephony application developer. Added a setting "WebApiTrustedIpAddresses" to make it easier for applications to use the Web API

2016-02-28 Implemented change of current audio codec in "reinvite" CallXML element

2016-02-27 "Manual tests" window for individual SIP calls: connect to sound device, send DTMF
Setting "CdrPath"

2016-02-26 "Expires" field for adding batch of UAC registrations

2016-02-24 Sound card module: audio connection to current SIP calls for manual real-time testing and demonstration

2016-02-22 Added "Require100rel" setting to test PRACK (RFC3262) SIP call flows
CallXML: extended "setcallgeneratorparams"
CallXML: "setinterval" element needed for timers

2016-02-21 Extended web API framework to support invoking methods. Added an API "/API/MainViewModel/CurrentCallExists" for integration between 2 instances of SIP Tester (for someone in US)
API method "/API/MainViewModel/Creat-eCall" to integrate StarTrinity softswitch with a web application (for someone in France)
"POST" method for "sendhttprequest" - needed for integration with 3rd party APIs

2016-02-18 Increased prices for SIP Tester

2016-02-13 CallXML: "sendhttprequest" element to integrate with third party APIs

2016-02-09 Packet loss concealment (PLC) for G.711 codec, needed to avoid skew in recorded WAV files when getting lost frames in jitter buffer. It is necessary for PESQ audio verification

2016-02-04 Added setting "DontPrintPortInRequestUri" (requires restart of software)

2016-02-04 I've done a research of sales data: Tuesday is the most profitable day, however most of licenses are sold on Wednesday:

Day of weekAmountLicenses sold

2016-02-03 "Host for calls" and "port for calls" fields in "UAC registrations", used to set different Request URI for REGISTER and INVITE

2016-02-01 CallXML: "disableRtp" parameter for "call" and "accept", requested by someone from Russia

2016-01-30 Custom "Contact" SIP header format for UAC REGISTER (for someone in Israel)

2016-01-25 US market is the best in the world for our company. 49.2% of sales are from the US:
StarTrinity sales by country

2016-01-18 SIP Tester GUI: "repeatCount" parameter to read destinations from CSV

2016-01-14 Tested SRTP compatibility with MicroSIP softphone. Released new version with SRTP

2016-01-13 Tested SIPS and SRTP with 3M calls, 300 concurrent G.711 calls (SIP Tester -> SIP Tester)

2016-01-12 CallXML: "sipCallId" attribute for "call" element to set custom Call-ID header in INVITE (requested by someone from US)

2016-01-11 Got a successful SRTP call between 2 instances of SIP Tester. Running a stress test now to check stability of both SIPS and SRTP stacks

2015-12-29 Tested SIP calls between 2 SIP Testers over TLS transport: 45 million calls, 500 calls per second, 400 concurrent calls

2015-12-23 Supported SIPS (SIP over TLS transport). Included sample certificate files into installer

2015-12-15 Working on SIPS (SIP over TLS) and SRTP, it has been requested by many people

2015-12-12 Setting "ReuseExistingTcpSocketToTheSameDestination" (for someone in US, Silicon Valley)

2015-12-10 Developed a free cloud-based testing system: managed multi-protocol test agents, web-based test management and reporting.
Currently implemented tests:

  • UDP stream, bidirectional: jitter and packet loss measurement
  • VoIP readiness: SIP ALG presence detection
Planned tests:
  • TCP throughput (max bandwidth)
  • UDP throughput (max bandwidth)
  • Trace route
  • HTTP
  • ICMP
  • SNMP

2015-12-06 Enabled using of ODBC drivers in "requestdb" CallXML element

2015-12-06 Loading CDR data from database (via ODBC driver), selecting previous test ID(s) to load

2015-12-05 Added new fields into CDR database and CSV file: "100 delay" and "Test ID"

2015-11-28 Generation of "multipart/mixed" SIP packet body

2015-11-20 CDR field and statistics for "SDP negotiation - RTP delay" (for someone in Canada)

2015-11-17 CallXML: "readdb" element to use list of numbers from MySQL, MSSQL, PostgreSQL and other databases

2015-11-13 Setting "WinpcapRtpSenderDscpField"

2015-11-11 WebUI: added "Abort all calls" button

2015-11-10 Achieved RTP jitter less than 1ms with new setting "MediaClockUseSpinWait"
CallXML: "dynamicblacklist" element to implement fast RAM-based dynamic blacklists

2015-11-08 Supported SIP headers with same name in SIP messages

2015-10-28 Setting "RecordedWavFilesAudioCodec" for some client who uses SIP Tester as SIPREC recorder
"Max CPS" parameter to control stepwise testing

2015-10-17 Added fields "RTP_Called_MinDelta" and "RTP_Caller_MinDelta" into CDR

2015-10-13 CallXML: "$timeMs();" syntax element to calculate delays in script.

2015-10-02 Settings to set CPU affinity masks for media, SIP threads, and for entire process

2015-10-01 UAC registrations: "expiration interval" setting

2015-09-30 Added a default CallXML variable "answerDelay".
Added new setting "StartCallGeneratorOnStartup".

2015-09-30 Setting "MediaClockPeriodMs" to minimize transmitted RTP jitter when ptime=20ms (requested by someone from Netherlands)

2015-09-25 Implemented pre-caching of audio files

2015-09-22 SIP Tester now is able to run as windows service - start automatically when windows starts

2015-09-19 CallXML: waitForRingbackToneAbsence, requested by client

2015-09-14 Processing Ctrl+C in command-line mode

2015-09-08 Filter for "reports/statistics", allowing to view stats for subset of calls. Added CDR field "Caller IP address"

2015-08-25 Released new version with syntax interpreter for CDR filter and CallXML "test" function

2015-08-23 Developing syntax interpreter for CDR filter and CallXML "test" function. Using test driven develpment (TDD) method for this particular task, as it can be effective now. Usually I manage quality of code without unit tests, as they are not very effective

2015-08-20 Loading previously saved CDRs from CSV files to view result of tests

2015-08-19 CallXML: "randfile" syntax to play random file from directory (for someone in US, FL)

2015-08-16 Refactoring CSV CDR code to develop reading of CSV CDR files into memory

2015-08-12 UAC registrations: import/export from/to CSV files

2015-08-10 Added option to filter displayed configuration settings by name and description to optimize UX of configuration

2015-08-09 Published settings documentation on the website

2015-08-05 CallXML: $randdigits(number_of_digits); syntax for random CLI generation

2015-07-30 Added option of saving SIP trace as TXT file and saving to clipboard

2015-07-27 CallXML: implemented "less or equal" and "greater or equal" syntax for "if" and "block"

2015-07-27 CallXML: implemented "enabled" attribute to temporarily turn off execution of CallXML elements

2015-07-23 We have just reached stable performance of 8000 concurrent G.711 calls. RTP packets are parsed for 5% of calls. Total RTP bandwidth is 743Mbps in one direction, splitted into 4 ethernet adapters (Intel I350-4) on 4-core i7 machine.

2015-07-19 Setting "DisableRtpPacketAnalysisOnIpAddresses" to turn off RTP packet processing on selected interfaces

2015-07-19 Tested the SIP Tester with 44 million SIP calls (4 days). 4 NICs were used in WinPCAP RTP sender mode, 1 NIC was used for SIP signaling. No crashes, no memory leaks.

2015-07-19 Network Tester: added CSV and GUI history of packet jitter and loss

2015-07-17 Optimized SIP thread: now reaching 1000 calls per second with i7-3770 in "WinPCAP RTP sender" operation mode.
Tested with 16M during 4.5 hours, no memory leaks detected. Peak memory usage was 3.5GB

2015-07-16 Embedded Visual CallXML script editor into SIP Tester desktop GUI

2015-07-13 WebUI: Fixed compatibility of visual CallXML editor with Internet Explorer and Firefox

2015-07-10 Released new version of UDP Network Tester

2015-07-04 WebUI: Visual CallXML editor

2015-06-24 CallXML: "localRtpAddress" and "sendSdp" parameters for "reinvite"

2015-06-20 The unlimited license for the SIP Tester is free for medical organizations (hospitals, research institutes), charity, and nature protection organizations

2015-06-18 CallXML: "waitforringbacktone" element to test SIP trunks and GSM gateways

2015-06-10 Tested and released new media processing mode: "WinPCAP RTP sender". Now bottleneck is in the RTP packet analyser module

2015-06-08 Running the first stress test with our newest WinPCAP-based RTP stack. With ARP cache performance is better than in "lightweight media processing" mode

2015-06-03 Added a "settimeout" CallXML element custom handling of RE-INVITEs (requested by someone in Finland)
Supported partial-RTP-frame delays in real-time audio verification algorithm (for someone in Denmark). The customer has a PSTN network on the way from SIP Tester to IVR server, and it caused uneven delays (not multiple of 10ms RTP frames)

2015-06-02 Added a "reinvite" event for custom handling of RE-INVITEs (requested by someone in Finland)

2015-06-01 Added "localRtpAddress" parameter to "call" and "accept" to handle multiple network interfaces

2015-05-30 Refactoring Packet Analyser to optimize the code and to make it usable by the new RTP sender module

2015-05-28 Design for new module "WinPCAP RTP sender" is ready. It will contain implementation of RTP, UDP, IP and Ethernet (L3) protocols, optimized for periodic RTP transmission with incrementing RTP.sequence and RTP.timestamp fields, leaving all other fields unchanged.

2015-05-24 Added new CDR columns "EarlyMediaPeakSignalLevelDb", "ActiveMediaPeakSignalLevelDb"

2015-05-22 Tested performance of 2 network adapters: TP-link TG-3269 vs. Intel EXPI9301CT. OS: Windows Server 2012 R2. Packets: RTP G.711A, 20ms. CPU: Intel i7-3770. Max bandwidth for both of these cards: 4000 channels, approximately 350Mbps. I expected to see some difference between these NIC's performance, but seems like bottleneck is in Windows or drivers.

2015-05-19 New feature: automatic re-register on failure. Was requested by a customer from US

2015-05-18 Could not achieve good performance with pcap_sendpacket(). Max bandwidth was 12.5Mbps. Extra packets were dropped without CPU load.
pcap_sendqueue_queue() provides much better bandwidth: 330Mbps per adapter. CPU is not a bottleneck for both of these functions.
We are going to develop a new module for faster RTP media transmission, estimated time of development is 1 month.

2015-05-15 CDR database schema verification: automatic creation of table and/or missing columns

2015-05-08 Implemented ringback tone detector. Added CDR field "Latest RBT Delay" which can be used to detect FAS

2015-04-29 CallXML: "on" event handlers now can be located inside current element. For example <call ... > <on event="answer"> .... </on> </call>

2015-04-22 CLI parameter "IncomingCallsExitTimeoutSec"

2015-04-20 Getting CSV delimiter from system regional settings

2015-04-18 Extended "sendsipmessage": added "maxtime", "var", "delayvar". It is helpful for checking availability of SIP servers with "OPTIONS" SIP request

2015-04-17 Implemented DC offset removing in signal detector. It is useful for G711 codec

2015-04-11 CallXML: "graceful" mode for "exitcli" element

2015-04-10 Optimized GUI in SIP Tester: display of current SIP calls

2015-04-06 Supported Google Speech API v2, so it is possible to build speech IVRs with our softswitch

2015-04-04 Added a parameter "debugRecordingThreshold" to "verifyaudio" to debug low confidence scores

2015-04-03 Working on in-memory recording. It is needed to debug low confidence issues in audio verification and to collect data before recognizing voice with Google Speech API v.2

2015-03-30 CallXML: "waitforsilence" element for IVR test scripts

2015-03-26 Optimized real-time audio verification algorithm

2015-03-22 UAC registrations: "add batch" - now you can easily add thousand of extensions

2015-03-21 Added setting "LocalSIPPortRange" - now the software can use a range of local SIP ports. Was requested to register multiple extensions at Cisco Unified Call Manager

2015-03-21 Packet analyzer: implemented TCP packets processing

2015-03-20 Packet analyzer: supported VLAN headers (requested for parsing PCAP files)

2015-03-20 Updated web documentation: published architecture diagram

2015-03-15 Real-time mode for audio verification. In this mode time of verification is calculated automatically

2015-03-13 Improved audio verification algorithm. Now it is faster and more accurate. It can search for a known ("reference") phrase in middle of a long IVR prompt.

2015-03-10 CallXML: "exitcli" element

2015-03-09 Updated web documentation

2015-03-03 Re-designed navigation on the website

2015-03-01 Added settings to configure SMTP server port number and SSL mode
Command line parameter "RetryToOpenLocalSipPort" to avoid hanging of CLI when another program already uses local SIP port

2015-02-28 Updated technical documentation: main tutorial

2015-02-23 CallXML: recordcall parameter "mode" - "rx", "tx", "mix"

2015-02-20 CallXML: Implemented dynamic referencing of variables: "$prefix$indexVar;;" and "$prefix[$indexVar;];". It is also useful for a global cache: "$global.someCache[$cacheEntry;];"

2015-02-19 CallXML: "exec" element, similar to "eval" in JavaScript

2015-02-18 Setting "OverwriteCsvCdrFilesAfterRestart" to create new CSV CDR files after every test, and discard old results
Sending 200 OK response for OPTIONS SIP request, it is used to ping SIP servers

2015-02-17 CallXML: "recordmessage", "searchfile" elements

2015-02-15 CallXML: "eofMode", "rowIndex" parameters for "readcsv"
"$env.x;" syntax to use Windows environment variables in scripts

2015-02-12 CallXML: "enqueue", "dequeue" elements. Needed for a customer to implement advanced ("random") conference VoIP application

2015-02-11 CallXML: "getaudiofilelength" element

2015-02-10 Developed a new fast algorithm for audio verification. Tested with 1200 concurrent G.711 calls on 4x3.4GHz i7 CPU. Old algorithm is replaced by new one.
Defined syntax for default parameter values of functions

2015-02-08 CallXML: "getfilenamefrompath" element.
New functionality for offline .PCAP files debugging and RTP media analysis:
- New CDR field: "audio signal level (dB)" for both entire call duration and early media.
- G.729 and G.711 RTP media streams decoding and exporting into WAV files

2015-02-07 Changed "Total calls per second" calculation: now it uses time between first and last call instead of total measurement time
Developed CallXML "includefunctions" element to build complex IVR tests for one of our clients

2015-02-05 CallXML: added "cache" parameter to "include" element to disable caching when it is not needed

2015-02-03 New feature: import of pcap files with SIP and RTP into SIP Tester. It is useful for offline debugging. SIP Tester parses the files, analyses VoIP quality, builds CDRs and reports

2015-01-27 Created a button to create burst of SIP calls manually.
Having an issue with current "fast" audio verification algorithm. It does not work in case of jitter and/or RTP clock skew. Following example demonstrates it.
Audio verification algorithm illustration
So I am going to develop a better and faster algorithm for IVR audio verification.

2015-01-24 Tested StarTrinity softswitch in B2BUA mode with G.729 pass-through RTP traffic, 800+800 concurrent calls. Results are good. Published report here.
Now working on SIP Tester's documentation. It needs to be updated.

2015-01-22 CallXML: "getstringlength" to operate with length of dialed numbers or any other strings

2015-01-21 CallXML: option to start calls from the middle of CSV file - extended $seq_sip_uri_from_csv() parameters

2015-01-19 SIP Tester command line: added parameters "LogLevel", "OperationMode", "SaveSipPacketsToDisk", "SaveSipAndRtpPacketsToDisk". It is needed to help a customer to run SIP Tester in passive mode (like wireshark) but without GUI to minimize CPU load.

2015-01-16 I started to work in field of GSM SIP box detectors, and anti-detectors. Solution to problem of international VoIP fraud can give profit.

2015-01-15 CallXML: developed "switch", "case", "default" syntax elements for better routing and unit tests

2015-01-11 Optimized DTMF parsing code and some other code in SIP thread.
Re-tested performance of StarTrinity SIP Softswitch. It handles 1750 G.729 channels, 1300 G.711 channels with no problem.

2015-01-10 I see that domain name "" is taken by one of my past prospects. It is very strange, and I don't know his reason for doing it. If you are reading this, please remember that it is startrinity dot com, not startrinity dot net.

2015-01-10 UAS registrations page: added "SIP Trace" button for debugging

2015-01-09 I hear many people telling me about low quality of GUI: there are too many details, there is need to have non-technical-targeted website. I already have in plans to build a wizard-style GUI for SIP Tester. There will be also a GUI framework for editing CallXML scripts.

2015-01-08 Developed "setcallgeneratorparams" CallXML element and "$timeOfDayInHours();" keyword to simulate variable call load. For example, it could be a sinusoid with interval = 24 hours:

<assign var="numberOfConcurrentCalls" mathvalue="120 + 100 * sin(($timeOfDayInHours(); - 10) / 24 * 360)" />
<setcallgeneratorparams maxconcurrentcalls="$numberOfConcurrentCalls;" />

2015-01-08 Set up a default "callerIpAddress" variable, it is needed to restrict SIP calls from unauthorized IP addresses/
StarTrinity SIP Tester is successfully deployed as a softswitch in one more place (Western Asia)

2015-01-07 Fixed issue with MSI installer "auto-healing" which reverted settings

2015-01-03 Developed "UAS registration and authorization" page. This functionality previously existed in the SIP platform, now just added MVVM-level logic, API and UI

2014-12-26 Developed "CDR" web page. A little bit about code and framework:
Client-side code is simple:

<s3table data='MainViewModel/Cdr/DisplayedCalls' width='1000px' height='500px' />
This code is an extension of HTML with special tags: s3Button, s3EditNumber, s3EditText, s3Text, s3Table. Data binding goes directly from HTML extension to server-side C# view-models which are already used for desktop WPF GUI. CDR data is delivered to browser using AJAX XMLHttpRequest; it is generated by server-side viewmodel via an interface IDataElementForHtmlTable:
 interface IDataElementForHtmlTable
  string HtmlTableHeader { get; }
  string HtmlTableRow { get; }

2014-12-25 Developed CDR filter

2014-12-24 Implemented SIP trace view for passive mode in SIP Tester

2014-12-15 Working on CDR filters:
StarTrinity SIP Tester coding - CDR

2014-12-15 Improved performance of CDR datagrid. Added option to hide unnecessary columns

2014-12-13 Made a research of MVVM/C#/XAML -> HTML5/JS web frameworks, but could not any suitable one.

2014-12-10 I am developing a proprietary "StarTrinity Web UI framework". I personally dislike frameworks like ASP.NET MVC, Kendo UI, or WebForms, so building something different on my own.

2014-12-09 Developed CallXML elements to make a pause in test if destination server fails: "startCallGenerator", "movingAveragePut", "movingAverageGet", "movingAverageReset". The feature was requested by a customer from Canada. I am happy to get it done in a short time. Here is a sample script.
3 more customers are waiting for some other features.

2014-12-05 Developed new RTCP VoIP quality CDR fields, history charts. Updated CDR table schema. RTCP fields are calculated in RTP media threads, independently from winpcap threads

2014-11-29 CallXML: added "localRtpPort" parameter to "call" and "accept" for explicit RTP port number assignment

2014-11-26 Added settings "UseAsCaller" and "UseAsCalled" for UAC registrations

2014-11-25 Created a web interface in addition to desktop-based GUI. Web server is hosted inside the process, no IIS setup is needed

2014-11-21 I am working on something new, and I'm not comfortable to publish all the new ideas here before they come alive. Besides that, the SIP Tester got few new RTCP fields in CDR. The RTCP fields should be really useful, because they provide information about VoIP quality which is measured by remote SIP-UA, not only by SIP Tester.

2014-11-20 Added CallXML event "audioSignal" for "call" and "transfer" elements
Implemented sending of RTCP and RTCP-XR reports to third party destination for analysis and monitoring. It is configured with settings "RemoteRtcpMonitorAddress" and "RemoteRtcpMonitorPort"

2014-11-18 Added CDR field "ReleasedBy": "caller" or "called". It identifies which party aborted the call: UAC (caller) or UAS (called)

2014-11-17 Implemented recording of SIP and RTP packets to .pcap files for further debugging. It was requested by many customers.

2014-11-14 Added SIP proxy setting for UAC REGISTER

2014-11-08 Made a research of SIP Tester's performance on virtual machines. Published results here.
Added settings:

  • "DefaultSignalDetectorThresholdDb" to change the threshold which is used for "SignalDelay" CDR field
  • "RecordSilenceWithoutRtp" to put silence into recorded WAV files when no RTP is received yet

2014-11-07 Fixed an issue related to RTCP and NAT. The RTCP packets were sent to incorrect port

2014-11-05 Got an issue of a difference (offset) between system clock and NIC timestamps on a customer's virtual machine. Difference is few minutes, restart of the VM does not help. NIC clock is wrong, system clock is right. To handle this situation I created a setting "UseNicTimestampsForCdr" (default 1) which allows to use system clock instead of NIC's clock.

2014-11-04 Enabled RTCP XR reports. They still contain uninitialized G.107 MOS and R-factor fields.

2014-11-01 Added CDR fields: RTP_Caller_Delay, RTP_Called_Delay - time between INVITE and first RTP packet

2014-10-30 Compiled DLLs for both 64 and 32 bit modes

2014-10-27 Finally moved to .NET 4

2014-10-23 Supported "audio/telephone-event" content type for SIP INFO DTMF packets


  • Implemented system error notifications by email. Put a limit of 1 email per minute, hard-coded for now
  • CallXML: implemented "repeat" parameter for "inputdigits". It could be useful to play audio prompt in a loop

2014-10-21 Added an option to generate multiple SIP calls in a burst. Developed and tested in an airplane when returning back home

2014-10-19 Added a button to make a pause when generating calls in SIP Tester. This button does not reset CSV file readers. [was requested by a customer]

2014-10-18 Today I was thinking about future development of CallXML. There should be a relatively cheap VoIP platform with many custom apps running on it. The apps will be written in CallXML, they will be maintained and suported by developers. CallXML will be extended to provide web interface for VoIP apps.

2014-10-12 Improved startup time of SIP Tester. Now it takes 5 seconds. Previously it was busy with pre-encoding 20 seconds G.729 silent audio data, now it is only 1 second. Should be enough

2014-10-11 Added "Created" and "Answered" fields to "Current calls SIP info" screen. Previously the fields were only in "Calls History". It was suggested by someone anonymously via a "Feedback"

2014-10-10 Now SIP Tester saves results of testing (CDR records) to a database using ODBC driver. It could be MSSQL, MySQL, MariaDB or any other database with ODBC drivers. Having CDRs in database is useful for many purposes: e.g. if you want to show call quality reports in your own GUI, or if you want to access information about calls in "requestdb" SPs

2014-10-07 The SIP Tester is going to have a web interface soon. It will have an option of running as a windows service

2014-10-06 Supported standard codecs with dynamic payload type (pt <= 96)

2014-10-03 Separated CallXML and system logs in SIP Tester's GUI

2014-09-30 Developed some logic elements for monitoring and restarting a generic Windows SIP Server if it stops to accept SIP calls

2014-09-28 Added an option of sending email reports at specific time of day, with optional reset of statistics after sending email. The email reports are useful to control status of SIP Tester.
Enhanced "block" test condition logic: added "OR" and "AND" syntax elements
Added "if" and "else" syntax elements

2014-09-26 Added jitter and answer delay indicators into status panel, so they are always visible for control [the feature was suggested by someone from Australia]

2014-09-22 Removed a ":" in default User-Agent field, because it conflicts with Zultys IP-PBX

2014-09-22 I made a research of hardware IDs. Here is a list of non-unique (duplicate) MAC addresses:

  • 20:41:53:59:4E:FF
  • 00:50:56:C0:00:08
  • 00:50:56:C0:00:01
  • 50:50:54:50:30:30
  • 33:50:6F:45:30:30
  • 53:4E:57:00:00:00
  • 02:00:4C:4F:4F:50
  • 00:09:0F:FE:00:01
  • 02:00:54:55:4E:01
  • 00:00:00:00:00:00
  • 02:50:41:00:00:01
  • 00:05:9A:3C:78:00
  • 44:45:53:54:4F:53
Actually, none of hardware IDs is 100% reliable for licensing, especially if customers are using virtual machines.

2014-09-21 I am working on a licensing module. There is something to improve in it. It is the time when I should not be fast in design, because I have to maintain backwards compatibility for license keys. There is much of hardware ID statistics collected from clients to analyse.

2014-09-19 Added lower threshold into email alerting module: now it sends email also when call quality becomes normal again

2014-09-18 Developed "measuresignal" CallXML element to analyse received RTP stream

2014-09-17 I got an interesting observation related to G.729 codec: after encoding silence and decoding it, it produces a small defect of -36dB:
A defect of G.729 codec when transcoding silence

2014-09-17 Added "level" parameter to "waitforsignal" to configure threshold of measured signal

2014-09-16 Developed "substring" element for CallXML scripts

2014-09-15 Added CPU load display to the main screen in SIP Tester

2014-09-12 Developed "function" and "runfunction" elements. CallXML is becoming more powerful.

2014-09-11 I have a customer who is extensively using CallXML, developing new features for him:

  • Added "stopaudio" CallXML element to stop audio player which was started asynchronously
  • Added "ifconferenceexists" CallXML element

2014-09-09 Added "getstatistics", "resetstatistics" CallXML elements to access statistics programmatically. It was requested by a customer to build an intelligent router in CallXML


  • Added "mathvalue" attribute for "assign" CallXML element. It processes numerical expressions like "(6+8)/5+sqrt(4)*9"
  • Implemented $randchoice(option1,option2,option3,...) substitution for scripts
  • Implemented call rate (CPS) threshold for email alerting

2014-09-07 Implemented "less than" and "greater than" conditions for "block" and "goto" CallXML elements

2014-09-07 Added 'syncDestroy' mode for 'conference' CallXML element

2014-09-02 Refactored GUI, added split panels: simulation and results

2014-08-31 Got our 100th customer today, on Sunday. This customer received a license for 2x more concurrent calls as a bonus. New development still takes most of the time, because our efficiency is good enough to support 100 customers.

2014-08-31 'readcsv' now reads CSV file from disk when repeating lines. Previously the lines were not updated in case if file was modified.

2014-08-28 I have an idea of a new and better GUI for SIP Tester. Many customers have requested a possibility of viewing both stress parameters and reports on the same screen.
Prototype of new GUI for SIP Tester

2014-08-26 A customer reported problem with 'writecdr'. This was because of weak code of storing custom CDR fields. I refactored the code, now it works

2014-08-24 Added re-register button

2014-08-23 Implemented automatic backup of settings and CallXML scripts

2014-08-21 Developed GUI for codec settings and RTP playback. Previously it was possible to configure these settings only by editing CallXML script

2014-08-20 Now SIP Tester makes backup of current DLL and EXE files before upgrading its version

2014-08-19 SIP Tester supports Opus at 48kHz, SILK at 12/16/24 kHz, AMR-WB at 8kHz. Checked it with Blink and microsip softphones.

2014-08-18 Working on RTP module to support sample rate other than 8000Hz. It is needed for wideband audio codecs like Opus and Silk. I use "Blink" softphone for interoperability tests, it suports opus@48kHz.

2014-08-18 Installed Ubuntu 14, Asterisk PBX 11.7.0 for performance and stability tests. It crashed after few minutes of 150-channel call load. FreeSWITCH was muc more stable compared to this version of Asterisk. I should write an article about Asterisk vs. FreeSWITCH performance and stability.

2014-08-16 Writing unit tests for CDR reporter, CSV file reader.

2014-08-13 Writing unit tests for SIP Tester's scheduler. I am not using any unit testing framewroks, because they contain almost no logic inside, and because I need some special features which are missing. It is easier to write and maintain own unit testing framework.

2014-08-13 Found an issue related to transition from silent G.723 and G.729 audio frames to non-silent frames. Changed behaviour of RTP module: now G.729 and G.723 silent packets are not transmitted during <wait /> CallXML element

2014-08-12 Still fighting with memory leak of 18 bytes per call, it leaks in a non-basic operation mode.

2014-08-09 Added more features which were requested by for customers: CDR filter by SIP status code and uniform probability distribution of interval between generated SIP calls.

2014-08-07 It looks like I completely fixed memory leaks in SIP Tester. Reason was in BSTR's and SysAllocString. I had to turn off OLE string cache. I will have to do more tests in different modes with at least 20M calls to check it, but now I see that .NET memory is not leaking and that native memory is not leaking. Heaps' sizes are stable during the test so far.

2014-08-04 Added option of custom domain name in "From" SIP header [requested by a customer]

2014-08-01 Defined status code 1408 (NoResponse) for case when aborting SIP call before geting any response from destination

2014-07-28 Added feature of stopping outgoing calls on schedule with manual start [was requested by a customer]. Optimizing code of SIP Tester with VS profiler

2014-07-26 Optimized media processing module: now WSASendTo() takes 71% of CPU time for 2800 G.711 channels, ptime=20ms, 64 media threads, lightweight media processing mode, 25CPS.

2014-07-25 Measured call load capacity of 54Mbps 802.11g WLAN: 24 G.711 channels = 2.1Mbps, it is much less than theoretical 54MBps (3.9%).

2014-07-24 Disabled watchdog timer by default because it takes extra CPU resources and because usually there are no deadlocks in SIP Tester

2014-07-24 Measured RTP round-trip delay over 802.11g wifi network for 2 different distances between endpoints: 1 meter and 3 meters with wall, results are very interesting: connection was better, almost perfect in case of 3 meters. It is all very complicated, requires long-duration tests.

2014-07-22 Measured RTT over LAN, RTT over internet, now measuring RTT over local wireless LAN.
Fixed a bug in call scheduling which was reported by someone in Lebanon.

2014-07-22 Successfully tested FreeSWITCH with 2200 G711 channels. It showed good performance: RTP jitter was fairly low. Reported here

2014-07-21 Observed FreeSWITCH crash again after 2.89 million simulated SIP calls @5.4CPS, 500 pass-through G.711 channels. There was a memory leak of 303MB (from 397MB to 700MB), i.e. 104 bytes per pair of SIP calls (incoming + outgoing).

2014-07-21 Developed "getwg67info" CallXML element to save RX RTP extension data in WG-67 format and to measure round-trip delay from NIC timestamps

2014-07-20 Implemented WG67 PTT-type RTP loopback connections to measure round-trip RTP audio delay. This delay is controlled during ED-137 performance testing of air traffic management (ATM) VoIP networks in airports.

2014-07-19 Added settings for recorded WAV file names: "RecordedWavFileNamePattern" and "DebugMediaFileNamePattern". It was requested by a customer.
..FreeSWITCH passed 1.42 million calls, RTP jitter is OK. Answer delay is not OK: it was up to 21 second. Memory has increased from 380MB to 508MB - probably there are memory leaks in FreeSWITCH.
In next few months I am going to carry out massive load tests with FreeSWITCH, Asterisk, FPBX, Kamailio and some other software

2014-07-18 Added "contentType" attribute to "sendsipinfo" CallXML element. Example: <sendsipinfo value="the text" contentType="text/plain" />
FreeSwitch is still alive with 500 G.711 pass-through channels, 1.14 million SIP calls

2014-07-18 Removed option of license without link to machine ID because I noticed unauthorized usage of SIP Tester by some third parties who did not purchase any licenses.

2014-07-17 Oops, FreeSwitch crashed! It could pass only 1063151 SIP calls.
FreeSwitch crash with more than million SIP calls
I could investigate reason of crashing with Visual Studio debugging, but I have no time for this right now. Exception code is 0xc0000005 - access violation.
I am continuing test with 500 G.711 channels, 9 calls per second. It is a basic test with passthrough codec.. I wonder how often it will crash with more complicated logic - IVR, recording, media transcoding

2014-07-16 Now SIP Tester passes remote SDP attributes into CallXML variables. It is needed for ED-137 tests

2014-07-16 Testing FreeSwitch 1.5.12-64bit with 800 G.711A channels, 14 calls per second, passthru mode, Windows Server 2012. 1 million calls - still no crashes, no memory leaks. FreeSwitchConsole.exe takes 640MB. Will continue the test.

2014-07-15 Fixed mode "Make calls via least busy UAC registration" - now it does not make calls with same 'From' and 'To' SIP headers

2014-07-13 Successfully generated a SIP call with Speex codec, 8kHz (dynamic payload type)

2014-07-11 'setrtpextension' CallXML element is ready, released new version. Next steps of development are: 1) pass SDP attributes to CalLXML variables 2) implement PTT-SQU loop 3) measure PTT-SQU response delay based on NIC timestamps

2014-07-09 Working on 'setrtpextension' CallXML element. It will turn on/off RTP extension data in transmitted RTP stream. The element will be used to simulate SIP UAC and UAS endpoints for EUROCAE WG67 ED-137 VoIP software testing.

2014-07-07 A customer had a problem with memory leaks on his server, and he suspected that it was SIP Tester. In fact, SIP Tester consumed only 160MB for 4000 calls during 2 days of operation. Reason was in svchost.exe, which took all the memory.

2014-07-07 Passed test with 834K GSM calls (70 channels, 4 days 4 hours, 2.3 calls per second) - no crashes, 229 MB memory consumed at end of the test. Performance of playing .pcap files should be improved.

2014-07-03 SIP Tester successfully played .pcap file with GSM RTP codec (payload type = 3)

2014-07-01 Tested new version with 14 million SIP calls at 144CPS during 1 day and 3 hours. No crashes.

2014-06-30 Added settings DeclareG711AInSDP, DeclareG711UInSDP, DeclareG723InSDP, DeclareG729InSDP. Started to work on playing audio RTP from .pcap files, hereby supporting any audio/video codec

2014-06-30 Finished test: there is still a memory leak of 46 bytes per 1 SIP call. Tested @100CPS, 9M calls.

2014-06-29 Fixed RFC4028 implementation. Added option of exporting/importing setings from/to XML file. Added 2 modes of current calls limit: "outgoing+incoming" (default), "outgoing only".

2014-06-28 Thanks to Frequentis AG, they helped me to find an issue in implementation of RFC 4028 (Session Timers). Fixing it now.

2014-06-27 Discovered memory leak of 547 bytes and 2.5 packets per SIP call. It is related to new feature of saving packets to memory. ... Fixed this leak, it was in C++ code, linkedlist.hpp. C# destructors seem to be reliable, they cause no leaks. Will run more tests at night.

2014-06-27 Improved GUI for incoming CallXML script: made delay before answering optional. It can be turned off now. [this was requested by Frequentis AG, Austria]

2014-06-26 Exported first .pcap file with SIP and RTP packets

2014-06-25 Today I've started to work on saving packets into memory and later into .pcap file. The new feature will be disabled by default, it will be turned on using settings: "[bool] save SIP packets to memory" "[bool] save RTP packets to memory", "[bool] save to file [from memory]", "[bool] save to file [from memory]"

2014-06-20 I discovered an interesting ratio in my business analytics system's report: 54% of SIP Tester customers use CallXML scripts instead of GUI. This could mean 2 things: 1 - default scripts which are represented by GUI are very limited; 2 - CallXML is easy to use. In 2009, when I started to implement CallXML, I could not even imagine that customers would be able to use it directly without GUI.

2014-05-24 I performed several tests with same hardware and 3 different operating systems: Windows 7, Windows Server 2008 R2, Windows Server 2012. Different networking operations were tested: receiving, sending packets using winsockets, and sniffing packets using winpcap. It turned out that IP stack of Windows 7 is not able to operate with more than 50MBps of UDP traffic without packet losses (drops).

Copyright 2011-2017 | Blog | Contact lead developer via LinkedIn | Support tool