All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.openbox.phone.RegistedPhone Maven / Gradle / Ivy

package com.googlecode.openbox.phone;

import java.io.File;

import org.apache.commons.lang3.SystemUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import com.googlecode.openbox.phone.listeners.DefaultSipListener;

import net.sourceforge.peers.Config;
import net.sourceforge.peers.JavaConfig;
import net.sourceforge.peers.javaxsound.JavaxSoundManager;
import net.sourceforge.peers.media.AbstractSoundManager;
import net.sourceforge.peers.media.MediaMode;
import net.sourceforge.peers.sip.core.useragent.UserAgent;
import net.sourceforge.peers.sip.syntaxencoding.SipURI;
import net.sourceforge.peers.sip.syntaxencoding.SipUriSyntaxException;

public class RegistedPhone extends AbstractPhone {
	private static final Logger logger = LogManager.getLogger();
	private UserAgent userAgent;
	private AbstractSoundManager soundManager;
	private Config config;
	private File tempMediaFile;

	public static RegistedPhone createPhone(String domain, String phoneNumber, String password) {
		return new RegistedPhone(domain, phoneNumber, password);
	}

	public static RegistedPhone createPhoneWithCustomSipListener(String domain, String phoneNumber, String password,
			DefaultSipListener sipListener) {
		return new RegistedPhone(domain, phoneNumber, password, sipListener);
	}

	public RegistedPhone(String domain, String phoneNumber, String password) {
		initPhoneConfig(domain, phoneNumber, password);
	}

	public RegistedPhone(String domain, String phoneNumber, String password, DefaultSipListener sipListener) {
		super();
		initPhoneConfig(domain, phoneNumber, password);
		this.setSipListener(sipListener);
	}

	private void initPhoneConfig(String domain, String phoneNumber, String password) {
		try {
			this.config = new JavaConfig();
			this.config.setDomain(domain);
			this.config.setUserPart(phoneNumber);
			this.config.setPassword(password);
			this.config.setOutboundProxy(new SipURI("sip:" + domain));
			this.config.setSipPort(0);
			this.config.setRtpPort(0);
			this.config.setMediaMode(MediaMode.captureAndPlayback);
			this.config.setMediaDebug(false);
			this.config.setLocalInetAddress(PhoneUtils.getLocalHostLANAddress());

			if (SystemUtils.IS_OS_LINUX) {
//				tempMediaFile = File.createTempFile("temp_javasoftphone_", ".phone");
//				if (logger.isDebugEnabled()) {
//					logger.debug("create temp media file [" + tempMediaFile + "]");
//				}
//				this.config.setMediaFile(tempMediaFile.getAbsolutePath());
//				this.soundManager = new LinuxFileSoundManager(LOGGER);
				this.soundManager = new LinuxDtmfSuccessSoundManager();
				logger.warn("detected it on linux system , so disable its real audio");
			} else {
				String peersHome = new File("").getAbsolutePath();
				this.soundManager = new JavaxSoundManager(this.config.isMediaDebug(), LOGGER, peersHome);
			}

		} catch (Exception e) {
			throw new PhoneException("init java sip softphone error , please check error logs", e);
		}
	}

	@Override
	public void register() {
		try {

			this.userAgent = new UserAgent(getSipListener(), this.config, LOGGER, soundManager);
			boolean isSuccess = PhoneThread.execute(new PhoneThread(this.getOperationInterval()) {

				@Override
				public void action() {
					try {
						userAgent.register();
						if (logger.isInfoEnabled()) {
							logger.info("Phone [" + getPhoneNumber() + "] setup java softphone and registed success ");
						}
					} catch (SipUriSyntaxException e) {
						logger.error("Phone [" + getPhoneNumber() + "] setup java softphone and registed error", e);
						throw new PhoneException(e);
					}

				}

			});
			if (!isSuccess) {
				throw new PhoneException(
						"Phone [" + getPhoneNumber() + "]  Thread execute --register phone-- failed !");
			}

		} catch (Exception e) {
			throw new PhoneException(
					"Phone [" + getPhoneNumber() + "] registing java sip softphone error , please check error logs", e);
		}

	}

	@Override
	public UserAgent getUserAgent() {
		return userAgent;
	}

	@Override
	Config getConfig() {
		return config;
	}

	@Override
	File getTempMediaFile() {
		return tempMediaFile;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy