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.
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 |
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 |
Last updated by Henning Schulzrinne