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

📄 sipuri.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.syntaxencoding;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.Hashtable;import net.sourceforge.peers.sip.RFC3261;public class SipURI {    public final static int DEFAULT_PORT = -1;        private String stringRepresentation;    /**     * telephone-subscriber and optional port are not managed     */    private String userinfo;    private InetAddress host;    private int port = DEFAULT_PORT;    /**     * Use empty strings in value if the parameter has no value     */    private Hashtable<String, String> uriParameters;    //headers not implemented    //private Hashtable<String, String> headers;        public SipURI(String sipUri) throws SipUriSyntaxException {        stringRepresentation = sipUri;        StringBuffer buf = new StringBuffer(sipUri);        String scheme = RFC3261.SIP_SCHEME + RFC3261.SCHEME_SEPARATOR;        if (!sipUri.startsWith(scheme)) {            throw new SipUriSyntaxException("SIP URI must start with " + scheme);        }        buf.delete(0, scheme.length());        int atPos = buf.indexOf("@");        if (atPos == 0) {            throw new SipUriSyntaxException("userinfo cannot start with a '@'");        }        if (atPos > 0) {            userinfo = buf.substring(0, atPos);            buf.delete(0, atPos + 1);        }        int endHostport = buf.indexOf(";");        if (endHostport == 0) {            throw new SipUriSyntaxException("hostport not present or it cannot start with ';'");        }        if (endHostport < 0) {            endHostport = buf.length();        }        String hostport = buf.substring(0, endHostport);        buf.delete(0, endHostport);        int colonPos = hostport.indexOf(':');        if (colonPos > -1) {            if (colonPos == hostport.length() - 1) {                throw new SipUriSyntaxException("hostport cannot terminate with a ':'");            }            port = Integer.parseInt(hostport.substring(colonPos + 1));        } else {            colonPos = hostport.length();        }        try {            host = InetAddress.getByName(hostport.substring(0, colonPos));        } catch (UnknownHostException e) {            throw new SipUriSyntaxException(e);        }        if (buf.length() == 1) {            //if there is only one ';' at the end of the uri => do not            //parse uri-parameters and headers            buf.deleteCharAt(0);        }        if (buf.length() <= 0) {            return;        }        uriParameters = new Hashtable<String, String>();        while (buf.length() > 0) {            buf.deleteCharAt(0);//delete the first ';'            int nextSemicolon = buf.indexOf(";");            if (nextSemicolon < 0) {                nextSemicolon = buf.length();            }            int nextEquals = buf.indexOf("=");            if (nextEquals < 0) {                nextEquals = nextSemicolon;            }            if (nextEquals > nextSemicolon) {                nextEquals = nextSemicolon;            }            int afterEquals;            if (nextEquals + 1 > nextSemicolon) {                afterEquals = nextSemicolon;            } else {                afterEquals = nextEquals + 1;            }            uriParameters.put(buf.substring(0, nextEquals), buf.substring(afterEquals, nextSemicolon));            buf.delete(0, nextSemicolon);        }    }        @Override    public String toString() {        return stringRepresentation;    }    public InetAddress getHost() {        return host;    }    public int getPort() {        return port;    }    public Hashtable<String, String> getUriParameters() {        return uriParameters;    }    public String getUserinfo() {        return userinfo;    }    }

⌨️ 快捷键说明

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