⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialogmanager.java

📁 Peers is a very minimalistic SIP User-Agent. It s a softphone, written in java, and it has been test
💻 JAVA
字号:
/*    This file is part of Peers.    This program is free software: you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation, either version 3 of the License, or    any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program.  If not, see <http://www.gnu.org/licenses/>.        Copyright 2007, 2008 Yohann Martineau */package net.sourceforge.peers.sip.transactionuser;import java.util.Collection;import java.util.Hashtable;import net.sourceforge.peers.sip.RFC3261;import net.sourceforge.peers.sip.syntaxencoding.SipHeaderFieldName;import net.sourceforge.peers.sip.syntaxencoding.SipHeaderFieldValue;import net.sourceforge.peers.sip.syntaxencoding.SipHeaderParamName;import net.sourceforge.peers.sip.syntaxencoding.SipHeaders;import net.sourceforge.peers.sip.transport.SipMessage;import net.sourceforge.peers.sip.transport.SipResponse;public class DialogManager {    private static DialogManager INSTANCE;        public static DialogManager getInstance() {        if (INSTANCE == null) {            INSTANCE = new DialogManager();        }        return INSTANCE;    }        private Hashtable<String, Dialog> dialogs;        private DialogManager() {        dialogs = new Hashtable<String, Dialog>();    }    public synchronized Dialog createDialog(SipResponse sipResponse) {        SipHeaders sipHeaders = sipResponse.getSipHeaders();        String callID = sipHeaders.get(                new SipHeaderFieldName(RFC3261.HDR_CALLID)).toString();        SipHeaderFieldValue from = sipHeaders.get(                new SipHeaderFieldName(RFC3261.HDR_FROM));        SipHeaderFieldValue to = sipHeaders.get(                new SipHeaderFieldName(RFC3261.HDR_TO));        String fromTag = from.getParam(new SipHeaderParamName(RFC3261.PARAM_TAG));        String toTag = to.getParam(new SipHeaderParamName(RFC3261.PARAM_TAG));        Dialog dialog;        if (sipHeaders.get(new SipHeaderFieldName(RFC3261.HDR_VIA)) == null) {            //createDialog is called from UAS side, in layer Transaction User            dialog = new Dialog(callID, toTag, fromTag);        } else {            //createDialog is called from UAC side, in syntax encoding layer            dialog = new Dialog(callID, fromTag, toTag);        }        dialogs.put(dialog.getId(), dialog);        return dialog;    }        public void removeDialog(String dialogId) {        dialogs.remove(dialogId);    }    public synchronized Dialog getDialog(SipMessage sipMessage) {        SipHeaders sipHeaders = sipMessage.getSipHeaders();        String callID = sipHeaders.get(                new SipHeaderFieldName(RFC3261.HDR_CALLID)).toString();        SipHeaderFieldValue from = sipHeaders.get(                new SipHeaderFieldName(RFC3261.HDR_FROM));        SipHeaderFieldValue to = sipHeaders.get(                new SipHeaderFieldName(RFC3261.HDR_TO));        SipHeaderParamName tagName = new SipHeaderParamName(RFC3261.PARAM_TAG);        String fromTag = from.getParam(tagName);        String toTag = to.getParam(tagName);        Dialog dialog = dialogs.get(getDialogId(callID, fromTag, toTag));        if (dialog != null) {            return dialog;        }        return dialogs.get(getDialogId(callID, toTag, fromTag));    }        public synchronized Dialog getDialog(String peer) {        for (Dialog dialog : dialogs.values()) {            String remoteUri = dialog.getRemoteUri();            if (remoteUri != null) {                if (remoteUri.contains(peer)) {                    return dialog;                }            }        }        return null;    }        private String getDialogId(String callID, String localTag, String remoteTag) {        StringBuffer buf = new StringBuffer();        buf.append(callID);        buf.append(Dialog.ID_SEPARATOR);        buf.append(localTag);        buf.append(Dialog.ID_SEPARATOR);        buf.append(remoteTag);        return buf.toString();    }        public Collection<Dialog> getDialogCollection() {        return dialogs.values();    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -