📄 servertransaction.java
字号:
package com.micromethod.sipstack.ri;
/**
* ServerTransaction
*/
public class ServerTransaction extends BaseTransaction {
/**
* m_sipConnectionNotifier
*/
public Notifier m_sipConnectionNotifier = null;
/**
* m_sipServerConnection
*/
public ServerConnection m_sipServerConnection = null;
/**
* ServerTransaction Constructor
*
* @param txHandler
* txHandler
* @param sipConnectionNotifier
* sipConnectionNotifier
*/
public ServerTransaction(TxHandler txHandler, Notifier sipConnectionNotifier) {
m_txHandler = txHandler;
m_sipConnectionNotifier = sipConnectionNotifier;
_fldint = 1;
}
/**
* receiveRequest
*
* @param sipRequest
* @return result, 1:success, -1:fail
*/
public int receiveRequest(SipRequest sipRequest) {
try {
m_lastRequest = sipRequest;
if (m_lastEffectRequest == null) {
m_lastEffectRequest = sipRequest;
}
else {
if (m_sipMessage == null
|| !m_sipMessage.compareTo(((SipMessage) (sipRequest)))) {
;
}
else {
Protocol
.echo("---- ServerTransaction.receiveRequest(): Request Already Received: Dropped ----");
return 0;
}
}
m_sipMessage = ((SipMessage) (sipRequest));
String s = sipRequest.getMethod();
switch (_fldint) {
case 1:
if (s.equals("INVITE")) {
setState((short) 4);
}
else {
setState((short) 3);
}
m_sipConnectionNotifier.addSipServerConnectionNotifier(
((BaseTransaction) (this)), sipRequest);
return 1;
case 4:
resendLastResponse();
return 1;
case 5:
Protocol.echo("ServerTransaction: S_COMPLETED received " + s);
if (!s.equals("ACK")) {
Protocol
.echo("ServerTransaction.receiveRequest(): should we resend last response ?");
setState((short) 7);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 10000L);
return -1;
}
else {
setState((short) 6);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 10000L);
return 1;
}
case 2:
case 3:
default:
setState((short) 7);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 10000L);
return -1;
}
}
catch (Exception exception) {
exception.printStackTrace();
return -1;
}
}
/**
* sendResponse
*
* @param sipResponse
* @return result, 1:success, -1:fail
*/
public int sendResponse(SipResponse sipResponse) {
try {
int i = 0;
switch (_fldint) {
case 3:
case 4:
int j = sipResponse.getStatusCode();
if (99 >= j || j >= 200) {
if (199 >= j || j >= 300) {
if (299 >= j || j >= 700) {
return -1;
}
else {
setState((short) 5);
Protocol
.echo("ServerTransaction: Sending 3xx-699 response -> S_COMPLETED");
i = routeResponse(((SipMessage) (sipResponse)),
((SipMessage) (m_lastEffectRequest)));
if (i != 1) {
Protocol.echo("Problem routing the response! " + j);
return i;
}
else {
m_response = sipResponse;
m_txHandler.resendSipMessage(((SipMessage) (sipResponse)),
false);
if (this.m_lastRequest.getMethod().equals("INVITE"))
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createCompletedTask(((BaseTransaction) (this))))),
500L);
else
m_timer
.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))),
5000L);
return 1;
}
}
}
else {
i = routeResponse(((SipMessage) (sipResponse)),
((SipMessage) (m_lastEffectRequest)));
if (i == 1) {
m_response = sipResponse;
m_txHandler.resendSipMessage(((SipMessage) (sipResponse)),
false);
if (this.m_lastRequest.getMethod().equals("INVITE")) {
setState((short) 7);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 5000L);
}
else {
setState((short) 5);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 5000L);
}
}
else {
Protocol.echo("Problem routing the response! " + j);
}
return i;
}
}
else {
setState((short) 4);
i = routeResponse(((SipMessage) (sipResponse)),
((SipMessage) (m_lastEffectRequest)));
if (i == 1) {
m_response = sipResponse;
m_txHandler.resendSipMessage(((SipMessage) (sipResponse)), false);
}
else {
Protocol.echo("Problem routing the response! " + j);
}
}
return i;
case 2:
default:
return -1;
}
}
catch (Exception exception) {
exception.printStackTrace();
return -1;
}
}
/**
* resendLastResponse
*/
private void resendLastResponse() {
Protocol.echo("ServerTransaction.resendLastResponse()");
m_txHandler.resendSipMessage(((SipMessage) (m_response)), true);
}
/**
* ackTimer
*
* @return result, 1:set schedule, -1:not set
*/
public int ackTimer() {
// try {
switch (_fldint) {
case 5:
Protocol.echo("ServerTranasction.ackTimer() in COMPLETED state");
resendLastResponse();
setState((short) 6);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 64 * 500);
return 1;
case 1:
default:
Protocol.echo("ServerTranasction.ackTimer() in state " + _fldint);
setState((short) 7);
return -1;
}
// }
// catch (Exception exception) {
// exception.printStackTrace();
// return -1;
// }
}
/**
* transactionTimer
*/
public void transactionTimer() {
// try {
switch (_fldint) {
case 5: // '\005'
setState((short) 7);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 5000L);
// fall through
case 6: // '\006'
case 7: // '\007'
m_timer.cancel();
m_txHandler.removeTransaction(((BaseTransaction) (this)));
setState((short) 8);
return;
}
Protocol
.echo("ServerTransaction.transactionTimer():transaction timer fired in state: "
+ _fldint);
// }
// catch (Exception exception) {
// exception.printStackTrace();
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -