Revision: ad6a6cab53a1
Author:   dmisol <[email protected]>
Date:     Tue Sep  3 23:15:26 2013 UTC
Log:      processing some cases of faulty behaviour

http://code.google.com/p/isup2sip/source/detail?r=ad6a6cab53a1

Modified:
/core/domain/src/main/java/org/mobicents/isup2sip/management/CicManagement.java
 /core/slee/sbbs/src/main/java/org/mobicents/isup2sip/sbb/Isup2SipSbb.java
 /core/slee/sbbs/src/main/resources/META-INF/sbb-jar.xml

=======================================
--- /core/domain/src/main/java/org/mobicents/isup2sip/management/CicManagement.java Wed Aug 28 15:16:20 2013 UTC +++ /core/domain/src/main/java/org/mobicents/isup2sip/management/CicManagement.java Tue Sep 3 23:15:26 2013 UTC
@@ -91,4 +91,13 @@
                        }
                }
        }
+
+       public void setUnknown(int cic) {
+               synchronized (synchCic) {
+                       try {
+                               channelByCic.get(cic).setState(State.UNKNOWN);
+                       } catch (Exception e) {
+                       }
+               }
+       }
 }
=======================================
--- /core/slee/sbbs/src/main/java/org/mobicents/isup2sip/sbb/Isup2SipSbb.java Wed Aug 28 15:16:20 2013 UTC +++ /core/slee/sbbs/src/main/java/org/mobicents/isup2sip/sbb/Isup2SipSbb.java Tue Sep 3 23:15:26 2013 UTC
@@ -22,6 +22,7 @@

 package org.mobicents.isup2sip.sbb;

+//import jain.protocol.ip.mgcp.JainMgcpCommandEvent;
 import jain.protocol.ip.mgcp.JainMgcpEvent;
 import jain.protocol.ip.mgcp.message.CreateConnection;
 import jain.protocol.ip.mgcp.message.CreateConnectionResponse;
@@ -77,9 +78,11 @@
 import javax.slee.UnrecognizedActivityException;
 import javax.slee.facilities.Tracer;

+
 import net.java.slee.resource.mgcp.JainMgcpProvider;
 import net.java.slee.resource.mgcp.MgcpActivityContextInterfaceFactory;
 import net.java.slee.resource.mgcp.MgcpConnectionActivity;
+import net.java.slee.resource.mgcp.event.TransactionTimeout;
 import net.java.slee.resource.sip.CancelRequestEvent;
 import net.java.slee.resource.sip.DialogActivity;
 import net.java.slee.resource.sip.SipActivityContextInterfaceFactory;
@@ -92,6 +95,7 @@
 import org.mobicents.isup2sip.sbb.CodingShemes;
 import org.mobicents.protocols.ss7.isup.ISUPMessageFactory;
 import org.mobicents.protocols.ss7.isup.ISUPParameterFactory;
+import org.mobicents.protocols.ss7.isup.ISUPTimeoutEvent;
 import org.mobicents.protocols.ss7.isup.message.AddressCompleteMessage;
 import org.mobicents.protocols.ss7.isup.message.AnswerMessage;
 import org.mobicents.protocols.ss7.isup.message.InitialAddressMessage;
@@ -106,6 +110,7 @@
import org.mobicents.protocols.ss7.isup.message.parameter.ForwardCallIndicators; import org.mobicents.protocols.ss7.isup.message.parameter.NatureOfConnectionIndicators; import org.mobicents.protocols.ss7.isup.message.parameter.TransmissionMediumRequirement;
+import org.mobicents.slee.resources.ss7.isup.events.TimeoutEvent;
 import org.mobicents.slee.resources.ss7.isup.ratype.CircuitActivity;
 import org.mobicents.slee.resources.ss7.isup.ratype.RAISUPProvider;

@@ -178,9 +183,7 @@
                        // send "trying" response
                        sipReplyToRequestEvent(sipEvent, Response.TRYING);

-                       String sdp = new String(request.getRawContent());
-                       this.setSdp(sdp);
-
+                       String sdp = new String(request.getRawContent());
                        sendCRCX(sdp);

                        // with a proper CRCX_RESP, sent IAM..
@@ -239,6 +242,8 @@
contentType = headerFactory.createContentTypeHeader("application", "sdp");
                        } catch (ParseException ex) {}

