// SMSLib for Java v3
// A Java API library for sending and receiving SMS via a GSM modem
// or other supported gateways.
// Web Site: http://www.smslib.org
//
// SMSLib is distributed under the terms of the Apache License version 2.0
//
// Copyright (C) 2002-2007, Thanasis Delenikas, Athens/GREECE
// Portions Copyright:
// Davide Bettoni, Clusone/ITALY, dbettoni@users.sourceforge.net
// Tomek Cejner, Polland, heretique@users.sourceforge.net
//
// Licensed 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.smslib;
import java.util.*;
import java.util.regex.*;
import java.io.*;
import org.apache.log4j.*;
/**
* Class representing GSM modems or phones. Extends AGateway with modem specific
* operations.
*/
public class ModemGateway extends AGateway
{
private String modemDevice;
private int modemParms;
private String manufacturer;
private String model;
private ModemDriver driver;
private AATHandler atHandler;
private String simPin, simPin2;
private int outMpRefNo;
private List mpMsgList;
private int retriesNoResponse, retriesCmsErrors;
private int delayNoResponse, delayCmsErrors;
private String smscNumber;
ModemGateway(ModemTypes type, String id, String modemDevice, int modemParms, String manufacturer, String model, Logger logger)
{
super(id, logger);
started = false;
this.modemDevice = modemDevice;
this.modemParms = modemParms;
this.manufacturer = manufacturer;
this.model = model;
attributes = AGateway.GatewayAttributes.SEND | AGateway.GatewayAttributes.RECEIVE | AGateway.GatewayAttributes.BIGMESSAGES | AGateway.GatewayAttributes.WAPSI | AGateway.GatewayAttributes.PORTADDRESSING | AGateway.GatewayAttributes.FLASHSMS | AGateway.GatewayAttributes.DELIVERYREPORTS;
if (type == ModemTypes.SERIAL) driver = new SerialModemDriver(this, this.modemDevice + ":" + this.modemParms);
else driver = new IPModemDriver(this, this.modemDevice + ":" + this.modemParms);
atHandler = AATHandler.load(this, this.manufacturer, this.model);
logger.info("Using " + atHandler.description + " AT handler.");
simPin = "";
simPin2 = "";
outMpRefNo = new Random().nextInt();
if (outMpRefNo < 0) outMpRefNo *= -1;
outMpRefNo %= 65536;
mpMsgList = new ArrayList();
retriesNoResponse = 2;
delayNoResponse = 5000;
retriesCmsErrors = 2;
delayCmsErrors = 5000;
smscNumber = "";
}
void startGateway() throws TimeoutException, GatewayException, IOException, InterruptedException
{
logger.info("Starting Gateway: " + gtwId);
driver.connect();
logger.info("Started Gateway: " + gtwId);
super.startGateway();
}
void stopGateway() throws TimeoutException, GatewayException, IOException, InterruptedException
{
logger.info("Stopping Gateway: " + gtwId);
super.stopGateway();
driver.disconnect();
}
void readMessages(List msgList, MessageClasses msgClass) throws TimeoutException, GatewayException, IOException, InterruptedException
{
synchronized (driver.SYNC_Commander)
{
if (protocol == MessageProtocols.PDU) readMessagesPDU(msgList, msgClass, 0);
else if (protocol == MessageProtocols.TEXT) readMessagesTEXT(msgList, msgClass, 0);
}
}
InboundMessage readMessage(String memLoc, int memIndex) throws TimeoutException, GatewayException, IOException, InterruptedException
{
List msgList;
synchronized (driver.SYNC_Commander)
{
msgList = new ArrayList();
readMessages(msgList, MessageClasses.ALL);
for (int i = 0, n = msgList.size(); i < n; i++)
if ((((InboundMessage) msgList.get(i)).getMemIndex() == memIndex) && (((InboundMessage) msgList.get(i)).getMemLocation().equalsIgnoreCase(memLoc))) return (InboundMessage) msgList.get(i);
return null;
}
}
boolean sendMessage(OutboundMessage msg) throws TimeoutException, GatewayException, IOException, InterruptedException
{
synchronized (driver.SYNC_Commander)
{
if (protocol == MessageProtocols.PDU) return sendMessagePDU(msg);
else if (protocol == MessageProtocols.TEXT) return sendMessageTEXT(msg);
else return false;
}
}
boolean deleteMessage(InboundMessage msg) throws TimeoutException, GatewayException, IOException, InterruptedException
{
synchronized (driver.SYNC_Commander)
{
if (msg.getMemIndex() >= 0) return deleteMessage(msg.getMemIndex(), msg.getMemLocation());
else if ((msg.getMemIndex() == -1) && (msg.getMpMemIndex().length() != 0))
{
StringTokenizer tokens = new StringTokenizer(msg.getMpMemIndex(), ",");
while (tokens.hasMoreTokens())
deleteMessage(Integer.parseInt(tokens.nextToken()), msg.getMemLocation());
}
return true;
}
}
boolean deleteMessage(int memIndex, String memLocation) throws TimeoutException, GatewayException, IOException, InterruptedException
{
return atHandler.deleteMessage(memIndex, memLocation);
}
private boolean sendMessagePDU(OutboundMessage msg) throws TimeoutException, GatewayException, IOException, InterruptedException
{
int j, refNo;
String pdu;
boolean ok = false;
atHandler.keepGsmLinkOpen();
if (!msg.isBig())
{
pdu = msg.getPDU(smscNumber, 0, 0);
j = pdu.length();
j /= 2;
if (smscNumber == null)
; // Do nothing on purpose!
else if (smscNumber.length() == 0) j--;
else
{
int smscNumberLen = smscNumber.length();
if (smscNumber.charAt(0) == '+') smscNumberLen--;
if (smscNumberLen % 2 != 0) smscNumberLen++;
int smscLen = (2 + smscNumberLen) / 2;
j = j - smscLen - 1;
}
refNo = atHandler.sendMessage(j, pdu, null, null);
if (refNo >= 0)
{
msg.setGatewayId(gtwId);
msg.setRefNo("" + refNo);
msg.setDispatchDate(new Date());
msg.setMessageStatus(MessageStatuses.SENT);
statistics.outbound++;
ok = true;
}
else
{
msg.setRefNo(null);
msg.setDispatchDate(null);
msg.setMessageStatus(MessageStatuses.FAILED);
ok = false;
}
}
else
{
for (int partNo = 1; partNo <= msg.getNoOfParts(); partNo++)
{
pdu = msg.getPDU(smscNumber, outMpRefNo, partNo);
j = pdu.length();
j /= 2;
if (smscNumber == null)
; // Do nothing on purpose!
else if (smscNumber.length() == 0) j--;
else
{
int smscNumberLen = smscNumber.length();
if (smscNumber.charAt(0) == '+') smscNumberLen--;
if (smscNumberLen % 2 != 0) smscNumberLen++;
int smscLen = (2 + smscNumberLen) / 2;
j = j - smscLen - 1;
}
refNo = atHandler.sendMessage(j, pdu, null, null);
if (refNo >= 0)
{
msg.setGatewayId(gtwId);
msg.setRefNo("" + refNo);
msg.setDispatchDate(new Date());
msg.setMessageStatus(MessageStatuses.SENT);
statistics.outbound++;
ok = true;
}
else
{
msg.setRefNo(null);
msg.setDispatchDate(null);
msg.setMessageStatus(MessageStatuses.FAILED);
}
}
outMpRefNo = (outMpRefNo + 1) % 65536;
}
return ok;
}
private boolean sendMessageTEXT(OutboundMessage msg) throws TimeoutException, GatewayException, IOException, InterruptedException
{
// TODO: (TD) Implement Text Mode.
return false;
}
private void readMessagesTEXT(List msgList, MessageClasses msgClass, int limit) throws TimeoutException, GatewayException, IOException, InterruptedException
{
int i, j, memIndex;
byte[] bytes;
String response, line, msgText, origina
没有合适的资源?快使用搜索试试~ 我知道了~
smslib-java-v3.1-RC3.zip_ModemTypes_com.diagcn.smslib_java 发短信_s
共76个文件
java:61个
sql:4个
xml:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 113 浏览量
2022-09-23
23:22:43
上传
评论
收藏 134KB ZIP 举报
温馨提示
java发短信用的,这是3.0最新版本,其用到了logj4
资源推荐
资源详情
资源评论
收起资源包目录
smslib-java-v3.1-RC3.zip (76个子文件)
build.xml 3KB
CHANGELOG 12KB
LICENSE 10KB
src
java
misc
CommTest.java 2KB
org
smslib
ATHandler_Wavecom.java 1KB
GSMServiceHTTPGateway.java 4KB
SMSLibException.java 1KB
ModemTypes.java 2KB
Library.java 2KB
LoadBalancer.java 2KB
MessageTypes.java 2KB
MessagePriorities.java 2KB
ATHandler_Siemens_M55.java 1KB
DeliveryStatuses.java 2KB
ATHandler_Ubinetics_GDC201.java 2KB
smssvr
smssvr_in.mssql.sql 2KB
smssvr_out.mssql.sql 4KB
smssvr_out.mysql.sql 730B
SMSSvr.java 14KB
SMSSvr.conf 2KB
smssvr_in.mysql.sql 430B
ATHandler_Siemens_MC35i.java 1KB
MessageProtocols.java 2KB
GatewayStatuses.java 1KB
InboundMessage.java 10KB
Queue.java 1KB
WapSISignals.java 2KB
ATHandler_SonyEricsson.java 2KB
CNMIDetector.java 6KB
IOutboundMessageNotification.java 1KB
OutboundMessage.java 17KB
ComVisionHTTPGateway.java 5KB
GSMAlphabet.java 14KB
ModemGateway.java 27KB
NumberPoolRouter.java 2KB
GatewayException.java 1KB
MessageClasses.java 2KB
SerialModemGateway.java 2KB
ATHandler_MultiTech.java 1KB
RoundRobinLoadBalancer.java 2KB
Router.java 4KB
BulkSmsHTTPGateway.java 7KB
StatusReportMessage.java 5KB
ClickatellHTTPGateway.java 13KB
HTTPGateway.java 4KB
AsyncEvents.java 2KB
TimeoutException.java 1KB
UnknownMessage.java 2KB
MessageStatuses.java 2KB
Message.java 6KB
ATHandler_Siemens_S55.java 1KB
IInboundMessageNotification.java 1KB
AATHandler.java 6KB
IPModemDriver.java 4KB
SerialModemDriver.java 6KB
ATHandler.java 13KB
TestGateway.java 3KB
IPModemGateway.java 2KB
ICallNotification.java 1KB
MessageEncodings.java 2KB
ModemDriver.java 18KB
Service.java 24KB
OutboundWapSIMessage.java 5KB
FailureCauses.java 2KB
AGateway.java 17KB
examples
routing
modem
ReadMessages.java 5KB
SendMessage.java 3KB
clickatell
SendMessage.java 3KB
bulksms
SendMessage.java 2KB
www.pudn.com.txt 218B
build.properties 172B
other
smslib-log4j.properties 562B
Eclipse Formatter
SMSLib.xml 28KB
build-libraries.xml 789B
build
Introduction.html 540B
SMSLib.mf 159B
共 76 条
- 1
资源评论
Kinonoyomeo
- 粉丝: 74
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功