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