The micro-blog is written by Sergey Aleshin, lead developer and owner of startrinity.com. 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-04-17 Softswitch: new API methods to get/add originator's balance
2017-04-09 Softswitch: implemented advanced logic for missed call routes
2017-04-02 Got 2 new customers for softswitch: VoIP retail origination in UK and WoIP wholesale in US. Now working with the new customers to optimize the softswitch for their needs, according to road map
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 www.i-test.net (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-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"
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)
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)
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)
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 - MyWorkState.com. 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)
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
"Manual tests" window for individual SIP calls: connect to sound device, send DTMF
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
Added "Require100rel" setting to test PRACK (RFC3262) SIP call flows
CallXML: extended "setcallgeneratorparams"
CallXML: "setinterval" element needed for timers
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)
I've done a research of sales data: Tuesday is the most profitable day, however most of licenses are sold on Wednesday:
|Day of week||Amount||Licenses 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)
US market is the best in the world for our company. 49.2% of sales are from the US:
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)
Developed a free cloud-based testing system: managed multi-protocol test agents, web-based test management and reporting.
Currently implemented tests:
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
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
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
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
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
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
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
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;];"
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
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
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
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
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
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.
So I am going to develop a better and faster algorithm for IVR audio verification.
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
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 "startrinity.net" 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.
Developed "setcallgeneratorparams" CallXML element and "$timeOfDayInHours();" keyword to simulate variable call load.
For example, it could be a sinusoid with interval = 24 hours:
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
Developed "CDR" web page. A little bit about code and framework:
Client-side code is simple:
2014-12-25 Developed CDR filter
2014-12-24 Implemented SIP trace view for passive mode in SIP Tester
Working on CDR filters:
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.
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.
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-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
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]
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
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:
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
I got an interesting observation related to G.729 codec: after encoding silence and decoding it, it produces a small defect of -36dB:
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:
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
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.
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.
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 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.
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
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.
Oops, FreeSwitch crashed! It could pass only 1063151 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).