You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2012/11/05 13:57:19 UTC
svn commit: r1405776 - in
/camel/branches/camel-2.10.x/components/camel-smpp/src:
main/java/org/apache/camel/component/smpp/
test/java/org/apache/camel/component/smpp/
Author: cmueller
Date: Mon Nov 5 12:57:18 2012
New Revision: 1405776
URL: http://svn.apache.org/viewvc?rev=1405776&view=rev
Log:
CAMEL-5718: Bodies of SMs with 8-bit data_coding are mangled
Thanks to Francois Kritzinger for the patch
Modified:
camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java
camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppReplaceSmCommand.java
camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSmCommand.java
camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java
camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java
camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java
camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java
camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java Mon Nov 5 12:57:18 2012
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.camel.Exchange;
import org.jsmpp.bean.AlertNotification;
+import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.Command;
import org.jsmpp.bean.DataSm;
import org.jsmpp.bean.DeliverSm;
@@ -104,8 +105,12 @@ public class SmppBinding {
} else {
smppMessage.setHeader(SmppConstants.MESSAGE_TYPE, SmppMessageType.DeliverSm.toString());
if (deliverSm.getShortMessage() != null) {
- smppMessage.setBody(String.valueOf(new String(deliverSm.getShortMessage(),
- configuration.getEncoding())));
+ if (SmppUtils.parseAlphabetFromDataCoding(deliverSm.getDataCoding()) == Alphabet.ALPHA_8_BIT) {
+ smppMessage.setBody(new String(deliverSm.getShortMessage()));
+ } else {
+ smppMessage.setBody(String.valueOf(new String(deliverSm.getShortMessage(),
+ configuration.getEncoding())));
+ }
} else if (deliverSm.getOptionalParametes() != null && deliverSm.getOptionalParametes().length > 0) {
List<OptionalParameter> oplist = Arrays.asList(deliverSm.getOptionalParametes());
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppMessage.java Mon Nov 5 12:57:18 2012
@@ -21,6 +21,7 @@ import java.nio.charset.Charset;
import org.apache.camel.impl.DefaultMessage;
import org.jsmpp.bean.AlertNotification;
+import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.Command;
import org.jsmpp.bean.DataSm;
import org.jsmpp.bean.DeliverSm;
@@ -77,11 +78,13 @@ public class SmppMessage extends Default
@Override
protected Object createBody() {
if (command instanceof MessageRequest) {
- byte[] shortMessage = ((MessageRequest) command).getShortMessage();
+ MessageRequest msgRequest = (MessageRequest)command;
+ byte[] shortMessage = msgRequest.getShortMessage();
if (shortMessage == null || shortMessage.length == 0) {
return null;
}
- if (Charset.isSupported(configuration.getEncoding())) {
+ if (SmppUtils.parseAlphabetFromDataCoding(msgRequest.getDataCoding()) != Alphabet.ALPHA_8_BIT
+ && Charset.isSupported(configuration.getEncoding())) {
try {
return new String(shortMessage, configuration.getEncoding());
} catch (UnsupportedEncodingException e) {
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppReplaceSmCommand.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppReplaceSmCommand.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppReplaceSmCommand.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppReplaceSmCommand.java Mon Nov 5 12:57:18 2012
@@ -21,7 +21,6 @@ import java.util.Date;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.NumberingPlanIndicator;
import org.jsmpp.bean.RegisteredDelivery;
import org.jsmpp.bean.ReplaceSm;
@@ -36,16 +35,7 @@ public class SmppReplaceSmCommand extend
@Override
public void execute(Exchange exchange) throws SmppException {
- String body = exchange.getIn().getBody(String.class);
-
- byte providedAlphabet = getProvidedAlphabet(exchange);
- Alphabet determinedAlphabet = determineAlphabet(exchange);
- Charset charset = determineCharset(providedAlphabet, determinedAlphabet.value());
-
- byte[] message = null;
- if (body != null) {
- message = body.getBytes(charset);
- }
+ byte[] message = getShortMessage(exchange.getIn());
ReplaceSm replaceSm = createReplaceSmTempate(exchange);
replaceSm.setShortMessage(message);
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSmCommand.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSmCommand.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSmCommand.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSmCommand.java Mon Nov 5 12:57:18 2012
@@ -18,7 +18,6 @@ package org.apache.camel.component.smpp;
import java.nio.charset.Charset;
-import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.jsmpp.bean.Alphabet;
import org.jsmpp.session.SMPPSession;
@@ -32,18 +31,60 @@ public abstract class SmppSmCommand exte
this.charset = Charset.forName(config.getEncoding());
}
- protected byte getProvidedAlphabet(Exchange exchange) {
- Message in = exchange.getIn();
+ protected SmppSplitter createSplitter(Message message) {
+ Alphabet alphabet = determineAlphabet(message);
+ String body = message.getBody(String.class);
+
+ SmppSplitter splitter;
+ switch (alphabet) {
+ case ALPHA_8_BIT:
+ splitter = new Smpp8BitSplitter(body.length());
+ break;
+ case ALPHA_UCS2:
+ splitter = new SmppUcs2Splitter(body.length());
+ break;
+ case ALPHA_DEFAULT:
+ default:
+ splitter = new SmppDefaultSplitter(body.length());
+ break;
+ }
+
+ return splitter;
+ }
+
+ protected final byte[] getShortMessage(Message message) {
+ if (has8bitDataCoding(message)) {
+ return message.getBody(byte[].class);
+ } else {
+ byte providedAlphabet = getProvidedAlphabet(message);
+ Alphabet determinedAlphabet = determineAlphabet(message);
+ Charset charset = determineCharset(providedAlphabet, determinedAlphabet.value());
+ String body = message.getBody(String.class);
+ return body.getBytes(charset);
+ }
+ }
+
+ private static boolean has8bitDataCoding(Message message) {
+ Byte dcs = message.getHeader(SmppConstants.DATA_CODING, Byte.class);
+ if (dcs != null) {
+ return SmppUtils.parseAlphabetFromDataCoding(dcs.byteValue()) == Alphabet.ALPHA_8_BIT;
+ } else {
+ Byte alphabet = message.getHeader(SmppConstants.ALPHABET, Byte.class);
+ return alphabet != null && alphabet.equals(Alphabet.ALPHA_8_BIT.value());
+ }
+ }
+
+ private byte getProvidedAlphabet(Message message) {
byte alphabet = config.getAlphabet();
- if (in.getHeaders().containsKey(SmppConstants.ALPHABET)) {
- alphabet = in.getHeader(SmppConstants.ALPHABET, Byte.class);
+ if (message.getHeaders().containsKey(SmppConstants.ALPHABET)) {
+ alphabet = message.getHeader(SmppConstants.ALPHABET, Byte.class);
}
return alphabet;
}
- protected Charset determineCharset(byte providedAlphabet, byte determinedAlphabet) {
+ private Charset determineCharset(byte providedAlphabet, byte determinedAlphabet) {
if (providedAlphabet == SmppConstants.UNKNOWN_ALPHABET && determinedAlphabet == Alphabet.ALPHA_UCS2.value()) {
return Charset.forName(SmppConstants.UCS2_ENCODING); // change charset to use multilang messages
}
@@ -51,14 +92,14 @@ public abstract class SmppSmCommand exte
return charset;
}
- protected Alphabet determineAlphabet(Exchange exchange) {
- String body = exchange.getIn().getBody(String.class);
- byte alphabet = getProvidedAlphabet(exchange);
+ private Alphabet determineAlphabet(Message message) {
+ String body = message.getBody(String.class);
+ byte alphabet = getProvidedAlphabet(message);
Alphabet alphabetObj;
if (alphabet == SmppConstants.UNKNOWN_ALPHABET) {
- byte[] message = body.getBytes(charset);
- if (SmppUtils.isGsm0338Encodeable(message)) {
+ byte[] messageBytes = body.getBytes(charset);
+ if (SmppUtils.isGsm0338Encodeable(messageBytes)) {
alphabetObj = Alphabet.ALPHA_DEFAULT;
} else {
alphabetObj = Alphabet.ALPHA_UCS2;
@@ -69,27 +110,4 @@ public abstract class SmppSmCommand exte
return alphabetObj;
}
-
- protected SmppSplitter createSplitter(Exchange exchange) {
- Alphabet alphabet = determineAlphabet(exchange);
-
- Message in = exchange.getIn();
- String body = in.getBody(String.class);
-
- SmppSplitter splitter;
- switch (alphabet) {
- case ALPHA_8_BIT:
- splitter = new Smpp8BitSplitter(body.length());
- break;
- case ALPHA_UCS2:
- splitter = new SmppUcs2Splitter(body.length());
- break;
- case ALPHA_DEFAULT:
- default:
- splitter = new SmppDefaultSplitter(body.length());
- break;
- }
-
- return splitter;
- }
}
\ No newline at end of file
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java Mon Nov 5 12:57:18 2012
@@ -27,7 +27,6 @@ import java.util.Map;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.jsmpp.bean.Address;
-import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.DataCoding;
import org.jsmpp.bean.ESMClass;
import org.jsmpp.bean.GSMSpecificFeature;
@@ -122,14 +121,8 @@ public class SmppSubmitMultiCommand exte
}
protected SubmitMulti[] createSubmitMulti(Exchange exchange) {
- String body = exchange.getIn().getBody(String.class);
-
- byte providedAlphabet = getProvidedAlphabet(exchange);
- Alphabet determinedAlphabet = determineAlphabet(exchange);
- SmppSplitter splitter = createSplitter(exchange);
- Charset charset = determineCharset(providedAlphabet, determinedAlphabet.value());
-
- byte[][] segments = splitter.split(body.getBytes(charset));
+ SmppSplitter splitter = createSplitter(exchange.getIn());
+ byte[][] segments = splitter.split(getShortMessage(exchange.getIn()));
ESMClass esmClass;
// multipart message
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java Mon Nov 5 12:57:18 2012
@@ -23,7 +23,6 @@ import java.util.List;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
-import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.DataCoding;
import org.jsmpp.bean.ESMClass;
import org.jsmpp.bean.GSMSpecificFeature;
@@ -92,15 +91,10 @@ public class SmppSubmitSmCommand extends
}
protected SubmitSm[] createSubmitSm(Exchange exchange) {
- String body = exchange.getIn().getBody(String.class);
+ byte[] shortMessage = getShortMessage(exchange.getIn());
- byte providedAlphabet = getProvidedAlphabet(exchange);
- Alphabet determinedAlphabet = determineAlphabet(exchange);
- Charset charset = determineCharset(providedAlphabet, determinedAlphabet.value());
- byte[] shortMessage = body.getBytes(charset);
-
SubmitSm template = createSubmitSmTemplate(exchange);
- SmppSplitter splitter = createSplitter(exchange);
+ SmppSplitter splitter = createSplitter(exchange.getIn());
byte[][] segments = splitter.split(shortMessage);
// multipart message
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java Mon Nov 5 12:57:18 2012
@@ -16,7 +16,9 @@
*/
package org.apache.camel.component.smpp;
+import java.nio.charset.Charset;
import java.util.Date;
+import java.util.Set;
import org.apache.camel.Exchange;
import org.apache.camel.impl.DefaultCamelContext;
@@ -33,6 +35,7 @@ import org.jsmpp.util.DeliveryReceiptSta
import org.junit.Before;
import org.junit.Test;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -202,6 +205,41 @@ public class SmppBindingTest {
}
@Test
+ public void createSmppMessageFrom8bitDataCodingDeliverSmShouldNotModifyBody() throws Exception {
+ final Set<String> encodings = Charset.availableCharsets().keySet();
+
+ final byte[] dataCodings = {
+ (byte)0x02,
+ (byte)0x04,
+ (byte)0xF6,
+ (byte)0xF4
+ };
+
+ byte[] body = {
+ (byte)0xFF, 'A', 'B', (byte)0x00,
+ (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF
+ };
+
+ DeliverSm deliverSm = new DeliverSm();
+
+ for (byte dataCoding : dataCodings) {
+ deliverSm.setDataCoding(dataCoding);
+ deliverSm.setShortMessage(body);
+
+ for (String encoding : encodings) {
+ binding.getConfiguration().setEncoding(encoding);
+ SmppMessage smppMessage = binding.createSmppMessage(deliverSm);
+ assertArrayEquals(
+ String.format("data coding=0x%02X; encoding=%s",
+ dataCoding,
+ encoding),
+ body,
+ smppMessage.getBody(String.class).getBytes());
+ }
+ }
+ }
+
+ @Test
public void getterShouldReturnTheSetValues() {
SmppConfiguration configuration = new SmppConfiguration();
binding.setConfiguration(configuration);
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppMessageTest.java Mon Nov 5 12:57:18 2012
@@ -16,11 +16,15 @@
*/
package org.apache.camel.component.smpp;
+import java.nio.charset.Charset;
+import java.util.Set;
+
import org.jsmpp.bean.AlertNotification;
import org.jsmpp.bean.DataSm;
import org.jsmpp.bean.DeliverSm;
import org.junit.Test;
+import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@@ -94,6 +98,40 @@ public class SmppMessageTest {
assertNull(msg.getCommand());
assertTrue(msg.getHeaders().isEmpty());
}
+
+ @Test
+ public void createBodyShouldNotMangle8bitDataCodingShortMessage() {
+ final Set<String> encodings = Charset.availableCharsets().keySet();
+
+ final byte[] dataCodings = {
+ (byte)0x02,
+ (byte)0x04,
+ (byte)0xF6,
+ (byte)0xF4
+ };
+
+ byte[] body = {
+ (byte)0xFF, 'A', 'B', (byte)0x00,
+ (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF
+ };
+
+ DeliverSm command = new DeliverSm();
+ SmppConfiguration config = new SmppConfiguration();
+
+ for (byte dataCoding : dataCodings) {
+ command.setDataCoding(dataCoding);
+ command.setShortMessage(body);
+ for (String encoding : encodings) {
+ config.setEncoding(encoding);
+ message = new SmppMessage(command, config);
+ assertArrayEquals(
+ String.format("data coding=0x%02X; encoding=%s",
+ dataCoding,
+ encoding),
+ body, ((String) message.createBody()).getBytes());
+ }
+ }
+ }
@Test
public void createBodyShouldReturnNullIfTheCommandIsNull() {
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppReplaceSmCommandTest.java Mon Nov 5 12:57:18 2012
@@ -23,6 +23,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.DefaultExchange;
+import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.NumberingPlanIndicator;
import org.jsmpp.bean.RegisteredDelivery;
import org.jsmpp.bean.SMSCDeliveryReceipt;
@@ -136,4 +137,172 @@ public class SmppReplaceSmCommandTest {
assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID));
}
+
+ @Test
+ public void bodyWithSmscDefaultDataCodingNarrowedToCharset() throws Exception {
+ final int dataCoding = 0x00; /* SMSC-default */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "ReplaceSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+
+ session.replaceShortMessage((String) isNull(),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithLatin1DataCodingNarrowedToCharset() throws Exception {
+ final int dataCoding = 0x03; /* ISO-8859-1 (Latin1) */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "ReplaceSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+
+ session.replaceShortMessage((String) isNull(),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithSMPP8bitDataCodingNotModified() throws Exception {
+ final int dataCoding = 0x04; /* SMPP 8-bit */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "ReplaceSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+
+ session.replaceShortMessage((String) isNull(),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq((byte) 0),
+ aryEq(body));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithGSM8bitDataCodingNotModified() throws Exception {
+ final int dataCoding = 0xF7; /* GSM 8-bit class 3 */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "ReplaceSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+
+ session.replaceShortMessage((String) isNull(),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq((byte) 0),
+ aryEq(body));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void eightBitDataCodingOverridesDefaultAlphabet() throws Exception {
+ final int binDataCoding = 0xF7; /* GSM 8-bit class 3 */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "ReplaceSm");
+ exchange.getIn().setHeader(SmppConstants.ALPHABET, Alphabet.ALPHA_DEFAULT.value());
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, binDataCoding);
+ exchange.getIn().setBody(body);
+
+ session.replaceShortMessage((String) isNull(),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq((byte) 0),
+ aryEq(body));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void latin1DataCodingOverridesEightBitAlphabet() throws Exception {
+ final int latin1DataCoding = 0x03; /* ISO-8859-1 (Latin1) */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(),
+ ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "ReplaceSm");
+ exchange.getIn().setHeader(SmppConstants.ALPHABET, Alphabet.ALPHA_8_BIT.value());
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, latin1DataCoding);
+ exchange.getIn().setBody(body);
+
+ session.replaceShortMessage((String) isNull(),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
}
\ No newline at end of file
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java Mon Nov 5 12:57:18 2012
@@ -25,6 +25,7 @@ import org.apache.camel.ExchangePattern;
import org.apache.camel.impl.DefaultCamelContext;
import org.apache.camel.impl.DefaultExchange;
import org.jsmpp.bean.Address;
+import org.jsmpp.bean.Alphabet;
import org.jsmpp.bean.DataCoding;
import org.jsmpp.bean.ESMClass;
import org.jsmpp.bean.NumberingPlanIndicator;
@@ -177,4 +178,249 @@ public class SmppSubmitMultiCommandTest
assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT));
assertNull(exchange.getOut().getHeader(SmppConstants.ERROR));
}
+
+ @Test
+ public void bodyWithSmscDefaultDataCodingNarrowedToCharset() throws Exception {
+ final int dataCoding = 0x00; /* SMSC-default */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ Address[] destAddrs = new Address[] {
+ new Address(TypeOfNumber.UNKNOWN,
+ NumberingPlanIndicator.UNKNOWN,
+ "1717")
+ };
+
+ expect(session.submitMultiple(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ aryEq(destAddrs),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed),
+ aryEq(new OptionalParameter[0])))
+ .andReturn(new SubmitMultiResult("1"));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithLatin1DataCodingNarrowedToCharset() throws Exception {
+ final int dataCoding = 0x03; /* ISO-8859-1 (Latin1) */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ Address[] destAddrs = new Address[] {
+ new Address(TypeOfNumber.UNKNOWN,
+ NumberingPlanIndicator.UNKNOWN,
+ "1717")
+ };
+
+ expect(session.submitMultiple(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ aryEq(destAddrs),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed),
+ aryEq(new OptionalParameter[0])))
+ .andReturn(new SubmitMultiResult("1"));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithSMPP8bitDataCodingNotModified() throws Exception {
+ final int dataCoding = 0x04; /* SMPP 8-bit */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ Address[] destAddrs = new Address[] {
+ new Address(TypeOfNumber.UNKNOWN,
+ NumberingPlanIndicator.UNKNOWN,
+ "1717")
+ };
+
+ expect(session.submitMultiple(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ aryEq(destAddrs),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(body),
+ aryEq(new OptionalParameter[0])))
+ .andReturn(new SubmitMultiResult("1"));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithGSM8bitDataCodingNotModified() throws Exception {
+ final int dataCoding = 0xF7; /* GSM 8-bit class 3 */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ Address[] destAddrs = new Address[] {
+ new Address(TypeOfNumber.UNKNOWN,
+ NumberingPlanIndicator.UNKNOWN,
+ "1717")
+ };
+
+ expect(session.submitMultiple(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ aryEq(destAddrs),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(body),
+ aryEq(new OptionalParameter[0])))
+ .andReturn(new SubmitMultiResult("1"));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void eightBitDataCodingOverridesDefaultAlphabet() throws Exception {
+ final int binDataCoding = 0x04; /* SMPP 8-bit */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+ exchange.getIn().setHeader(SmppConstants.ALPHABET, Alphabet.ALPHA_DEFAULT.value());
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, binDataCoding);
+ exchange.getIn().setBody(body);
+ Address[] destAddrs = new Address[] {
+ new Address(TypeOfNumber.UNKNOWN,
+ NumberingPlanIndicator.UNKNOWN,
+ "1717")
+ };
+
+ expect(session.submitMultiple(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ aryEq(destAddrs),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT),
+ eq(DataCoding.newInstance(binDataCoding)),
+ eq((byte) 0),
+ aryEq(body),
+ aryEq(new OptionalParameter[0])))
+ .andReturn(new SubmitMultiResult("1"));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void latin1DataCodingOverridesEightBitAlphabet() throws Exception {
+ final int latin1DataCoding = 0x03; /* ISO-8859-1 (Latin1) */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti");
+ exchange.getIn().setHeader(SmppConstants.ALPHABET, Alphabet.ALPHA_8_BIT.value());
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, latin1DataCoding);
+ exchange.getIn().setBody(body);
+ Address[] destAddrs = new Address[] {
+ new Address(TypeOfNumber.UNKNOWN,
+ NumberingPlanIndicator.UNKNOWN,
+ "1717")
+ };
+
+ expect(session.submitMultiple(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ aryEq(destAddrs),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT),
+ eq(DataCoding.newInstance(latin1DataCoding)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed),
+ aryEq(new OptionalParameter[0])))
+ .andReturn(new SubmitMultiResult("1"));
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
}
\ No newline at end of file
Modified: camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java?rev=1405776&r1=1405775&r2=1405776&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java (original)
+++ camel/branches/camel-2.10.x/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java Mon Nov 5 12:57:18 2012
@@ -225,4 +225,219 @@ public class SmppSubmitSmCommandTest {
verify(session);
}
+
+ @Test
+ public void bodyWithSmscDefaultDataCodingNarrowedToCharset() throws Exception {
+ final int dataCoding = 0x00; /* SMSC-default */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ expect(session.submitShortMessage(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1717"),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT.value()),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed)))
+ .andReturn("1");
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithLatin1DataCodingNarrowedToCharset() throws Exception {
+ final int dataCoding = 0x03; /* ISO-8859-1 (Latin1) */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ expect(session.submitShortMessage(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1717"),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT.value()),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed)))
+ .andReturn("1");
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithSMPP8bitDataCodingNotModified() throws Exception {
+ final int dataCoding = 0x04; /* SMPP 8-bit */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ expect(session.submitShortMessage(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1717"),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT.value()),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(body)))
+ .andReturn("1");
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void bodyWithGSM8bitDataCodingNotModified() throws Exception {
+ final int dataCoding = 0xF7; /* GSM 8-bit class 3 */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, dataCoding);
+ exchange.getIn().setBody(body);
+ expect(session.submitShortMessage(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1717"),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT.value()),
+ eq(DataCoding.newInstance(dataCoding)),
+ eq((byte) 0),
+ aryEq(body)))
+ .andReturn("1");
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void eightBitDataCodingOverridesDefaultAlphabet() throws Exception {
+ final int binDataCoding = 0x04; /* SMPP 8-bit */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+ exchange.getIn().setHeader(SmppConstants.ALPHABET, Alphabet.ALPHA_DEFAULT.value());
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, binDataCoding);
+ exchange.getIn().setBody(body);
+ expect(session.submitShortMessage(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1717"),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT.value()),
+ eq(DataCoding.newInstance(binDataCoding)),
+ eq((byte) 0),
+ aryEq(body)))
+ .andReturn("1");
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
+
+ @Test
+ public void latin1DataCodingOverridesEightBitAlphabet() throws Exception {
+ final int latin1DataCoding = 0x03; /* ISO-8859-1 (Latin1) */
+ byte[] body = {(byte)0xFF, 'A', 'B', (byte)0x00, (byte)0xFF, (byte)0x7F, 'C', (byte)0xFF};
+ byte[] bodyNarrowed = {'?', 'A', 'B', '\0', '?', (byte)0x7F, 'C', '?'};
+
+ Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut);
+ exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitSm");
+ exchange.getIn().setHeader(SmppConstants.ALPHABET, Alphabet.ALPHA_8_BIT.value());
+ exchange.getIn().setHeader(SmppConstants.DATA_CODING, latin1DataCoding);
+ exchange.getIn().setBody(body);
+ expect(session.submitShortMessage(eq("CMT"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1616"),
+ eq(TypeOfNumber.UNKNOWN),
+ eq(NumberingPlanIndicator.UNKNOWN),
+ eq("1717"),
+ eq(new ESMClass()),
+ eq((byte) 0),
+ eq((byte) 1),
+ (String) isNull(),
+ (String) isNull(),
+ eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS_FAILURE)),
+ eq(ReplaceIfPresentFlag.DEFAULT.value()),
+ eq(DataCoding.newInstance(latin1DataCoding)),
+ eq((byte) 0),
+ aryEq(bodyNarrowed)))
+ .andReturn("1");
+
+ replay(session);
+
+ command.execute(exchange);
+
+ verify(session);
+ }
}
\ No newline at end of file