sipmanager.java
来自「java 开发的sip软电话 源码 jain sip」· Java 代码 · 共 307 行
JAVA
307 行
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2000 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* nor may "Apache" appear in their name, without prior written
* permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* Portions of this software are based upon public domain software
* originally written at the National Center for Supercomputing Applications,
* University of Illinois, Urbana-Champaign.
*/
package net.java.mais.sip;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.TooManyListenersException;
import javax.sip.ClientTransaction;
import javax.sip.Dialog;
import javax.sip.InvalidArgumentException;
import javax.sip.ListeningPoint;
import javax.sip.ObjectInUseException;
import javax.sip.PeerUnavailableException;
import javax.sip.RequestEvent;
import javax.sip.ResponseEvent;
import javax.sip.ServerTransaction;
import javax.sip.SipException;
import javax.sip.SipFactory;
import javax.sip.SipListener;
import javax.sip.SipProvider;
import javax.sip.SipStack;
import javax.sip.TimeoutEvent;
import javax.sip.Transaction;
import javax.sip.TransactionAlreadyExistsException;
import javax.sip.TransactionUnavailableException;
import javax.sip.TransportNotSupportedException;
import javax.sip.address.Address;
import javax.sip.address.AddressFactory;
import javax.sip.address.SipURI;
import javax.sip.header.CSeqHeader;
import javax.sip.header.ContactHeader;
import javax.sip.header.FromHeader;
import javax.sip.header.HeaderFactory;
import javax.sip.header.MaxForwardsHeader;
import javax.sip.header.ToHeader;
import javax.sip.header.ViaHeader;
import javax.sip.message.Message;
import javax.sip.message.MessageFactory;
import javax.sip.message.Request;
import javax.sip.message.Response;
import net.java.mais.common.NetworkAddressManager;
import net.java.mais.common.PropertiesDepot;
import net.java.mais.common.Utils;
import net.java.mais.media.AVTransmitter;
import net.java.mais.sip.event.CallEvent;
import net.java.mais.sip.event.CallRejectedEvent;
import net.java.mais.sip.event.CommunicationsErrorEvent;
import net.java.mais.sip.event.CommunicationsListener;
import net.java.mais.sip.event.MessageEvent;
import net.java.mais.sip.event.RegistrationEvent;
import net.java.mais.sip.event.UnknownMessageEvent;
import net.java.mais.sip.security.SecurityAuthority;
import net.java.mais.sip.security.SipSecurityManager;
import net.java.mais.sip.security.UserCredentials;
import net.java.mais.sip.simple.MessageProcessing;
/**
* <p>Title: Netsite TudoMais</p>
* <p>Description:JAIN-SIP Audio/Video phone application</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Organisation: CTBC Telecom / Netsite </p>
* @author Thiago Rocha Camargo (barata7@yahoo.com)
*/
/**
* The SipManager provides wrapping of the underlying stack's functionalities.
* It also implements the SipListener interface and handles incoming
* SIP messages.
*
* @author Emil Ivov
* @version 1.0
*/
public class SipManager
implements SipListener
{
/**
* Specifies the number of retries that should be attempted when deleting
* a sipProvider
*/
protected static final int RETRY_OBJECT_DELETES = 10;
/**
* Specifies the time to wait before retrying delete of a sipProvider.
*/
protected static final long RETRY_OBJECT_DELETES_AFTER = 500;
protected static final String DEFAULT_TRANSPORT = "udp";
//jain-sip objects - package accessibility as they should be
//available for XxxProcessing classes
/**
* The SipFactory instance used to create the SipStack and the Address
* Message and Header Factories.
*/
public SipFactory sipFactory;
/**
* The AddressFactory used to create URLs ans Address objects.
*/
public AddressFactory addressFactory;
/**
* The HeaderFactory used to create SIP message headers.
*/
public HeaderFactory headerFactory;
/**
* The Message Factory used to create SIP messages.
*/
public MessageFactory messageFactory;
/**
* The sipStack instance that handles SIP communications.
*/
SipStack sipStack;
/**
* The default (and currently the only) SIP listening point of the
* application.
*/
ListeningPoint listeningPoint;
/**
* The JAIN SIP SipProvider instance.
*/
public SipProvider sipProvider;
/**
* An instance used to provide user credentials
*/
private SecurityAuthority securityAuthority = null;
/**
* Used for the contact header to provide firewall support.
*/
private InetSocketAddress publicIpAddress = null;
//properties
protected String sipStackPath = null;
protected String currentlyUsedURI = null;
protected String displayName = null;
protected String transport = null;
protected String registrarAddress = null;
protected int localPort = -1;
protected int registrarPort = -1;
protected int registrationsExpiration = -1;
protected String registrarTransport = null;
private int registerRetries = 0;
//mandatory stack properties
protected String stackAddress = null;
protected String stackName = "TudoMais1";
//Prebuilt Message headers
protected FromHeader fromHeader = null;
protected ContactHeader contactHeader = null;
protected ArrayList viaHeaders = null;
protected static final int MAX_FORWARDS = 70;
protected MaxForwardsHeader maxForwardsHeader = null;
protected long registrationTransaction = -1;
protected ArrayList listeners = new ArrayList();
//XxxProcessing managers
/**
* The instance that handles all registration associated activity such as
* registering, unregistering and keeping track of expirations.
*/
RegisterProcessing registerProcessing = null;
/**
* The instance that handles all call associated activity such as
* establishing, managing, and terminating calls.
*/
CallProcessing callProcessing = null;
/**
* The instance that handles incoming/outgoing MESSAGE requests.
*/
public MessageProcessing messageProcessing = null;
/**
* The instance that handles incoming/outgoing REFER requests.
*/
TransferProcessing transferProcessing = null;
/**
* Authentication manager.
*/
public SipSecurityManager sipSecurityManager = null;
protected boolean isStarted = false;
/**
* Constructor. It only creates a SipManager instance without initializing
* the stack itself.
*/
public SipManager()
{
registerProcessing = new RegisterProcessing(this);
callProcessing = new CallProcessing(this);
messageProcessing = new MessageProcessing(this);
sipSecurityManager = new SipSecurityManager();
registerRetries=0;
}
/**
* Creates and initializes JAIN SIP objects (factories, stack, listening
* point and provider). Once this method is called the application is ready
* to handle (incoming and outgoing) sip messages.
*
* @throws CommunicationsException if an axception should occur during the
* initialization process
*/
public void start() throws CommunicationsException
{
try {
initProperties();
this.sipFactory = SipFactory.getInstance();
sipFactory.setPathName(sipStackPath);
try {
addressFactory = sipFactory.createAddressFactory();
headerFactory = sipFactory.createHeaderFactory();
messageFactory = sipFactory.createMessageFactory();
}
catch (PeerUnavailableException ex) {
System.out.println("ERRO: "+ex.toString());
throw new CommunicationsException(
"Could not create factories!",
ex
);
}
try {
sipStack = sipFactory.createSipStack(System.getProperties());
}
catch (PeerUnavailableException ex) {
System.out.println("ERRO: "+ex.toString());
throw new CommunicationsException(
"Imposs韛el conectar!\n"
+
"O proxy pode n鉶 est
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?