亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? amodemdriver.java

?? 發(fā)送短信 接收短信 多種接口com/net/modem 開發(fā)庫
?? JAVA
?? 第 1 頁 / 共 3 頁
字號(hào):
// 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
//
// Copyright (C) 2002-2009, Thanasis Delenikas, Athens/GREECE.
// SMSLib is distributed under the terms of the Apache License version 2.0
//
// 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.modem;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.smslib.GatewayException;
import org.smslib.InboundMessage;
import org.smslib.Service;
import org.smslib.TimeoutException;
import org.smslib.AGateway.AsyncEvents;
import org.smslib.AGateway.GatewayStatuses;
import org.smslib.AGateway.Protocols;
import org.smslib.InboundMessage.MessageClasses;
import org.smslib.scheduler.ASchedulerTask;

/**
 * Abstract implementation of a generic GSM modem driver.
 */
public abstract class AModemDriver
{
	private static final String rxErrorWithCode = "\\s*[\\p{ASCII}]*\\s*\\+(CM[ES])\\s+ERROR: (\\d+)\\s";

	private static final String rxPlainError = "\\s*[\\p{ASCII}]*\\s*(ERROR|NO CARRIER|NO DIALTONE)\\s";

	private Object SYNC_Reader, SYNC_Commander, SYNC_InboundReader;

	private ModemGateway gateway;

	private boolean dataReceived;

	private volatile boolean connected;

	private CharQueue charQueue;

	private ModemReader modemReader;

	private KeepAlive keepAlive;

	private AsyncNotifier asyncNotifier;

	private AsyncMessageProcessor asyncMessageProcessor;

	private CNMIEmulatorProcessor cnmiEmulationProcessor;

	/**
	 * Code of last error
	 * 
	 * <pre>
	 *   -1 = empty or invalid response
	 *    0 = OK
	 * 5xxx = CME error xxx
	 * 6xxx = CMS error xxx
	 * 9000 = ERROR
	 * </pre>
	 */
	private int lastError;

	static int OK = 0;

	protected AModemDriver(ModemGateway myGateway, String deviceParms)
	{
		setSYNCReader(new Object());
		setSYNCCommander(new Object());
		setSYNCInboundReader(new Object());
		setGateway(myGateway);
		setConnected(false);
		setDataReceived(false);
		setCharQueue(new CharQueue());
	}

	protected abstract void connectPort() throws GatewayException, IOException, InterruptedException;

	protected abstract void disconnectPort() throws IOException, InterruptedException;

	protected abstract void clear() throws IOException;

