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

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

?? messageprocessor.java

?? 是一個(gè)用java實(shí)現(xiàn)的
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
/*
 * MessageProcessor.java
 *
 * Created on November 17, 2003, 5:52 PM
 */

package gov.nist.applet.phone.ua;

import java.text.ParseException;

import javax.sip.SipException;
import javax.sip.Transaction;
import javax.sip.SipFactory;
import javax.sip.ServerTransaction;
import javax.sip.ClientTransaction;
import javax.sip.message.Request;
import javax.sip.message.Response;
import javax.sip.message.MessageFactory;
import javax.sip.address.AddressFactory;
import javax.sip.address.Address;
import javax.sip.address.SipURI;
import javax.sip.address.URI;
import javax.sip.header.AcceptHeader;
import javax.sip.header.CallInfoHeader;
import javax.sip.header.ContentTypeHeader;
import javax.sip.header.HeaderFactory;
import javax.sip.header.FromHeader;
import javax.sip.header.ToHeader;
import javax.sip.header.ExpiresHeader;
import javax.sip.header.RouteHeader;
import javax.sip.header.RecordRouteHeader;
import javax.sip.header.ContactHeader;

import java.util.ListIterator;
import java.util.LinkedList;
import java.util.Iterator;

import gov.nist.applet.phone.media.MediaManager;
import gov.nist.applet.phone.media.messaging.VoicePlayer;
import gov.nist.applet.phone.media.messaging.VoiceRecorder;
import gov.nist.applet.phone.ua.call.*;
import gov.nist.applet.phone.ua.pidf.parser.PresenceTag;
import gov.nist.applet.phone.ua.pidf.parser.XMLpidfParser;
import gov.nist.applet.phone.ua.presence.*;
/**
 * Handler of a major part of sip messages
 * 
 * @author  DERUELLE Jean
 */
public class MessageProcessor {

	/**
	 * The SipFactory instance used to create the SipStack and the Address
	 * Message and Header Factories.
	 */
	SipFactory sipFactory;

	/**
	 * The AddressFactory used to create URLs ans Address objects.
	 */
	AddressFactory addressFactory;

	/**
	 * The HeaderFactory used to create SIP message headers.
	 */
	HeaderFactory headerFactory;

	/**
	 * The Message Factory used to create SIP messages.
	 */
	MessageFactory messageFactory;

	/**
	 * The MessageListener used to handle incoming messages
	 */
	MessageListener messageListener;
	/**
	 * the configuration
	 */
	private Configuration configuration;
	VoicePlayer voicePlayer = null;
	/**
	 * 
	 */
	MessengerManager messengerManager;

	VoiceMessagingTask voiceMessagingTask;
        
        CallManager callManager;

	

	class VoiceMessagingTask implements Runnable {
		Thread voiceMessagingThread = null;
		String contactAddress = null;
		protected static final String STARTED = "Started";
		protected static final String STOPPED = "Stopped";
		String state = STOPPED;

		public VoiceMessagingTask(String contactAddress) {
			this.contactAddress = contactAddress;
		}

		public synchronized void start() {
			if (voiceMessagingThread == null) {
				voiceMessagingThread = new Thread(this);
			}
			state = STARTED;
			voiceMessagingThread.start();
		}

		public synchronized void stop() {
			state = STOPPED;
		}

		public void run() {
			while (state.equals(STARTED)) {
				try {
					byte[] buffer = VoiceRecorder.getInstance().getRecord();
					if (buffer != null)
						messengerManager.sendVoiceMessage(
							contactAddress,
							buffer);
					voiceMessagingThread.sleep(
						Configuration.latency4VoiceMessaging);
				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}
		}
	}

	/**
	 * 
	 */
	protected void startVoiceMessagingSchedule(String callee) {
		//schedule to send the voice messages every 2 sec.
		VoiceRecorder.getInstance().initialize();
		VoiceRecorder.getInstance().start();
		voiceMessagingTask = new VoiceMessagingTask(callee);
		voiceMessagingTask.start();
	}

	/**
	 * 
	 */
	protected void stopVoiceMessagingSchedule() {
		//Stop the voice messages schedule and the voiceRecorder				
		voiceMessagingTask.stop();
		VoiceRecorder.getInstance().stop();
		if (!VoiceRecorder.isClosed())
			VoiceRecorder.getInstance().close();
	}

