📄 clienttransaction.java
字号:
package com.micromethod.sipstack.ri;
/**
* ClientTransaction
*/
public class ClientTransaction extends BaseTransaction {
/**
* m_sipClientConnection
*/
public ClientConnection m_sipClientConnection = null;
/**
* ClientTransaction Constructor
*
* @param txHandler
* @param sipClientConnection
*/
public ClientTransaction(TxHandler txHandler,
ClientConnection sipClientConnection) {
m_txHandler = txHandler;
m_sipClientConnection = sipClientConnection;
_fldint = 1;
}
/**
* receiveResponse
*
* @param sipResponse
* @return result, 1:success, -1:fail
*/
public int receiveResponse(SipResponse sipResponse) {
try {
int i = sipResponse.getStatusCode();
switch (_fldint) {
case 3:
case 4:
if (99 >= i || i >= 200) {
if (199 >= i || i >= 300) {
if (299 >= i || i >= 700) {
return -1;
}
else {
_fldint = 5;
if (m_lastEffectRequest.getMethod().equals("INVITE")) {
m_lastRequest = m_sipClientConnection.createSipRequest("ACK",
((Notifier) (null)));
try {
m_lastRequest.setHeader("Via", m_lastEffectRequest
.getHeaderValue("Via"), true);
}
catch (Exception exception) {
}
routeRequest(((SipMessage) (m_lastRequest)));
m_txHandler.resendSipMessage(((SipMessage) (m_lastRequest)),
false);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createCompletedTask(((BaseTransaction) (this))))),
15000L);
}
else {
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 5000L);
}
m_sipClientConnection.addNotifyResponse(sipResponse);
return 1;
}
}
else {
if (m_lastEffectRequest.getMethod().equals("INVITE")) {
_fldint = 7;
}
else {
_fldint = 5;
}
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createConfirmTask(((BaseTransaction) (this))))), 10000L);
m_sipClientConnection.addNotifyResponse(sipResponse);
return 1;
}
}
else {
_fldint = 4;
m_sipClientConnection.addNotifyResponse(sipResponse);
return 1;
}
case 5:
if (299 >= i || i >= 700
|| !m_lastEffectRequest.getMethod().equals("INVITE")) {
Protocol
.echo("ClientTransaction.receiveResponse ignoring response "
+ i + " in S_COMPLETED state");
return 1;
}
else {
routeRequest(((SipMessage) (m_lastRequest)));
m_txHandler.resendSipMessage(((SipMessage) (m_lastRequest)), true);
return 1;
}
case 7:
if (199 < i && i < 299
&& m_lastEffectRequest.getMethod().equals("INVITE"))
m_sipClientConnection.addNotifyResponse(sipResponse);
Protocol
.echo("ClientTransaction.receiveResponse just passing up response "
+ i + " in S_TERMINATED state");
return 1;
case 6:
default:
throw new IllegalStateException(
"wrong state in ClientTransaction.receiveResponse()");
}
}
catch (Exception exception1) {
exception1.printStackTrace();
return -1;
}
}
/**
* sendRequest
*
* @param sipRequest
* @return result, 1:success, -1:fail
*/
public int sendRequest(SipRequest sipRequest) {
// try {
if (m_lastEffectRequest == null) {
m_lastEffectRequest = sipRequest;
}
switch (_fldint) {
case 1:
case 3:
_fldint = 3;
routeRequest(((SipMessage) (sipRequest)));
m_txHandler.resendSipMessage(((SipMessage) (sipRequest)), false);
b = 0;
_fldnull = 500;
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createCallingTask(((BaseTransaction) (this)),
((SipMessage) (sipRequest))))), _fldnull);
return 1;
case 5:
throw new IllegalStateException(
"ClientTransaction.sendRequest S_COMPLETED");
case 2:
case 4:
default:
throw new IllegalStateException(
"ClientTransaction.sendRequest default:");
}
// }
// catch (Exception exception) {
// exception.printStackTrace();
// return -1;
// }
}
/**
* reSendRequest
*
* @param sipRequest
* @return result, 1:success, -1:fail
*/
public int reSendRequest(SipRequest sipRequest) {
// try {
switch (_fldint) {
case 3:
if (b != 6) {
Protocol.echo("ClientTransaction.resendRequest: resend timer fired ");
routeRequest(((SipMessage) (sipRequest)));
m_txHandler.resendSipMessage(((SipMessage) (sipRequest)), true);
_fldnull = Math.min(_fldnull * 2, 4000);
b++;
Protocol.echo("ClientTransaction.resend: new Timer E = " + _fldnull);
m_timer.schedule(((java.util.TimerTask) (TimerTaskImpl
.createCallingTask(((BaseTransaction) (this)),
((SipMessage) (sipRequest))))), _fldnull);
return 1;
}
else {
Protocol.echo("ClientTransaction.resend: max resend reached");
_fldnull = 500;
b = 0;
m_sipClientConnection.notifyResponse();
return 1;
}
case 4:
return 1;
default:
return 1;
}
// }
// catch (Exception exception) {
// exception.printStackTrace();
// return -1;
// }
}
/**
* ackTimer
*/
public int ackTimer() {
// try {
switch (_fldint) {
case 5:
Protocol.echo("ClientTransaction.ackTimer: S_COMPLETED");
_fldint = 7;
timeout();
return 1;
default:
return -1;
}
// }
// catch (Exception exception) {
// exception.printStackTrace();
// return -1;
// }
}
/**
* transactionTimer
*/
public void transactionTimer() {
// try {
switch (_fldint) {
case 5: // '\005'
case 7: // '\007'
timeout();
return;
default:
return;
}
// }
// catch (Exception exception) {
// exception.printStackTrace();
// }
}
/**
* timeout
*/
private void timeout() {
m_timer.cancel();
m_txHandler.removeTransaction(((BaseTransaction) (this)));
_fldint = 8;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -