• No results found

Processing Responses

In document SIP: Session Initiation Protocol (Page 30-33)

8 General User Agent Behavior

8.1 UAC Behavior

8.1.3 Processing Responses

1154

Responses are first processed by the transport layer and then passed up to the transaction layer. The

trans-1155

action layer performs its processing and then passes the response up to the TU. The majority of response

1156

processing in the TU is method specific. However, there are some general behaviors independent of the

1157

method.

1158

8.1.3.1 Transaction Layer Errors In some cases, the response returned by the transaction layer will not

1159

be a SIP message, but rather a transaction layer error. When a timeout error is received from the transaction

1160

layer, it MUSTbe treated as if a 408 (Request Timeout) status code has been received. If a fatal transport

1161

error is reported by the transport layer (generally, due to fatal ICMP errors in UDP or connection failures in

1162

TCP), the conditionMUSTbe treated as a 503 (Service Unavailable) status code.

1163

8.1.3.2 Unrecognized Responses A UACMUSTtreat any final response it does not recognize as being

1164

equivalent to the x00 response code of that class, andMUST be able to process the x00 response code for

1165

all classes. For example, if a UAC receives an unrecognized response code of 431, it can safely assume that

1166

there was something wrong with its request and treat the response as if it had received a 400 (Bad Request)

1167

response code. A UACMUSTtreat any provisional response different than 100 that it does not recognize as

1168

183 (Session Progress). A UACMUSTbe able to process 100 and 183 responses.

1169

8.1.3.3 Vias If more than oneViaheader field value is present in a response, the UACSHOULDdiscard

1170

the message.

1171

The presence of additionalViaheader field values that precede the originator of the request suggests that the

1172

message was misrouted or possibly corrupted.

1173

8.1.3.4 Processing 3xx Responses Upon receipt of a redirection response (for example, a 301 response

1174

status code), clients SHOULD use the URI(s) in the Contactheader field to formulate one or more new

1175

requests based on the redirected request. This process is similar to that of a proxy recursing on a 3xx class

1176

response as detailed in Sections 16.5 and 16.6. A client starts with an initial target set containing exactly one

1177

URI, theRequest-URIof the original request. If a client wishes to formulate new requests based on a 3xx

1178

class response to that request, it places the URIs to try into the target set. Subject to the restrictions in this

1179

specification, a client can choose whichContactURIs it places into the target set. As with proxy recursion,

1180

a client processing 3xx class responses MUST NOTadd any given URI to the target set more than once. If

1181

the original request had a SIPS URI in theRequest-URI, the client MAYchoose to recurse to a non-SIPS

1182

URI, butSHOULDinform the user of the redirection to an insecure URI.

1183

Any new request may receive 3xx responses themselves containing the original URI as a contact. Two locations

1184

can be configured to redirect to each other. Placing any given URI in the target set only once prevents infinite

1185

redirection loops.

1186

As the target set grows, the client MAY generate new requests to the URIs in any order. A common

1187

mechanism is to order the set by the “q” parameter value from theContactheader field value. Requests to

1188

the URIsMAYbe generated serially or in parallel. One approach is to process groups of decreasing q-values

1189

serially and process the URIs in each q-value group in parallel. Another is to perform only serial processing

1190

in decreasing q-value order, arbitrarily choosing between contacts of equal q-value.

1191

If contacting an address in the list results in a failure, as defined in the next paragraph, the element moves

1192

to the next address in the list, until the list is exhausted. If the list is exhausted, then the request has failed.

1193

FailuresSHOULDbe detected through failure response codes (codes greater than 399); for network errors

1194

the client transaction will report any transport layer failures to the transaction user. Note that some response

1195

codes (detailed in 8.1.3.5) indicate that the request can be retried; requests that are reattempted should not

1196

be considered failures.

1197

When a failure for a particular contact address is received, the client SHOULD try the next contact

1198

address. This will involve creating a new client transaction to deliver a new request.

1199

In order to create a request based on a contact address in a 3xx response, a UAC MUST copy the

en-1200

tire URI from the target set into the Request-URI, except for the “method-param” and “header” URI

1201

parameters (see Section 19.1.1 for a definition of these parameters). It uses the “header” parameters to

1202

create header field values for the new request, overwriting header field values associated with the redirected

1203

request in accordance with the guidelines in Section 19.1.5.

1204

Note that in some instances, header fields that have been communicated in the contact address may

1205

instead append to existing request header fields in the original redirected request. As a general rule, if the

1206

header field can accept a comma-separated list of values, then the new header field valueMAYbe appended

1207

to any existing values in the original redirected request. If the header field does not accept multiple values,

1208

the value in the original redirected request MAYbe overwritten by the header field value communicated in

1209

the contact address. For example, if a contact address is returned with the following value:

1210

sip:user@host?Subject=foo&Call-Info=<http://www.foo.com>

1211

Then any Subjectheader field in the original redirected request is overwritten, but the HTTP URL is

1212

merely appended to any existingCall-Infoheader field values.

1213

It isRECOMMENDEDthat the UAC reuse the sameTo,From, andCall-IDused in the original redirected

1214

request, but the UACMAYalso choose to update theCall-IDheader field value for new requests, for example.

1215

Finally, once the new request has been constructed, it is sent using a new client transaction, and therefore

1216

MUSThave a new branch ID in the topViafield as discussed in Section 8.1.1.7.

1217

In all other respects, requests sent upon receipt of a redirect response SHOULDre-use the header fields

1218

and bodies of the original request.

1219

In some instances,Contactheader field values may be cached at UAC temporarily or permanently

de-1220

pending on the status code received and the presence of an expiration interval; see Sections 21.3.2 and 21.3.3.

1221

8.1.3.5 Processing 4xx Responses Certain 4xx response codes require specific UA processing,

indepen-1222

dent of the method.

1223

If a 401 (Unauthorized) or 407 (Proxy Authentication Required) response is received, the UACSHOULD

1224

follow the authorization procedures of Section 22.2 and Section 22.3 to retry the request with credentials.

1225

If a 413 (Request Entity Too Large) response is received (Section 21.4.11), the request contained a body

1226

that was longer than the UAS was willing to accept. If possible, the UACSHOULDretry the request, either

1227

omitting the body or using one of a smaller length.

1228

If a 415 (Unsupported Media Type) response is received (Section 21.4.13), the request contained media

1229

types not supported by the UAS. The UACSHOULDretry sending the request, this time only using content

1230

with types listed in theAcceptheader field in the response, with encodings listed in theAccept-Encoding

1231

header field in the response, and with languages listed in theAccept-Languagein the response.

1232

If a 416 (Unsupported URI Scheme) response is received (Section 21.4.14), theRequest-URIused a

1233

URI scheme not supported by the server. The clientSHOULDretry the request, this time, using a SIP URI.

1234

If a 420 (Bad Extension) response is received (Section 21.4.15), the request contained a Requireor

1235

Proxy-Requireheader field listing an option-tag for a feature not supported by a proxy or UAS. The UAC

1236

SHOULDretry the request, this time omitting any extensions listed in theUnsupportedheader field in the

1237

response.

1238

In all of the above cases, the request is retried by creating a new request with the appropriate

modifica-1239

tions. This new requestSHOULDhave the same value of theCall-ID,To, andFromof the previous request,

1240

but theCSeqshould contain a new sequence number that is one higher than the previous.

1241

With other 4xx responses, including those yet to be defined, a retry may or may not be possible

depend-1242

ing on the method and the use case.

1243

In document SIP: Session Initiation Protocol (Page 30-33)