StarTrinity.com

Measuring quality

SIP Tester Tutorial

Software architecture
Basic steps for active testing
Basic steps for passive testing (monitoring) or VoIP recording
Installation
Main window
UAC registrations
UAS registrations
Outgoing SIP calls
Incoming SIP calls
Current calls report: SIP information
Current calls report: RTP information
Call Detail Record (CDR) report
Lowest quality calls
Reports/Statistics
Performance chart
Stepwise testing
Manual tests
Impairments generation
Settings
Log
License information
Command line interface
Web API
Web API: UAC registrations
Web API: Jobs
Screen videos, training sessions
Configuring SIP Tester with Cisco Unified Call Manager (CUCM)
Report unclarity

Basic steps for active testing

Basic steps to run a simple active SIP stress test using graphical user interface (GUI) are:

Alternatively you can use command line interface (CLI) with .bat scripts or windows service mode (StarTrinity.SIPTester.Service.install.bat) with Web API to run automated tests

Basic steps for passive testing (monitoring) or VoIP recording

In passive mode SIP Tester monitors all UDP packets on all network adapters like wireshark. It tries to interpret packets as SIP and RTP. There is no UDP port filter. To monitor SIP calls you need to:
  • Connect your Windows server to a mirroring port on network switch and configure the port to receive all SIP and RTP traffic
    or install SIP Tester on same Windows server with your PBX
  • Install winpcap, .NET Framework 4.5 and SIP Tester
  • Set operation mode to "Passive" on settings tab
  • Monitor current SIP calls and RTP calls in real time
  • Analyse measured call quality indicators in CDR report and charts
  • (optional) Turn on recording of mixed RTP streams into WAV files in settings -> "pcap export" section
  • (optional) Analyse recorded PCAP files for problematic SIP calls, export audio to WAV files for listening
  • (optional) Analyse sound volume indicators, measured from captured G.711 and G.729 RTP streams
  • (optional) Save CDRs to your database, use your own web interface to show CDRs and recorded WAV files
  • (optional) Configure email alerts and reports for call capacity overloads or call quality drops on settings screen
  • (optional) Configure setting 'SaveSipPacketsToMemory' or 'SaveSipPacketsToDisk' if you want to view SIP trace in UI
Alternatively you can run SIP Tester in windows service mode (using StarTrinity.SIPTester.Service.install.bat) or in command-line mode:
StarTrinity.SIPTester.CLI.exe OperationMode passive SaveSipAndRtpPacketsToDisk true SaveSipPacketsToDisk true

Installation

The program is installed with web installer which copies program files into specified directory. Multiple instances can be installed to multiple directories on same server, each instance having different SIP and HTTP ports. This directory is also used to store settings, backups, CallXML scripts, recordings, logs, .pcap and CDR files.
SIP Tester can be installed on any Windows OS. It needs .NET Framework and winpcap library to be installed. Windows Server is preferred over Windows 7 or Windows XP because it allows much better performance of UDP/IP stack. Also, real servers or laptops are preferred over virtual machines. A virtual machine may have poor performance and have delays in NIC drivers. You can find more details about SIP Tester's performance here. The SIP Tester is able to run as Windows Service - run in background with web interface, start automatically with Windows. To set up it as Windows Service, run StarTrinity.SIPTester.Service.install.bat, to uninstall service - StarTrinity.SIPTester.Service.uninstall.bat

Main Window

The main window is divided into 3 sections: simulation, reports and status:
SIP Tester - main window
Simulation section is divided into following tabs:
  • Registrations (UAC) - here you can configure SIP Tester to register at SIP server(s) as client. Registration is needed to receive incoming calls by SIP Tester
  • Registrations (UAS) - here you configure how SIP Tester simulates IP PBX register server: edit list of extensions - users and passwords
  • Outgoing calls simulation - configure script for simulated outgoing calls
  • Incoming calls handling - configure script for incoming calls
  • Manual tests - here you can manually send DTMF to current SIP calls, send REFER or start fax operation
  • Impairments generation - allows you to simulate RTP packet loss and/or jitter, also to terminate SIP Tester and simulate hang calls
  • Stepwise testing - is used to run tests with increasing number of concurrent calls
Reports section is divided into following tabs: Status panel is always visible, it contains:
  • Current calls counter display
  • Abort all current calls button - terminates all current calls, but does not stop generation of new calls
  • Attempted, received calls counters
  • Answer delay, jitter statistics display - shows min/avg/max stats
  • Settings button
  • CPU usage indicator, current version information, licensing information, link to web interface, other miscellaneous buttons

Setting up user agent client (UAC) registrations

SIP Tester simulates multiple SIP user agents (SIP softphones, IP PBX extensions) by sending multiple SIP REGISTER messages to destination server(s). The REGISTER messages are sent on startup, on change of parameters, and re-sent on registration timer expiry. UAC registration settings are configured on this screen:

UAC Registrations
Here you can edit parameters of simulated SIP user agents: user name, password, server's address, port, etc:
  • User name - SIP user ID to put into simulated REGISTER message, into "To" header
  • Auth. user name - user name for SIP authentication. If it is empty, "User name" is used
  • Password - password for SIP authentication. Is stored in settings XML file, encrypted
  • Registrar host - IP address or domain name of your SIP server (IP-PBX)
  • Registrar port - port number at your SIP server (IP-PBX). Default is 5060
  • Use TCP - protocol to be used for REGISTER: TCP (if checked) or UDP (if unchecked)
  • Proxy host, Proxy port - address and port of your SIP proxy, if you use it
  • trace button - shows SIP messages trace:
    SIP messages trace
  • re-register button - sends REGISTER message to the server again
  • unregister button - sends REGISTER message with SIP header "Expires: 0" to unregister
  • delete button - deletes an item from settings
  • Status - displays current status of REGISTER request. Is updated in real time
  • Call-ID - SIP Call-ID header, unique identifier of the REGISTER request. Is used to trace the request
  • Custom Call-ID - optional field to overwrite default random SIP Call-ID header
  • Use as caller, use as called, single channel - boolean flags, used when generating SIP calls via registrar. In this mode SIP Tester makes calls from one registered SIP user agent to another
  • Enable - allows you to temporarily disable an item without deleting it. Applies to both REGISTERs and INVITEs associated with the item
  • Use for calls only - turns off sending REGISTER for the item, and keeps it usable for INVITEs in mode "make calls via least busy registration"
  • Local IP address - IP address for Contact header
  • Contact header format - allows you to set custom Contact header for REGISTER SIP messages and for INVITE messages (when calling "via least busy registration"). If empty, the software uses a default format for the Contact header.
    Example: "Eran%20Younger" <sip:[userId]@[localIp]:[localPort];transport=TLS;ob>;reg-id=1;+sip.instance="<urn:uuid:2c72cde9-c1d4-321d-8727-9bb0e165519f>"
  • Host, port for calls - used to set a different destination host name and port for SIP calls (INVITE messages) for the UAC registrations in call mode "via least busy registration". When you set custom port for calls, host for calls can not be empty

Setting up user agent server (UAS) registrations

SIP Tester simulates SIP server (IP PBX) by accepting multiple SIP REGISTER messages from SIP phones (extensions). The registered contact addresses of the extensions can be accessed in CallXML script via substitution $ext(x); UAS registration settings are configured on this screen:

UAS Registrations

Configuring generation of outgoing calls (SIP INVITE sessions)

SIP tester acts like a stress call generator. It has a timer which triggers execution of CallXML script. A default pre-installed script generates a call to specified destination(s), plays WAV file and aborts call. The parameters are configured on this screen:

