Classification for SIP interoperability test event

Implementations of SIP UAs and proxies are classified into basic, intermediate and advanced. An implementation satisfies a level if it satisfies 80% of the criteria listed below.

User Agent

Level Feature Support
basic
send INVITE over UDP
receive INVITE over UDP
generate ACK properly
can accept or reject calls
SDP with single m and c line, one codec
To, From, Call-ID, CSeq, Via, Content-Length, Content-Type headers handled properly
generate tags in To field
send basic call termination with BYE via UDP
receive BYE over UDP
compact form for headers
reject unknown request methods with 501 response
send/receive RTP media, possibly without RTCP
intermediate
support TCP for all messages
Require, Proxy-Require
handle packet loss for INVITE and BYE (with exponential backoff)
pays attention to Contact header in INVITE and in 2xx response to INVITE (i.e., goes directly to peer for following requests)
process CANCEL for INVITE
Authentication for registrations: basic
Authentication for registrations: digest
allow redirection to web pages or email
receive text or HTML in 3xx or 4xx responses
Accept headers without SDP
DNS SRV records
non-gateways: register with periodic refresh to unicast address, paying attention to Expires header in REGISTER response
understands redirection
multiple codecs listed in SDP m line, finds common one with peer
multiple SDP m= lines handled correctly
unknown SDP m= media types handled correctly (i.e., rejected with port 0)
Domain name as well as IP address accepted in SDP c= line
generate RTCP packets
respond to OPTIONS request
allows non-SIP URLs in REGISTER
copy Record-Route from response into Route of request and route appropriately
checks equality of action parameters on REGISTER
can retrieve current registrations
can clear registrations with Contact: * and Expires: 0
advanced
automatically tries redirections (recursing UA)
generate multicast REGISTER
re-INVITE: suspending a stream
re-INVITE: resuming a stream
re-INVITE: closing single stream
re-INVITE: changing codecs
re-INVITE: add a stream
re-INVITE: change media address to different address or port (mobility)
send text or HTML in 3xx and 4xx responses
Expires for INVITE
third party registration
generate tel: URL request and proxy them to designated server
process MIME multipart responses
beyond RFC2543bis
INFO method
TRANSFER method
183 response
caller preferences
tones (DTMF) in RTP

Proxy

Level Feature Support
basic
receive unicast REGISTER over UDP
receive unicast REGISTER over TCP
process INVITE and BYE over UDP
process INVITE and BYE over TCP
can act as local outbound proxy (i.e., forward to URL in request URI when domain is not its own)
generate ACK properly
compact form for headers
new request methods (proxied or redirected)
intermediate
UDP to TCP conversion
TCP to UDP conversion
DNS SRV records
Authentication for registrations: basic
Authentication for registrations: digest
forking proxies: parallel
can receive and propagate CANCEL
obeys Route header
generates CANCEL on 200 OK when forking
forwards all provisional responses upstream
understands Proxy-Require
receive multicast REGISTER
supports non-SIP URLs in REGISTER
advanced
forking proxies: sequential
forking proxies with multiple 200 OK responses
recursion on forking (fork response of 3xx triggers new branch)
legal fork looping (with different request URIs)
forking for non-INVITE
basic authentication for INVITE
digest authentication for INVITE
can detect loops
can insert Record-Route
drops request when Max-Forwards is zero
obeys Expires in INVITE
third party registration
registration proxying
process multicast REGISTER
multicast INVITE
received parameter in Via field
can always redirect (configurable)
IPsec support
TLS support
handling request merging due to an upstream forking proxy
beyond RFC2543bis
can receive CPL in REGISTER
tel: URL handling (can send a request somewhere when one arrives with a tel URL in request URI)
INFO method
TRANSFER method
caller preferences

UA tests

Features to test and use in picking test partners:

Proxy tests

Last updated by Henning Schulzrinne