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.