/** * Attempts to get the underlying value as an unsigned byte. If the underlying byte array cannot * be converted, then an exception is thrown. For example, if the underlying byte array isn't a * length of 1, then it cannot be converted to an unsigned byte. * * @return The byte array value as an unsigned byte * @throws TlvConvertException Thrown if the underlying byte array cannot be converted to an * unsigned byte. */ public short getValueAsUnsignedByte() throws TlvConvertException { try { return ByteArrayUtil.toUnsignedByte(this.value); } catch (IllegalArgumentException e) { throw new TlvConvertException("unsigned byte", e.getMessage()); } }
/** * Attempts to get the underlying value as a byte. If the underlying byte array cannot be * converted, then an exception is thrown. For example, if the underlying byte array isn't a * length of 1, then it cannot be converted to a byte. * * @return The byte array value as a byte * @throws TlvConvertException Thrown if the underlying byte array cannot be converted to a byte. */ public byte getValueAsByte() throws TlvConvertException { try { return ByteArrayUtil.toByte(this.value); } catch (IllegalArgumentException e) { throw new TlvConvertException("byte", e.getMessage()); } }
/** * Attempts to get the underlying value as an int. If the underlying byte array cannot be * converted, then an exception is thrown. For example, if the underlying byte array isn't a * length of 4, then it cannot be converted to an int. * * @return The byte array value as an int * @throws TlvConvertException Thrown if the underlying byte array cannot be converted to an int. */ public int getValueAsInt() throws TlvConvertException { try { return ByteArrayUtil.toInt(this.value); } catch (IllegalArgumentException e) { throw new TlvConvertException("int", e.getMessage()); } }
/** * Attempts to get the underlying value as a long. If the underlying byte array cannot be * converted, then an exception is thrown. For example, if the underlying byte array isn't a * length of 8, then it cannot be converted to a long. * * @return The byte array value as a long * @throws TlvConvertException Thrown if the underlying byte array cannot be converted to a long. */ public long getValueAsLong() throws TlvConvertException { try { return ByteArrayUtil.toLong(this.value); } catch (IllegalArgumentException e) { throw new TlvConvertException("long", e.getMessage()); } }
@Test public void testProcessLongMessage() throws Exception { log.info("starting testProcessLongMessage ... "); MockPacketProcessor pp = new MockPacketProcessor( new PacketProcessor() { @Override public void processPacket(SmppRequest packet, ResponseSender responseSender) { if (packet.getCommandId() == SmppPacket.SUBMIT_SM) { responseSender.send(Response.OK.withMessageId("12000")); return; } responseSender.send(Response.OK); } }); server.setPacketProcessor(pp); MessageStore messageStore = Mockito.mock(MessageStore.class); SmppConfiguration configuration = new SmppConfiguration(); configuration.setHost("localhost"); configuration.setPort(SERVER_PORT); configuration.setSystemId("test"); configuration.setPassword("test"); configuration.setDataCoding(3); SmppConnector connector = new SmppConnector(configuration); injectResource(new MockProcessorContext(), connector); injectResource(messageStore, connector); connector.doStart(); waitUntilStatus(connector, DEFAULT_TIMEOUT, Status.OK); try { Message message = new Message(); message.setProperty("to", "3002175604"); message.setProperty("from", "3542"); message.setProperty( "text", "This is a long message to test how the smpp is working with long message splitting them by the 160 character and sending two messages. Finish the first message This is the second message."); connector.process(message); Assert.assertNotNull(message.getReference()); List<SmppPacket> packets = pp.getPackets(2, DEFAULT_TIMEOUT); Assert.assertNotNull(packets); Assert.assertEquals(packets.size(), 2); SmppPacket packet = packets.get(0); Assert.assertNotNull(packet); Assert.assertEquals(packet.getCommandId(), SmppPacket.SUBMIT_SM); SubmitSm submitSm = (SubmitSm) packet; Assert.assertEquals( submitSm.getShortMessage(), "This is a long message to test how the smpp is working with long message splitting them by the 160 character and sending two messages. Finish the first message "); Tlv totalTlv = submitSm.getOptionalParameter(SmppConstants.TAG_SAR_TOTAL_SEGMENTS); Assert.assertNotNull(totalTlv); Assert.assertEquals(ByteArrayUtil.toByte(totalTlv.getValue()), 2); Tlv segmentTlv = submitSm.getOptionalParameter(SmppConstants.TAG_SAR_SEGMENT_SEQNUM); Assert.assertNotNull(segmentTlv); Assert.assertEquals(ByteArrayUtil.toByte(segmentTlv.getValue()), 1); Tlv msgRefTlv = submitSm.getOptionalParameter(SmppConstants.TAG_SAR_MSG_REF_NUM); Assert.assertNotNull(msgRefTlv); packet = packets.get(1); Assert.assertNotNull(packet); Assert.assertEquals(packet.getCommandId(), SmppPacket.SUBMIT_SM); submitSm = (SubmitSm) packet; Assert.assertEquals(submitSm.getShortMessage(), "This is the second message."); totalTlv = submitSm.getOptionalParameter(SmppConstants.TAG_SAR_TOTAL_SEGMENTS); Assert.assertNotNull(totalTlv); Assert.assertEquals(ByteArrayUtil.toByte(totalTlv.getValue()), 2); segmentTlv = submitSm.getOptionalParameter(SmppConstants.TAG_SAR_SEGMENT_SEQNUM); Assert.assertNotNull(segmentTlv); Assert.assertEquals(ByteArrayUtil.toByte(segmentTlv.getValue()), 2); msgRefTlv = submitSm.getOptionalParameter(SmppConstants.TAG_SAR_MSG_REF_NUM); Assert.assertNotNull(msgRefTlv); } finally { connector.doStop(); } }