Revision: 9155
Author: emmartins
Date: Tue Dec 29 05:25:00 2009
Log: Fixes issue 1136
http://code.google.com/p/mobicents/source/detail?r=9155
Modified:
/trunk/servers/jain-slee/resources/sip11/ra/src/main/java/org/mobicents/slee/resource/sip11/SipResourceAdaptor.java
/trunk/servers/jain-slee/resources/sip11/ra/src/main/java/org/mobicents/slee/resource/sip11/SleeSipProviderImpl.java
=======================================
---
/trunk/servers/jain-slee/resources/sip11/ra/src/main/java/org/mobicents/slee/resource/sip11/SipResourceAdaptor.java
Mon Nov 16 10:27:50 2009
+++
/trunk/servers/jain-slee/resources/sip11/ra/src/main/java/org/mobicents/slee/resource/sip11/SipResourceAdaptor.java
Tue Dec 29 05:25:00 2009
@@ -471,6 +471,8 @@
ctw.setResourceAdaptor(this);
// get address where to fire event
address = ctw.getEventFiringAddress();
+ //FIXME: determine if we should check here if dw is also an activity
and fire on it.
+ //specs do not cover this. See
SleeSipProviderImpl.getNewDialog(Transaction);
if (!ctw.isActivity()) {
handle = dw.getActivityHandle();
// (client tx that has a final response and is
not an activity must be
=======================================
---
/trunk/servers/jain-slee/resources/sip11/ra/src/main/java/org/mobicents/slee/resource/sip11/SleeSipProviderImpl.java
Mon Dec 21 04:00:29 2009
+++
/trunk/servers/jain-slee/resources/sip11/ra/src/main/java/org/mobicents/slee/resource/sip11/SleeSipProviderImpl.java
Tue Dec 29 05:25:00 2009
@@ -471,12 +471,33 @@
} else if (transaction.getClass() ==
ClientTransactionWrapper.class) {
// this is not efficient, but should not be used anyway
and saves
// more code scenarios
+ //FIXME: make ctw.isActivity == false, since dialog becomes
transaction, specs dont cover this.
+ //lets stick with ctw as response handler, dw will get state, but RA
impl will fire on ctw handle.
+ final ClientTransactionWrapper ctw = (ClientTransactionWrapper)
transaction;
+ final Dialog d =
provider.getNewDialog(ctw.getWrappedTransaction());
final Request r = transaction.getRequest();
+ final FromHeader fh =
(FromHeader)r.getHeader(FromHeader.NAME);
+ String localTag = d.getLocalTag();
+ if(localTag == null)
+ {
+ localTag = Utils.getInstance().generateTag();
+ try {
+
+ fh.setTag(localTag);
+ } catch (ParseException e) {
+ throw new SipException("Failed to set local
tag.", e);
+ }
+ }
+
final DialogWrapper dw = _getNewDialog(
- ((FromHeader)
r.getHeader(FromHeader.NAME)).getAddress(),
- Utils.getInstance().generateTag(),
+ fh.getAddress(),
+ localTag,
((ToHeader)
r.getHeader(ToHeader.NAME)).getAddress(), null);
+ //set wrapped dialog first.
+ dw.setWrappedDialog(d);
+ d.setApplicationData(dw);
dw.addOngoingTransaction((ClientTransactionWrapper)
transaction);
+
return dw;
} else {
throw new IllegalArgumentException("unknown transaction
class");