	protected void connect() throws TimeoutException, GatewayException, IOException, InterruptedException
	{
		String response;
		synchronized (getSYNCCommander())
		{
			try
			{
				connectPort();
				setConnected(true);
				setKeepAlive(new KeepAlive("KeepAlive [" + getGateway().getGatewayId() + "]", getGateway().getService()));
				getGateway().getService().getScheduler().scheduleAtFixedRate(getKeepAlive(), getGateway().getService().getSettings().SERIAL_KEEPALIVE_INTERVAL, getGateway().getService().getSettings().SERIAL_KEEPALIVE_INTERVAL, TimeUnit.SECONDS);
				getKeepAlive().enable();
				setCnmiEmulationProcessor(new CNMIEmulatorProcessor("CNMIEmulatorProcessor [" + getGateway().getGatewayId() + "]", getGateway().getService()));
				getGateway().getService().getScheduler().scheduleAtFixedRate(getCnmiEmulationProcessor(), getGateway().getService().getSettings().CNMI_EMULATOR_INTERVAL, getGateway().getService().getSettings().CNMI_EMULATOR_INTERVAL, TimeUnit.SECONDS);
				setModemReader(new ModemReader());
				setAsyncNotifier(new AsyncNotifier());
				setAsyncMessageProcessor(new AsyncMessageProcessor());
				clearBuffer();
				getGateway().getATHandler().reset();
				getGateway().getATHandler().sync();
				getGateway().getATHandler().echoOff();
				if ((getGateway().getCustomInitString() != null) && (getGateway().getCustomInitString().length() > 0))
				{
					write(getGateway().getCustomInitString() + "\r");
					getGateway().getATHandler().echoOff();
				}
				while (true)
				{
					response = getGateway().getATHandler().getSimStatus();
					while (response.indexOf("BUSY") >= 0)
					{
						getGateway().getService().getLogger().logDebug("SIM found busy, waiting...", null, getGateway().getGatewayId());
						Thread.sleep(getGateway().getService().getSettings().AT_WAIT_SIMPIN);
						response = getGateway().getATHandler().getSimStatus();
					}
					if (response.indexOf("SIM PIN2") >= 0)
					{
						getGateway().getService().getLogger().logDebug("SIM requesting PIN2.", null, getGateway().getGatewayId());
						if ((getGateway().getSimPin2() == null) || (getGateway().getSimPin2().length() == 0)) throw new GatewayException("The GSM modem requires SIM PIN2 to operate.");
						if (!getGateway().getATHandler().enterPin(getGateway().getSimPin2())) throw new GatewayException("SIM PIN2 provided is not accepted by the GSM modem.");
						Thread.sleep(getGateway().getService().getSettings().AT_WAIT_SIMPIN);
						continue;
					}
					else if (response.indexOf("SIM PIN") >= 0)
					{
						getGateway().getService().getLogger().logDebug("SIM requesting PIN.", null, getGateway().getGatewayId());
						if ((getGateway().getSimPin() == null) || (getGateway().getSimPin().length() == 0)) throw new GatewayException("The GSM modem requires SIM PIN to operate.");
						if (!getGateway().getATHandler().enterPin(getGateway().getSimPin())) throw new GatewayException("SIM PIN provided is not accepted by the GSM modem.");
						Thread.sleep(getGateway().getService().getSettings().AT_WAIT_SIMPIN);
						continue;
					}
					else if (response.indexOf("READY") >= 0) break;
					else if (response.indexOf("OK") >= 0) break;
					else if (response.indexOf("ERROR") >= 0)
					{
						getGateway().getService().getLogger().logWarn("Erroneous CPIN response, proceeding with defaults.", null, getGateway().getGatewayId());
						break;
					}
					getGateway().getService().getLogger().logWarn("Cannot understand SIMPIN response: " + response + ", will wait for a while...", null, getGateway().getGatewayId());
					Thread.sleep(getGateway().getService().getSettings().AT_WAIT_SIMPIN);
				}
				getGateway().getATHandler().echoOff();
				getGateway().getATHandler().init();
				getGateway().getATHandler().echoOff();
				waitForNetworkRegistration();
				getGateway().getATHandler().setVerboseErrors();
				if (getGateway().getATHandler().getStorageLocations().length() == 0)
				{
					try
					{
						getGateway().getATHandler().readStorageLocations();
						getGateway().getService().getLogger().logInfo("MEM: Storage Locations Found: " + getGateway().getATHandler().getStorageLocations(), null, getGateway().getGatewayId());
					}
					catch (Exception e)
					{
						getGateway().getATHandler().setStorageLocations("--");
						getGateway().getService().getLogger().logWarn("Storage locations could *not* be retrieved, will proceed with defaults.", e, getGateway().getGatewayId());
					}
				}
				if (!getGateway().getATHandler().setIndications())
				{
					getGateway().getService().getLogger().logWarn("Callback indications were *not* set succesfully!", null, getGateway().getGatewayId());
					getCnmiEmulationProcessor().enable();
				}
				else
				{
					if (getGateway().getATHandler().getIndications().getMode().equals("0")) getCnmiEmulationProcessor().enable();
				}
				if (getGateway().getProtocol() == Protocols.PDU)
				{
					if (!getGateway().getATHandler().setPduProtocol()) throw new GatewayException("The GSM modem does not support the PDU protocol.");
				}
				else if (getGateway().getProtocol() == Protocols.TEXT)
				{
					if (!getGateway().getATHandler().setTextProtocol()) throw new GatewayException("The GSM modem does not support the TEXT protocol.");
				}
			}
			catch (TimeoutException t)
			{
				// this is to prevent serial port from being held
				// when a timeout during initialization occurs
				try
				{
					disconnect();
				}
				catch (Exception e)
				{
					// Discard all here.
				}
				throw t;
			}
		}
	}

