}
private void sendSuccessfulResponse(SipRequest sipRequest, Dialog dialog) {
SipHeaders reqHeaders = sipRequest.getSipHeaders();
SipHeaderFieldValue contentType =
reqHeaders.get(new SipHeaderFieldName(RFC3261.HDR_CONTENT_TYPE));
if (RFC3261.CONTENT_TYPE_SDP.equals(contentType)) {
//TODO
// String sdpResponse;
// try {
// sdpResponse = sdpManager.handleOffer(
// new String(sipRequest.getBody()));
// } catch (NoCodecException e) {
// sdpResponse = sdpManager.generateErrorResponse();
// }
} else {
// TODO manage empty bodies and non-application/sdp content type
}
//TODO if mode autoanswer just send 200 without asking any question
SipResponse sipResponse =
RequestManager.generateResponse(
sipRequest,
dialog,
RFC3261.CODE_200_OK,
RFC3261.REASON_200_OK);
// TODO 13.3 dialog invite-specific processing
// TODO timer if there is an Expires header in INVITE
// TODO 3xx
// TODO 486 or 600
byte[] offerBytes = sipRequest.getBody();
SessionDescription answer;
try {
if (offerBytes != null && RFC3261.CONTENT_TYPE_SDP.equals(
contentType.getValue())) {
// create response in 200
try {
SessionDescription offer = sdpManager.parse(offerBytes);
answer = sdpManager.createSessionDescription(offer);
mediaDestination = sdpManager.getMediaDestination(offer);
} catch (NoCodecException e) {
answer = sdpManager.createSessionDescription(null);
}
} else {
// create offer in 200 (never tested...)
answer = sdpManager.createSessionDescription(null);
}
sipResponse.setBody(answer.toString().getBytes());
} catch (IOException e) {
logger.error(e.getMessage(), e);
}
SipHeaders respHeaders = sipResponse.getSipHeaders();
respHeaders.add(new SipHeaderFieldName(RFC3261.HDR_CONTENT_TYPE),
new SipHeaderFieldValue(RFC3261.CONTENT_TYPE_SDP));
ArrayList<String> routeSet = dialog.getRouteSet();
if (routeSet != null) {
SipHeaderFieldName recordRoute = new SipHeaderFieldName(RFC3261.HDR_RECORD_ROUTE);
for (String route : routeSet) {
respHeaders.add(recordRoute, new SipHeaderFieldValue(route));
}
}
// TODO determine port and transport for server transaction>transport
// from initial invite