+ /* SDP is needed to make linphone satisfied, that is the only reason to keep SDP
+                        * I have no idea why it is not enough to get SDP 
within */
response = messageFactory.createResponse(Response.OK, sipRequest, contentType, this.getSdp().getBytes());

                        AddressFactory addressFactory = 
sipProvider.getAddressFactory();
@@ -296,69 +301,28 @@
                        e.printStackTrace();
                }

-               final int cic = this.getCicValue();
-               ReleaseCompleteMessage msg = isupMessageFactory.createRLC(cic);
-        msg.setSls(cic);
-
-        try {
-               // just to play with stack, send smth
-               isupProvider.sendMessage(msg,remoteSPC);
-            } catch (Exception e) {
-               // TODO Auto-generated catch block
-                       e.printStackTrace();
-        }
-
+               sendRLC();
         sendDLCX();
+               detachAll();
        }
-/*
-       private void releaseState() {

-               ActivityContextInterface[] activities = 
getSbbContext().getActivities();
-               SbbLocalObject sbbLocalObject = 
getSbbContext().getSbbLocalObject();
-
-               MgcpEndpointActivity mea = getEndpointActivity("ivr");
-               if(mea!=null)
-               {
-                       //empty RQNT, this is requiered to flush data.
-                       sendRQNT(null,false,false);
-               }
-
-               for (ActivityContextInterface attachedAci : activities) {
-                       if (attachedAci.getActivity() instanceof Dialog) {
-                               attachedAci.detach(sbbLocalObject);
-
-                       }
-                       if (attachedAci.getActivity() instanceof 
MgcpConnectionActivity) {
-                               attachedAci.detach(sbbLocalObject);
-
-
-                       }
-
-                       if ( (attachedAci.getActivity() instanceof 
MgcpEndpointActivity)) {
-                               attachedAci.detach(sbbLocalObject);
-
-                               MgcpEndpointActivity mgcpEndpoint = 
(MgcpEndpointActivity) attachedAci
-                                               .getActivity();
-                               DeleteConnection deleteConnection = new 
DeleteConnection(this,
-                                               
mgcpEndpoint.getEndpointIdentifier());
-                               
deleteConnection.setCallIdentifier(this.getCallIdentifier());
-
- deleteConnection.setTransactionHandle(mgcpProvider.getUniqueTransactionHandler());
-                               mgcpProvider.sendMgcpEvents(
-                                               new JainMgcpEvent[] { 
deleteConnection });
-                               log.info("Delete connections: 
\n"+deleteConnection);
-
-                       }
-
-               }
-               this.setCallIdentifier(null);
-       }
- */
public void onRLC(ReleaseCompleteMessage rlc, ActivityContextInterface aci){ tracer.warning("isup RLC " + rlc.getCircuitIdentificationCode().getCIC());
                showMe();
+               detachAll();
        }

+       public void onTIMEOUT(TimeoutEvent event, ActivityContextInterface aci){
+               tracer.info("timeout" + event + " for msg=" + 
event.getMessage());
+               if(event.getMessage() instanceof InitialAddressMessage){
+                       cicManagement.setUnknown(this.getCicValue());
+                       sendSipRRequestTimeout();
+                       sendDLCX();
+                       detachAll();
+               }
+       }
+
+

 // generic MGCP responces
        public void onCreateConnectionResponse(CreateConnectionResponse event,
@@ -381,19 +345,19 @@
        }

        public void onDeleteConnectionResponse(DeleteConnectionResponse event,
-                               ActivityContextInterface aci) {}
+                               ActivityContextInterface aci) {
+               // I will never get it, I hope: ACI will be detached already
+       }

-
-
-
-
-
-
-
-
-
-
-
+ public void onMgcpTIMEOUT(TransactionTimeout event, ActivityContextInterface aci){
+               tracer.severe("Mgcp Timeout");
+
+               if(event.getJainMgcpCommandEvent() instanceof CreateConnection){
+                       cicManagement.setUnknown(this.getCicValue());
+                       sendSipRRequestTimeout();
+                       detachAll();
+               }
+       }