	protected void disconnect() throws IOException, InterruptedException
	{
		//deadlocking is still possible in this method
		//however it is nearly impossible, since keepAlive will
		//give other threads opportunity to either exit global "while"
		//or enter waiting state
		if (getAsyncNotifier() != null)
		{
			getGateway().getService().getLogger().logDebug("Trying to shutdown asyncNotifier thread...", null, getGateway().getGatewayId());
		}
		if (getAsyncMessageProcessor() != null)
		{
			getGateway().getService().getLogger().logDebug("Trying to shutdown asyncMessageProcessor thread...", null, getGateway().getGatewayId());
		}
		if (getModemReader() != null)
		{
			getGateway().getService().getLogger().logDebug("Trying to shutdown modemReader thread...", null, getGateway().getGatewayId());
		}
		setConnected(false);
		getGateway().getService().getScheduler().remove(getKeepAlive());
		getGateway().getService().getScheduler().remove(getCnmiEmulationProcessor());
		
		if (getAsyncNotifier() != null)
		{
			getAsyncNotifier().interrupt();
			getAsyncNotifier().join();
			setAsyncNotifier(null);
		}
		if (getAsyncMessageProcessor() != null)
		{
			getAsyncMessageProcessor().interrupt();
			getAsyncMessageProcessor().join();
			setAsyncMessageProcessor(null);
		}
		if (getModemReader() != null)
		{
			getModemReader().interrupt();
			getModemReader().join();
			setModemReader(null);
		}
		disconnectPort();
	}

	public abstract void write(char c) throws IOException;

	public abstract void write(byte[] s) throws IOException;

	protected abstract int read() throws IOException;

	protected abstract boolean portHasData() throws IOException;

	public boolean dataAvailable() throws InterruptedException
	{
		return (getCharQueue().peek() == -1 ? false : true);
	}

	public void write(String s) throws IOException
	{
		getGateway().getService().getLogger().logDebug("SEND :" + formatLog(new StringBuffer(s)), null, getGateway().getGatewayId());
		write(s.getBytes());
	}

	public void AddToQueue(String s)
	{
		for (int i = 0; i < s.length(); i++)
			getCharQueue().put((byte) s.charAt(i));
	}