Outgoing calls
  • Call generation parameters
    • Create calls on timer - starts/stops generation of calls. When started, it resets position of CSV file readers.
    • Create single call button - is usually used to test the system with one call before a massive call load
    • Create [N] calls in burst mode - creates many calls in a short period of time (burst)
    • Start timer on schedule - enables starting test on schedule (for example at night).
    • Random/fixed interval between calls - selects mode and interval of timer. The SIP Tester uses random number generator with exponential or uniform probability distribution
    • Limit number of concurrent calls - is used to limit total number of incoming and/or outgoing concurrent calls. The timer does not trigger execution of script if total number of current calls exceeds this limit.
    • Limit total number of attempted calls - limits total number of calls to attempt during test
  • GUI representation of CallXML script
    • Make call via least busy UAC registration - uses UAC registration settings to make calls
    • Make call without registration to range of destinations makes calls to a random extension from range of numbers (SIP IDs) at same destination.
      siptester_screenshot_range_of_destinations
      If the range has same "from" and "to" numbers, the SIP call is sent to only one number
    • Make random calls without registration to list of destinations - allows you to enter a custom list of destinations at various servers. Every time a random item from this list is selected for a test call. This mode does not depend on UAC registration.
    • Make sequential calls without registration to list of destinations from CSV file - reads list of destinations from a CSV file. Format of CSV file is following:
      • Number
      • Host
      • Port
      • Authentication user (caller ID)
      • Authentication password
      • Transport: udp or tcp
      CSV fields separator is configured by setting "CsvDelimiter" (default ";")
      siptester_screenshot_csv_progress
    • Send SDP in INVITE - turns on/off sending of RTP session description in INVITE message. If both caller and called parties don't send SDP, SIP call will not initiate RTP stream. This can be used to test SIP signaling without RTP.
    • Forced codec, custom SDP attributes - specify parameters of RTP media session. G.711, G.723, G.729 and user-defined codecs are supported
    • Terminate calls if not answered - specifies timeout before answering (receiving 200 OK). If timeout expires, SIP Tester aborts a call by sending CANCEL.
    • Terminate calls after answering - specifies timeout after answering (receiving 200 OK). If timeout expires, SIP Tester aborts a call by sending BYE.
    • Record mix of RX and TX audio streams - turns on recording into PCMA WAV files. By default files are recorded into program's folder.
    • Play RTP audio from file - selects an audio file to play via RTP stream. WAV, MP3, PCAP formats are supported
    • Record audio streams - turns on recording of RTP streams into PCMA WAV files. RX, TX and mixed recording modes are available. Recordings are used to check audio quality of SIP call and for debugging.
    • Configure jitter buffer settings - shows Settings screen where you can configure parameters of simulated jitter buffer. By adjusting these parameters and checking quality of call you can find the optimal jitter buffer length for your VoIP system.
  • Text editor of CallXML script is used by advanced users who need complex test scenarios. Please refer CallXML documentation and example CallXML scripts to write your own script.
    CallXML editing

Configuring processing of incoming calls (SIP INVITE sessions)

The SIP Tester is able to receive multiple SIP calls and simulate IVR servers by executing CallXML script. A default pre-installed script makes a delay, accepts or rejects a call, plays a WAV file and aborts the call within specified period of time. The script is wrapped into user-friendly GUI which is configured is same way as script for outgoing calls

Incoming calls

Current calls report: SIP information

This screen displays SIP calls which are still in progress and which have been in progress recently. The screen dynamically updates itself so it is possible to monitor current status of test. Call-ID column shows SIP messages' trace which is also dynamically updated. Description of columns is here

Current calls - SIP

Current calls report: RTP information

This screen displays audio quality measurements for calls which are still in progress and which have been in progress recently. Description of columns is here

Current calls - RTP

Call Detail Record (CDR) report - current and completed calls

The CDR report screen displays completed and current calls. The CDR data can be exported to CSV file(s) and/or ODBC database (MSSQL, MySQL, PostgreSQL, MariaDB, etc). Each CDR record represents a single SIP call (not CallXML session). It is saved to report when call is disconnected and all parameters are measured. CDR fields' visibility is configurable. There is an optional "display filter" boolean expression field which allows you to search for specific SIP calls matching your criteria
SIP Tester CDR

Description of CDR fields and call audio quality indicators

  • Created - time of creating call (receiving/sending/detecting initial INVITE SIP packet).
    If winpcap is available, the timestamps are obtained from network adapter's timestamp. Otherwise they are obtained from system performance counter at time of processing SIP packets by CPU - a CPU processing delay is added
  • Answered - time of answering call (receiving/sending/detecting 200 OK response)
  • Destroyed - time of destroying call (receiving/sending/detecting BYE/CANCEL/error response)
  • Direction - "in" for incoming calls, "out" for outgoing calls
  • Caller Id - SIP ID in "From" header
  • Called Id - SIP ID in "To" header
  • Caller/Called IP - Source/destination IP address of initial SIP INVITE packet
  • Call-ID - unique identifier of SIP call, "Call-ID" header in SIP messages. Clicking on this column shows trace of SIP messages
  • Disconnection status code - indicates reason of destroying a call StarTrinity SIP Tester introduces a set of custom codes to indicate abnormal call termination:
    • 1408 (NoResponse) - receiving no response from destination to initial INVITE (request timeout)
    • 1409 (MaxConnectedTime) - call was terminated because of configured "max connected time" in CallXML script
    • 1410 (SessionTimerExpired) - RFC4028 timer expired
    • 1411 (CallMaxLifetime) - call was aborted because of global setting "MaxCallLifeTimeInHours"
    • 1580 (IdleMediaDetected) - call was aborted because of "idleMedia" event, when no RTP was received from remote side during "IdleMediaTimeToEndSession" seconds (see global settings)
    .
  • State - state of INVITE session:
    • Null - before INVITE is sent or received, e.g. when resolving host name or establishing TCP connection
    • Calling - after INVITE is sent
    • Incoming - after INVITE is received
    • Early - after response with To tag
    • Connecting - after 2xx is sent/received
    • Confirmed - after ACK is sent/received
    • Disconnected - when terminated
  • Released By - identifies party which ended a call: "caller" or "called"
  • Answer delay - time between sending INVITE request and receiving 200 OK response
  • 100 delay - time between sending INVITE request and receiving 100 (Trying) response
  • 180 delay - time between sending INVITE request and receiving 180 (Ringing) response
  • 183 delay - time between sending INVITE request and receiving 183 (Session Progress) response
  • 180/183 delay - time between sending INVITE request and receiving 180 (Ringing) or 183 (Session Progress) response. Can be used to measure signaling-based post-dial delay (PDD)
  • Audio signal delay - time between sending/receiving INVITE request and receiving RTP audio signal which is greater than -24dB (default value). In active mode SIP Tester analyses RTP audio data in real time and detects level of signal (dial tone or IVR announcement). It is used to measure post-dial delay (PDD) and detect calls which have large intervals of silence after dialing before connection.
  • Latest ringback tone (RBT) delay - time between receiving first RTP packet and the latest detected ringback tone in RTP audio stream. Can be used to detect false answer supervision (FAS): in case of FAS the latest ringback tone goes after 'answer' event (ringback tone after start of billing). Is turned on with 'DetectRingbackTone' setting
  • Early media peak signal level (dB) - Peak level of received RTP media stream signal, observed before answering of the call (200 OK). Is turned on with 'EnableSignalDetectorMaxLevelMeasurementsForCdrFields' setting
  • Active media peak signal level (dB) - Peak level of received RTP media stream signal, observed after answering of the call (200 OK). Is turned on with 'EnableSignalDetectorMaxLevelMeasurementsForCdrFields' setting
  • Answered duration - time between answering call (sending/receiving 200 OK) and destroying of call
  • RX recording - recorded WAV file with received RTP audio data. Is used to debug and to check audio quality
  • Mixed recording - recorded WAV file with mix of received and transmitted RTP audio data. Is used to debug and to check audio quality
  • CurrentCallsCount - average number of concurrent calls during call. Can be non-integer if number of concurrent calls is variable. Indicates level of stress and makes effect on audio quality.
  • CallsPerSecond - number of calls per second, measured during call. Indicates level of stress and makes effect on audio quality.
  • SipPcapFileName - path to .pcap file with captured SIP packets.
  • SipAndRtpPcapFileName - path to .pcap file with captured SIP and RTP packets.
  • RTP Stream - caller and called party IP endpoints (address and port) which are used for RTP transport. Arrows indicate direction of media flow.
  • Codec - media encoding method which was used in a call. Following codecs are supported: G.711, G.723, G.729, user-defined
  • Caller/Called SSRC - SSRC field for RTP stream coming from caller or called party
  • Caller/Called G107R - G.107 E-model R-factor measured using specified jitter buffer settings. Estimates listener's satisfaction level:
    • 90-100: very satisfied
    • 80-90: satisfied
    • 70-80: some users satisfied
    • 60-70: many users dissatisfied
    • 50-60: nearly all users dissatisfied
    • less than 50: not recommended
  • Caller/Called G107MOS - G.107 E-model mean opinion score (MOS) measured using specified jitter buffer settings. Estimates listener's satisfaction level:
    • 4.3-5.0: very satisfied
    • 4.0-4.3: satisfied
    • 3.6-4.0: some users satisfied
    • 3.1-3.6: many users dissatisfied
    • 2.6-3.1: nearly all users dissatisfied
    • 1.0-2.6: not recommended
  • Caller/Called RTP packets count - RTP packets count
  • Caller/Called lost packets - percentage of lost RTP packets, calculated from RTP SEQ field. Large values (above 3%) often indicate overloads in IP network. The packet loss value has direct impact on audio quality
  • Caller/Called max RFC3550 jitter - max value of RTP stream jitter per call, calculated according to RFC3550 standard like in wireshark. Indicates unstable delays in media flow. Large values (above 50ms = 0.05s) indicate overloads in IP network or media server's CPU. The RFC3550 jitter value has direct impact on audio quality.
  • Caller/Called mean RFC3550 jitter - mean value of RTP stream jitter per call, calculated according to RFC3550 standard like in wireshark. Indicates unstable delays in media flow. Large values (above 20ms = 0.02s) indicate overloads in IP network or media server's CPU. The RFC3550 jitter value has direct impact on audio quality.
  • Caller/Called min/max delta - min and max time between consecutive RTP packets. Indicates unstable delays in media flow. Large values (above 150ms = 0.15s) indicate overloads in IP network or media server's CPU. The RTP delta value has direct impact on audio quality.
  • Caller/Called max instant jitter - Same as RFC3550 jitter but not smoothed by low-pass filter. Equals to immediate deviation of packet time.
  • Caller/Called packet time - RTP packet time in milliseconds
  • Caller/Called non-silent duration - duration of non-silent RTP packets in audio stream
  • Caller/Called RTP delay - delay between intitial INVITE and first RTP packet, in milliseconds. Silent RTP packets are considered, not like in "Audio signal delay"
  • Caller/Called SDP-RTP delay - delay between SDP negotiation (183 or 200 response) and first RTP packet, in milliseconds. Silent RTP packets are considered, not like in "Audio signal delay"
  • Caller/Called DSCP - DSCP field value
  • RTCP RTT - IP network's round-trip delay measured by RTCP packets. The RTT is measured few times during a call, max. value is selected for this report
  • RTCP caller lost packets (%) - loss rate of RTP packets, which are generated by caller party. Is measured at called side. This indicator is transmitted inside RTCP packets
  • RTCP called lost packets (%) - loss rate of RTP packets, which are generated by called party. Is measured at caller side. This indicator is transmitted inside RTCP packets
  • RTCP caller max jitter (ms) - jitter of RTP packets, which are generated by caller party. Is measured at called side. The jitter is measured few times per call, max. value is selected.
  • RTCP called max jitter (ms) - jitter of RTP packets, which are generated by called party. Is measured at caller side. The jitter is measured few times per call, max. value is selected.
  • RTCP caller mean jitter (ms) - jitter of RTP packets, which are generated by caller party. Is measured at called side. The jitter is measured few times per call, mean (average) value is selected.
  • RTCP called mean jitter (ms) - jitter of RTP packets, which are generated by called party. Is measured at caller side. The jitter is measured few times per call, mean (average) value is selected.
  • RTP Rx discarded - number of discarded packets in received RTP stream: total, out-of-order (early/late RTP sequence number), erroneous (parser error), duplicate (overlapping, packets with same RTP sequence number)
  • Test ID - identifier for current test - date and time when the SIP Tester instance was started
  • Tenant ID - identifies tenant, used for Softswitch and for VoIP recording mode (with settings EnableMultiTenancy = 1, DetectAllSipCalls = 1). For passive monitoring mode is taken from "tenant" SIP header or from "To" SIP header

Caller CDR fields contain information about RTP stream which comes from call initiator (origination side). Called CDR fields contain information about RTP stream which comes from destination (termination side). For Caller fields measured at origination side it means self-checking of the software: it checks by winpcap libraries whether UDP packets are really transmitted using winsockets sendto() function.

The CDR data could be saved to your database via ODBC driver. Format of connection string is: Driver={SQL Server};Server=localhost\SQLEXPRESS;Database=TestCDR;Uid=xx;Pwd=yyy; Default name of table is "StarTrinitySipTesterCdrs", it is configurable in settings. If table does not exist or if a column is missing, the software automatically creates the table or inserts the missing column.

Lowest quality calls

This screen displays completed calls ordered by quality indicators, it has same fields as CDR report.

Lowest Quality Calls

Reports/Statistics

The screen displays
  • Summary statistics and quality indicators for all processed SIP calls. It is used to monitor results of stress test on a single screen
  • Number of concurrent calls (with history chart button)
  • Number of concurrent answered calls - current calls with "200 OK response to INVITE"
  • Recent calls per second - rate of attempted, received and detected SIP calls, averaged by 10-second lowpass filter
  • Number of answered calls - number of "200 OK" responses to initial INVITE requests
  • Min, average and max answered duration
  • Number of successfully completed calls - number of calls with "200 OK response to INVITE" and "BYE"
  • Number and rate of received (incoming) calls
  • Number and rate of attempted (outgoing) calls
  • Session establishment rate - ratio between number of answered calls and number of attempted calls. Is same as answer seizure ratio (ASR)
  • Number of failed outgoing calls, filtered by status code
  • SIP call quality indicators (G.107 MOS, RFC3550 jitter, RTP packets loss, response delays) with percentiles and history charts (see screenshot below)
  • Number of SIP (INVITE, 200 OK, BYE, CANCEL, etc) and RTP packets, number of retransmissions
  • History charts for most of indicators
  • Self-tested delay in media threads: it should be less than 10 milliseconds to achieve small TX RTP jitter. Large delays are caused by CPU overload.
  • Self-tested delay in signaling thread: it should be less than 200 milliseconds. Large delays are caused by CPU overload.
  • Self-tested delay in GUI thread. Large delays mean hanging of user interface; they are not critical for SIP and RTP processing.
  • Self-tested delay in audio verification threads. Large delays are not critical for SIP and RTP processing.
  • Some other indicators (see screenshot)
Reports/Statistics Reports/Statistics

Clicking chart button button for each quality indicator opens popup window with history and histogram chart of the indicator:

History chart and histogram for quality indicators The screen also contains a button "Save to HTML file", with option to save history charts. Here is example of exported HTML report. Reported DOM elements have unique IDs for additional HTML processing with javascript.
The statistics is resetable with a button; the reset is also possible in CallXML script: resetstatistics
Colors in Reports/Statistics
The "reports/statistics" screen displays measured indicators in different colors, from green (good) to red (bad). Here are values for green and red colors:
IndicatorGreen (good) valueRed (bad) valueYellow value
Packet loss0%1.5%
G.107 MOS3.81.0
G.107 R-factor755
Max RTP delta40ms290ms
Max RFC3550 jitter0ms50ms
Mean RFC3550 jitter0ms25ms
SDP-RTP delay0ms5000ms
100 response delay0ms5000ms
Answer delay0msN/A10000ms
-24dB delay0msN/A10000ms
RTCP RTT0ms500ms
Media threads delay0ms150ms
Signaling thread delay0ms5000ms
GUI thread delay0ms5000ms

Performance chart

Shows distribution of call quality and call load, demonstrates load capacity of VoIP system.

VoIP/SIP system performance chart

The points on chart represent each step in "stepwise testing". To generate the performance chart with the lines of percentiles you need to do this:

  • Go to "stepwise testing" tab, set parameters there
  • Click "start stepwise testing"
  • Open "performance chart" tab
  • Select X and Y axes
  • See the progress on chart

Stepwise testing

Executes stress test by automatic incrementing number of concurrent calls. Is used to discover dependency between call load and call quality

Stepwise testing

Manual tests

This screen is used to do some operations with current calls by clicking buttons manually.

Manual tests

Impairments generation

This screen is used to simulate SIP and RTP packet loss, RTP jitter, also simulate unexpected loss of connectivity or crash of SIP trunk by terminating SIP Tester.

Impairments generation
RTP jitter simulator works in this way: it simulates random "delays" (pauses) in the RTP thread, so there are gaps in RTP stream transmission. The delays are simulated with specified probability. The duration of the simulated delays is also random, it has linear distribution: max. introduced (simulated) delay is 2 times greater than the average simulated delay. The impairment generation parameters can be controled in CallXML script by setimpairmentparams element.

Settings

This screen is used to configure various settings and operation modes.

Settings

Log

This screen is used for detailed control of the program's execution. You can insert log elements in your CalXML script and monitor its execution in real time through the log. Show log files link opens a directory with log files. The files contain debugging information; by default error logs and GUI activity reports are sent to StarTrinity developers via encrypted channel. If you want to disable error reports, please set "DisableAnonymousReports" = "1" in settings tab.

Logs

License information

This screen displays information about license for current installation. For information about prices please contact sales manager by email.

License information

Command line interface (CLI)

The SIP tester has a command line interface which is available with StarTrinity.SIPTester.CLI.exe. This executable runs in command prompt, it has following parameters:
(if a parameter is not specified, it is taken from XML settings file)

  • TotalCalls (required for active mode when generating calls) - total number of outgoing calls to generate, or 'infinite'. After exceeding this number, SIP Tester waits for current calls to complete
  • TotalIncomingCalls (optional) - total number of calls to receive before exiting. After exceeding this number, SIP Tester waits for current calls to complete
  • MaxCurrentCalls (optional) - max number of concurrent calls
  • MaxCurrentCallsLimitMode (optional) - mode to limit max number of concurrent calls: 'incoming+outgoing' (default), 'outgoing', 'incoming'
  • MaxTestDurationSec (optional) - max duration of test in seconds. If the "MaxTestDurationSec" is set, SIP Tester waits for all current calls to complete before exiting. Warning: please limit call duration by "maxansweredtime" to avoid hang calls
  • IncomingCallsExitTimeoutSec (optional) - max time between incoming calls to stop test. Is used when you expect incoming calls to arrive during the test. If the "IncomingCallsExitTimeout" fires, SIP Tester waits for current calls to complete and exits with status -1
  • OutgoingCallsPeriodMs (optional) - interval between simulated calls in milliseconds
  • NumberOfCallsPerBurst (optional, default is 1) - number of calls to generate per burst (tick)
  • OutgoingCallsMode (optional) - mode of interval between simulated calls: fixed or random
  • OutgoingCallXmlFile (optional) - CallXML file name to generate outgoing calls. If not specified, it uses previously saved CallXML script from settings
  • IncomingCallXmlFile (optional) - CallXML file name to process incoming calls. If not specified, it uses previously saved CallXML script from settings
  • IncomingCallsOnly (optional) - if 'true', SIP Tester will only receive incoming calls and not generate outgoing calls. Default is 'false' (outgoing calls are generated)
  • EnableCallMeasurements (optional) - if 'false', SIP Tester will not measure call quality parameters and will not generate CDRs. It can be used to reduce CPU load. Default is 'true'
  • LogLevel (optional) - level of details in system file log: Error, Warning, Info, Debug, Trace
  • OperationMode (optional) - 'active' or 'passive'
  • PcapFileName - pcap file name to process (in passive mode)
  • SaveSipPacketsToDisk (optional) - 'true' or 'false'
  • SaveSipAndRtpPacketsToDisk (optional) - 'true' or 'false'
  • HtmlReportFile (optional) - HTML report file name to save after completion of the test
  • JsonReportFile (optional) - HTML report file name to save after completion of the test
  • RetryToOpenLocalSipPort (optional) - 'true' or 'false', default 'true' - wait if another program already uses SIP port, keep on trying to open it
  • SettingsFile (optional) - full path to settings XML file
  • UacRegistrationsCsvFile (optional) - full path to CSV file with UAC registrations, file format is same as exported at "UAC registrations" GUI tab
  • TestId (optional) - custom value for "Test_ID" CDR column
  • MyVariable (optional) - any undefined parameter given as a variable/value pair passed on the command line will be passed to the CallXML script as a variable
Example#1: StarTrinity.SIPTester.CLI.exe TotalCalls 1 MaxCurrentCalls 1 OutgoingCallXmlFile "c:\test.xml"
Example#2: StarTrinity.SIPTester.CLI.exe StarTrinity.SIPTester.CLI.exe IncomingCallsOnly true TotalIncomingCalls 10 IncomingCallsExitTimeoutSec 30 IncomingCallXmlFile "c:\incoming.xml"
Example#3: StarTrinity.SIPTester.CLI.exe OperationMode passive SaveSipAndRtpPacketsToDisk true SaveSipPacketsToDisk true

An example of using CLI to create automated functional VoIP test is here.

Web API methods

