Revision: 16694
Author: [email protected]
Date: Wed Jan 26 06:46:26 2011
Log: Fixes Issue 1053
http://code.google.com/p/mobicents/source/detail?r=16694

Added:
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/simple/rfc3263 /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/simple/rfc3263/ShootistSipServletRFC3263Test.java
Modified:
/trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java
 /trunk/servers/sip-servlets/sip-servlets-test-suite/.classpath
 /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/pom.xml
/trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/ProtocolObjects.java /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java

=======================================
--- /dev/null
+++ /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/simple/rfc3263/ShootistSipServletRFC3263Test.java Wed Jan 26 06:46:26 2011
@@ -0,0 +1,279 @@
+/*
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.mobicents.servlet.sip.testsuite.simple.rfc3263;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import javax.sip.SipProvider;
+import javax.sip.message.Response;
+
+import org.apache.catalina.deploy.ApplicationParameter;
+import org.apache.log4j.Logger;
+import org.mobicents.ext.javax.sip.dns.DNSLookupPerformer;
+import org.mobicents.ext.javax.sip.dns.DefaultDNSLookupPerformer;
+import org.mobicents.servlet.sip.SipServletTestCase;
+import org.mobicents.servlet.sip.core.session.SipStandardManager;
+import org.mobicents.servlet.sip.startup.SipContextConfig;
+import org.mobicents.servlet.sip.startup.SipStandardContext;
+import org.mobicents.servlet.sip.startup.SipStandardService;
+import org.mobicents.servlet.sip.testsuite.ProtocolObjects;
+import org.mobicents.servlet.sip.testsuite.TestSipListener;
+import org.xbill.DNS.DClass;
+import org.xbill.DNS.NAPTRRecord;
+import org.xbill.DNS.Name;
+import org.xbill.DNS.Record;
+import org.xbill.DNS.SRVRecord;
+import org.xbill.DNS.TextParseException;
+
+public class ShootistSipServletRFC3263Test extends SipServletTestCase {
+ private static transient Logger logger = Logger.getLogger(ShootistSipServletRFC3263Test.class);
+       private static final String TRANSPORT = "udp";
+       private static final boolean AUTODIALOG = true;
+       private static final int TIMEOUT = 80000;
+       private static final int DIALOG_TIMEOUT = 40000;
+//     private static final int TIMEOUT = 100000000;
+
+       TestSipListener receiver;
+       ProtocolObjects receiverProtocolObjects;
+
+       TestSipListener badReceiver;
+       ProtocolObjects badReceiverProtocolObjects;
+
+       public ShootistSipServletRFC3263Test(String name) {
+               super(name);
+               startTomcatOnStartup = false;
+               autoDeployOnStartup = false;
+       }
+
+       @Override
+       public void deployApplication() {
+               assertTrue(tomcat.deployContext(
+ projectHome + "/sip-servlets-test-suite/applications/shootist-sip-servlet/src/main/sipapp",
+                               "sip-test-context", "sip-test"));
+       }
+
+       public SipStandardContext deployApplication(String name, String value) {
+               SipStandardContext context = new SipStandardContext();
+ context.setDocBase(projectHome + "/sip-servlets-test-suite/applications/shootist-sip-servlet/src/main/sipapp");
+               context.setName("sip-test-context");
+               context.setPath("sip-test");
+               context.addLifecycleListener(new SipContextConfig());
+               context.setManager(new SipStandardManager());
+               ApplicationParameter applicationParameter = new 
ApplicationParameter();
+               applicationParameter.setName(name);
+               applicationParameter.setValue(value);
+               context.addApplicationParameter(applicationParameter);
+               assertTrue(tomcat.deployContext(context));
+               return context;
+       }
+
+       public SipStandardContext deployApplication(Map<String, String> params) 
{
+               SipStandardContext context = new SipStandardContext();
+ context.setDocBase(projectHome + "/sip-servlets-test-suite/applications/shootist-sip-servlet/src/main/sipapp");
+               context.setName("sip-test-context");
+               context.setPath("sip-test");
+               context.addLifecycleListener(new SipContextConfig());
+               context.setManager(new SipStandardManager());
+               for (Entry<String, String> param : params.entrySet()) {
+                       ApplicationParameter applicationParameter = new 
ApplicationParameter();
+                       applicationParameter.setName(param.getKey());
+                       applicationParameter.setValue(param.getValue());
+                       context.addApplicationParameter(applicationParameter);
+               }
+               assertTrue(tomcat.deployContext(context));
+               return context;
+       }
+
+       public SipStandardContext deployApplicationServletListenerTest() {
+               SipStandardContext context = new SipStandardContext();
+ context.setDocBase(projectHome + "/sip-servlets-test-suite/applications/shootist-sip-servlet/src/main/sipapp");
+               context.setName("sip-test-context");
+               context.setPath("sip-test");
+               context.addLifecycleListener(new SipContextConfig());
+               context.setManager(new SipStandardManager());
+               ApplicationParameter applicationParameter = new 
ApplicationParameter();
+               applicationParameter.setName("testServletListener");
+               applicationParameter.setValue("true");
+               context.addApplicationParameter(applicationParameter);
+               assertTrue(tomcat.deployContext(context));
+               return context;
+       }
+
+       @Override
+       protected String getDarConfigurationFile() {
+ return "file:///" + projectHome + "/sip-servlets-test-suite/testsuite/src/test/resources/" + + "org/mobicents/servlet/sip/testsuite/simple/shootist-sip-servlet-dar.properties";
+       }
+
+       @Override
+       protected void setUp() throws Exception {
+        super.setUp();
+       }
+
+       /*
+ * Making sure the procedures of retrying the next hop of RFC 3263 are working
+        */
+       public void testShootist() throws Exception {
+//             receiver.sendInvite();
+               receiverProtocolObjects =new ProtocolObjects(
+                               "receiver", "gov.nist", TRANSPORT, AUTODIALOG, 
null, null, null);
+ receiver = new TestSipListener(5080, 5070, receiverProtocolObjects, false);
+               SipProvider receiverProvider = receiver.createProvider();
+               receiverProvider.addSipListener(receiver);
+               receiverProtocolObjects.start();
+
+               badReceiverProtocolObjects =new ProtocolObjects(
+                               "bad-receiver", "gov.nist", TRANSPORT, 
AUTODIALOG, null, null, null);
+ badReceiver = new TestSipListener(5081, 5070, badReceiverProtocolObjects, false);
+               SipProvider badReceiverProvider = badReceiver.createProvider();
+               badReceiverProvider.addSipListener(badReceiver);
+               badReceiverProtocolObjects.start();
+               badReceiver.setDropRequest(true);
+               String host = "mobicents.org";
+
+               tomcat.startTomcat();
+
+               mockDNSLookup(host);
+
+               deployApplication("host", host);
+               Thread.sleep(TIMEOUT);
+               assertFalse(badReceiver.getByeReceived());
+               assertTrue(receiver.getByeReceived());
+       }
+
+       private void mockDNSLookup(String host) throws TextParseException {
+ DNSLookupPerformer dnsLookupPerformer = mock(DefaultDNSLookupPerformer.class);
+               //mocking the DNS Lookups to match our test cases
+ tomcat.getSipService().getSipApplicationDispatcher().getDNSServerLocator().setDnsLookupPerformer(dnsLookupPerformer);
+
+               Set<String> supportedTransports = new HashSet<String>();
+               supportedTransports.add(TRANSPORT);
+
+               List<NAPTRRecord> mockedNAPTRRecords = new 
LinkedList<NAPTRRecord>();
+ // mocking the name because localhost is not absolute and localhost. cannot be resolved
+               Name name = mock(Name.class);
+               when(name.isAbsolute()).thenReturn(true);
+               when(name.toString()).thenReturn("localhost");
+ mockedNAPTRRecords.add(new NAPTRRecord(new Name(host + "."), DClass.IN, 1000, 0, 0, "s", "SIP+D2U", "", new Name("_sip._" + TRANSPORT.toLowerCase() + "." + host + "."))); + when(dnsLookupPerformer.performNAPTRLookup(host, false, supportedTransports)).thenReturn(mockedNAPTRRecords);
+               List<Record> mockedSRVRecords = new LinkedList<Record>();
+ mockedSRVRecords.add(new SRVRecord(new Name("_sip._" + TRANSPORT.toLowerCase() + "." + host + "."), DClass.IN, 1000L, 1, 0, 5080, name)); + mockedSRVRecords.add(new SRVRecord(new Name("_sip._" + TRANSPORT.toLowerCase() + "." + host + "."), DClass.IN, 1000L, 0, 0, 5081, name)); + when(dnsLookupPerformer.performSRVLookup("_sip._" + TRANSPORT.toLowerCase() + "." + host + ".")).thenReturn(mockedSRVRecords);
+       }
+       /*
+ * Making sure the procedures of retrying the next hop of RFC 3263 are working
+        * and that the same hop is used for CANCEL
+        */
+       public void testShootistCancel() throws Exception {
+//             receiver.sendInvite();
+               receiverProtocolObjects =new ProtocolObjects(
+                               "receiver", "gov.nist", TRANSPORT, AUTODIALOG, 
null, null, null);
+ receiver = new TestSipListener(5080, 5070, receiverProtocolObjects, false);
+               receiver.setWaitForCancel(true);
+               SipProvider receiverProvider = receiver.createProvider();
+               receiverProvider.addSipListener(receiver);
+
+               badReceiverProtocolObjects =new ProtocolObjects(
+                               "bad-receiver", "gov.nist", TRANSPORT, 
AUTODIALOG, null, null, null);
+ badReceiver = new TestSipListener(5081, 5070, badReceiverProtocolObjects, false);
+               SipProvider badReceiverProvider = badReceiver.createProvider();
+               badReceiverProvider.addSipListener(badReceiver);
+               badReceiverProtocolObjects.start();
+               badReceiver.setDropRequest(true);
+
+               String host = "mobicents.org";
+
+               mockDNSLookup(host);
+
+               receiverProtocolObjects.start();
+               tomcat.startTomcat();
+               Map<String, String> params = new HashMap<String, String>();
+               params.put("host", host);
+               params.put("cancelOn1xx", "true");
+               deployApplication(params);
+
+               Thread.sleep(DIALOG_TIMEOUT + TIMEOUT);
+               assertFalse(badReceiver.getByeReceived());
+               assertFalse(badReceiver.isCancelReceived());
+               assertTrue(receiver.isCancelReceived());
+               List<String> allMessagesContent = 
receiver.getAllMessagesContent();
+               assertTrue(allMessagesContent.size() >= 2);
+ assertTrue("sipSessionReadyToInvalidate", allMessagesContent.contains("sipSessionReadyToInvalidate")); + assertTrue("sipAppSessionReadyToInvalidate", allMessagesContent.contains("sipAppSessionReadyToInvalidate"));
+       }
+
+       /*
+ * Making sure the procedures of retrying the next hop of RFC 3263 are working
+        * and that the ACK to an error response uses the same hop
+        */
+       public void testShootistErrorResponse() throws Exception {
+               Map<String, String> additionalProps = new HashMap<String, 
String>();
+ additionalProps.put(SipStandardService.PASS_INVITE_NON_2XX_ACK_TO_LISTENER, "true");
+
+               receiverProtocolObjects =new ProtocolObjects(
+ "receiver", "gov.nist", TRANSPORT, AUTODIALOG, null, null, null, additionalProps); + receiver = new TestSipListener(5080, 5070, receiverProtocolObjects, false);
+               receiver.setProvisionalResponsesToSend(new 
ArrayList<Integer>());
+               receiver.setFinalResponseToSend(Response.SERVER_INTERNAL_ERROR);
+               SipProvider receiverProvider = receiver.createProvider();
+               receiverProvider.addSipListener(receiver);
+               receiverProtocolObjects.start();
+
+               badReceiverProtocolObjects =new ProtocolObjects(
+ "bad-receiver", "gov.nist", TRANSPORT, AUTODIALOG, null, null, null, additionalProps); + badReceiver = new TestSipListener(5081, 5070, badReceiverProtocolObjects, false);
+               SipProvider badReceiverProvider = badReceiver.createProvider();
+               badReceiverProvider.addSipListener(badReceiver);
+               badReceiverProtocolObjects.start();
+               badReceiver.setDropRequest(true);
+               String host = "mobicents.org";
+
+               tomcat.startTomcat();
+
+               mockDNSLookup(host);
+
+               Map<String, String> params = new HashMap<String, String>();
+               params.put("host", host);
+               params.put("testErrorResponse", "true");
+               deployApplication(params);
+
+               Thread.sleep(DIALOG_TIMEOUT + TIMEOUT);
+               assertFalse(badReceiver.isAckReceived());
+               assertTrue(receiver.isAckReceived());
+               List<String> allMessagesContent = 
receiver.getAllMessagesContent();
+               assertEquals(2,allMessagesContent.size());
+ assertTrue("sipSessionReadyToInvalidate", allMessagesContent.contains("sipSessionReadyToInvalidate")); + assertTrue("sipAppSessionReadyToInvalidate", allMessagesContent.contains("sipAppSessionReadyToInvalidate"));
+       }
+
+       @Override
+       protected void tearDown() throws Exception {
+               receiverProtocolObjects.destroy();
+               logger.info("Test completed");
+               super.tearDown();
+       }
+}
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java Wed Jan 26 05:01:11 2011 +++ /trunk/servers/sip-servlets/sip-servlets-impl/src/main/java/org/mobicents/servlet/sip/message/SipServletRequestImpl.java Wed Jan 26 06:46:26 2011
@@ -84,6 +84,7 @@
 import javax.sip.header.ToHeader;
 import javax.sip.header.ViaHeader;
 import javax.sip.header.WWWAuthenticateHeader;
+import javax.sip.message.Message;
 import javax.sip.message.Request;
 import javax.sip.message.Response;

@@ -1429,8 +1430,9 @@
                                        // therefore constitutes a new SIP 
transaction).
ViaHeader viaHeader = (ViaHeader) getMessage().getHeader(ViaHeader.NAME);
                                        viaHeader.removeParameter("branch");
+                                       message = (Message) message.clone();
                                        if(logger.isDebugEnabled()) {
- logger.debug("sending request " + getMessage() + " to next hop " + nextHop + "discovered through RFC3263 mechanisms."); + logger.debug("sending request " + getMessage() + " to next hop " + nextHop + " discovered through RFC3263 mechanisms.");
                                        }
                                        setTransaction(null);
// That request is sent to the next element in the list as specified by RFC 2782.
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-test-suite/.classpath Thu Oct 28 13:12:24 2010 +++ /trunk/servers/sip-servlets/sip-servlets-test-suite/.classpath Wed Jan 26 06:46:26 2011
@@ -42,6 +42,7 @@
<classpathentry combineaccessrules="false" kind="src" path="/sip-servlets-impl"/> <classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/> <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/> + <classpathentry kind="var" path="M2_REPO/org/mockito/mockito-all/1.8.5/mockito-all-1.8.5.jar"/> <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/> <classpathentry kind="lib" path="testsuite/lib/sipunit.jar" sourcepath="/sipunit/src"/> <classpathentry kind="var" path="M2_REPO/org/apache/tomcat/catalina/6.0.29/catalina-6.0.29.jar" sourcepath="/TOMCAT_HOME/java"/>
@@ -59,6 +60,8 @@
<classpathentry kind="var" path="M2_REPO/javax/sip/jain-sip-api/1.2/jain-sip-api-1.2.jar"/> <classpathentry kind="var" path="M2_REPO/javax/sip/jain-sip-ri/1.2.X-SNAPSHOT/jain-sip-ri-1.2.X-SNAPSHOT.jar"/> <classpathentry kind="var" path="M2_REPO/org/mobicents/ha/javax/sip/mobicents-jain-sip-jboss4/0.6/mobicents-jain-sip-jboss4-0.6.jar"/> + <classpathentry kind="var" path="M2_REPO/org/mobicents/javax/sip/mobicents-jain-sip-ext/1.0-SNAPSHOT/mobicents-jain-sip-ext-1.0-SNAPSHOT.jar"/> + <classpathentry kind="var" path="M2_REPO/dnsjava/dnsjava/2.1.0/dnsjava-2.1.0.jar"/> <classpathentry combineaccessrules="false" kind="src" path="/sip-servlets-client"/> <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.1.1/activation-1.1.1.jar"/> <classpathentry kind="var" path="M2_REPO/javax/mail/mail/1.4/mail-1.4.jar"/>
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/pom.xml Tue Dec 21 13:15:57 2010 +++ /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/pom.xml Wed Jan 26 06:46:26 2011
@@ -10,12 +10,20 @@
        <packaging>jar</packaging>
        <name>Mobicents Sip Servlets Test Suite</name>
        <dependencies>
+               <!-- testing dependency -->
                <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>
                        <version>3.8.1</version>
                        <scope>test</scope>
                </dependency>
+               <dependency>
+                       <groupId>org.mockito</groupId>
+                       <artifactId>mockito-all</artifactId>
+                       <version>1.8.5</version>
+                       <scope>test</scope>
+               </dependency>
+
                <dependency>
                        <groupId>org.mobicents.servlet.sip</groupId>
                        <artifactId>sip-servlets-spec</artifactId>
@@ -157,6 +165,18 @@
                        <version>${mobicents.jain.sip.ha.version}</version>
                </dependency>

+               <dependency>
+                       <groupId>org.mobicents.javax.sip</groupId>
+                       <artifactId>mobicents-jain-sip-ext</artifactId>
+                       <version>${mobicents.jain.sip.ext.version}</version>
+               </dependency>
+
+               <dependency>
+                       <groupId>dnsjava</groupId>
+                       <artifactId>dnsjava</artifactId>
+                       <version>2.1.0</version>
+               </dependency>
+
                <dependency>
                        <groupId>org.mobicents.ha.javax.sip</groupId>
                        <artifactId>mobicents-jain-sip-jboss4</artifactId>
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/ProtocolObjects.java Fri Oct 29 01:26:25 2010 +++ /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/ProtocolObjects.java Wed Jan 26 06:46:26 2011
@@ -17,6 +17,7 @@
 package org.mobicents.servlet.sip.testsuite;

 import java.util.HashSet;
+import java.util.Map;
 import java.util.Properties;

 import javax.sip.ObjectInUseException;
@@ -52,8 +53,7 @@
        private boolean isStarted;

public ProtocolObjects(String stackname, String pathname, String transport, - boolean autoDialog, String outboundProxy, String threadPoolSize, String reentrantListener) {
-
+ boolean autoDialog, String outboundProxy, String threadPoolSize, String reentrantListener, Map<String, String> additionalProperties) {
                this.transport = transport;
                SipFactory sipFactory = SipFactory.getInstance();
                sipFactory.resetFactory();
@@ -92,6 +92,10 @@
                properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", 
Integer.valueOf(
                                logLevel).toString());

+               if(additionalProperties != null) {
+                       properties.putAll(additionalProperties);
+               }
+
                try {
                        // Create SipStack object
                        sipStack = sipFactory.createSipStack(properties);
@@ -114,6 +118,12 @@
                        throw new RuntimeException(ex);
                }
        }
+
+ public ProtocolObjects(String stackname, String pathname, String transport, + boolean autoDialog, String outboundProxy, String threadPoolSize, String reentrantListener) {
+
+ this(stackname, pathname, transport, autoDialog, outboundProxy, threadPoolSize, reentrantListener, null);
+       }

        public synchronized void destroy() {
                HashSet<SipProvider> hashSet = new HashSet<SipProvider>();
=======================================
--- /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java Mon Jan 3 05:51:04 2011 +++ /trunk/servers/sip-servlets/sip-servlets-test-suite/testsuite/src/test/java/org/mobicents/servlet/sip/testsuite/TestSipListener.java Wed Jan 26 06:46:26 2011
@@ -303,6 +303,8 @@
        private boolean testNextNonce =false;

        private String nextNonce = null;
+
+       private boolean dropRequest = false;

        class MyEventSource implements Runnable {
                private TestSipListener notifier;
@@ -567,7 +569,6 @@
                        this.transactionCount++;
                        logger.info("shootist:  Sending OK.");
                        logger.info("Dialog State = " + dialog.getState());
-
                } catch (Exception ex) {
                        ex.printStackTrace();
                }
@@ -1015,6 +1016,10 @@
                Request request = requestEvent.getRequest();
                inviteRequest = request;
                logger.info("shootme: got an Invite " + request);
+               if(dropRequest) {
+                       logger.warn("dropping " + request);
+                       return;
+               }
                try {
                        if(challengeRequests) {
                                // Verify AUTHORIZATION !!!!!!!!!!!!!!!!
@@ -1115,7 +1120,7 @@
Header rseqHeader = protocolObjects.headerFactory.createRSeqHeader(rseqNumber.getAndIncrement());
                                                response.addHeader(rseqHeader);
                                                
dialog.sendReliableProvisionalResponse(response);
-                                       }  else {
+                                       }  else {
                                                st.sendResponse(response);
                                        }
                                }
@@ -1541,6 +1546,7 @@
                                }
} else if(response.getStatusCode() == Response.RINGING && sendUpdateOn180) {
                                Request updateRequest = 
dialog.createRequest(Request.UPDATE);
+
                                ClientTransaction ct = sipProvider
                                                
.getNewClientTransaction(updateRequest);
                                dialog.sendRequest(ct);
@@ -2891,5 +2897,19 @@
        public void setTestNextNonce(boolean b) {
                this.testNextNonce  = b;
        }
+
+       /**
+        * @param dropRequest the dropRequest to set
+        */
+       public void setDropRequest(boolean dropRequest) {
+               this.dropRequest = dropRequest;
+       }
+
+       /**
+        * @return the dropRequest
+        */
+       public boolean isDropRequest() {
+               return dropRequest;
+       }

 }

Reply via email to