📄 cservice.java
字号:
response = serialDriver.getResponse();
error = ERR_OK;
for (i = 0; i < outList.size(); i ++)
{
message = (COutgoingMessage) outList.get(i);
serialDriver.send(CUtils.substituteSymbol(CATCommands.AT_SEND_MESSAGE, "{1}", message.getRecipient()));
while (serialDriver.dataAvailable()) serialDriver.skipBytes(1);
serialDriver.send(message.getHexText());
serialDriver.send((char) 26);
response = serialDriver.getResponse();
if (response.indexOf(CATCommands.AT_OK) > -1)
{
message.setDispatchDate(new Date());
deviceInfo.getStatistics().incTotalOut();
}
else
{
message.setDispatchDate(null);
error = ERR_SEND_FAILED;
}
}
return error;
}
catch (Exception e)
{
e.printStackTrace();
setConnected(false);
return ERR_NOT_CONNECTED;
}
case MODE_PDU:
try
{
serialDriver.send(CATCommands.AT_PDU_MODE);
response = serialDriver.getResponse();
serialDriver.send(CATCommands.AT_KEEP_LINK_OPEN);
response = serialDriver.getResponse();
error = ERR_OK;
for (i = 0; i < outList.size(); i ++)
{
message = (COutgoingMessage) outList.get(i);
pdu = message.getPDU(smscNumber);
j = pdu.length();
j /= 2;
if (smscNumber == null) ;
else if (smscNumber.length() == 0) j --;
else
{
j -= ((smscNumber.length() - 1) / 2);
j -= 2;
}
serialDriver.send(CUtils.substituteSymbol(CATCommands.AT_SEND_MESSAGE, "\"{1}\"", "" + j));
while (!serialDriver.dataAvailable()) { try { Thread.sleep(10); } catch (Exception e) {} };
while (serialDriver.dataAvailable()) serialDriver.skipBytes(1);
serialDriver.send(pdu);
serialDriver.send((char) 26);
response = serialDriver.getResponse();
if (response.indexOf(CATCommands.AT_OK) > -1)
{
message.setDispatchDate(new Date());
deviceInfo.getStatistics().incTotalOut();
}
else
{
message.setDispatchDate(null);
error = ERR_SEND_FAILED;
}
}
return error;
}
catch (Exception e)
{
e.printStackTrace();
setConnected(false);
return ERR_NOT_CONNECTED;
}
default:
return ERR_SEND_FAILED;
}
}
else return ERR_NOT_CONNECTED;
}
}
/**
Deletes an SMS message from the GSM device memory.
<br><br>
<strong>Notes:</strong>
<ul>
<li>A deleted message cannot be recovered.</li>
</ul>
@param message a valid CIncomingMessage object, i.e. an object which is
previously read with readMessages() from the GSM device.
@return One of ERR_* values.
@see CIncomingMessage
@see CService#deleteMessage(int)
*/
public int deleteMessage(CIncomingMessage message)
{
synchronized (_SYNC_)
{
return deleteMessage(message.getMemIndex());
}
}
/**
Deletes an SMS message from the GSM device memory.
<br><br>
<strong>Notes:</strong>
<ul>
<li>A deleted message cannot be recovered.</li>
<li>It is highly recommended to use the other form of the deleteMessage()
method.</li>
</ul>
@param memIndex the memory index of the GSM device's memory from where
the message (if there is any message there) should be deleted.
@return One of ERR_* values.
@see CService#deleteMessage(CIncomingMessage)
*/
public int deleteMessage(int memIndex)
{
String response;
synchronized (_SYNC_)
{
if (getConnected())
{
if (memIndex > 0)
{
try
{
serialDriver.send(CUtils.substituteSymbol(CATCommands.AT_DELETE_MESSAGE, "{1}", "" + memIndex));
response = serialDriver.getResponse();
if (response.indexOf(CATCommands.AT_OK) > -1) return ERR_OK;
else return ERR_MESSAGE_NOT_FOUND;
}
catch (Exception e)
{
e.printStackTrace();
return ERR_GENERIC_ERROR;
}
}
else return ERR_GENERIC_ERROR;
}
else return ERR_NOT_CONNECTED;
}
}
/**
Virtual method, called upon receipt of a message (Asynchronous mode only!)
<br><br>
<strong>Notes:</strong>
<ul>
<li>If you plan to use jSMSEngine API in asynchronous mode, you should
override this method, making it do your job upon message receipt.</li>
</ul>
@param message the received message.
@return return true if you wish the message to be deleted from the GSM device's memory.
Otherwise false.
@see CService#setReceiveMode(int)
*/
public boolean received(CIncomingMessage message)
{
return false;
}
/**
* Checks if the message is SMS-DELIVER.
*
* @author George Karadimas
* @param pdu the message pdu
* @return true if the message is SMS-DELIVER
*/
private boolean isIncomingMessage(String pdu)
{
int index, i;
i = Integer.parseInt(pdu.substring(0, 2), 16);
index = (i + 1) * 2;
i = Integer.parseInt(pdu.substring(index, index + 2), 16);
if ((i & 0x03) == 0) return true;
else return false;
}
/**
* Checks if the message is SMS-STATUS-REPORT.
*
* @param pdu the message pdu
* @return true if the message is SMS-STATUS-REPORT
*/
private boolean isStatusReportMessage(String pdu)
{
String str;
int index, i;
str = pdu.substring(0, 2);
i = Integer.parseInt(str, 16);
index = (i + 1) * 2;
str = pdu.substring(index, index + 2);
i = Integer.parseInt(str, 16);
if ((i & 0x02) == 2) return true;
else return false;
}
private void setConnected(boolean connected) { this.connected = connected; }
private void setInitialized(boolean initialized) { this.initialized = initialized; }
private String getManufacturer() throws Exception
{
String response;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_MANUFACTURER, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_MANUFACTURER);
response = serialDriver.getResponse();
if (response.length() == 0) response = "";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
response = CUtils.substituteSymbol(response, "\"", "");
}
else response = DEFAULT_VALUE_NOT_REPORTED;
return response;
}
private String getModel() throws Exception
{
String response;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_MODEL, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_MODEL);
response = serialDriver.getResponse();
if (response.length() == 0) response = "";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
response = CUtils.substituteSymbol(response, "\"", "");
}
else response = DEFAULT_VALUE_NOT_REPORTED;
return response;
}
private String getSerialNo() throws Exception
{
String response;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_SERIALNO, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_SERIALNO);
response = serialDriver.getResponse();
if (response.length() == 0) response = "";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
}
else response = DEFAULT_VALUE_NOT_REPORTED;
return response;
}
private String getImsi() throws Exception
{
String response;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_IMSI, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_IMSI);
response = serialDriver.getResponse();
if (response.length() == 0) response = "";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
}
else response = DEFAULT_VALUE_NOT_REPORTED;
return response;
}
private String getSwVersion() throws Exception
{
String response;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_SOFTWARE, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_SOFTWARE);
response = serialDriver.getResponse();
if (response.length() == 0) response = "";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
response = CUtils.substituteSymbol(response, "\"", "");
}
else response = DEFAULT_VALUE_NOT_REPORTED;
return response;
}
private int getBatteryLevel() throws Exception
{
String response, level;
StringTokenizer tokens;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_BATTERY, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_BATTERY);
response = serialDriver.getResponse();
if (response.length() == 0) level = "0";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
tokens = new StringTokenizer(response, ":,");
tokens.nextToken();
level = tokens.nextToken().trim();
}
else level = "0";
return (Integer.parseInt(level));
}
private int getSignalLevel() throws Exception
{
String response, level;
StringTokenizer tokens;
String whatToDiscard;
whatToDiscard = "+" + CUtils.substituteSymbol(CUtils.substituteSymbol(CATCommands.AT_SIGNAL, "AT+", ""), "\r", "") + ": ";
serialDriver.send(CATCommands.AT_SIGNAL);
response = serialDriver.getResponse();
if (response.length() == 0) level = "0";
else if (response.indexOf(CATCommands.AT_OK) > -1)
{
response = CUtils.substituteSymbol(response, CATCommands.AT_OK, "");
response = CUtils.substituteSymbol(response, "\r", "");
response = CUtils.substituteSymbol(response, "\n", "");
response = CUtils.substituteSymbol(response, whatToDiscard, "");
tokens = new StringTokenizer(response, ":,");
level = tokens.nextToken().trim();
}
else level = "0";
return (Integer.parseInt(level) * 100 / 31);
}
private LinkedList splitLargeMessages(LinkedList messageList)
{
LinkedList outList;
COutgoingMessage message, newMessage;
int i, splitIndex, messageLength, smsSplitId, smsDispatchId;
int maxMessageLength, partLength;
String splitText;
outList = new LinkedList();
for (i = 0; i < messageList.size(); i ++)
{
message = (COutgoingMessage) messageList.get(i);
switch (message.getMessageEncoding())
{
case CMessage.MESSAGE_ENCODING_7BIT:
maxMessageLength = MAX_SMS_LEN_7BIT;
break;
case CMessage.MESSAGE_ENCODING_8BIT:
maxMessageLength = MAX_SMS_LEN_8BIT;
break;
case CMessage.MESSAGE_ENCODING_UNICODE:
maxMessageLength = MAX_SMS_LEN_UNICODE;
break;
default:
maxMessageLength = 0;
break;
}
messageLength = message.getText().length();
if (messageLength > maxMessageLength)
{
partLength = maxMessageLength - SMS_SPLIT_SIGNATURE.length();
smsSplitId = getSmsSplitId();
splitIndex = 0;
while ((splitIndex * partLength) < messageLength)
{
int from = splitIndex * partLength;
int to = from + partLength;
if (to > messageLength) to = messageLength;
splitText = message.getText().substring(from, to);
smsDispatchId = smsSplitId + splitIndex;
splitText = SMS_SPLIT_SIGNATURE.substring(0, 1) + (char) smsDispatchId + SMS_SPLIT_SIGNATURE.substring(2, 3) + splitText;
newMessage = new COutgoingMessage(message.getRecipient(), splitText);
newMessage.setMessageEncoding(message.getMessageEncoding());
outList.add(newMessage);
splitIndex ++;
}
}
else outList.add(message);
}
return outList;
}
private int getSmsSplitId()
{
int id;
id = smsSplitId;
smsSplitId ++;
if (smsSplitId > 15) smsSplitId = 0;
return id << 3;
}
private class CReceiveThread extends Thread
{
public void run()
{
LinkedList messageList;
messageList = new LinkedList();
while (true)
{
try { sleep(10000); } catch (Exception e) {}
synchronized (_SYNC_)
{
if ((getConnected()) && (getReceiveMode() == RECEIVE_MODE_ASYNC))
{
messageList.clear();
readMessages(messageList, CIncomingMessage.CLASS_ALL);
for (int i = 0; i < messageList.size(); i ++)
{
CIncomingMessage message = (CIncomingMessage) messageList.get(i);
if (received(message)) deleteMessage(message);
}
}
}
}
}
}
public static void main(String[] args)
{
System.out.println("jSMSEngine API.");
System.out.println(" An open source Java API to process SMS messages from your computer.");
System.out.println(" This software is distributed under the LGPL license.");
System.out.println("");
System.out.println("Written by Thanasis Delenikas.");
System.out.println();
System.out.println("Copyright (C) 2002-2005, Thanasis Delenikas, Athens / GREECE.");
System.out.println("Please check http://www.jsmsengine.org for latest information.");
System.out.println("\n");
System.out.println(_name + " v" + _version + " { " + _reldate + " }");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -