You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/05/05 04:03:00 UTC

svn commit: r941133 - in /camel/trunk/components/camel-smpp/src: main/java/org/apache/camel/component/smpp/ main/resources/META-INF/services/org/apache/camel/component/ test/java/org/apache/camel/component/smpp/

Author: ningjiang
Date: Wed May  5 02:03:00 2010
New Revision: 941133

URL: http://svn.apache.org/viewvc?rev=941133&view=rev
Log:
CAMEL-2688 Added SSL support to camel-smpp by applying the patch with thanks to Cott

Added:
    camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java   (with props)
    camel/trunk/components/camel-smpp/src/main/resources/META-INF/services/org/apache/camel/component/smpps
Modified:
    camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java
    camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConsumer.java
    camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java
    camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java
    camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppComponentTest.java
    camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java

Modified: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java?rev=941133&r1=941132&r2=941133&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java (original)
+++ camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java Wed May  5 02:03:00 2010
@@ -53,6 +53,7 @@ public class SmppConfiguration implement
     private byte replaceIfPresentFlag = (byte) 0;
     private byte typeOfNumber = TypeOfNumber.UNKNOWN.value();
     private byte numberingPlanIndicator = NumberingPlanIndicator.UNKNOWN.value();
+    private boolean usingSSL;
 
     /**
      * A POJO which contains all necessary configuration parameters for the SMPP connection
@@ -63,6 +64,9 @@ public class SmppConfiguration implement
         setSystemId(uri.getUserInfo());
         setHost(uri.getHost());
         setPort(uri.getPort());
+        if (uri.getScheme().startsWith("smpps")) {
+            setUsingSSL(true);
+        }
     }
 
     public SmppConfiguration copy() {
@@ -241,6 +245,14 @@ public class SmppConfiguration implement
         this.numberingPlanIndicator = numberingPlanIndicator;
     }
 
+    public boolean getUsingSSL() {
+        return usingSSL;
+    }
+
+    public void setUsingSSL(boolean usingSSL) {
+        this.usingSSL = usingSSL;
+    }
+
     @Override
     public String toString() {
         return "SmppConfiguration[" + "enquireLinkTimer=" + enquireLinkTimer

Modified: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConsumer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConsumer.java?rev=941133&r1=941132&r2=941133&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConsumer.java (original)
+++ camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConsumer.java Wed May  5 02:03:00 2010
@@ -21,6 +21,9 @@ import org.apache.camel.Processor;
 import org.apache.camel.impl.DefaultConsumer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.jsmpp.DefaultPDUReader;
+import org.jsmpp.DefaultPDUSender;
+import org.jsmpp.SynchronizedPDUSender;
 import org.jsmpp.bean.AlertNotification;
 import org.jsmpp.bean.BindType;
 import org.jsmpp.bean.DeliverSm;
@@ -29,6 +32,7 @@ import org.jsmpp.bean.TypeOfNumber;
 import org.jsmpp.session.BindParameter;
 import org.jsmpp.session.MessageReceiverListener;
 import org.jsmpp.session.SMPPSession;
+import org.jsmpp.util.DefaultComposer;
 
 /**
  * An implementation of @{link Consumer} which use the SMPP protocol
@@ -118,7 +122,12 @@ public class SmppConsumer extends Defaul
      * @return the SMPPSession
      */
     SMPPSession createSMPPSession() {
-        return new SMPPSession();
+        if (configuration.getUsingSSL()) {
+            return new SMPPSession(new SynchronizedPDUSender(new DefaultPDUSender(new DefaultComposer())),
+                new DefaultPDUReader(), SmppSSLConnectionFactory.getInstance());
+        } else {
+            return new SMPPSession();
+        }
     }
 
     @Override

Modified: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java?rev=941133&r1=941132&r2=941133&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java (original)
+++ camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppEndpoint.java Wed May  5 02:03:00 2010
@@ -125,7 +125,8 @@ public class SmppEndpoint extends Defaul
      * @return the connection string
      */
     public String getConnectionString() {
-        return "smpp://" + getConfiguration().getSystemId() + "@"
+        return (configuration.getUsingSSL() ? "smpps://" : "smpp://") 
+                + getConfiguration().getSystemId() + "@"
                 + getConfiguration().getHost() + ":"
                 + getConfiguration().getPort();
     }

Modified: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java?rev=941133&r1=941132&r2=941133&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java (original)
+++ camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java Wed May  5 02:03:00 2010
@@ -22,8 +22,11 @@ import org.apache.camel.Exchange;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.jsmpp.DefaultPDUReader;
+import org.jsmpp.DefaultPDUSender;
 import org.jsmpp.InvalidResponseException;
 import org.jsmpp.PDUException;
+import org.jsmpp.SynchronizedPDUSender;
 import org.jsmpp.bean.Alphabet;
 import org.jsmpp.bean.BindType;
 import org.jsmpp.bean.ESMClass;
@@ -37,6 +40,7 @@ import org.jsmpp.extra.NegativeResponseE
 import org.jsmpp.extra.ResponseTimeoutException;
 import org.jsmpp.session.BindParameter;
 import org.jsmpp.session.SMPPSession;
+import org.jsmpp.util.DefaultComposer;
 
 /**
  * An implementation of @{link Producer} which use the SMPP protocol
@@ -88,7 +92,12 @@ public class SmppProducer extends Defaul
      * @return the SMPPSession
      */
     SMPPSession createSMPPSession() {
-        return new SMPPSession();
+        if (configuration.getUsingSSL()) {
+            return new SMPPSession(new SynchronizedPDUSender(new DefaultPDUSender(new DefaultComposer())),
+                                   new DefaultPDUReader(), SmppSSLConnectionFactory.getInstance());
+        } else {
+            return new SMPPSession();
+        }
     }
 
     public void process(Exchange exchange) throws Exception {

Added: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java?rev=941133&view=auto
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java (added)
+++ camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java Wed May  5 02:03:00 2010
@@ -0,0 +1,56 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.smpp;
+
+import java.io.IOException;
+import java.net.Socket;
+
+import javax.net.SocketFactory;
+import javax.net.ssl.SSLSocketFactory;
+
+import org.jsmpp.session.connection.Connection;
+import org.jsmpp.session.connection.ConnectionFactory;
+import org.jsmpp.session.connection.socket.SocketConnection;
+
+/**
+ * A Jsmpp ConnectionFactory that creates SSL Sockets.
+ * 
+ * @version $Revision$
+ */
+public final class SmppSSLConnectionFactory implements ConnectionFactory {
+    private static final SmppSSLConnectionFactory CONN_FACTORY = new SmppSSLConnectionFactory();
+
+    private SmppSSLConnectionFactory() {
+    }
+    
+    public static SmppSSLConnectionFactory getInstance() {
+        return CONN_FACTORY;
+    }    
+
+    public Connection createConnection(String host, int port) throws IOException {
+        try {
+            SocketFactory socketFactory = SSLSocketFactory.getDefault();
+            Socket socket = socketFactory.createSocket(host, port);
+
+            return new SocketConnection(socket);
+
+        } catch (Exception e) {
+            throw new IOException(e.getMessage());
+        }
+
+    }
+}

Propchange: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSSLConnectionFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: camel/trunk/components/camel-smpp/src/main/resources/META-INF/services/org/apache/camel/component/smpps
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/resources/META-INF/services/org/apache/camel/component/smpps?rev=941133&view=auto
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/resources/META-INF/services/org/apache/camel/component/smpps (added)
+++ camel/trunk/components/camel-smpp/src/main/resources/META-INF/services/org/apache/camel/component/smpps Wed May  5 02:03:00 2010
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class=org.apache.camel.component.smpp.SmppComponent
\ No newline at end of file

Modified: camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppComponentTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppComponentTest.java?rev=941133&r1=941132&r2=941133&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppComponentTest.java (original)
+++ camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppComponentTest.java Wed May  5 02:03:00 2010
@@ -82,6 +82,26 @@ public class SmppComponentTest {
         assertTrue(smppEndpoint.getBinding() instanceof SmppBinding);
         assertNotNull(smppEndpoint.getCamelContext());
     }
+
+    @Test
+    public void createEndpointStringStringMapShouldReturnASmppsEndpoint() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        component = new SmppComponent(context);
+        Map<String, String> parameters = new HashMap<String, String>();
+        parameters.put("password", "secret");
+        Endpoint endpoint = component.createEndpoint("smpps://smppclient@localhost:2775", "?password=secret", parameters);
+        SmppEndpoint smppEndpoint = (SmppEndpoint) endpoint;
+
+        assertEquals("smpps://smppclient@localhost:2775", smppEndpoint.getEndpointUri());
+        assertEquals("smpps://smppclient@localhost:2775", smppEndpoint.getEndpointKey());
+        assertSame(component, smppEndpoint.getComponent());
+        assertNotNull(smppEndpoint.getConfiguration());
+        assertEquals("secret", smppEndpoint.getConfiguration().getPassword());
+        assertEquals("smpps://smppclient@localhost:2775", smppEndpoint.getConnectionString());
+        assertEquals(ExchangePattern.InOnly, smppEndpoint.getExchangePattern());
+        assertTrue(smppEndpoint.getBinding() instanceof SmppBinding);
+        assertNotNull(smppEndpoint.getCamelContext());
+    }
     
     @Test
     public void createEndpointStringStringMapWithoutACamelContextShouldReturnASmppEndpoint() throws Exception {

Modified: camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java?rev=941133&r1=941132&r2=941133&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java (original)
+++ camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java Wed May  5 02:03:00 2010
@@ -65,6 +65,7 @@ public class SmppConfigurationTest {
         assertEquals("ISO-8859-1", configuration.getEncoding());
         assertEquals(0x00, configuration.getNumberingPlanIndicator());
         assertEquals(0x00, configuration.getTypeOfNumber());
+        assertEquals(false, configuration.getUsingSSL());
     }
     
     @Test
@@ -92,6 +93,7 @@ public class SmppConfigurationTest {
         assertEquals("UTF-8", configuration.getEncoding());
         assertEquals(0x08, configuration.getNumberingPlanIndicator());
         assertEquals(0x02, configuration.getTypeOfNumber());
+        assertEquals(true, configuration.getUsingSSL());
     }
 
     @Test
@@ -129,6 +131,7 @@ public class SmppConfigurationTest {
         assertEquals(config.getEncoding(), configuration.getEncoding());
         assertEquals(config.getNumberingPlanIndicator(), configuration.getNumberingPlanIndicator());
         assertEquals(config.getTypeOfNumber(), configuration.getTypeOfNumber());
+        assertEquals(config.getUsingSSL(), configuration.getUsingSSL());
     }
 
     private void setNoneDefaultValues(SmppConfiguration config) {
@@ -153,5 +156,6 @@ public class SmppConfigurationTest {
         config.setEncoding("UTF-8");
         config.setNumberingPlanIndicator(NumberingPlanIndicator.NATIONAL.value());
         config.setTypeOfNumber(TypeOfNumber.NATIONAL.value());
+        config.setUsingSSL(true);
     }
 }