📄 sipmanager.java.svn-base
字号:
ContactHeader contactHeader = null;
try {
contactHeader = getContactHeader();
ok.addHeader(contactHeader);
attachToTag(ok, dialog);
System.err.println(ok.toString());
serverTransaction.sendResponse(ok);
} catch (CommunicationsException e) {
e.printStackTrace();
} catch (InvalidArgumentException e) {
e.printStackTrace();
} catch (SipException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
fireMessageReceived(request);
return;
}
Request requestClone = (Request) request.clone();
// INVITE
if (request.getMethod().equals(Request.INVITE)) {
if (serverTransaction.getDialog().getState() == null) {
callProcessing.processInvite(serverTransaction, request);
} else {
callProcessing.processReInvite(serverTransaction, request);
}
}
// ACK
else if (request.getMethod().equals(Request.ACK)) {
if (serverTransaction != null
&& serverTransaction.getDialog().getFirstTransaction()
.getRequest().getMethod()
.equals(Request.INVITE)) {
callProcessing.processAck(serverTransaction, request);
} else {
// just ignore
}
}
// BYE
else if (request.getMethod().equals(Request.BYE)) {
if (dialog.getFirstTransaction().getRequest().getMethod()
.equals(Request.INVITE) || dialog.getFirstTransaction().getRequest().getMethod()
.equals(Request.REFER)) {
callProcessing.processBye(serverTransaction, request);
}
}
// CANCEL
else if (request.getMethod().equals(Request.CANCEL)) {
if (dialog.getFirstTransaction().getRequest().getMethod()
.equals(Request.INVITE)) {
callProcessing.processCancel(serverTransaction, request);
} else {
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent
.getRequest());
}
}
// REFER
else if (request.getMethod().equals(Request.REFER)) {
transferProcessing.processRefer(serverTransaction, request);
} else if (request.getMethod().equals(Request.INFO)) {
/** @todo add proper request handling */
fireMessageReceived(request);
} else if (request.getMethod().equals(Request.MESSAGE)) {
messageProcessing.processMessageRequest(serverTransaction,
request);
fireMessageReceived(request);
} else if (request.getMethod().equals(Request.OPTIONS)) {
/** @todo add proper request handling */
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent.getRequest());
} else if (request.getMethod().equals(Request.PRACK)) {
/** @todo add proper request handling */
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent.getRequest());
} else if (request.getMethod().equals(Request.REGISTER)) {
/** @todo add proper request handling */
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent.getRequest());
} else if (request.getMethod().equals(Request.SUBSCRIBE)) {
} else if (request.getMethod().equals(Request.UPDATE)) {
/** @todo add proper request handling */
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent.getRequest());
} else if (request.getMethod().equals(Request.INFO)) {
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent.getRequest());
} else {
// We couldn't recognise the message
sendNotImplemented(serverTransaction, request);
fireUnknownMessageReceived(requestReceivedEvent.getRequest());
}
}
public void processTimeout(TimeoutEvent transactionTimeOutEvent) {
Transaction transaction;
if (transactionTimeOutEvent.isServerTransaction()) {
transaction = transactionTimeOutEvent.getServerTransaction();
} else {
transaction = transactionTimeOutEvent.getClientTransaction();
}
Request request = transaction.getRequest();
if (request.getMethod().equals(Request.REGISTER)) {
registerProcessing.processTimeout(transaction, request);
} else if (request.getMethod().equals(Request.INVITE)) {
callProcessing.processTimeout(transaction, request);
} else {
// Just show an error for now
}
}
// -------------------- PROCESS RESPONSE
public void processResponse(ResponseEvent responseReceivedEvent) {
Log.debug("<RESPONSE>");
Log.debug("[" + responseReceivedEvent.getResponse().getStatusCode()
+ "]");
Log.debug("</RESPONSE>");
ClientTransaction clientTransaction = responseReceivedEvent
.getClientTransaction();
if (clientTransaction == null) {
return;
}
Response response = responseReceivedEvent.getResponse();
Dialog dialog = clientTransaction.getDialog();
String method = ((CSeqHeader) response.getHeader(CSeqHeader.NAME))
.getMethod();
Response responseClone = (Response) response.clone();
// OK
if (response.getStatusCode() == Response.OK) {
// REGISTER
if (method.equals(Request.REGISTER)) {
registerProcessing.processOK(clientTransaction, response);
}// INVITE
else if (method.equals(Request.INVITE)) {
callProcessing.processInviteOK(clientTransaction, response);
}// BYE
else if (method.equals(Request.BYE)) {
callProcessing.processByeOK(clientTransaction, response);
}// CANCEL
else if (method.equals(Request.CANCEL)) {
callProcessing.processCancelOK(clientTransaction, response);
} else if (method.equals(Request.SUBSCRIBE)) {
}
}
// SESSION PROGRESS
else if (response.getStatusCode() == Response.SESSION_PROGRESS) {
callProcessing.processRingingBack(clientTransaction, response);
}
// ACCEPTED
else if (response.getStatusCode() == Response.ACCEPTED) {
// SUBSCRIBE
if (method.equals(Request.SUBSCRIBE)) {
} else if (method.equals(Request.REFER)) {
Call call = callProcessing.getCallDispatcher().findCall(clientTransaction.getDialog());
try {
callProcessing.endCall(call);
}
catch (CommunicationsException e) {
Log.error("Trasnfer", e);
}
}
}
// RINGING - process RINGING before treating the general case of a
// provisional response (see next "else if")
// report and fix - Asa Karlsson
else if (response.getStatusCode() == Response.RINGING) {
if (method.equals(Request.INVITE)) {
callProcessing.processRinging(clientTransaction, response);
} else {
fireUnknownMessageReceived(response);
}
}
// TRYING
else if (response.getStatusCode() == Response.TRYING
// process all provisional responses here
// reported by Les Roger Davis
|| response.getStatusCode() / 100 == 1) {
if (method.equals(Request.INVITE)) {
callProcessing.processTrying(clientTransaction, response);
}
// We could also receive a TRYING response to a REGISTER req
// bug reports by
// Steven Lass <sltemp at comcast.net>
// Luis Vazquez <luis at teledata.com.uy>
else if (method.equals(Request.REGISTER)) {
// do nothing
} else {
// TODO TRYING // fireUnknownMessageReceived(response);
}
}
// NOT_FOUND
else if (response.getStatusCode() == Response.NOT_FOUND) {
if (method.equals(Request.INVITE)) {
callProcessing.processNotFound(clientTransaction, response);
}
if (method.equals(Request.SUBSCRIBE)) {
} else if (method.equals(Request.REGISTER)) {
fireRegistrationFailed("Invalid username.", RegistrationEvent.Type.NotFound);
Log.debug("REGISTER NOT FOUND");
}
}
// NOT_IMPLEMENTED
else if (response.getStatusCode() == Response.NOT_IMPLEMENTED) {
if (method.equals(Request.REGISTER)) {
// Fixed typo issues - Reported by pizarro
registerProcessing.processNotImplemented(clientTransaction,
response);
} else if (method.equals(Request.INVITE)) {
callProcessing.processNotImplemented(clientTransaction,
response);
} else {
fireUnknownMessageReceived(response);
}
}
// REQUEST_TERMINATED
else if (response.getStatusCode() == Response.REQUEST_TERMINATED) {
callProcessing.processRequestTerminated(clientTransaction,
response);
}
// BUSY_HERE
else if (response.getStatusCode() == Response.BUSY_HERE) {
if (method.equals(Request.INVITE)) {
callProcessing.processBusyHere(clientTransaction, response);
} else {
fireUnknownMessageReceived(response);
}
}
// 401 UNAUTHORIZED
else if (response.getStatusCode() == Response.UNAUTHORIZED
|| response.getStatusCode() == Response.PROXY_AUTHENTICATION_REQUIRED) {
if (method.equals(Request.INVITE)) {
callProcessing.processAuthenticationChallenge(
clientTransaction, response);
} else if (method.equals(Request.REGISTER)) {
CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
if (cseq.getSeqNumber() < 2)
registerProcessing.processAuthenticationChallenge(
clientTransaction, response);
else
fireRegistrationFailed("Invalid password.", RegistrationEvent.Type.WrongPass);
} else if (method.equals(Request.SUBSCRIBE)) {
} else
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.FORBIDDEN) {
} else if (response.getStatusCode() == 403) {
// Wrong Authorization User
fireRegistrationFailed("Invalid auth user.", RegistrationEvent.Type.WrongAuthUser);
}
// Other Errors
else if ( // We'll handle all errors the same way so no individual
// handling
// is needed
// response.getStatusCode() == Response.NOT_ACCEPTABLE
// || response.getStatusCode() == Response.SESSION_NOT_ACCEPTABLE
response.getStatusCode() / 100 == 4) {
if (method.equals(Request.INVITE)) {
callProcessing
.processCallError(clientTransaction, response);
} else {
fireUnknownMessageReceived(response);
}
} else if (response.getStatusCode() == Response.ACCEPTED) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.ADDRESS_INCOMPLETE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.ALTERNATIVE_SERVICE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.AMBIGUOUS) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.BAD_EVENT) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.BAD_EXTENSION) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.BAD_GATEWAY) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.BAD_REQUEST) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.BUSY_EVERYWHERE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.CALL_IS_BEING_FORWARDED) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST) {
/** @todo add proper request handling */
// fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.DECLINE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.DOES_NOT_EXIST_ANYWHERE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.EXTENSION_REQUIRED) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.GONE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.INTERVAL_TOO_BRIEF) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.LOOP_DETECTED) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.MESSAGE_TOO_LARGE) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.METHOD_NOT_ALLOWED) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.MOVED_PERMANENTLY) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else if (response.getStatusCode() == Response.MOVED_TEMPORARILY) {
/** @todo add proper request handling */
fireUnknownMessageReceived(response);
} else i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -