open-cmpp,基于华为的java cmppp api上开发,修正了原来华为提供包的一些小BUG,并且在此基础上提供支持滑动窗口的功能。
open-cmpp采用完全开放的协议,所提供的源码,可以任意拷贝、修改和分发。
open-cmpp包括三部分内容:
1、其中对华为的包源码反编译然后修改,修正了其中一些小BUG,增加了一些功能。但是还是保留原来的包名和类名。
修正的BUG包括:
a)、PEventAdapter中的handle(Event e),原来存在明显错误。
b)、SMPPSubmitMessage,这个类的构造函数中,把validityPeriod写到buf的代码存在错误。
可以说,原来华为Java API的SMPP模块,是完全不可用的。
2、增加了CMPP滑动窗口的支持。原来华为提供CMPP实现,不支持滑动窗口,但是其设计结构良好,在其上扩充实现滑动窗口,也相当容易。
3、一个CMPP模拟网关。拥有源码并且可以作二次开发的CMPP模拟网管,对调试程序会有帮助。
下载地址:
http://www.blogjava.net/Files/open-cmpp/open-cmpp%201.0.zip
滑动窗口的使用方式如下:
final List<CMPPDeliverMessage> receiveList = new ArrayList<CMPPDeliverMessage>();
final List<CMPPSubmitMessage> successList = new ArrayList<CMPPSubmitMessage>();
final List<CMPPSubmitMessage> failedList = new ArrayList<CMPPSubmitMessage>();
AyncSMProxyEventListener listener = new AyncSMProxyEventListener() {
public void onReceive(CMPPDeliverMessage deliver) {
System.out.println("RECEIVE MSG : " + deliver.toString());
receiveList.add(deliver);
}
public void onSubmitSuccess(CMPPSubmitMessage submit,
CMPPSubmitRepMessage submit_resp) {
System.out.println("SEND SUCCESS : " + submit.getSequenceId());
successList.add(submit);
}
public void onSubmitFailed(CMPPSubmitMessage submit,
CMPPSubmitRepMessage submit_resp) {
System.out.println("SEND FAILED : " + submit.getSequenceId()
+ ", RESULT " + submit_resp.getResult());
failedList.add(submit);
}
};
AyncSMProxy proxy = new AyncSMProxy(listener);
String rcvMobile[] = new String[] { "12345678901" };
for (int i = 0; i < 10; ++i) {
long msgId = i;
CMPPSubmitMessage submit = new CMPPSubmitMessage(msgId, 1, 1, 1, 1,
"websms", 1, "", 0, 0, 0, "websms", "02", "10", new Date(
System.currentTimeMillis() + (long) 0xa4cb800),
null, "888813512345678", rcvMobile, ("testmessage_" + i)
.getBytes(), "");
proxy.send_by_async(submit);
}
proxy.close();