Examples
The following examples describe how to create an algorithm using the test references.
Match by the Caller and the Callee
The following algorithm matches two call legs if:
-
The last 6 characters of caller are equal, as found in either the From header or in the P-Asserted-Identity,
-
And the last 6 characters of the callee are equal, as found in either the To header or in the Request-URI.
(cond ((uri_user 6 ("from" "pai")) (uri_user 6 ("to" "ruri")) ) )
The following example modifies the one above to return true, if either the caller or the callee matches:
(cond ((uri_user 6 ("from" "pai")) #t) ((uri_user 6 ("to" "ruri")) #t) )
Match by Generic Algorithm
The following algorithm is an example of a generic algorithm, which should give good results for a wide range of SIP devices.
(cond ((call_id 0) #t) ((sdp_media_ip_port) #t) ; custom header ((hf_equals "session-id") #t) ((time_diff 15000 2000) #f) ; Matching by from and to ((uri_user 6 ("from" "pai" "rpid" "ppid")) (cond ((uri_user 6 ("to" "ruri" "diversion")) #t) (#t #f) ) ) ; nothing matched, return false (#t #f) )
The above algorithm:
-
Checks first the Call-ID. If the two call legs have the same Call-ID header, then it returns true.
-
Checks the SDP bodies. If the two call legs have the same media IP and port number, or if the session ID are equal, then it returns true.
-
Checks if the custom Session-ID header is present in both call legs, and if their values are equal, then it returns true.
-
Checks if the start time stamps of the two call legs are too far one from each other, and if so, returns false.
-
Checks if both the caller and the callee match, by comparing the URIs from several headers. If a match is found for both of them, it returns true.
If none of the above is true, it returns false.