	/** Creates a new instance of MessageProcessor 
	 * @param callListener - the sip Listener used to handle incoming messages
	 */
	public MessageProcessor(MessageListener messageListener) {
		voicePlayer = new VoicePlayer();
		this.messageListener = messageListener;
		this.addressFactory = MessageListener.addressFactory;
		this.sipFactory = MessageListener.sipFactory;
		this.headerFactory = MessageListener.headerFactory;
		this.messageFactory = MessageListener.messageFactory;
		this.configuration = messageListener.getConfiguration();
		this.messengerManager = messageListener.sipMeetingManager;
	}

	/**********************************************************************/
	/*                                                                    */
	/*                    Handling request messages                       */
	/*                                                                    */
	/**********************************************************************/

	/**
	 * Process the INVITE received request
	 * @param serverTransaction - the server transaction associated with the request
	 * @param invite - the request 
	 */
	public void processInvite(
		ServerTransaction serverTransaction,
		Request invite) {
		//Strip out the callee
		SipURI calleeURI =
			(SipURI) ((FromHeader) invite.getHeader(FromHeader.NAME))
				.getAddress()
				.getURI();
		String callee =
			"sip:" + calleeURI.getUser() + "@" + calleeURI.getHost();
		// Note that IM Calls are always accepted but VOICE calls may be rejected as there is
		// only one Voice line.
		try {
			CallManager callManager =
				messageListener.sipMeetingManager.getCallManager();
			//The audio device cannot be shared so if the user is already
			//in a call, a busy here is sent back
			if (callManager.isAlreadyInAudioCall()) {
				Response busyHere =
					(Response) MessageListener.messageFactory.createResponse(
						Response.BUSY_HERE,
						invite);
				//If the user has put an URL for the BUSY we add i in the CALL-Info
			  	if(messageListener.getConfiguration().httpBusy!=null){
					CallInfoHeader callInfoHeader=
						MessageListener.headerFactory.createCallInfoHeader(
					  	MessageListener.addressFactory.createURI(
					  	messageListener.getConfiguration().httpBusy));
				  	busyHere.addHeader(callInfoHeader);				
			  }
			  System.out.println("send response : " + busyHere.toString());
			  serverTransaction.sendResponse(busyHere);
			} else {
                                
				Response ringing =
					(Response) MessageListener.messageFactory.createResponse(
						Response.RINGING,
						invite);
				// System.out.println("send response : "+ringing.toString());
				serverTransaction.sendResponse(ringing);
				AudioCall audioCall = new AudioCall(messageListener);
				audioCall.setCallee(callee);
				audioCall.setDialog(serverTransaction.getDialog());
				audioCall.setStatus(AudioCall.INCOMING_CALL);
				System.out.println(
					"Audio Call created : "
						+ audioCall.getDialog().getDialogId());
				callManager.addAudioCall(audioCall);
				//Check if someone is inviting us to voice messaging
				//or regular RTP media session
				boolean voiceMessaging = false;
				ContentTypeHeader contentTypeHeader =
					(ContentTypeHeader) invite.getHeader(
						ContentTypeHeader.NAME);
				if (contentTypeHeader == null) {
					ListIterator acceptHeaderList =
						invite.getHeaders(AcceptHeader.NAME);
					while (acceptHeaderList.hasNext() && !voiceMessaging) {
						AcceptHeader acceptHeader =
							(AcceptHeader) acceptHeaderList.next();
						if (acceptHeader
							.getContentSubType()
							.equalsIgnoreCase("gsm")
							|| acceptHeader.getContentSubType().equalsIgnoreCase(
								"x-gsm"))
							voiceMessaging = true;
					}
				}
				audioCall.setVoiceMesaging(voiceMessaging);
				// The SDP tool will be created when you send OK.
				messageListener.sipMeetingManager.notifyObserversNewCallStatus(
					audioCall);
			}
		} catch (SipException se) {
			se.printStackTrace();
		} catch (ParseException pe) {
			pe.printStackTrace();
		}
	}

