Files
rk35xx-android14/external/nist-sip/java/javax/sip/SipFactory.java
T
hmz007 36ed224bac Rockchip Anroid14_SDK 20240628-rkr5 (2556df1a)
Signed-off-by: hmz007 <hmz007@gmail.com>
Change-Id: Ib87fdbe7a0be7dc961af3500fe9ea4589a127f9f
2024-10-29 18:12:02 +08:00

105 lines
3.6 KiB
Java

package javax.sip;
import java.lang.reflect.Constructor;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.sip.address.AddressFactory;
import javax.sip.header.HeaderFactory;
import javax.sip.message.MessageFactory;
public class SipFactory {
private static final String IP_ADDRESS_PROP = "javax.sip.IP_ADDRESS";
private static final String STACK_NAME_PROP = "javax.sip.STACK_NAME";
private static SipFactory sSipFactory = null;
public static synchronized SipFactory getInstance() {
if (sSipFactory == null) sSipFactory = new SipFactory();
return sSipFactory;
}
// name-to-SipStack map; name could be IP address for backward compatibility
private Map<String, SipStack> mNameSipStackMap =
new HashMap<String, SipStack>();
private SipFactory() {
}
public synchronized void resetFactory() {
mNameSipStackMap.clear();
}
public synchronized SipStack createSipStack(Properties properties)
throws PeerUnavailableException {
// for backward compatibility, if IP_ADDRESS_PROP exists, use it and
// ignore STACK_NAME_PROP.
String name = properties.getProperty(IP_ADDRESS_PROP);
if (name == null) {
name = properties.getProperty(STACK_NAME_PROP);
if (name == null ) {
throw new PeerUnavailableException(
STACK_NAME_PROP + " property not found");
}
}
SipStack sipStack = mNameSipStackMap.get(name);
if (sipStack == null) {
String implClassName = "gov.nist."
+ SipStack.class.getCanonicalName() + "Impl";
try {
sipStack = Class.forName(implClassName)
.asSubclass(SipStack.class)
.getConstructor(new Class[] {Properties.class})
.newInstance(new Object[] {properties});
} catch (Exception e) {
throw new PeerUnavailableException(
"Failed to initiate " + implClassName, e);
}
mNameSipStackMap.put(name, sipStack);
}
return sipStack;
}
public AddressFactory createAddressFactory()
throws PeerUnavailableException {
try {
return new gov.nist.javax.sip.address.AddressFactoryImpl();
} catch (Exception e) {
if (e instanceof PeerUnavailableException) {
throw (PeerUnavailableException) e;
} else {
throw new PeerUnavailableException(
"Failed to create AddressFactory", e);
}
}
}
public HeaderFactory createHeaderFactory() throws PeerUnavailableException {
try {
return new gov.nist.javax.sip.header.HeaderFactoryImpl();
} catch (Exception e) {
if (e instanceof PeerUnavailableException) {
throw (PeerUnavailableException) e;
} else {
throw new PeerUnavailableException(
"Failed to create HeaderFactory", e);
}
}
}
public MessageFactory createMessageFactory()
throws PeerUnavailableException {
try {
return new gov.nist.javax.sip.message.MessageFactoryImpl();
} catch (Exception e) {
if (e instanceof PeerUnavailableException) {
throw (PeerUnavailableException) e;
} else {
throw new PeerUnavailableException(
"Failed to create MessageFactory", e);
}
}
}
}