The software has a HTTP-based application programming interface (API). Main methods are described here:
  • GET /API/MainViewModel/Cdr/ClearMemory - clears calls in CDR memory
  • GET /API/MainViewModel/Cdr/GetCallsJSON - returns all (or most recent "maxCount") calls from CDR memory in JSON format, sorted from newest to oldest. Please consider setting "MaxMemoryCallsCount". The request may contain multiple parameters to filter calls by CDR columns.
    Parameters:
    • maxCount - max number of returned calls. Example: /API/MainViewModel/Cdr/GetCallsJSON?maxCount=XXX
    • latestFirst (true/false, default false) - sort direction of returned calls. Example: /API/MainViewModel/Cdr/GetCallsJSON?maxCount=XXX&latestFirst=true
    • includeSipTrace (true/false, default false) - specifies whether you want to get SIP trace of the calls. Note: the SIP trace of old calls is erased, increase global setting "MaxMemoryCdrCallsCount" if you want to get SIP trace for old calls
    • includeSipTraceAsHtml (true/false, default false) - specifies whether you want to get SIP trace of the calls in HTML format. Note: the SIP trace of old calls is erased, increase global setting "MaxMemoryCdrCallsCount" if you want to get SIP trace for old calls
    • all other parameters - CDR column names and values, used to filter returned calls. Examples:
      • /API/MainViewModel/Cdr/GetCallsJSON?SIP%20CallID=sadasd2345fsrtwrt
      • /API/MainViewModel/Cdr/GetCallsJSON?CallerID=123456789
      • /API/MainViewModel/Cdr/GetCallsJSON?CalledID=789456123&CallerID=123456789
      • /API/MainViewModel/Cdr/GetCallsJSON?MyCustomCdrColumn1=test_failed
  • GET /API/MainViewModel/ClearCache - resets cached data: included XML files, read CSV files, audio files, read database records (with "readdb" CallXML element)
  • GET /API/MainViewModel/CreateCall?url=http%3A%2F%2Fyour_server%2Fget_script.aspx&user=usr&password=pass - downloads CallXML script from your web server with specified auth. user and password, creates an outgoing call with the downloaded script
  • POST /API/MainViewModel/CreateCall_Post - creates an outgoing call with the uploaded script. Returns Call-ID SIP header of the created SIP call or sent REGISTER request, and results from script in JSON format: {'status': 'OK', 'sipCallId': 'the_new_call_id', 'webApiResults': [ [ 'result1_url_encoded', 'value1_url_encoded' ], [ 'result2_url_encoded', 'value2_url_encoded' ], ] }. The returned results could be used to pass result of the test to caller side - see CallXML element setwebapiresult. URL query parameters:
    • waitforexit ("true"/"false", default: "false") - specifies need to wait for completion of entire CallXML script before sending response to the web API method
    • scriptExecutionTimeoutS (default: "50") - specifies CallXML script execution timeout, in seconds
    • Other parameters into CallXML variables

    CURL example 1: curl http://X.X.X.X:19019/API/MainViewModel/CreateCall_Post?var1=val1&var2=val2 -uadmin:admin --digest -X POST -d "@my_file.xml" -H "Content-Type: text/plain;charset=UTF-8" -H "Referer: http://X.X.X.X:19019/"

    CURL example 2:
    curl http://a.b.c.d:19019/API/MainViewModel/CreateCall_Post -uadmin:XYZ --digest -X POST --data-binary "@yyy.xml" -H "Content-Type:text/plain;charset=UTF-8" -H "Referer: http://X.X.X.X:19019/"
    content of the xml script file:
    <callxml>
    <block>
    <sendsipmessage>
    <![CDATA[
    SUBSCRIBE sip:blf_subscribee00001@y.y.y.y:5062 SIP/2.0
    Via: SIP/2.0/UDP x.x.x.x:5070;branch=z9hG4bK13054182
    From: blf_subscriber00001 <sip:blf_subscriber00001@x.x.x.x:5070>;tag=1641318497
    To: <sip:blf_subscribee00001@y.y.y.y:5062>
    Call-ID: 0_2505407707_bogus
    CSeq: 1 SUBSCRIBE
    Contact: <sip:blf_subscriber00001@x.x.x.x:5070>
    Accept: application/reginfo+xml
    Max-Forwards: 70
    User-Agent: Yealink SIP-T21P_E2 52.80.0.95
    Expires: 300
    Event: dialog
    Content-Length: 0

    ]]>
    </sendsipmessage>
    <exit/>
    </block>
    </callxml>
    Example of calling web API in HTML using AJAX: Click-To-Call HTML button
  • POST /API/MainViewModel/CreateCalls_Post - starts call generator specific to the API request, generates multiple outgoing calls using uploaded script. Returns Call-ID SIP header of the first created SIP call in JSON format: {'status': 'OK', 'sipCallId': 'the_new_call_id'}. URL query parameters are: maxCPS, intervalMs, intervalMsL, intervalMsH, maxConcurrentCalls, maxCallsToAttempt, callsPerTick. Other URL query parameters are passed into CallXML variables. The API method passes variable 'apiSequenceNumber' into the scripts, it means zero-based counter of executed scripts.
    CURL example: curl http://X.X.X.X:19019/API/MainViewModel/CreateCalls_Post?maxCPS=5&maxConcurrentCalls=100&maxCallsToAttempt=1000&var1=val1&var2=val2 -uadmin:admin --digest -X POST -d "@my_file.xml" -H "Content-Type:text/plain;charset=UTF-8"
  • GET /API/MainViewModel/CreateSingleCallCommand - creates an outgoing call using currently pre-configured script
  • GET /API/MainViewModel/CurrentCallExists?callerId=XXX&calledId=YYY - checks existence of current call, returns 'true' or 'false'
  • GET /API/MainViewModel/DestroyCall?[sipCallId=XXX][&calledId=YYYY][&calledIdSuffix=ZZZZ] - destroys current SIP call(s) with specified parameters:
    • sipCallId - SIP Call-ID header of the destroyed call(s)
    • calledId - CLD (B number) of the destroyed call(s)
    • calledIdSuffix - CLD (B number) suffix of the destroyed call(s) - this parameter omits tech. prefix
  • GET /DownloadRecordedFile?sipCallId=xxxx&fileId=mixed - downloads recorded WAV or PCAP file from a specific call Parameters:
    • sipCallId - Call-ID header of the SIP call, used to identify the SIP call
    • fileId (rx/tx/mixed) - type of recorded audio file. For audio wav files: "rx" - received RTP audio stream, "tx" - transmitted RTP audio stream, "mixed" - mix or received and transmitted RTP audio streams. For PCAP files: "pcap_sip" - PCAP file with only SIP packets, "pcap_sip_rtp" - PCAP file with both SIP and RTP packets.
  • GET /API/MainViewModel/CallXmlLogMessagesJSON - returns CallXML log messages in JSON format
  • GET /API/MainViewModel/GetCounters - returns counters from "reports/statistics" in JSON format:
    {
    "machine_name": "DEVPC2",
    "ip_addresses": "192.168.10.4;192.168.56.1;192.168.10.24",
    "continuous_time_UTC": "2019-07-24 07:17:21.973",
    "system_time_UTC": "2019-07-24 07:17:21.973",
    "uptime": "0d 0h 0m 24s",
    "remote_sip_ua_header": "",
    "remote_server_header": "StarTrinity.SIP 2019-05-20 19.43 UTC",
    "latest_cli": "100",
    "latest_cld": "100",
    "measurement_started": "2019-07-24 10:16:57.828",
    "measurement_duration_s": "24.14475",
    "operation_mode": "Active - generation and receiving SIP calls",
    "lightweight_media_processing": "false",
    "cdr_memory_calls_count": "10",
    "consumed_memory": "299MB",
    "free_disk_space": "19098MB",
    "system_cpu_load": "10%",
    "performance_limitation_warning": "",
    "disk_space_warning": "",
    "current_calls_count": "0",
    "current_calls_count_minmaxavg": "min = 0,00; average = 1,15; max = 10,00",
    "received_calls_count": "0",
    "total_average_received_cps": "",
    "total_average_attempted_cps": "5,37 (10calls/1,9s)",
    "recent_cps": "0.254809334833395",
    "attempted_calls_count": "10",
    "session_establishment_rate": "100,00% (10/10)",
    "failed_outgoing_calls_count": "0,00% (0/10)",
    "failed_outgoing_calls_count_408": "0,00% (0/10)",
    "failed_outgoing_calls_count_486": "0,00% (0/10)",
    "failed_outgoing_calls_count_487": "0,00% (0/10)",
    "answered_calls_count": "10",
    "successfully_completed_calls": "10",
    "answered_duration_min": "0.3402",
    "call_generator_parameters":
    { "min_interval_between_calls_ms": 236.990314410409,
    "max_interval_between_calls_ms": 236.990314410409,
    "max_cps": 4.21958172631581,
    "max_concurrent_calls": 100
    },
    "Caller_lost_packets_(%)": {
     "number_of_measurements": 10,
     "min": "0",
     "average": "0",
     "max": "0",
     "percentile_90": "0",
     "percentile_95": "0",
     "percentile_98": "0",
     "percentile_99": "0",
     "percentile_995": "0",
     "percentile_998": "0",
     "percentile_999": "0",
     "percentile_9995": "0",
     "percentile_9998": "0",
     "percentile_9999": "0"
    },
    "Caller_G.107_MOS": {
     "number_of_measurements": 10,
     "min": "4.409286",
     "average": "4.409286",
     "max": "4.409286",
     "percentile_90": "4.409286",
     "percentile_95": "4.409286",
     "percentile_98": "4.409286",
     "percentile_99": "4.409286",
     "percentile_995": "4.409286",
     "percentile_998": "4.409286",
     "percentile_999": "4.409286",
     "percentile_9995": "4.409286",
     "percentile_9998": "4.409286",
     "percentile_9999": "4.409286"
    },
    "Caller_G.107_R-factor": {
     "number_of_measurements": 10,
     "min": "93.2",
     "average": "93.2",
     "max": "93.2",
     "percentile_90": "93.2",
     "percentile_95": "93.2",
     "percentile_98": "93.2",
     "percentile_99": "93.2",
     "percentile_995": "93.2",
     "percentile_998": "93.2",
     "percentile_999": "93.2",
     "percentile_9995": "93.2",
     "percentile_9998": "93.2",
     "percentile_9999": "93.2"
    },
    "Caller_max_delta_(ms)": {
     "number_of_measurements": 10,
     "min": "33.366",
     "average": "35.6571",
     "max": "53.456",
     "percentile_90": "33.896",
     "percentile_95": "53.456",
     "percentile_98": "53.456",
     "percentile_99": "53.456",
     "percentile_995": "53.456",
     "percentile_998": "53.456",
     "percentile_999": "53.456",
     "percentile_9995": "53.456",
     "percentile_9998": "53.456",
     "percentile_9999": "53.456"
    },
    "Caller_max_RFC3550_jitter_(ms)": {
     "number_of_measurements": 10,
     "min": "3.012435",
     "average": "3.40579",
     "max": "6.330041",
     "percentile_90": "3.131841",
     "percentile_95": "6.330041",
     "percentile_98": "6.330041",
     "percentile_99": "6.330041",
     "percentile_995": "6.330041",
     "percentile_998": "6.330041",
     "percentile_999": "6.330041",
     "percentile_9995": "6.330041",
     "percentile_9998": "6.330041",
     "percentile_9999": "6.330041"
    },
    "Caller_mean_RFC3550_jitter_(ms)": {
     "number_of_measurements": 10,
     "min": "0.3007447",
     "average": "0.6016561",
     "max": "0.759788",
     "percentile_90": "0.7479023",
     "percentile_95": "0.759788",
     "percentile_98": "0.759788",
     "percentile_99": "0.759788",
     "percentile_995": "0.759788",
     "percentile_998": "0.759788",
     "percentile_999": "0.759788",
     "percentile_9995": "0.759788",
     "percentile_9998": "0.759788",
     "percentile_9999": "0.759788"
    },
    "Caller_SDP-RTP_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "16",
     "average": "19.8",
     "max": "25",
     "percentile_90": "24",
     "percentile_95": "25",
     "percentile_98": "25",
     "percentile_99": "25",
     "percentile_995": "25",
     "percentile_998": "25",
     "percentile_999": "25",
     "percentile_9995": "25",
     "percentile_9998": "25",
     "percentile_9999": "25"
    },
    "Called_lost_packets_(%)": {
     "number_of_measurements": 10,
     "min": "48",
     "average": "55.42799",
     "max": "61.38614",
     "percentile_90": "59.40594",
     "percentile_95": "61.38614",
     "percentile_98": "61.38614",
     "percentile_99": "61.38614",
     "percentile_995": "61.38614",
     "percentile_998": "61.38614",
     "percentile_999": "61.38614",
     "percentile_9995": "61.38614",
     "percentile_9998": "61.38614",
     "percentile_9999": "61.38614"
    },
    "Called_G.107_MOS": {
     "number_of_measurements": 10,
     "min": "1",
     "average": "2.090558",
     "max": "4.148836",
     "percentile_90": "1",
     "percentile_95": "1",
     "percentile_98": "1",
     "percentile_99": "1",
     "percentile_995": "1",
     "percentile_998": "1",
     "percentile_999": "1",
     "percentile_9995": "1",
     "percentile_9998": "1",
     "percentile_9999": "1"
    },
    "Called_G.107_R-factor": {
     "number_of_measurements": 10,
     "min": "0",
     "average": "33.32751",
     "max": "83.49097",
     "percentile_90": "0",
     "percentile_95": "0",
     "percentile_98": "0",
     "percentile_99": "0",
     "percentile_995": "0",
     "percentile_998": "0",
     "percentile_999": "0",
     "percentile_9995": "0",
     "percentile_9998": "0",
     "percentile_9999": "0"
    },
    "Called_max_delta_(ms)": {
     "number_of_measurements": 10,
     "min": "109.634",
     "average": "170.2073",
     "max": "203.246",
     "percentile_90": "203.069",
     "percentile_95": "203.246",
     "percentile_98": "203.246",
     "percentile_99": "203.246",
     "percentile_995": "203.246",
     "percentile_998": "203.246",
     "percentile_999": "203.246",
     "percentile_9995": "203.246",
     "percentile_9998": "203.246",
     "percentile_9999": "203.246"
    },
    "Called_max_RFC3550_jitter_(ms)": {
     "number_of_measurements": 10,
     "min": "5.177113",
     "average": "6.136254",
     "max": "7.119526",
     "percentile_90": "6.596635",
     "percentile_95": "7.119526",
     "percentile_98": "7.119526",
     "percentile_99": "7.119526",
     "percentile_995": "7.119526",
     "percentile_998": "7.119526",
     "percentile_999": "7.119526",
     "percentile_9995": "7.119526",
     "percentile_9998": "7.119526",
     "percentile_9999": "7.119526"
    },
    "Called_mean_RFC3550_jitter_(ms)": {
     "number_of_measurements": 10,
     "min": "3.662124",
     "average": "4.371194",
     "max": "4.971365",
     "percentile_90": "4.719366",
     "percentile_95": "4.971365",
     "percentile_98": "4.971365",
     "percentile_99": "4.971365",
     "percentile_995": "4.971365",
     "percentile_998": "4.971365",
     "percentile_999": "4.971365",
     "percentile_9995": "4.971365",
     "percentile_9998": "4.971365",
     "percentile_9999": "4.971365"
    },
    "Called_SDP-RTP_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "-1",
     "average": "31.4",
     "max": "82",
     "percentile_90": "47",
     "percentile_95": "82",
     "percentile_98": "82",
     "percentile_99": "82",
     "percentile_995": "82",
     "percentile_998": "82",
     "percentile_999": "82",
     "percentile_9995": "82",
     "percentile_9998": "82",
     "percentile_9999": "82"
    },
    "100_response_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "1",
     "average": "1",
     "max": "1",
     "percentile_90": "1",
     "percentile_95": "1",
     "percentile_98": "1",
     "percentile_99": "1",
     "percentile_995": "1",
     "percentile_998": "1",
     "percentile_999": "1",
     "percentile_9995": "1",
     "percentile_9998": "1",
     "percentile_9999": "1"
    },
    "Answer_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "19",
     "average": "24.7",
     "max": "33",
     "percentile_90": "30",
     "percentile_95": "33",
     "percentile_98": "33",
     "percentile_99": "33",
     "percentile_995": "33",
     "percentile_998": "33",
     "percentile_999": "33",
     "percentile_9995": "33",
     "percentile_9998": "33",
     "percentile_9999": "33"
    },
    "-24dB_delay_(ms)": {
     "number_of_measurements": 0,
     "min": "",
     "average": "",
     "max": "",
     "percentile_90": "",
     "percentile_95": "",
     "percentile_98": "",
     "percentile_99": "",
     "percentile_995": "",
     "percentile_998": "",
     "percentile_999": "",
     "percentile_9995": "",
     "percentile_9998": "",
     "percentile_9999": ""
    },
    "RTCP_RTT_(ms)": {
     "number_of_measurements": 10,
     "min": "0.564",
     "average": "1.0051",
     "max": "1.663",
     "percentile_90": "1.403",
     "percentile_95": "1.663",
     "percentile_98": "1.663",
     "percentile_99": "1.663",
     "percentile_995": "1.663",
     "percentile_998": "1.663",
     "percentile_999": "1.663",
     "percentile_9995": "1.663",
     "percentile_9998": "1.663",
     "percentile_9999": "1.663"
    },
    "RTCP_caller_lost_packets_(%)": {
     "number_of_measurements": 10,
     "min": "0",
     "average": "0",
     "max": "0",
     "percentile_90": "0",
     "percentile_95": "0",
     "percentile_98": "0",
     "percentile_99": "0",
     "percentile_995": "0",
     "percentile_998": "0",
     "percentile_999": "0",
     "percentile_9995": "0",
     "percentile_9998": "0",
     "percentile_9999": "0"
    },
    "RTCP_caller_max_jitter_(ms)": {
     "number_of_measurements": 10,
     "min": "0.125",
     "average": "1.1125",
     "max": "2.875",
     "percentile_90": "2.375",
     "percentile_95": "2.875",
     "percentile_98": "2.875",
     "percentile_99": "2.875",
     "percentile_995": "2.875",
     "percentile_998": "2.875",
     "percentile_999": "2.875",
     "percentile_9995": "2.875",
     "percentile_9998": "2.875",
     "percentile_9999": "2.875"
    },
    "RTCP_called_lost_packets_(%)": {
     "number_of_measurements": 10,
     "min": "88.46154",
     "average": "97.14388",
     "max": "100",
     "percentile_90": "100",
     "percentile_95": "100",
     "percentile_98": "100",
     "percentile_99": "100",
     "percentile_995": "100",
     "percentile_998": "100",
     "percentile_999": "100",
     "percentile_9995": "100",
     "percentile_9998": "100",
     "percentile_9999": "100"
    },
    "RTCP_called_max_jitter_(ms)": {
     "number_of_measurements": 10,
     "min": "1.343",
     "average": "3.1782",
     "max": "5.046",
     "percentile_90": "4.593",
     "percentile_95": "5.046",
     "percentile_98": "5.046",
     "percentile_99": "5.046",
     "percentile_995": "5.046",
     "percentile_998": "5.046",
     "percentile_999": "5.046",
     "percentile_9995": "5.046",
     "percentile_9998": "5.046",
     "percentile_9999": "5.046"
    },
    "Current_calls_count": {
     "number_of_measurements": 26,
     "min": "0",
     "average": "1.153846",
     "max": "10",
     "percentile_90": "6",
     "percentile_95": "8",
     "percentile_98": "10",
     "percentile_99": "10",
     "percentile_995": "10",
     "percentile_998": "10",
     "percentile_999": "10",
     "percentile_9995": "10",
     "percentile_9998": "10",
     "percentile_9999": "10"
    },
    "Average_calls_per_second": {
     "number_of_measurements": 26,
     "min": "0",
     "average": "0.4006466",
     "max": "0.8890687",
     "percentile_90": "0.7608594",
     "percentile_95": "0.8413475",
     "percentile_98": "0.8890687",
     "percentile_99": "0.8890687",
     "percentile_995": "0.8890687",
     "percentile_998": "0.8890687",
     "percentile_999": "0.8890687",
     "percentile_9995": "0.8890687",
     "percentile_9998": "0.8890687",
     "percentile_9999": "0.8890687"
    },
    "Media_threads_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "22.75644",
     "average": "25.12873",
     "max": "27.1109",
     "percentile_90": "27.1109",
     "percentile_95": "27.1109",
     "percentile_98": "27.1109",
     "percentile_99": "27.1109",
     "percentile_995": "27.1109",
     "percentile_998": "27.1109",
     "percentile_999": "27.1109",
     "percentile_9995": "27.1109",
     "percentile_9998": "27.1109",
     "percentile_9999": "27.1109"
    },
    "Signaling_thread_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "0.0036",
     "average": "0.0725",
     "max": "0.636",
     "percentile_90": "0.0449",
     "percentile_95": "0.636",
     "percentile_98": "0.636",
     "percentile_99": "0.636",
     "percentile_995": "0.636",
     "percentile_998": "0.636",
     "percentile_999": "0.636",
     "percentile_9995": "0.636",
     "percentile_9998": "0.636",
     "percentile_9999": "0.636"
    },
    "GUI_thread_delay_(ms)": {
     "number_of_measurements": 10,
     "min": "28.2741",
     "average": "44.18216",
     "max": "51.4063",
     "percentile_90": "51.4063",
     "percentile_95": "51.4063",
     "percentile_98": "51.4063",
     "percentile_99": "51.4063",
     "percentile_995": "51.4063",
     "percentile_998": "51.4063",
     "percentile_999": "51.4063",
     "percentile_9995": "51.4063",
     "percentile_9998": "51.4063",
     "percentile_9999": "51.4063"
    },
     "packet_analyser_statistics":
    {"status": "on",
     "total_packets_dropped": "0",
     "total_packets_captured": "1842",
     "processing_delay": "0,0ms",
     "sip_and_rtp_packets_captured": "1651",
     "rtp_packets_captured": "1591",
     "sip_packets_captured": "60",
     "invite": "10",
     "invite_retrans": "0",
     "invite_retrans_callId": "",
     "reinvite": "0",
     "invite_100": "10",
     "invite_180": "0",
     "invite_183": "0",
     "invite_err": "0",
     "invite_200": "10",
     "bye": "10",
     "bye_retrans": "0",
     "bye_retrans_callid": "",
     "bye_200": "10",
     "cancel": "0",
     "cancel_retrans": "0",
     "cancel_200": "0",
     "ack": "10"
    }
    }
  • GET /API/MainViewModel/GetCurrentCallsJSON - returns all current (live, not destroyed) calls in JSON format. The request may contain multiple parameters to filter calls by CDR columns.
    Parameters:
    • includeSipTrace (true/false, default false) - specifies whether you want to get SIP trace of the calls
    • includeSipTraceAsHtml (true/false, default false) - specifies whether you want to get SIP trace of the calls in HTML format
    • all other parameters - CDR column names and values, used to filter returned calls. Examples:
      • /API/MainViewModel/GetCurrentCallsJSON?SIP%20CallID=sadasd2345fsrtwrt
      • /API/MainViewModel/GetCurrentCallsJSON?CallerID=123456789
      • /API/MainViewModel/GetCurrentCallsJSON?CalledID=789456123&CallerID=123456789
      • /API/MainViewModel/GetCurrentCallsJSON?MyCustomCdrColumnTestType=testTypeA
      • /API/MainViewModel/GetCurrentCallsJSON?MyCustomCdrColumnTestType=testTypeA&includeSipTrace=true
      • /API/MainViewModel/GetCurrentCallsJSON?MyCustomCdrColumnTestType=testTypeA&includeSipTraceAsHtml=true
  • GET /API/MainViewModel/GetCurrentCallsCount?optionalCallXmlVariable1=XXX&optionalCallXmlVariable2=YYY - returns number of current calls, optionally filtered by CallXML variables
  • GET /API/MainViewModel/GetMovingAverageValue?id=XXX - returns moving average (MA) value for MA calculator with id = "XXX". See CallXML elements "movingaverageput", "movingaverageset", "movingaverageget"
  • GET /API/MainViewModel/GetVersion - returns software version information - compilation time (UTC)
  • GET /API/MainViewModel/ResetCounters - resets counters in "reports/statistics"
  • GET /API/MainViewModel/SendCallxmlEvent?eventId=XXX[&SIP%20CallID=XXX&CallerId=XXX&CalledId=XXX&columnA=XXX&columnB=YYY] - sends external CallXML event to current calls with specified event ID. The calls are optionally filtered by CDR column value filters. Does same thing as sendevent CallXML element
  • GET /API/MainViewModel/SetCallXmlVariables?callerId=XXX&calledId=YYY&direction=ZZZ&var1=value1&var2=value2 - sets CallXML variables for current SIP call, returns 'true' if call was found or 'false' if call was not found. The direction parameter of URL query is optional, it can be "in" or "out"
  • GET /API/MainViewModel/SetCdrFields?sipCallId=XXX&field1=value1&field2=value2 - sets CDR fields for current (live) SIP call
  • POST /API/MainViewModel/SetScriptForIncomingCalls - configures CallXML script for incoming SIP calls
  • POST /API/MainViewModel/SetScriptForOutgoingCalls - configures CallXML script for outgoing SIP calls
  • GET /API/MainViewModel/StartCreatingCallsOnTimer - starts call generator
  • POST /API/MainViewModel/StartScript - starts execution of the uploaded script. Returns control before completion of the script
  • GET /API/MainViewModel/StopCreatingCallsOnTimer - stops call generator
  • POST /API/MainViewModel/UploadNumberList?id=xyz.txt - uploads new numbers into number list with ID = xyz.txt, one number per line in HTTP POST body. The uploaded numbers can be used with "readnumberlist" CallXML element. Uploaded numbers are stored in .TXT files in program folder
  • GET /API/MainViewModel/Updater/StartUpdate - starts to update software version