	public String getResponse() throws GatewayException, TimeoutException, IOException, InterruptedException
	{
		StringBuffer buffer;
		String response;
		byte c;
		boolean terminate;
		int i;
		String terminators[];
		setLastError(-1);
		terminators = getGateway().getATHandler().getTerminators();
		buffer = new StringBuffer(getGateway().getService().getSettings().SERIAL_BUFFER_SIZE);
		try
		{
			while (true)
			{
				while ((getCharQueue().peek() == 0x0a) || (getCharQueue().peek() == 0x0d))
				{
					getCharQueue().get();
				}
				while (true)
				{
					c = getCharQueue().get();
					if (System.getProperty("smslib.dumpqueues") != null) getGateway().getService().getLogger().logDebug("OUT READER QUEUE : " + (int) c + " / " + (char) c, null, getGateway().getGatewayId());
					if (c != 0x0a) buffer.append((char) c);
					else break;
				}
				if (buffer.charAt(buffer.length() - 1) != 0x0d) buffer.append((char) 0x0d);
				response = buffer.toString();
				terminate = false;
				for (i = 0; i < terminators.length; i++)
				{
					if (response.matches(terminators[i]))
					{
						terminate = true;
						break;
					}
				}
				if (terminate) break;
			}
			getGateway().getService().getLogger().logDebug("BUFFER: " + buffer, null, getGateway().getGatewayId());
			if (i >= terminators.length - 4)
			{
				AsyncEvents event = getGateway().getATHandler().processUnsolicitedEvents(buffer.toString());
				if ((event == AsyncEvents.INBOUNDMESSAGE) || (event == AsyncEvents.INBOUNDSTATUSREPORTMESSAGE) || (event == AsyncEvents.INBOUNDCALL)) getAsyncNotifier().setEvent(event, buffer.toString());
				return getResponse();
			}
			// Try to interpret error code
			if (response.matches(rxErrorWithCode))
			{
				Pattern p = Pattern.compile(rxErrorWithCode);
				Matcher m = p.matcher(response);
				if (m.find())
				{
					try
					{
						if (m.group(1).equals("CME"))
						{
							int code = Integer.parseInt(m.group(2));
							setLastError(5000 + code);
						}
						else if (m.group(1).equals("CMS"))
						{
							int code = Integer.parseInt(m.group(2));
							setLastError(6000 + code);
						}
						else throw new GatewayException("Invalid error response: " + m.group(1));
					}
					catch (NumberFormatException e)
					{
						getGateway().getService().getLogger().logDebug("Error on number conversion while interpreting response: ", null, getGateway().getGatewayId());
						throw new GatewayException("Cannot convert error code number.");
					}
				}
				else throw new GatewayException("Cannot match error code. Should never happen!");
			}
			else if (response.matches(rxPlainError)) setLastError(9000);
			else if (response.indexOf("OK") >= 0) setLastError(0);
			else setLastError(10000);
			getGateway().getService().getLogger().logDebug("RECV :" + formatLog(buffer), null, getGateway().getGatewayId());
		}
		catch (InterruptedException e)
		{
			getGateway().getService().getLogger().logWarn("GetResponse() Interrupted.", e, getGateway().getGatewayId());
			throw e;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费观看av| 欧美成人一区二区三区在线观看| 国产精品亚洲一区二区三区妖精 | 亚洲国产成人tv| 亚洲狼人国产精品| 亚洲欧美另类综合偷拍| 国产精品久久久久影院老司| 欧美高清在线视频| 亚洲欧洲精品一区二区三区不卡 | 国产精品一区二区三区99| 久久国产夜色精品鲁鲁99| 裸体在线国模精品偷拍| 久久激五月天综合精品| 激情综合色综合久久| 国产在线麻豆精品观看| 国产精品自拍在线| 成人a免费在线看| 91美女精品福利| 欧美视频三区在线播放| 欧美精品在线一区二区三区| 日韩视频免费观看高清完整版| 欧美zozozo| 国产精品美女久久久久高潮 | 成人性视频网站| 91亚洲大成网污www| 在线观看亚洲精品视频| 精品婷婷伊人一区三区三| 欧美一区二区私人影院日本| 欧美xfplay| 亚洲欧洲国产日本综合| 亚洲一二三四在线观看| 久久精品免费看| 成人一区在线看| 欧洲另类一二三四区| 日韩欧美国产不卡| 国产精品美女久久久久久久| 一区二区三区在线视频免费 | 国产一区在线视频| 91在线无精精品入口| 欧美精品在线视频| 亚洲国产精品激情在线观看| 亚洲与欧洲av电影| 久久99九九99精品| 色噜噜狠狠成人中文综合| 6080午夜不卡| 国产精品萝li| 日本一区中文字幕 | 国产亚洲一二三区| 亚洲一区二区三区视频在线| 国产综合久久久久久久久久久久| 成年人午夜久久久| 51午夜精品国产| 国产精品久久久久久久浪潮网站| 五月天激情小说综合| 国产一区高清在线| 欧美日韩aaaaa| 中文字幕国产一区二区| 五月综合激情网| 不卡区在线中文字幕| 日韩一区二区在线免费观看| 国产精品卡一卡二卡三| 久久精品国内一区二区三区| 色综合色狠狠综合色| 精品欧美乱码久久久久久| 一区2区3区在线看| 激情综合色播激情啊| 亚洲欧美欧美一区二区三区| 国产精品久久久久aaaa| 日产国产欧美视频一区精品| 91丨porny丨中文| 久久久久久久综合| 亚洲自拍偷拍av| 不卡一区二区中文字幕| 精品国产91乱码一区二区三区 | 亚洲一区在线观看免费| 成人综合婷婷国产精品久久蜜臀| 欧美大度的电影原声| 亚洲精品成人精品456| 国产麻豆精品在线| 精品日韩一区二区三区| 午夜精品久久久久久久| 色综合久久综合| 亚洲视频你懂的| 成人免费不卡视频| 国产亚洲成av人在线观看导航 | 国产伦精品一区二区三区免费迷| 欧美高清视频在线高清观看mv色露露十八| 亚洲欧洲国产专区| 不卡高清视频专区| 国产精品婷婷午夜在线观看| 久久精品国产第一区二区三区| 欧美精品粉嫩高潮一区二区| 亚洲综合在线视频| 色嗨嗨av一区二区三区| 日韩毛片在线免费观看| 丁香啪啪综合成人亚洲小说 | 久久久精品日韩欧美| 裸体一区二区三区| 日韩视频一区在线观看| 免费在线欧美视频| 日韩一区二区三区免费观看| 日精品一区二区| 3d成人h动漫网站入口| 亚洲电影一级黄| 欧美日韩精品免费| 天堂一区二区在线免费观看| 在线视频你懂得一区| 一区二区日韩电影| 欧美久久久久久久久中文字幕| 五月综合激情日本mⅴ| 欧美日韩精品是欧美日韩精品| 图片区日韩欧美亚洲| 在线成人免费视频| 奇米一区二区三区av| 日韩三区在线观看| 日韩三级中文字幕| 久久精品国产秦先生| 久久综合av免费| 国产.精品.日韩.另类.中文.在线.播放| 久久午夜羞羞影院免费观看| 国产伦精品一区二区三区在线观看| 国产欧美日本一区视频| 不卡av在线免费观看| 亚洲精品网站在线观看| 欧美性大战xxxxx久久久| 视频在线观看一区二区三区| 91精品国产入口在线| 国产一区二区三区在线观看免费视频| 国产日韩在线不卡| 一本大道久久a久久综合| 亚洲bt欧美bt精品| 精品三级在线看| 99国产精品久久久久| 亚洲电影激情视频网站| 精品欧美一区二区三区精品久久| 国产精品亚洲人在线观看| 国产精品超碰97尤物18| 欧美色精品在线视频| 久久国内精品视频| 亚洲欧洲国产专区| 欧美一区二区观看视频| 国产毛片精品视频| 亚洲一区二区免费视频| 337p粉嫩大胆噜噜噜噜噜91av | 中文字幕精品三区| 欧美日韩一区二区在线观看视频| 裸体一区二区三区| 亚洲人成小说网站色在线| 欧美日韩国产123区| 国产一区二区剧情av在线| 一区二区三区视频在线观看| 欧美一级片在线看| 97se亚洲国产综合自在线不卡| 免费观看日韩电影| 亚洲欧洲另类国产综合| 日韩一二三四区| 91丝袜呻吟高潮美腿白嫩在线观看| 日本aⅴ免费视频一区二区三区| 欧美激情一区二区| 91精品国模一区二区三区| 成人一道本在线| 青青国产91久久久久久| 亚洲视频每日更新| 久久久综合精品| 制服丝袜亚洲网站| 色婷婷精品大视频在线蜜桃视频| 久久99在线观看| 亚洲国产婷婷综合在线精品| 国产校园另类小说区| 欧美日韩亚洲综合一区| 成人免费观看男女羞羞视频| 老司机午夜精品99久久| 亚洲国产另类精品专区| 国产精品欧美极品| 久久免费看少妇高潮| 欧美日韩不卡在线| 一本到高清视频免费精品| 国产不卡免费视频| 国产一区二区在线电影| 石原莉奈在线亚洲三区| 亚洲欧美在线aaa| 国产日韩在线不卡| 337p日本欧洲亚洲大胆色噜噜| 6080日韩午夜伦伦午夜伦| 色呦呦日韩精品| av电影天堂一区二区在线| 国产成人h网站| 国产精品影视在线| 麻豆国产精品一区二区三区| 亚洲成人午夜影院| 亚洲一区免费视频| 亚洲男人的天堂在线aⅴ视频| 中文字幕精品一区| 久久精品欧美一区二区三区不卡| 精品国产一区二区三区久久影院| 欧美一区二区三区免费在线看 | 欧美成人综合网站| 91精品国产综合久久精品麻豆| 91成人免费网站| 91国产免费看|