use of com.zx.sms.codec.smpp.msg.DeliverSmReceipt in project SMSGate by Lihuanghe.
the class DeliverSmReceiptCodec method decode.
@Override
protected void decode(ChannelHandlerContext ctx, DeliverSm msg, List<Object> out) throws Exception {
/*
x x 0 0 0 0 x x Default message Type (i.e. normal message)
x x 0 0 0 1 x x Short Message contains SMSC Delivery Receipt
x x 0 0 1 0 x x Short Message contains SME Delivery Acknowledgement
x x 0 0 1 1 x x reserved
x x 0 1 0 0 x x Short Message contains SME Manual/User Acknowledgment
x x 0 1 0 1 x x reserved
x x 0 1 1 0 x x Short Message contains Conversation Abort (Korean CDMA)
x x 0 1 1 1 x x reserved
x x 1 0 0 0 x x Short Message contains Intermediate Delivery Notification
* */
if ((msg.getEsmClass() & 0x3c) == 0x04) {
// 状态报告解析
DeliverSmReceipt pdu = new DeliverSmReceipt();
pdu.setCommandLength(msg.getCommandLength());
pdu.setCommandStatus(msg.getCommandStatus());
pdu.setSequenceNumber(msg.getSequenceNumber());
pdu.setServiceType(msg.getServiceType());
pdu.setSourceAddress(msg.getSourceAddress());
pdu.setDestAddress(msg.getDestAddress());
pdu.setEsmClass(msg.getEsmClass());
pdu.setProtocolId(msg.getProtocolId());
pdu.setPriority(msg.getPriority());
pdu.setScheduleDeliveryTime(msg.getScheduleDeliveryTime());
pdu.setValidityPeriod(msg.getValidityPeriod());
pdu.setRegisteredDelivery(msg.getRegisteredDelivery());
pdu.setReplaceIfPresent(msg.getReplaceIfPresent());
pdu.setDataCoding(msg.getDataCoding());
pdu.setDefaultMsgId(msg.getDefaultMsgId());
pdu.setShortMessage(msg.getShortMessage());
if (msg.getOptionalParameters() != null)
for (Tlv tlv : msg.getOptionalParameters()) {
pdu.addOptionalParameter(tlv);
}
out.add(pdu);
} else {
out.add(msg);
}
}
use of com.zx.sms.codec.smpp.msg.DeliverSmReceipt in project SMSGate by Lihuanghe.
the class SMPPMessageReceiveHandler method reponse.
@Override
protected ChannelFuture reponse(final ChannelHandlerContext ctx, Object msg) {
if (msg instanceof DeliverSmReceipt) {
DeliverSmResp res = ((DeliverSm) msg).createResponse();
res.setMessageId(String.valueOf(System.currentTimeMillis()));
return ctx.writeAndFlush(res);
} else if (msg instanceof DeliverSm) {
DeliverSmResp res = ((DeliverSm) msg).createResponse();
String msgcontent = ((DeliverSm) msg).getMsgContent();
res.setMessageId(DigestUtils.md5Hex(msgcontent.getBytes(StandardCharsets.UTF_8)));
return ctx.writeAndFlush(res);
} else if (msg instanceof SubmitSm) {
SubmitSmResp res = ((SubmitSm) msg).createResponse();
String msgcontent = ((SubmitSm) msg).getMsgContent();
byte[] receive = msgcontent.getBytes(StandardCharsets.UTF_8);
res.setMessageId(DigestUtils.md5Hex(receive));
ChannelFuture future = ctx.writeAndFlush(res);
List<SubmitSm> frags = ((SubmitSm) msg).getFragments();
if (frags != null && !frags.isEmpty()) {
for (SubmitSm fragment : frags) {
SubmitSmResp fragres = ((SubmitSm) fragment).createResponse();
res.setMessageId(String.valueOf(System.currentTimeMillis()));
ctx.writeAndFlush(fragres);
if (((SubmitSm) msg).getRegisteredDelivery() == 1) {
DeliverSmReceipt report = new DeliverSmReceipt();
report.setId(String.valueOf(fragment.getSequenceNumber()));
report.setSourceAddress(((SubmitSm) msg).getDestAddress());
report.setDestAddress(((SubmitSm) msg).getSourceAddress());
report.setStat("DELIVRD");
report.setText(fragment.getMsgContent());
report.setSubmit_date(DateFormatUtils.format(new Date(), "yyMMddHHmm"));
report.setDone_date(DateFormatUtils.format(new Date(), "yyMMddHHmm"));
ctx.writeAndFlush(report);
}
}
}
if (((SubmitSm) msg).getRegisteredDelivery() == 1) {
DeliverSmReceipt report = new DeliverSmReceipt();
report.setId(String.valueOf(res.getSequenceNumber()));
report.setSourceAddress(((SubmitSm) msg).getDestAddress());
report.setDestAddress(((SubmitSm) msg).getSourceAddress());
report.setStat("DELIVRD");
report.setText(((SubmitSm) msg).getMsgContent());
report.setSubmit_date(DateFormatUtils.format(new Date(), "yyMMddHHmm"));
report.setDone_date(DateFormatUtils.format(new Date(), "yyMMddHHmm"));
try {
ChannelUtil.syncWriteLongMsgToEntity(getEndpointEntity(), report);
} catch (Exception e) {
e.printStackTrace();
}
}
return future;
}
return null;
}
use of com.zx.sms.codec.smpp.msg.DeliverSmReceipt in project SMSGate by Lihuanghe.
the class SMPPSessionConnectedHandler method channelRead.
public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof DeliverSmReceipt) {
DeliverSmReceipt e = (DeliverSmReceipt) msg;
DeliverSmResp res = e.createResponse();
res.setMessageId(String.valueOf(System.currentTimeMillis()));
ctx.writeAndFlush(res);
} else {
ctx.fireChannelRead(msg);
}
}
use of com.zx.sms.codec.smpp.msg.DeliverSmReceipt in project SMSGate by Lihuanghe.
the class SMPPMessageCodec method encode.
@Override
protected void encode(ChannelHandlerContext ctx, Pdu msg, List<Object> out) throws Exception {
try {
if (msg instanceof DeliverSmReceipt) {
List<Object> deliout = new ArrayList(1);
reportcodec.encode(ctx, (DeliverSmReceipt) msg, deliout);
Pdu deli = (DeliverSm) deliout.get(0);
ByteBuf buf = transcoder.encode(deli, ctx.alloc());
out.add(buf);
} else {
ByteBuf buf = transcoder.encode(msg, ctx.alloc());
out.add(buf);
}
} catch (Exception e) {
logger.error("", e);
}
}
use of com.zx.sms.codec.smpp.msg.DeliverSmReceipt in project SMSGate by Lihuanghe.
the class TestBaseSmCodec method testdeliverSmReceipt.
@Test
public void testdeliverSmReceipt() throws SmppInvalidArgumentException {
DeliverSmReceipt report = new DeliverSmReceipt();
String reportString = " id:94251430923 submit date:0911040124 done date:0911040124 stat:ACCEPTD err:107 ";
report.setShortMessage(reportString.getBytes());
System.out.println(report.toString());
}
Aggregations