The SIP RA uses a lazy parser, which parses the headers in incoming SIP messages
This means that headers are not parsed until they are needed, either internally within the RA or by the application accessing a header.
Headers parsed as needed
Critical headers such as Call-ID, CSeq, and Via will always be parsed by the RA, as these are essential to correct operation of the protocol. However most other headers need not be parsed at all until accessed by an application. This is a performance benefit, and can also aid interoperability with user agents that may not strictly follow SIP syntax.
Lazy parsing failures
If an application calls
Message.getHeader()
,
and the RA is unable to parse the header, a
LazyParsingException
will be thrown. This is an unchecked exception. In this case, an
application might want to get the unparsed header value so that it can
parse the header itself. This might be required when communicating with
a user agent that is known to have bugs in SIP syntax.
An application can retrieve the unparsed value of a header by casting the
Message
object to a
LazyParsedMessage
,
and calling
getUnparsedHeaderValue()
.
This returns the string value of the header, which the application can
parse itself. If the header is a multi-value header, the
getUnparsedHeaderValues()
method should be used, which returns an array of strings.