public void onReInviteEvent(RequestEvent sipEvent, ActivityContextInterface aci) {
                tracer.severe("on Re-Invite: " + sipEvent);
@@ -406,8 +370,7 @@
                catch (Exception e){
                        tracer.severe("exception while fetching sdp");
                }
-               sipReplyToRequestEvent(sipEvent, Response.OK);
-
+               sipReplyToRequestEvent(sipEvent, Response.OK);
        }

        // Responses
@@ -429,16 +392,16 @@
                tracer.severe("cseq hdr:" + sipEvent + " ; method=" + 
cseq.getMethod());
                if (cseq.getMethod().equals(Request.INVITE)) {
                        try {
-                               final Request ack = 
sipEvent.getDialog().createAck(
-                                               cseq.getSeqNumber());
-                                               try{
-                                                       String sdp = new 
String(sipEvent.getResponse().getRawContent());
-                                                       tracer.severe("on2xx: sdp is 
" + sdp);
-                                                       sendMDCX(sdp);
-                                               }
-                                               catch (Exception e){
-                                                       tracer.severe("on2xx: 
exception while fetching sdp");
-                                               }
+                               String sdp = new 
String(sipEvent.getResponse().getRawContent());
+                               tracer.severe("on2xx: sdp is " + sdp);
+                               sendMDCX(sdp);
+
+                               Request ack = 
sipEvent.getDialog().createAck(cseq.getSeqNumber());
+                               /* 3 lines to make Linphone happy, but it looks 
noncense to me */
+//                             sdp = this.getSdp();
+// ContentTypeHeader cth = sipProvider.getHeaderFactory().createContentTypeHeader("application", "sdp");
+//                             ack.setContent(sdp, cth);
+
                                sipEvent.getDialog().sendAck(ack);
                        } catch (Exception e) {
                                tracer.severe("Unable to ack INVITE's 200 ok", 
e);
@@ -653,6 +616,9 @@
                                 * (1) SIP: send progress with sdp
                                 * (2) ISUP: send IAM
                                 */
+
+                               this.setSdp(sdp);
+
                                ContentTypeHeader contentType = null;
                                try {
contentType = headerFactory.createContentTypeHeader("application", "sdp");
@@ -660,7 +626,7 @@

                                Response response = null;
                                try {
- response = messageFactory.createResponse(Response.SESSION_PROGRESS, request, contentType, sdp.getBytes()); + response = messageFactory.createResponse(Response.SESSION_PROGRESS, request, contentType, sdp);
                                } catch (ParseException ex) {
tracer.warning("ParseException while trying to create SESSION_PROGRESS Response", ex);
                                }
@@ -746,11 +712,10 @@
                                 * (1?) ISUP: send ACM
                                 * (2) SIP: send INVITE
                                 */
-
+                               this.setSdp(sdp);
+
                                sendACM();

-
-
                                ContentTypeHeader contentType = null;
                                try {
contentType = headerFactory.createContentTypeHeader("application", "sdp");
@@ -777,10 +742,8 @@

                                        List<ViaHeader> viaHeaders = new 
ArrayList<ViaHeader>(1);
                                        ListeningPoint listeningPoint = 
sipProvider.getListeningPoints()[0];
-                                       ViaHeader viaHeader = 
sipProvider.getHeaderFactory()
-                                                       
.createViaHeader(listeningPoint.getIPAddress(),
-                                                                       
listeningPoint.getPort(),
-                                                                       
listeningPoint.getTransport(), null);
+ ViaHeader viaHeader = sipProvider.getHeaderFactory().createViaHeader(listeningPoint.getIPAddress(),
+                                                       
listeningPoint.getPort(),listeningPoint.getTransport(), null);
                                        viaHeaders.add(viaHeader);
                                        ContentTypeHeader contentTypeHeader = 
headerFactory
                                                        
.createContentTypeHeader("application", "sdp");
@@ -792,52 +755,34 @@
                                        MessageFactory messageFactory = 
sipProvider.getMessageFactory();


-
-
-
-                                       try {
-                                                       // create request uri
- tracer.warning("own SIP ip is " + isup2SipPropertiesManagement.getSipIp() +
-                                                                       ", SIP peer 
is " + isup2SipPropertiesManagement.getSipPeer());
- URI requestURI = addressFactory.createSipURI(this.getBNumber(),isup2SipPropertiesManagement.getSipPeer());
-                                                       tracer.warning("sip uri is 
"+requestURI);
+ tracer.warning("own SIP ip is " + isup2SipPropertiesManagement.getSipIp() +
+                                                       ", SIP peer is " + 
isup2SipPropertiesManagement.getSipPeer());
+                                       // create request uri
+ URI requestURI = addressFactory.createSipURI(this.getBNumber(),isup2SipPropertiesManagement.getSipPeer());

-                                                       Address contactAddress 
= addressFactory
-                                                                       
.createAddress("sip:" + isup2SipPropertiesManagement.getSipIp());
- ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);
-                                                       tracer.warning("Contact is 
"+ contactHeader);
+ Address contactAddress = addressFactory.createAddress("sip:" + isup2SipPropertiesManagement.getSipIp()); + ContactHeader contactHeader = headerFactory.createContactHeader(contactAddress);

-                                                       // create request
-                                                       Request invite = 
messageFactory.createRequest(requestURI,
-                                                                       
Request.INVITE,
-                                                                       
callIdHeader,
-                                                                       
cSeqHeader,
-                                                                       
fromHeader,
-                                                                       
toHeader, viaHeaders, maxForwardsHeader,
-                                                                       
contentTypeHeader, sdp);
-                                                       
invite.setHeader(contactHeader);
+                                       // create request
+ Request invite = messageFactory.createRequest(requestURI, Request.INVITE, callIdHeader, cSeqHeader, + fromHeader, toHeader, viaHeaders, maxForwardsHeader, contentTypeHeader, sdp);
+                                       invite.setHeader(contactHeader);

-                                                       // create client 
transaction and send request
-                                                       ClientTransaction 
clientTransaction = sipProvider
-                                                                       
.getNewClientTransaction(invite);
+                                       // create client transaction and send 
request
+ ClientTransaction clientTransaction = sipProvider.getNewClientTransaction(invite);

- final DialogActivity sipDialog = (DialogActivity) sipProvider.getNewDialog(clientTransaction); - final ActivityContextInterface sipDialogACI = sipActivityContextInterfaceFactory.getActivityContextInterface(sipDialog); - final SbbLocalObject sbbLocalObject = sbbContext.getSbbLocalObject();
-                                                       
sipDialogACI.attach(sbbLocalObject);
+ final DialogActivity sipDialog = (DialogActivity) sipProvider.getNewDialog(clientTransaction); + final ActivityContextInterface sipDialogACI = sipActivityContextInterfaceFactory.getActivityContextInterface(sipDialog);
+                                       final SbbLocalObject sbbLocalObject = 
sbbContext.getSbbLocalObject();
+                                       sipDialogACI.attach(sbbLocalObject);

-                                                       
clientTransaction.sendRequest();
+                                       clientTransaction.sendRequest();

-                                                       
this.setSipRequest(invite);
-                                       } catch (Throwable f) {
-                                                       tracer.severe("Failed to 
create and send message", f);
-                                       }
+                                       this.setSipRequest(invite);

-                               } catch (Throwable e) {
-                                       tracer.severe("Failed to create message 
headers", e);
-                               }
-
-
+                               } catch (Throwable f) {
+                                       tracer.severe("Failed to create and send 
message", f);
+                               }
                }
        }

@@ -892,6 +837,22 @@
                        e.printStackTrace();
                }
        }
+
+       void sendRLC(){
+               final int cic = this.getCicValue();
+               ReleaseCompleteMessage msg = isupMessageFactory.createRLC(cic);
+        msg.setSls(cic);
+
+        try {
+               // just to play with stack, send smth
+               isupProvider.sendMessage(msg,remoteSPC);
+            } catch (Exception e) {
+               // TODO Auto-generated catch block
+                       e.printStackTrace();
+        }
+       }
+
+
 // MGCP functions

        void sendCRCX(String sdp){
@@ -941,7 +902,7 @@
                this.setMgcpCallIdentifier(mgcpCallID.toString());
EndpointIdentifier endpointID = new EndpointIdentifier(channel.getEndpointId(),channel.getGatewayAddress()); ConnectionIdentifier connectionIdentifier = new ConnectionIdentifier(this.getMgcpConnectionIdentifier()); - ModifyConnection modifyConnection = new ModifyConnection(this, mgcpCallID, endpointID,connectionIdentifier); + ModifyConnection modifyConnection = new ModifyConnection(this, mgcpCallID, endpointID, connectionIdentifier);
                try {
modifyConnection.setRemoteConnectionDescriptor(new ConnectionDescriptor(sdp));
                } catch (Exception e) {
@@ -974,8 +935,11 @@
                final SbbLocalObject sbbLocalObject = 
sbbContext.getSbbLocalObject();
final Channel channel = cicManagement.getChannelByCic(this.getCicValue()); CallIdentifier mgcpCallID = new CallIdentifier(this.getMgcpCallIdentifier()); - EndpointIdentifier endpointID = new EndpointIdentifier(channel.getEndpointId(),channel.getGatewayAddress()); - DeleteConnection deleteConnection = new DeleteConnection(this, mgcpCallID, endpointID);
+
+ ConnectionIdentifier connectionIdentifier = new ConnectionIdentifier(this.getMgcpConnectionIdentifier());
+
+ EndpointIdentifier endpointID = new EndpointIdentifier(channel.getEndpointId(), channel.getGatewayAddress()); + DeleteConnection deleteConnection = new DeleteConnection(this, mgcpCallID, endpointID, connectionIdentifier);
                final int txID = mgcpProvider.getUniqueTransactionHandler();
                deleteConnection.setTransactionHandle(txID);

@@ -996,4 +960,33 @@
                tracer.info("DLCX sent; ep ID=" + endpointID + " sbb=" + 
sbbLocalObject);

        }
+
+       public void sendSipRRequestTimeout(){
+               final Request request = this.getSipRequest();
+               Response response = null;
+               try {
+ response = messageFactory.createResponse(Response.REQUEST_TIMEOUT, request);
+               } catch (ParseException ex) {
+ tracer.warning("ParseException while trying to create REQUEST_TIMEOUT Response", ex);
+               }
+
+               try {
+                       this.getServerTransaction().sendResponse(response);
+               } catch (InvalidArgumentException ex) {
+ tracer.warning("InvalidArgumentException while trying to send REQUEST_TIMEOUT Response", ex);
+               } catch (SipException ex) {
+ tracer.warning("SipException while trying to send REQUEST_TIMEOUT Response", ex);
+               }
+       }
+
+       private void detachAll() {
+               ActivityContextInterface[] activities = 
sbbContext.getActivities();
+               SbbLocalObject sbbLocalObject = sbbContext.getSbbLocalObject();
+
+               for (ActivityContextInterface attachedAci : activities) {
+                       tracer.severe("activity " + attachedAci.getActivity());
+                       attachedAci.detach(sbbLocalObject);
+               }
+       }
+
 }
=======================================
--- /core/slee/sbbs/src/main/resources/META-INF/sbb-jar.xml Wed Aug 28 15:16:20 2013 UTC +++ /core/slee/sbbs/src/main/resources/META-INF/sbb-jar.xml Tue Sep 3 23:15:26 2013 UTC
@@ -93,14 +93,24 @@
                                <event-type-version>1.0</event-type-version>
                        </event-type-ref>
                </event>
-<!--                <event event-direction="Receive" initial-event="False">
-                       <event-name>TRANSACTION_TIMEOUT</event-name>
+               <event event-direction="Receive" initial-event="False">
+                       <event-name>TIMEOUT</event-name>
                        <event-type-ref>
<event-type-name>net.java.slee.resource.isup.TRANSACTION_TIMEOUT</event-type-name>
                                <event-type-vendor>net.java</event-type-vendor>
                                <event-type-version>1.0</event-type-version>
                        </event-type-ref>
-               </event>-->
+               </event>
+
+
+               <event event-direction="Receive" initial-event="False">
+                       <event-name>MgcpTIMEOUT</event-name>
+                       <event-type-ref>
+ <event-type-name>net.java.slee.resource.mgcp.TRANSACTION_TIMEOUT</event-type-name>
+                               <event-type-vendor>net.java</event-type-vendor>
+                               <event-type-version>1.0</event-type-version>
+                       </event-type-ref>
+               </event>

                <event event-direction="Receive" initial-event="True">
                        <event-name>InviteEvent</event-name>

--

--- You received this message because you are subscribed to the Google Groups "mobicents-commits" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to