	/**
	 * Process the BYE received request
	 * @param serverTransaction - the server transaction associated with the request
	 * @param bye - the bye request 
	 */
	public void processBye(ServerTransaction serverTransaction, Request bye) {
		CallManager callManager =
			messageListener.sipMeetingManager.getCallManager();
		//Find the matching call
		Call call =
			callManager.findCall(serverTransaction.getDialog().getDialogId());

		if (call == null) return;
		//Send OK
		try {
			Response ok =
				(Response) MessageListener.messageFactory.createResponse(
					Response.OK,
					bye);
			serverTransaction.sendResponse(ok);
			if (call instanceof AudioCall) {
				AudioCall audioCall = (AudioCall) call;
				audioCall.setStatus(AudioCall.NOT_IN_A_CALL);
				messageListener.sipMeetingManager.notifyObserversNewCallStatus(
					audioCall);
				if (audioCall.getVoiceMessaging()) {
					stopVoiceMessagingSchedule();
				} else {
					audioCall.getMediaManager().stopMediaSession();
				}
				//Remove the call
				System.out.println(
					"Audio Call removed : " + call.getDialog().getDialogId());
				callManager.removeAudioCall(audioCall);
			} else {
				IMCall imCall = (IMCall) call;
				//Remove the call
				System.out.println(
					"IM Call removed : " + call.getDialog().getDialogId());
				callManager.removeIMCall(imCall);
			}
		} catch (SipException se) {
			se.printStackTrace();
		} catch (ParseException pe) {
			pe.printStackTrace();
		}
	}

	/**
	 * Process the ACK received request
	 * @param serverTransaction - the server transaction associated with the request
	 * @param ack - the ack request 
	 */
	public void processAck(ServerTransaction serverTransaction, Request ack) {
		CallManager callManager =
			messageListener.sipMeetingManager.getCallManager();
		//Strip out the callee
		SipURI calleeURI =
			(SipURI) ((FromHeader) ack.getHeader(FromHeader.NAME))
				.getAddress()
				.getURI();
		String callee =
			"sip:" + calleeURI.getUser() + "@" + calleeURI.getHost();
		//Find the Audio call
		AudioCall call = callManager.findAudioCall(callee);
		if (call != null) {
			if (!call.getVoiceMessaging())
				call.getMediaManager().startMediaSession(false);
			else
				startVoiceMessagingSchedule(callee);
			call.setStatus(AudioCall.IN_A_CALL);
			messageListener.sipMeetingManager.notifyObserversNewCallStatus(
				call);
		}
	}

	/**
	 * Process the CANCEL received request
	 * @param serverTransaction - the server transaction associated with the request
	 * @param cancel - the cancel request 
	 */
	public void processCancel(
		ServerTransaction serverTransaction,
		Request cancel) {
		CallManager callManager =
			messageListener.sipMeetingManager.getCallManager();
		//Strip out the callee

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩国产一二三区| 成人avav影音| 日本伊人色综合网| 亚洲伊人色欲综合网| 亚洲天堂久久久久久久| 亚洲日本va午夜在线电影| 国产精品久久久久四虎| 中文字幕av一区二区三区免费看 | 波多野结衣91| 国产999精品久久久久久绿帽| 国产乱国产乱300精品| 国产一区在线观看视频| 国产精品伊人色| 国产福利视频一区二区三区| 成人黄色大片在线观看| 99免费精品在线观看| 91视视频在线直接观看在线看网页在线看| 97久久精品人人做人人爽 | 亚洲国产精品传媒在线观看| 国产精品无遮挡| 亚洲黄色性网站| 香蕉成人伊视频在线观看| 麻豆免费看一区二区三区| 精品一二线国产| 成人高清视频在线| 在线观看精品一区| 在线成人av网站| 久久这里只有精品6| 欧美国产亚洲另类动漫| 一区二区三区四区中文字幕| 天天影视涩香欲综合网| 国产一区二区三区在线观看免费| 国产成人免费9x9x人网站视频| 99久久综合99久久综合网站| 在线免费观看一区| 日韩精品一区二区三区四区 | 久久精品99国产精品| 黄页视频在线91| 91污在线观看| 日韩精品中文字幕在线不卡尤物 | 亚洲成人免费电影| 久久激情五月婷婷| www.亚洲色图.com| 6080午夜不卡| 国产欧美一区二区精品秋霞影院| 亚洲精品欧美在线| 国产在线视频一区二区三区| 色婷婷综合久久久中文一区二区 | 中文字幕av一区二区三区免费看| 一区二区三区在线视频免费| 久久精品国产免费看久久精品| 成人h动漫精品一区二区| 欧美顶级少妇做爰| 亚洲国产成人在线| 日韩精品五月天| www.成人在线| 日韩美女主播在线视频一区二区三区| 自拍偷拍亚洲激情| 韩国av一区二区三区四区| 在线精品视频一区二区三四| 2022国产精品视频| 午夜视频一区在线观看| 不卡的av在线| 日韩精品一区二区三区中文不卡| 尤物av一区二区| 国产成人免费视频精品含羞草妖精| 在线成人小视频| 亚洲精品日韩一| 成人免费视频国产在线观看| 日韩美女视频在线| 五月婷婷色综合| 91免费视频网址| 日本一区二区三区视频视频| 日韩av中文字幕一区二区三区| 99久久99久久免费精品蜜臀| 久久久久综合网| 日本不卡的三区四区五区| 色88888久久久久久影院按摩| 国产欧美一区二区三区网站| 久久99国内精品| 欧美精品 日韩| 一区二区久久久久久| 91蜜桃免费观看视频| 欧美激情在线一区二区三区| 久久99久久99精品免视看婷婷 | 亚洲视频一区二区免费在线观看 | 欧美mv和日韩mv的网站| 亚洲成人资源网| 欧洲一区在线电影| 亚洲天堂中文字幕| 9i在线看片成人免费| 国产精品美女一区二区三区| 国产毛片一区二区| 精品国产百合女同互慰| 美腿丝袜在线亚洲一区| 日韩一区二区在线观看| 日日嗨av一区二区三区四区| 欧美日韩国产综合一区二区| 亚洲免费观看高清完整版在线观看熊 | 麻豆中文一区二区| 日韩欧美中文一区二区| 美国三级日本三级久久99| 欧美精品日韩精品| 婷婷久久综合九色综合伊人色| 欧美写真视频网站| 亚洲成a人片综合在线| 欧美综合一区二区三区| 亚洲综合久久av| 精品1区2区3区| 午夜精品aaa| 欧美一区二区三区电影| 秋霞电影一区二区| 欧美成人a∨高清免费观看| 狂野欧美性猛交blacked| 精品国产乱码久久久久久闺蜜| 国模冰冰炮一区二区| 久久久久久一二三区| 国产精品1024| 亚洲天堂免费看| 欧美视频一区二区三区四区| 舔着乳尖日韩一区| 日韩女优视频免费观看| 国产精品原创巨作av| 中文字幕在线观看不卡| 在线亚洲一区观看| 午夜激情一区二区三区| 精品国产乱码久久久久久蜜臀| 国产suv一区二区三区88区| 中文无字幕一区二区三区| 色综合天天综合网天天看片| 亚洲国产视频一区| 欧美一区二区三区免费在线看| 国产在线国偷精品产拍免费yy | 国产一区二区在线观看免费 | eeuss鲁片一区二区三区在线观看| 亚洲特级片在线| 欧美日韩国产经典色站一区二区三区| 日本免费在线视频不卡一不卡二 | 激情综合色播激情啊| 欧美激情在线看| 欧美伊人久久久久久久久影院 | 99re视频精品| 男男gaygay亚洲| 中文字幕亚洲欧美在线不卡| 欧美三级日本三级少妇99| 激情深爱一区二区| 亚洲精品乱码久久久久久日本蜜臀| 欧美精品三级在线观看| 国产成人午夜高潮毛片| 亚洲伊人色欲综合网| 久久综合精品国产一区二区三区 | 岛国av在线一区| 亚洲国产成人精品视频| 国产三级欧美三级日产三级99 | 7799精品视频| 国产a久久麻豆| 丝袜美腿一区二区三区| 国产日韩精品一区二区三区在线| 色吊一区二区三区| 国产精品一区二区久久精品爱涩| 一区二区三区四区av| 久久免费看少妇高潮| 欧美日本一区二区在线观看| 国产成人av电影在线观看| 视频在线观看国产精品| 成人欧美一区二区三区在线播放| 日韩一区二区在线看| 在线观看av一区二区| 国产69精品久久99不卡| 视频一区在线播放| 亚洲日本在线天堂| 国产日韩欧美高清| 日韩精品一区二区三区中文不卡| 欧美在线观看禁18| www.日韩大片| 国产成人久久精品77777最新版本| 日本在线不卡视频| 亚洲国产日韩a在线播放性色| 国产女同互慰高潮91漫画| 日韩一区二区三区视频在线| 欧美性生活大片视频| 99re这里只有精品6| 高清国产一区二区| 极品美女销魂一区二区三区| 亚洲国产精品视频| 伊人夜夜躁av伊人久久| 国产精品乱码一区二区三区软件| 精品国产a毛片| 日韩一级免费观看| 欧美视频一区在线观看| 在线精品国精品国产尤物884a| 97精品国产97久久久久久久久久久久| 国产精品影视在线观看| 狠狠色狠狠色综合日日91app| 五月婷婷激情综合网| 亚洲国产成人91porn| 亚洲一区二区三区不卡国产欧美| 亚洲日本成人在线观看| 综合久久久久久| 亚洲精品视频在线观看网站|