WEB API: Difference between revisions
No edit summary |
|||
(76 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
= Custom Login = | = Custom Login = | ||
== LDAP example == | |||
You can find complete LDAP example in GUI directory under scripts/ldap_custom_login_example.php | |||
== custom script == | |||
Custom login allows to implement your own login mechanism. You need to create file scripts/custom_login.php and function custom_login | Custom login allows to implement your own login mechanism. You need to create file scripts/custom_login.php and function custom_login | ||
custom login script: /scripts/custom_login.php | custom login script place in: <GUI_INSTALL_DIR>./scripts/custom_login.php | ||
<?php | <?php | ||
Line 12: | Line 18: | ||
'username' => $user, | 'username' => $user, | ||
'is_admin' => false, | 'is_admin' => false, | ||
'id' => $userIdUniqueNum, // required numeric unique identifier for each user | |||
// 'id_group' => 1, // you can set user rights with the gui's group id too | |||
'enable_sensors' => array(2,3) | 'enable_sensors' => array(2,3) | ||
)); | )); | ||
} | } | ||
?> | |||
The array can return those parameters: | The array can return those parameters: | ||
*enable_sensors - array(A,B,...) where the number is number of the sensor. | *enable_sensors - array(A,B,...) where the number is number of the sensor. If no enable_sensors provided the user will see all sensors CDR. | ||
*username | *username | ||
*name | *name | ||
* | *secret | ||
*id_group | *id_group | ||
* | *group_name | ||
* | *group_blocked | ||
* | *can_cdr | ||
*can_write_cdr | |||
*can_play_audio | |||
*can_download_audio | |||
*can_listen_active_call | |||
*can_show_fax | *can_show_fax | ||
*can_pcap | *can_pcap | ||
*can_upload_pcap | |||
*can_messages | |||
*can_view_content_message | |||
*can_view_message_url | |||
*is_admin | *is_admin | ||
*no_rtp | |||
*simple_cdr | *simple_cdr | ||
* | *hide_cdr_groups | ||
*can_graphs | |||
*can_tracker | *can_tracker | ||
*can_activecalls | *can_activecalls | ||
*can_register | *can_register | ||
*can_sip_msg | |||
*can_livesniffer | *can_livesniffer | ||
*can_capture_rules | *can_capture_rules | ||
*crules_remove_expire_time | |||
*can_audit | *can_audit | ||
*can_alerts_edit | *can_alerts_edit | ||
Line 46: | Line 62: | ||
*can_reports_edit | *can_reports_edit | ||
*can_reports_show_sent | *can_reports_show_sent | ||
* | *can_cdr_share_local_public | ||
*can_cdr_share_local_private | |||
*can_cdr_share_voipmonitor_org | *can_cdr_share_voipmonitor_org | ||
*hide_license_information | *hide_license_information | ||
*can_ipacc | *can_ipacc | ||
*can_mtr | |||
*can_show_sql_query | |||
*can_sensors_operations | |||
*show_only_connected_calls | |||
*can_dashboard | |||
*dashboard_read_only | |||
*can_report_functions | |||
*hide_change_password | |||
*hide_user_configuration | |||
*password_expired | |||
*can_svg_paint | |||
*can_3d_rtp_charts | |||
*can_network | |||
*can_edit_codebooks | |||
*can_edit_all_templates | |||
*can_delete_all_templates | |||
*ip | |||
*number | |||
*domain | |||
*vlan | |||
*custom_headers_cdr | |||
*custom_headers_message | |||
*ip_number_domain_or | |||
*note | |||
*email | *email | ||
*blocked | |||
*blocked_reason | |||
*max_bad_login_attempt | |||
*password_expiration_days | |||
*enable_login_ip | |||
*uc_color_theme_shift_h | *uc_color_theme_shift_h | ||
*uc_color_theme_shift_s | *uc_color_theme_shift_s | ||
Line 56: | Line 102: | ||
*uc_color_theme_shift | *uc_color_theme_shift | ||
*uc_font_main_menu | *uc_font_main_menu | ||
*uc_disable_confirm_before_unload | |||
*uc_enable_dns_cdr | |||
*uc_enable_dns_message | |||
*uc_enable_flags_cdr_number | |||
*uc_enable_flags_cdr_ip | |||
*uc_enable_flags_message_number | |||
*uc_enable_flags_message_ip | |||
*uc_csv_field_separator | |||
*count_audit_log | |||
*req_2fa | |||
= CDR HTTP API = | = CDR HTTP API = | ||
This | This method allows to get CDR rows formatted in JSON which you can see in the WEB GUI using the same filter which you can see in the WGB GUI: [[Call_Detail_Record_-_CDR#Filter_Form_button]] | ||
You need to have valid session [[GUI_automate_login]] and you have to send those parameters via POST request | |||
For disable authorization (if you are in safe environment) you can use 'GUI->Settings->System Configuration->Disable authorization for API usage' option. | |||
== CURL IMPORTANT NOTES == | |||
* for entering special characters in curl (e.g. + in caller option) is needed to use -G plus --data-urlencode options | |||
curl -G -X GET 'http://localhost/php/api.php?task=getVoipCalls&user=USER&password=PASSWORD' --data-urlencode 'params=[{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251414"},{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"1+1","customHeaders":"Cell-ID-Caller,Cell-ID-Called"}]' | |||
== INPUT == | == INPUT == | ||
Line 68: | Line 134: | ||
task:LISTING module:CDR | task:LISTING module:CDR | ||
fdatefrom:DATE or fdateto:DATE is required due to mysql overloading | |||
=== suppress_results === | |||
suppress_results:1 | |||
will not list CDR but only {"total":"135"} | |||
=== Datetime range === | === Datetime range === | ||
Line 154: | Line 228: | ||
=== RTP === | === RTP === | ||
frtcp_maxjitter: frtcp_avgjitter: frtcp_maxfr: frtcp_avgfr: fmosf1: fmosf2: fmosadapt: f_d50: f_d70: f_d90: f_d120: f_d150: f_d200: f_d300: floss1: floss2: floss3: floss4: floss5: floss6: floss7: floss8: floss9: floss10: ffilterTemplate: | frtcp_maxjitter: frtcp_avgjitter: frtcp_maxfr: frtcp_avgfr: fmosf1: fmosf2: fmosadapt: f_d50: f_d70: f_d90: f_d120: f_d150: f_d200: f_d300: floss1: floss2: floss3: floss4: floss5: floss6: floss7: floss8: floss9: floss10: ffilterTemplate: | ||
== OUTPUT == | == OUTPUT == | ||
Output is JSON formated array of CDR | Output is JSON formated array of CDR | ||
Example: | === GUI is in default DocumentRoot location === | ||
Example for /var/www/html | |||
curl -X POST '192.168.76.201/php/model/sql.php?module=bypass_login&user=voipmonitor&pass=voipmonitor' | |||
returns something like this | |||
{"SID":"ahs2ubdhc0ukb262be60v900ko","cookie_name":"PHPSESSID","success":true,"_vm_version":240034,"_debug":false} | |||
take the SID which you will put to cookie_name variable | |||
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/model/sql.php?task=LISTING&module=CDR&fdatefrom=2013-05-08T00:00:00&fcaller=190" | |||
=== GUI is in demo subdirectory === | |||
Example for /var/www/html/demo | |||
curl -X POST '192.168.76.201/demo/php/model/sql.php?module=bypass_login&user=voipmonitor&pass=voipmonitor' | |||
returns something like this | |||
{"SID":"ahs2ubdhc0ukb262be60v900ko","cookie_name":"PHPSESSID-demo","success":true,"_vm_version":240034,"_debug":false} | |||
take the SID which you will put to cookie_name variable | |||
curl -X POST -k --cookie "PHPSESSID-demo=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/demo/php/model/sql.php?task=LISTING&module=CDR&fdatefrom=2013-05-08T00:00:00&fcaller=190" | |||
=== Example Output for the LISTING task === | |||
Please see the attached link [[output of the API LISTING task]] | |||
= Share CDR = | |||
Sharing CDR is possible by sending request to php/model/utilities.php with following parameteres. If you want to share SIP+RTP set type2 to "rtp" and if only SIP set type2:null | |||
== show link local public == | |||
task=shareCdr¶ms={"type":"share_cdr_show","type2":null,"subType":"self_protected_link","id":[128024514],"emailFields":null} | |||
== show link local private == | |||
task=shareCdr¶ms={"type":"share_cdr_show","type2":null,"subType":"self_login_link","id":[128024514],"emailFields":null} | |||
== show link share.voipmonitor.org == | |||
task=shareCdr¶ms={"type":"share_cdr_show","type2":null,"subType":"share_link","id":[128024590],"emailFields":null} | |||
= get PCAP file = | |||
To get pcap file send GET or POST request with id of the CDR: | |||
http://voipmonitor/php/pcap.php?id=203800251 | |||
optinaly RTP can be filtered out by adding parameter disable_rtp=1 | |||
= Search CDR by URL = | |||
If you would like to build URL which will show CDR in web browser matching filter you can use cdr_filter parameter for admin.php | |||
http://localhost/admin.php?cdr_filter={fcallid:"uDR8mtloKFa1F8625VL2OXSFp.RuG73v"} | |||
cdr_filter takes the same arguments like in section [[WEB_API#CDR_HTTP_API]] | |||
= HTTP API 2 = | = HTTP API 2 = | ||
This API was created for getting audio files based on various search criteria. Requests are over HTTP POST or GET | It's preferred. This API was created for getting audio files based on various search criteria. Requests are over HTTP POST or GET. | ||
== Rate limit == | |||
You can enable it in GUI->Settings->System configuration->API maximal concurrent connections | |||
The limit is set per user. | |||
== getVoipCalls == | == getVoipCalls == | ||
Line 174: | Line 319: | ||
*caller - caller number | *caller - caller number | ||
*called - called number | *called - called number | ||
*onlyConnected - 0 or 1 - get only connected calls or all calls (ringing) | |||
*[custom header name]: [custom header value], seach cdrs by this custom header value | |||
*callId - Call-ID | |||
*customHeaders - the names of the returned custom header's values | |||
task: getVoipCalls, | task: getVoipCalls, | ||
user: USER, | user: USER, | ||
password: PASSWORD, | password: PASSWORD, | ||
auditReason: reason text for audit log (not required), | |||
params: { | params: { | ||
startTime: YYYY-MM-DD HH:II:SS, | startTime: YYYY-MM-DD HH:II:SS, | ||
Line 183: | Line 333: | ||
callEnd: YYYY-MM-DD HH:II:SS, | callEnd: YYYY-MM-DD HH:II:SS, | ||
caller: 9999999, | caller: 9999999, | ||
called: 9999999 | called: 9999999, | ||
onlyConnected: 0, | |||
[custom header name]: [custom header value], | |||
customHeaders: "Cell-ID-Caller,Cell-ID-Called" | |||
} | } | ||
=== Examples === | === Examples === | ||
==== HTTP POST Simple parameter ==== | ==== HTTP POST Simple parameter ==== | ||
echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": {"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251414"}}' | php api.php | echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": {"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251414", "customHeaders": "Cell-ID-Caller,Cell-ID-Called"}}' | php php/api.php | ||
echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": {"startTime": "2023-01-01", "endTime": "2023-08-01", "callId": "a90eb404-4c12-363b-4812-56622343fbdf"}}' | php php/api.php | |||
==== HTTP POST Array parameter ==== | ==== HTTP POST Array parameter ==== | ||
echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": [{"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251414"},{"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251415"}]}' | php api.php | echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": [{"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251414"},{"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251415", "customHeaders": "Cell-ID-Caller,Cell-ID-Called"}]}' | php php/api.php | ||
==== HTTP GET Simple parameter ==== | ==== HTTP GET Simple parameter ==== | ||
http://localhost | http://localhost/php/api.php?task=getVoipCalls&user=USER&password=PASSWORD¶ms={"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251414","customHeaders":"Cell-ID-Caller,Cell-ID-Called"}} | ||
==== HTTP GET Array parameter ==== | ==== HTTP GET Array parameter ==== | ||
http://localhost | http://localhost/php/api.php?task=getVoipCalls&user=USER&password=PASSWORD¶ms=[{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251414"},{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251415","customHeaders":"Cell-ID-Caller,Cell-ID-Called"}] | ||
== getVoiceRecording | == getVoiceRecording == | ||
=== input data === | === input data === | ||
Line 203: | Line 359: | ||
user: USER, | user: USER, | ||
password: PASSWORD, | password: PASSWORD, | ||
params: { | auditReason: reason text for audit log (not required), | ||
params: { | |||
cdrId: 999999 | |||
callId: 'XXXXXXXXXXXXXXXXXXXXXX', | |||
"CustomHeaderName": "CustomHeaderValue, | |||
calldate: '2015-03-01' | |||
} | } | ||
=== Examples ==== | or | ||
=== HTTP POST ==== | params: { customHeader: 'name of the column in cdr_next table', customHeaderValue: 'your value', calldate: '2015-03-01' } //not recommended | ||
=== optional parameters for params === | |||
zip, ogg : (true|false) | |||
saveaudio_afterconnect : ("yes"|"no") | |||
=== Examples === | |||
==== HTTP POST ==== | |||
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"cdrId": "4919"}}' | php api.php | echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"cdrId": "4919"}}' | php api.php | ||
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"cdrId": [6,7],"saveaudio_afterconnect":"yes"}}' | php api.php > /tmp/m6_m7.wav.zip | |||
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"callId": "XXXXXXXXXXXXXXXXXXXXXX"}}' | php api.php | |||
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"Cust_header": "CustValue"}}' | php api.php | |||
==== HTTP GET ==== | ==== HTTP GET ==== | ||
http://localhost/ | http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"cdrId":4919} | ||
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"cdrId":4919,"saveaudio_afterconnect":"yes"} | |||
== getVoiceRecording | http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"callId":"XXXXXXXXXXXXXXXXXXXXXX"} | ||
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"callId":"XXXXXXXXXXXXXXXXXXXXXX","cidInterval":10} | |||
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"callId":"XXXXXXXXXXXXXXXXXXXXXX","cidInterval":10,"saveaudio_afterconnect":"yes"} | |||
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"Cust_header":"CustValue"} | |||
== listActiveCalls == | |||
=== input data === | === input data === | ||
task: | task: listActiveCalls, | ||
user: USER, | user: USER, | ||
password: PASSWORD, | password: PASSWORD, | ||
params: { | params: { sensorId: 'sensor number' } | ||
sensorId je optional. | |||
=== examples === | |||
==== HTTP POST ==== | |||
echo '{"task": "listActiveCalls", "user": "USER", "password": "PASSWORD", "params": {"sensorId": "1"}}' | php api.php | |||
==== HTTP GET ==== | |||
http://localhost/php/api.php?task=listActiveCalls&user=USER&password=PASSWORD¶ms={"sensorId":"1"} | |||
== handleActiveCall == | |||
start/stop recording of the rtp data. When you pause a call only empty rtp frames are saved to the pcap. This affects the 'Listening to Active call' too. You will not hear the audio from paused calls. | |||
=== input data === | |||
task: handleActiveCall, | |||
user: USER, | |||
password: PASSWORD, | |||
auditReason: reason text for audit log (not required), | |||
params: { | |||
sensorId: 'sensor number', | |||
command: 'command (can be only pausecall/unpausecall now)', | |||
callRef: 'call reference' | |||
} | |||
=== examples === | === examples === | ||
==== HTTP POST ==== | ==== HTTP POST ==== | ||
echo '{"task": " | echo '{"task": "handleActiveCall", "user": "USER", "password": "PASSWORD", "params": {"sensorId": "1","command":"pausecall","callRef":"0x7f0e4c3c2680"}}' | php api.php | ||
==== HTTP GET ==== | |||
http://localhost/php/api.php?task=handleActiveCall&user=USER&password=PASSWORD¶ms={"sensorId":"1","command":"pausecall","callRef":"0x7f0e4c3c2680"} | |||
== reportSummary == | |||
Following allows You to get report like this. (api call suports all the subtypes highlighted with brown) | |||
[[File:report_summary.png]] | |||
=== input data === | |||
task: reportSummary, | |||
user: USER, | |||
password: PASSWORD, | |||
params: { | |||
report_name: name / description of report (only CDR reports allowed), | |||
datetime_from: datetime from | |||
datetime_to: datetime to, | |||
json: true / false | |||
} | |||
=== examples === | |||
==== HTTP POST ==== | |||
echo '{"task": "reportSummary", "user": "USER", "password": "PASSWORD", "params": {"report_name": "test summary", "datetime_from": "2017-12-20", "datetime_to": "2017-12-20"}}' | php api.php | |||
==== HTTP GET ==== | ==== HTTP GET ==== | ||
http://localhost/voipmon/php/api.php?task= | http://localhost/php/api.php?task=reportSummary&user=USER&password=PASSWORD¶ms={"report_name":"test summary","datetime_from":"2017-12-20","datetime_to":"2017-12-20"} | ||
== getShareURL == | |||
will return you the public link where LEGs by CID for given call will be displayed. If '''sip_history''' option is true then only SIP history is displayed (rtp option is ignored). | |||
You can use new two optional choices: '''anonIps''' for anonymize the IPs and SIP domains, and '''validDays''' for limit the validity of the shared cdr | |||
=== examples === | |||
==== HTTP GET (with RTP) ==== | |||
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60,"rtp":true,"anonIps":true,"validDays":15} | |||
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","rtp":true} | |||
==== HTTP GET (only SIP) ==== | |||
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60} | |||
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225"} | |||
==== HTTP GET (SIP history) ==== | |||
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60, "sip_history": true} | |||
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","sip_history": true} | |||
== getPCAP == | |||
will return you the pcap file (with merged other legs in case there were more legs(CDR) in the given interval for the call) | |||
=== examples === | |||
==== HTTP GET (with RTP) ==== | |||
http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225"} | |||
http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60} | |||
http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60,"cidMerge":true} | |||
http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60,"cidMerge":true,"zip":true} | |||
== listCdrIds == | |||
return the number of 'size' cdr records with basic information. Starting point is 'offset' cdr id. | |||
=== input data === | |||
task: listCdrIds, | |||
user: USER, | |||
password: PASSWORD, | |||
flags: number, //not required, bitfield format: 0x01 .. simpleOutput, 0x02 .. date in ISO8601 format | |||
params: { | |||
offset: starting cdr id, | |||
size: number of cdr records to return | |||
}} | |||
=== example === | |||
echo '{"task": "listCdrIds", "user": "USER", "password": "PASSWORD", "params": {"offset":"offset_num","size":"number of cdr records"}}' | php api.php | |||
=== request === | |||
task: listCdrIds, | |||
user: USER, | |||
password: PASSWORD, | |||
flags: number, //not required, bitfield format: 0x01 .. simpleOutput, 0x02 .. date in ISO8601 format | |||
params: json_encode: { | |||
offset: starting cdr id, | |||
size: number of cdr records to return | |||
} | |||
=== example === | |||
http://localhost/voipmon/php/api.php?task=listCdrIds&user=USER&password=PASSWORD¶ms={"offset":"offset_num","size":"number_of_cdr_records"} | |||
= direct links = | |||
Active calls - index.php?activecalls=1&hidegrid=1&hidemenu=1 | |||
= SIP history = | |||
get SIP history in various forms | |||
*Parameters | |||
action: action., currently brief_data, brief, getMSC actions. required | |||
id: cdr id of the call, required | |||
dns_lookup: 0|1 ... make dns lookup | |||
ip_not_allowed: exclude this ips from the output (possibility to hide some internal information) | |||
== Example of usage == | |||
# first get auth session | |||
curl -X POST '192.168.76.201/php/model/sql.php?module=bypass_login&user=voipmonitor&pass=voipmonitor' | |||
{"SID":"ahs2ubdhc0ukb262be60v900ko","cookie_name":"PHPSESSID","success":true,"_vm_version":240034,"_debug":false} | |||
* 'brief_data' action get SIP history data in JSON format | |||
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/pcap2text.php?action=brief_data&id=677&dns_lookup=0&ip_not_allowed=10.1.1.1,10.2.2.0/24 | |||
{"results":[{"num":"1","time":0,"src":"80.92.240.130","dst":"185.71.40.210","srcip":"80.92.240.130","dstip":"185.71.40.210","srcport":"5060","dstport":"5060","packet_len":"1046","direction":"-->","protocol":"SIP\/SDP","spec_type":null,"msg":"INVITE sip:2260@10.133.67.250:5060 len:1046","type":"request"},{"num":"2","time":0.054963111877441406,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"437","direction":"-->","protocol":"SIP","spec_type":null,"msg":"100 Trying len:437","type":"response"},{"num":"3","time":0.9610240459442139,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"588","direction":"-->","protocol":"SIP","spec_type":null,"msg":"180 Ringing len:588","type":"response"},{"num":"4","time":28.761795043945312,"src":"80.92.240.130","dst":"185.71.40.210","srcip":"80.92.240.130","dstip":"185.71.40.210","srcport":"5060","dstport":"5060","packet_len":"412","direction":"-->","protocol":"SIP","spec_type":null,"msg":"CANCEL sip:2260@10.133.67.250:5060 len:412","type":"request"},{"num":"5","time":28.795578002929688,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"433","direction":"-->","protocol":"SIP","spec_type":null,"msg":"200 OK len:433","type":"response"},{"num":"6","time":28.800518035888672,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"448","direction":"-->","protocol":"SIP","spec_type":null,"msg":"487 Request Cancelled len:448","type":"response"},{"num":"7","time":28.811052083969116,"src":"80.92.240.130","dst":"185.71.40.210","srcip":"80.92.240.130","dstip":"185.71.40.210","srcport":"5060","dstport":"5060","packet_len":"466","direction":"-->","protocol":"SIP","spec_type":null,"msg":"ACK sip:226@10.133.67.250:5060 len:466","type":"request"}],"total":7,"errors":{},"success":true,"_debug":false} | |||
* 'brief' action get SIP history in simple HTML format (as table tag) | |||
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/pcap2text.php?action=brief&id=677&dns_lookup=0&ip_not_allowed=10.1.1.1,10.2.2.0/24 | |||
* 'genMSC' action get SIP history as diagram in HTML format | |||
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/pcap2text.php?action=getMSC&id=677&dns_lookup=0&ip_not_allowed=10.1.1.1,10.2.2.0/24 | |||
= Check license = | |||
* basic test for the license check. It covers the ioncube problems too (e.g. ioncube is not properly installed) | |||
'http://localhost:88/php/apilicensecheck.php?task=licenseCheck' | |||
{"status":1,"message":"license file key.php expired. Current date: 2021-02-23 Expiration date: 2021-02-16"} | |||
'http://localhost:88/php/apilicensecheck.php?task=licenseCheck' | |||
{"status":0,"message":"License OK."} | |||
* test for the concurrent calls limit in the license (required functional ioncube) | |||
'http://localhost:88/php/apilicensecheck.php?task=licenseCallsLimitCheck' | |||
examples of possible outputs: | |||
{"status":1,"message":"You have exceeded the license limit for concurrent calls and the system has been locked. Contact support."} | |||
{"status":1,"message":"You have exceeded the license limit for concurrent calls. The system will be locked in 14 days. Contact support."} | |||
{"status":0,"message":"Limit violation for 2nd consecutive day."} |
Revision as of 11:56, 30 May 2024
Custom Login
LDAP example
You can find complete LDAP example in GUI directory under scripts/ldap_custom_login_example.php
custom script
Custom login allows to implement your own login mechanism. You need to create file scripts/custom_login.php and function custom_login
custom login script place in: <GUI_INSTALL_DIR>./scripts/custom_login.php
<?php function custom_login($user, $password) { debug_log('custom_login'); return(array( 'username' => $user, 'is_admin' => false, 'id' => $userIdUniqueNum, // required numeric unique identifier for each user // 'id_group' => 1, // you can set user rights with the gui's group id too 'enable_sensors' => array(2,3) )); } ?>
The array can return those parameters:
- enable_sensors - array(A,B,...) where the number is number of the sensor. If no enable_sensors provided the user will see all sensors CDR.
- username
- name
- secret
- id_group
- group_name
- group_blocked
- can_cdr
- can_write_cdr
- can_play_audio
- can_download_audio
- can_listen_active_call
- can_show_fax
- can_pcap
- can_upload_pcap
- can_messages
- can_view_content_message
- can_view_message_url
- is_admin
- no_rtp
- simple_cdr
- hide_cdr_groups
- can_graphs
- can_tracker
- can_activecalls
- can_register
- can_sip_msg
- can_livesniffer
- can_capture_rules
- crules_remove_expire_time
- can_audit
- can_alerts_edit
- can_alerts_show_sent
- can_reports_edit
- can_reports_show_sent
- can_cdr_share_local_public
- can_cdr_share_local_private
- can_cdr_share_voipmonitor_org
- hide_license_information
- can_ipacc
- can_mtr
- can_show_sql_query
- can_sensors_operations
- show_only_connected_calls
- can_dashboard
- dashboard_read_only
- can_report_functions
- hide_change_password
- hide_user_configuration
- password_expired
- can_svg_paint
- can_3d_rtp_charts
- can_network
- can_edit_codebooks
- can_edit_all_templates
- can_delete_all_templates
- ip
- number
- domain
- vlan
- custom_headers_cdr
- custom_headers_message
- ip_number_domain_or
- note
- blocked
- blocked_reason
- max_bad_login_attempt
- password_expiration_days
- enable_login_ip
- uc_color_theme_shift_h
- uc_color_theme_shift_s
- uc_color_theme_shift_v
- uc_color_theme_shift
- uc_font_main_menu
- uc_disable_confirm_before_unload
- uc_enable_dns_cdr
- uc_enable_dns_message
- uc_enable_flags_cdr_number
- uc_enable_flags_cdr_ip
- uc_enable_flags_message_number
- uc_enable_flags_message_ip
- uc_csv_field_separator
- count_audit_log
- req_2fa
CDR HTTP API
This method allows to get CDR rows formatted in JSON which you can see in the WEB GUI using the same filter which you can see in the WGB GUI: Call_Detail_Record_-_CDR#Filter_Form_button
You need to have valid session GUI_automate_login and you have to send those parameters via POST request
For disable authorization (if you are in safe environment) you can use 'GUI->Settings->System Configuration->Disable authorization for API usage' option.
CURL IMPORTANT NOTES
- for entering special characters in curl (e.g. + in caller option) is needed to use -G plus --data-urlencode options
curl -G -X GET 'http://localhost/php/api.php?task=getVoipCalls&user=USER&password=PASSWORD' --data-urlencode 'params=[{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251414"},{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"1+1","customHeaders":"Cell-ID-Caller,Cell-ID-Called"}]'
INPUT
HTTP POST address - php/model/sql.php
Mandatory parameters
task:LISTING module:CDR fdatefrom:DATE or fdateto:DATE is required due to mysql overloading
suppress_results
suppress_results:1
will not list CDR but only {"total":"135"}
Datetime range
fdatefrom:1986-01-09T00:00:00 fdateto:2013-05-28T00:00:00
Caller / called numbers
fcaller: caller num fcalled: called num fcallerd_type: 0 (if type is 0 searching is done for fcaller OR fcalled and value is taken from fcaller. If value is 1 searching is done for fcaller AND fcalled)
Domain
fcaller_domain: caller domain fcalled_domain: caller domain fcallerd_domain_type:0 (if type is 0 searching is done for fcaller OR fcalled and value is taken from fcaller. If value is 1 searching is done for fcaller AND fcalled)
Caller id name
fcallername: caller name
SIP caller / called IP
fsipcallerip: caller SIP IP fsipcalledip: called SIP IP fsipcallerdip_type:0 (if type is 0 searching is done for fcaller OR fcalled and value is taken from fcaller. If value is 1 searching is done for fcaller AND fcalled)
RTP source / destination IP
fa_saddr: 192.168.0.1 fb_saddr: 192.168.0.2 fab_saddr_type:0 (if type is 0 searching is done for fcaller OR fcalled and value is taken from fcaller. If value is 1 searching is done for fcaller AND fcalled)
Codecs
fcodec: 4, 12
list of numbers delimited by ','. Here is list of numbers and its codecs
define("PAYLOAD_PCMU", 0); define("PAYLOAD_GSM", 3); define("PAYLOAD_G723", 4); define("PAYLOAD_PCMA", 8); define("PAYLOAD_G722", 9); define("PAYLOAD_QCELP", 12); define("PAYLOAD_CN", 13); define("PAYLOAD_G729", 18); define("PAYLOAD_ILBC", 97); define("PAYLOAD_SPEEX", 98); define("PAYLOAD_SILK", 301); define("PAYLOAD_SILK8", 302); define("PAYLOAD_SILK12", 303); define("PAYLOAD_SILK16", 304); define("PAYLOAD_SILK24", 305); define("PAYLOAD_ISAC", 306); define("PAYLOAD_ISAC16", 307); define("PAYLOAD_ISAC32", 308); define("PAYLOAD_T38", 1000);
Call duration
example: less than 30 and greater than 10 seconds
fdurationgt: 30 fdurationlt: 10
PDD
example: greater than 10 and less than 30 seconds
fpddgt: 10 fpddlt: 30
Sip response code
fsipresponse: 503
Interrupted call
false or true
fbye:false
Direction (by trunk)
false or true
ftrunk:
SIP user agent
fa_ua: caller agent string fb_ua: called agent string fab_ua_type:0 (if type is 0 searching is done for fcaller OR fcalled and value is taken from fcaller. If value is 1 searching is done for fcaller AND fcalled)
SIP Call-ID header
fcallid: string
SIP sensor ID (database ID)
fsensor_id:
Paging
page:1 start:0 limit:30
Ordering
sort:[{"property":"calldate2","direction":"DESC"}]
Special Ordering
orderByLoss: orderByDelay: orderByFixed1: orderByFixed2: orderByAdapt: orderByCallDuration_asc: orderByCallDuration_desc: orderBySrcSIP_IP_asc: orderBySrcSIP_IP_desc: orderByDstSIP_IP_asc: orderByDstSIP_IP_desc: orderBySrcNumber_asc: orderBySrcNumber_desc: orderByDstNumber_asc: orderByDstNumber_desc: orderByCallerName_asc: orderByCallerName_desc: orderByLastSIPrespNum_asc: orderByLastSIPrespNum_desc:
RTP
frtcp_maxjitter: frtcp_avgjitter: frtcp_maxfr: frtcp_avgfr: fmosf1: fmosf2: fmosadapt: f_d50: f_d70: f_d90: f_d120: f_d150: f_d200: f_d300: floss1: floss2: floss3: floss4: floss5: floss6: floss7: floss8: floss9: floss10: ffilterTemplate:
OUTPUT
Output is JSON formated array of CDR
GUI is in default DocumentRoot location
Example for /var/www/html
curl -X POST '192.168.76.201/php/model/sql.php?module=bypass_login&user=voipmonitor&pass=voipmonitor'
returns something like this
{"SID":"ahs2ubdhc0ukb262be60v900ko","cookie_name":"PHPSESSID","success":true,"_vm_version":240034,"_debug":false}
take the SID which you will put to cookie_name variable
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/model/sql.php?task=LISTING&module=CDR&fdatefrom=2013-05-08T00:00:00&fcaller=190"
GUI is in demo subdirectory
Example for /var/www/html/demo
curl -X POST '192.168.76.201/demo/php/model/sql.php?module=bypass_login&user=voipmonitor&pass=voipmonitor'
returns something like this
{"SID":"ahs2ubdhc0ukb262be60v900ko","cookie_name":"PHPSESSID-demo","success":true,"_vm_version":240034,"_debug":false}
take the SID which you will put to cookie_name variable
curl -X POST -k --cookie "PHPSESSID-demo=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/demo/php/model/sql.php?task=LISTING&module=CDR&fdatefrom=2013-05-08T00:00:00&fcaller=190"
Example Output for the LISTING task
Please see the attached link output of the API LISTING task
Sharing CDR is possible by sending request to php/model/utilities.php with following parameteres. If you want to share SIP+RTP set type2 to "rtp" and if only SIP set type2:null
show link local public
task=shareCdr¶ms={"type":"share_cdr_show","type2":null,"subType":"self_protected_link","id":[128024514],"emailFields":null}
show link local private
task=shareCdr¶ms={"type":"share_cdr_show","type2":null,"subType":"self_login_link","id":[128024514],"emailFields":null}
task=shareCdr¶ms={"type":"share_cdr_show","type2":null,"subType":"share_link","id":[128024590],"emailFields":null}
get PCAP file
To get pcap file send GET or POST request with id of the CDR:
http://voipmonitor/php/pcap.php?id=203800251
optinaly RTP can be filtered out by adding parameter disable_rtp=1
Search CDR by URL
If you would like to build URL which will show CDR in web browser matching filter you can use cdr_filter parameter for admin.php
http://localhost/admin.php?cdr_filter={fcallid:"uDR8mtloKFa1F8625VL2OXSFp.RuG73v"}
cdr_filter takes the same arguments like in section WEB_API#CDR_HTTP_API
HTTP API 2
It's preferred. This API was created for getting audio files based on various search criteria. Requests are over HTTP POST or GET.
Rate limit
You can enable it in GUI->Settings->System configuration->API maximal concurrent connections
The limit is set per user.
getVoipCalls
Input data
- startTime - all calls which started >= startTime
- startTimeTo - all calls which started <= startTimeTo (not mandatory)
- callEnd - all calls which ends <= callEnd (not mandatory)
- caller - caller number
- called - called number
- onlyConnected - 0 or 1 - get only connected calls or all calls (ringing)
- [custom header name]: [custom header value], seach cdrs by this custom header value
- callId - Call-ID
- customHeaders - the names of the returned custom header's values
task: getVoipCalls, user: USER, password: PASSWORD, auditReason: reason text for audit log (not required), params: { startTime: YYYY-MM-DD HH:II:SS, startTimeTo: YYYY-MM-DD HH:II:SS, callEnd: YYYY-MM-DD HH:II:SS, caller: 9999999, called: 9999999, onlyConnected: 0, [custom header name]: [custom header value], customHeaders: "Cell-ID-Caller,Cell-ID-Called" }
Examples
HTTP POST Simple parameter
echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": {"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251414", "customHeaders": "Cell-ID-Caller,Cell-ID-Called"}}' | php php/api.php
echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": {"startTime": "2023-01-01", "endTime": "2023-08-01", "callId": "a90eb404-4c12-363b-4812-56622343fbdf"}}' | php php/api.php
HTTP POST Array parameter
echo '{"task": "getVoipCalls", "user": "USER", "password": "PASSWORD", "params": [{"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251414"},{"startTime": "2013-01-01", "endTime": "2013-08-01", "caller": "910251415", "customHeaders": "Cell-ID-Caller,Cell-ID-Called"}]}' | php php/api.php
HTTP GET Simple parameter
http://localhost/php/api.php?task=getVoipCalls&user=USER&password=PASSWORD¶ms={"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251414","customHeaders":"Cell-ID-Caller,Cell-ID-Called"}}
HTTP GET Array parameter
http://localhost/php/api.php?task=getVoipCalls&user=USER&password=PASSWORD¶ms=[{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251414"},{"startTime":"2013-01-01","endTime":"2013-08-01","caller":"910251415","customHeaders":"Cell-ID-Caller,Cell-ID-Called"}]
getVoiceRecording
input data
task: getVoiceRecording, user: USER, password: PASSWORD, auditReason: reason text for audit log (not required), params: { cdrId: 999999 callId: 'XXXXXXXXXXXXXXXXXXXXXX', "CustomHeaderName": "CustomHeaderValue, calldate: '2015-03-01' }
or
params: { customHeader: 'name of the column in cdr_next table', customHeaderValue: 'your value', calldate: '2015-03-01' } //not recommended
optional parameters for params
zip, ogg : (true|false) saveaudio_afterconnect : ("yes"|"no")
Examples
HTTP POST
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"cdrId": "4919"}}' | php api.php echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"cdrId": [6,7],"saveaudio_afterconnect":"yes"}}' | php api.php > /tmp/m6_m7.wav.zip
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"callId": "XXXXXXXXXXXXXXXXXXXXXX"}}' | php api.php
echo '{"task": "getVoiceRecording", "user": "USER", "password": "PASSWORD", "params": {"Cust_header": "CustValue"}}' | php api.php
HTTP GET
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"cdrId":4919} http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"cdrId":4919,"saveaudio_afterconnect":"yes"}
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"callId":"XXXXXXXXXXXXXXXXXXXXXX"} http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"callId":"XXXXXXXXXXXXXXXXXXXXXX","cidInterval":10} http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"callId":"XXXXXXXXXXXXXXXXXXXXXX","cidInterval":10,"saveaudio_afterconnect":"yes"}
http://localhost/php/api.php?task=getVoiceRecording&user=USER&password=PASSWORD¶ms={"Cust_header":"CustValue"}
listActiveCalls
input data
task: listActiveCalls, user: USER, password: PASSWORD, params: { sensorId: 'sensor number' }
sensorId je optional.
examples
HTTP POST
echo '{"task": "listActiveCalls", "user": "USER", "password": "PASSWORD", "params": {"sensorId": "1"}}' | php api.php
HTTP GET
http://localhost/php/api.php?task=listActiveCalls&user=USER&password=PASSWORD¶ms={"sensorId":"1"}
handleActiveCall
start/stop recording of the rtp data. When you pause a call only empty rtp frames are saved to the pcap. This affects the 'Listening to Active call' too. You will not hear the audio from paused calls.
input data
task: handleActiveCall, user: USER, password: PASSWORD, auditReason: reason text for audit log (not required), params: { sensorId: 'sensor number', command: 'command (can be only pausecall/unpausecall now)', callRef: 'call reference' }
examples
HTTP POST
echo '{"task": "handleActiveCall", "user": "USER", "password": "PASSWORD", "params": {"sensorId": "1","command":"pausecall","callRef":"0x7f0e4c3c2680"}}' | php api.php
HTTP GET
http://localhost/php/api.php?task=handleActiveCall&user=USER&password=PASSWORD¶ms={"sensorId":"1","command":"pausecall","callRef":"0x7f0e4c3c2680"}
reportSummary
Following allows You to get report like this. (api call suports all the subtypes highlighted with brown)
input data
task: reportSummary, user: USER, password: PASSWORD, params: { report_name: name / description of report (only CDR reports allowed), datetime_from: datetime from datetime_to: datetime to, json: true / false }
examples
HTTP POST
echo '{"task": "reportSummary", "user": "USER", "password": "PASSWORD", "params": {"report_name": "test summary", "datetime_from": "2017-12-20", "datetime_to": "2017-12-20"}}' | php api.php
HTTP GET
http://localhost/php/api.php?task=reportSummary&user=USER&password=PASSWORD¶ms={"report_name":"test summary","datetime_from":"2017-12-20","datetime_to":"2017-12-20"}
will return you the public link where LEGs by CID for given call will be displayed. If sip_history option is true then only SIP history is displayed (rtp option is ignored). You can use new two optional choices: anonIps for anonymize the IPs and SIP domains, and validDays for limit the validity of the shared cdr
examples
HTTP GET (with RTP)
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60,"rtp":true,"anonIps":true,"validDays":15} http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","rtp":true}
HTTP GET (only SIP)
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60} http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225"}
HTTP GET (SIP history)
http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60, "sip_history": true} http://localhost/php/api.php?task=getShareURL&user=USER&password=PASSWORD¶ms={"callId":"1502262225","sip_history": true}
getPCAP
will return you the pcap file (with merged other legs in case there were more legs(CDR) in the given interval for the call)
examples
HTTP GET (with RTP)
http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225"} http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60} http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60,"cidMerge":true} http://localhost/php/api.php?task=getPCAP&user=USER&password=PASSWORD¶ms={"callId":"1502262225","cidInterval":60,"cidMerge":true,"zip":true}
listCdrIds
return the number of 'size' cdr records with basic information. Starting point is 'offset' cdr id.
input data
task: listCdrIds, user: USER, password: PASSWORD, flags: number, //not required, bitfield format: 0x01 .. simpleOutput, 0x02 .. date in ISO8601 format params: { offset: starting cdr id, size: number of cdr records to return }}
example
echo '{"task": "listCdrIds", "user": "USER", "password": "PASSWORD", "params": {"offset":"offset_num","size":"number of cdr records"}}' | php api.php
request
task: listCdrIds, user: USER, password: PASSWORD, flags: number, //not required, bitfield format: 0x01 .. simpleOutput, 0x02 .. date in ISO8601 format params: json_encode: { offset: starting cdr id, size: number of cdr records to return }
example
http://localhost/voipmon/php/api.php?task=listCdrIds&user=USER&password=PASSWORD¶ms={"offset":"offset_num","size":"number_of_cdr_records"}
direct links
Active calls - index.php?activecalls=1&hidegrid=1&hidemenu=1
SIP history
get SIP history in various forms
- Parameters
action: action., currently brief_data, brief, getMSC actions. required id: cdr id of the call, required dns_lookup: 0|1 ... make dns lookup ip_not_allowed: exclude this ips from the output (possibility to hide some internal information)
Example of usage
# first get auth session curl -X POST '192.168.76.201/php/model/sql.php?module=bypass_login&user=voipmonitor&pass=voipmonitor' {"SID":"ahs2ubdhc0ukb262be60v900ko","cookie_name":"PHPSESSID","success":true,"_vm_version":240034,"_debug":false}
- 'brief_data' action get SIP history data in JSON format
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/pcap2text.php?action=brief_data&id=677&dns_lookup=0&ip_not_allowed=10.1.1.1,10.2.2.0/24 {"results":[{"num":"1","time":0,"src":"80.92.240.130","dst":"185.71.40.210","srcip":"80.92.240.130","dstip":"185.71.40.210","srcport":"5060","dstport":"5060","packet_len":"1046","direction":"-->","protocol":"SIP\/SDP","spec_type":null,"msg":"INVITE sip:2260@10.133.67.250:5060 len:1046","type":"request"},{"num":"2","time":0.054963111877441406,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"437","direction":"-->","protocol":"SIP","spec_type":null,"msg":"100 Trying len:437","type":"response"},{"num":"3","time":0.9610240459442139,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"588","direction":"-->","protocol":"SIP","spec_type":null,"msg":"180 Ringing len:588","type":"response"},{"num":"4","time":28.761795043945312,"src":"80.92.240.130","dst":"185.71.40.210","srcip":"80.92.240.130","dstip":"185.71.40.210","srcport":"5060","dstport":"5060","packet_len":"412","direction":"-->","protocol":"SIP","spec_type":null,"msg":"CANCEL sip:2260@10.133.67.250:5060 len:412","type":"request"},{"num":"5","time":28.795578002929688,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"433","direction":"-->","protocol":"SIP","spec_type":null,"msg":"200 OK len:433","type":"response"},{"num":"6","time":28.800518035888672,"src":"185.71.40.210","dst":"80.92.240.130","srcip":"185.71.40.210","dstip":"80.92.240.130","srcport":"5060","dstport":"5060","packet_len":"448","direction":"-->","protocol":"SIP","spec_type":null,"msg":"487 Request Cancelled len:448","type":"response"},{"num":"7","time":28.811052083969116,"src":"80.92.240.130","dst":"185.71.40.210","srcip":"80.92.240.130","dstip":"185.71.40.210","srcport":"5060","dstport":"5060","packet_len":"466","direction":"-->","protocol":"SIP","spec_type":null,"msg":"ACK sip:226@10.133.67.250:5060 len:466","type":"request"}],"total":7,"errors":{},"success":true,"_debug":false}
- 'brief' action get SIP history in simple HTML format (as table tag)
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/pcap2text.php?action=brief&id=677&dns_lookup=0&ip_not_allowed=10.1.1.1,10.2.2.0/24
- 'genMSC' action get SIP history as diagram in HTML format
curl -X POST -k --cookie "PHPSESSID=ahs2ubdhc0ukb262be60v900ko" "http://192.168.76.201/php/pcap2text.php?action=getMSC&id=677&dns_lookup=0&ip_not_allowed=10.1.1.1,10.2.2.0/24
Check license
- basic test for the license check. It covers the ioncube problems too (e.g. ioncube is not properly installed)
'http://localhost:88/php/apilicensecheck.php?task=licenseCheck' {"status":1,"message":"license file key.php expired. Current date: 2021-02-23 Expiration date: 2021-02-16"} 'http://localhost:88/php/apilicensecheck.php?task=licenseCheck' {"status":0,"message":"License OK."}
- test for the concurrent calls limit in the license (required functional ioncube)
'http://localhost:88/php/apilicensecheck.php?task=licenseCallsLimitCheck' examples of possible outputs: {"status":1,"message":"You have exceeded the license limit for concurrent calls and the system has been locked. Contact support."} {"status":1,"message":"You have exceeded the license limit for concurrent calls. The system will be locked in 14 days. Contact support."} {"status":0,"message":"Limit violation for 2nd consecutive day."}