am 025a39af: SIP: misc fixes
Merge commit '025a39af346f39743c1e384b9000ce1baee36562' into gingerbread-plus-aosp * commit '025a39af346f39743c1e384b9000ce1baee36562': SIP: misc fixes
This commit is contained in:
@@ -620,13 +620,15 @@ class SipSessionGroup implements SipListener {
|
||||
Response.CALL_OR_TRANSACTION_DOES_NOT_EXIST);
|
||||
return true;
|
||||
} else if (evt instanceof TransactionTerminatedEvent) {
|
||||
if (evt instanceof TimeoutEvent) {
|
||||
processTimeout((TimeoutEvent) evt);
|
||||
} else {
|
||||
processTransactionTerminated(
|
||||
(TransactionTerminatedEvent) evt);
|
||||
if (isCurrentTransaction((TransactionTerminatedEvent) evt)) {
|
||||
if (evt instanceof TimeoutEvent) {
|
||||
processTimeout((TimeoutEvent) evt);
|
||||
} else {
|
||||
processTransactionTerminated(
|
||||
(TransactionTerminatedEvent) evt);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
} else if (isRequestEvent(Request.OPTIONS, evt)) {
|
||||
mSipHelper.sendResponse((RequestEvent) evt, Response.OK);
|
||||
return true;
|
||||
@@ -646,6 +648,34 @@ class SipSessionGroup implements SipListener {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isCurrentTransaction(TransactionTerminatedEvent event) {
|
||||
Transaction current = event.isServerTransaction()
|
||||
? mServerTransaction
|
||||
: mClientTransaction;
|
||||
Transaction target = event.isServerTransaction()
|
||||
? event.getServerTransaction()
|
||||
: event.getClientTransaction();
|
||||
|
||||
if ((current != target) && (mState != SipSession.State.PINGING)) {
|
||||
Log.d(TAG, "not the current transaction; current="
|
||||
+ toString(current) + ", target=" + toString(target));
|
||||
return false;
|
||||
} else if (current != null) {
|
||||
Log.d(TAG, "transaction terminated: " + toString(current));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private String toString(Transaction transaction) {
|
||||
if (transaction == null) return "null";
|
||||
Request request = transaction.getRequest();
|
||||
Dialog dialog = transaction.getDialog();
|
||||
CSeqHeader cseq = (CSeqHeader) request.getHeader(CSeqHeader.NAME);
|
||||
return String.format("req=%s,%s,s=%s,ds=%s,", request.getMethod(),
|
||||
cseq.getSeqNumber(), transaction.getState(),
|
||||
((dialog == null) ? "-" : dialog.getState()));
|
||||
}
|
||||
|
||||
private void processTransactionTerminated(
|
||||
TransactionTerminatedEvent event) {
|
||||
switch (mState) {
|
||||
@@ -661,19 +691,7 @@ class SipSessionGroup implements SipListener {
|
||||
}
|
||||
|
||||
private void processTimeout(TimeoutEvent event) {
|
||||
Log.d(TAG, "processing Timeout..." + event);
|
||||
Transaction current = event.isServerTransaction()
|
||||
? mServerTransaction
|
||||
: mClientTransaction;
|
||||
Transaction target = event.isServerTransaction()
|
||||
? event.getServerTransaction()
|
||||
: event.getClientTransaction();
|
||||
|
||||
if ((current != target) && (mState != SipSession.State.PINGING)) {
|
||||
Log.d(TAG, "not the current transaction; current=" + current
|
||||
+ ", timed out=" + target);
|
||||
return;
|
||||
}
|
||||
Log.d(TAG, "processing Timeout...");
|
||||
switch (mState) {
|
||||
case SipSession.State.REGISTERING:
|
||||
case SipSession.State.DEREGISTERING:
|
||||
@@ -1000,19 +1018,19 @@ class SipSessionGroup implements SipListener {
|
||||
Response response = event.getResponse();
|
||||
int statusCode = response.getStatusCode();
|
||||
if (expectResponse(Request.CANCEL, evt)) {
|
||||
if (statusCode == Response.OK) {
|
||||
// do nothing; wait for REQUEST_TERMINATED
|
||||
return true;
|
||||
}
|
||||
} else if (expectResponse(Request.INVITE, evt)) {
|
||||
switch (statusCode) {
|
||||
case Response.OK:
|
||||
// do nothing; wait for REQUEST_TERMINATED
|
||||
outgoingCall(evt); // abort Cancel
|
||||
return true;
|
||||
case Response.REQUEST_TERMINATED:
|
||||
endCallNormally();
|
||||
return true;
|
||||
}
|
||||
} else if (expectResponse(Request.INVITE, evt)) {
|
||||
if (statusCode == Response.OK) {
|
||||
outgoingCall(evt); // abort Cancel
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -590,7 +590,10 @@ public class SipPhone extends SipPhoneBase {
|
||||
// set state to DISCONNECTED only when all conns are disconnected
|
||||
if (state != State.DISCONNECTED) {
|
||||
boolean allConnectionsDisconnected = true;
|
||||
Log.v(LOG_TAG, "---check if all connections are disconnected: "
|
||||
+ connections.size());
|
||||
for (Connection c : connections) {
|
||||
Log.v(LOG_TAG, " state=" + c.getState() + ": " + c);
|
||||
if (c.getState() != State.DISCONNECTED) {
|
||||
allConnectionsDisconnected = false;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user