UAC registrations
  • POST /API/MainViewModel/CreateUacRegistration - creates a new UAC registration from POST request body in JSON format. Example of POST request body:
    {
    "User": "test2",
    "Host": "startrinity.com",
    "Port": "6060",
    "Transport": "UDP",
    "ProxyHost": "",
    "ProxyPort": "5060",
    "AuthUser": "test2",
    "AuthPassword": "123456",
    "Expires": "3600",
    "SendInterval": "",
    "UseAsCaller": "True",
    "UseAsCalled": "True",
    "SingleChannel": "True",
    "Enable": "True",
    "UseOnlyForCalls_DontRegister": "False",
    "LocalSipPort": "",
    "LocalIpAddress": "",
    "ContactHeaderFormat": "sip:[userId]@[localIp]:[localPort]",
    "HostForCalls": "",
    "PortForCalls": "5060",
    "CustomSipCallId": ""
    }
  • GET /API/MainViewModel/DestroyUacRegistration - destroys one or multiple UAC registrations based on criteria specified in parameters:
    • user - User ID of UAC registration to destroy
  • GET /API/MainViewModel/UacRegistrationsJSON - returns UAC registrations ("PBX extensions" when SIP Tester sends REGISTER to the PBX) in JSON format. The request may contain multiple parameters to filter the UAC registrations.
    Parameters:
    • includeSipTrace (true/false, default false) - specifies whether you want to get SIP trace of the UAC registrations
    • user - User ID of a specific UAC registration. Examples:
      • /API/MainViewModel/UacRegistrationsJSON?includeSipTrace=true
      • /API/MainViewModel/UacRegistrationsJSON?user=100&includeSipTrace=true
  • POST /API/MainViewModel/UpdateUacRegistration - updates/edits an existing UAC registration from POST request body in JSON format (same as /API/MainViewModel/CreateUacRegistration).
    Parameters:
    • user - User ID of the edited UAC registration
    • host - Server host of the edited UAC registration
    • port - Server port of the edited UAC registration
Jobs
The SIP Tester is able to execute multiple concurrent tasks ("jobs", "independent call generators"), every job with its own CallXML script and call generation schedule (periodic timer settings). The jobs are accessible via API and SIP Tester's web UI.
  • POST /API/MainViewModel/Jobs/CreateAndStart - creates a new job and starts it.
    Parameters:
    • POST body - CallXML script to be executed by job
    • JobGuid - GUID to identify the new job, must be unique
    • Name (optional) - optional display name for the job
    • MaxExecutionsCountPerSecond (optional) - number of times to execute job's CallXML script per second, typically same as number of calls per second, if script generates one SIP call
    • MaxTotalExecutionsCount (optional) - total number of times to execute job's CallXML script, typically same as total number of calls, if script generates one SIP call
    • MaxConcurrentExecutionsCount (optional) - max. number of concurrent CallXML sessions for the job. If job creates SIP calls, it is same as number of concurrent SIP calls for the job
  • GET /API/MainViewModel/Jobs/Delete - stops and deletes an existing job.
    Parameters:
    • JobGuid - identifier of the job
  • GET /API/MainViewModel/Jobs/Pause - pauses an existing job, does not delete it. Is used when you need to pause call generation.
    Parameters:
    • JobGuid - identifier of the job
  • GET /API/MainViewModel/Jobs/Resume - resumes an existing job.
    Parameters:
    • JobGuid - identifier of the job
  • GET /API/MainViewModel/Jobs/GetCallXmlLog - returns CallXML log of the job in JSON format. CallXML log is written by "log" element; the logging is used to understand what happens in your CallXML script.
    Parameters:
    • JobGuid - identifier of the job
  • GET /API/MainViewModel/Jobs/GetAllCurrentCalls - returns current SIP calls (active, not completed yet) of the job, in JSON format.
    Parameters:
    • JobGuid - identifier of the job
  • GET /API/MainViewModel/Jobs/GetCallsHistory - returns completed SIP calls of the job (CDR, call history), in JSON format.
    Parameters:
    • JobGuid - identifier of the job
    • MaxCount (optional, default is 1000) - max. number of calls to return in result
For testing and troubleshooting of the API please use our HTTP tester tool. The API methods by default require authentication - you need to use same credentials as in web UI. To turn off authentication, you can add your IP address into whitelist using setting "WebApiTrustedIpAddresses".
There are more undocumented methods available, you can see them in Fiddler when using the web interface. Please let us know if you need some new API method

Screen recordings

StarTrinity SIP Tester training sessions
Training session #1

Training session #2

Training session #3

Training session #4

Training session #5

Training session #6


8000-channel testing: setup, operation

8000-channel testing: stepwise testing

Demo presentation - IVR audio verification, network tester

CallXML script development - REGISTER and INVITE

Recorded talk about VoIP QA with Zeeshan: about VoIP Software Quality Assurance (QA), StarTrinity Softswitch, SIP Tester. SIP load testing (stress testing), audio quality tests. How we develop VoIP software and test it. How we test audio quality. What we don't like in marketing. What we don't like in Linux and C++

Copyright 2011-2024 StarTrinity.com | Blog | Contact lead developer via LinkedIn |