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

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

package com.googlecode.openbox.phone;

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.RFC3261;
import net.sourceforge.peers.sip.core.useragent.UserAgent;
import org.apache.commons.lang3.SystemUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import java.io.File;
import java.net.InetAddress;

public class AnonymousPhone extends AbstractPhone {
	private static final Logger logger = LogManager.getLogger();

	private UserAgent userAgent;

	private Config config;

	private AbstractSoundManager soundManager;
	private File tempMediaFile;

	public static AnonymousPhone createPhone(String phoneNumber) {
		return new AnonymousPhone(phoneNumber);
	}

	public AnonymousPhone(String phoneNumber) {
		super();
		try {
			this.config = new JavaConfig();
			int[] freePorts = PhoneUtils.getAvailablePorts(1);
			this.config.setSipPort(freePorts[0]);
			this.config.setRtpPort(0);
			this.config.setMediaMode(MediaMode.captureAndPlayback);
			this.config.setMediaDebug(false);
			this.config.setUserPart(phoneNumber);
			InetAddress localInetAddress = PhoneUtils.getLocalHostLANAddress();
			this.config.setLocalInetAddress(localInetAddress);
			this.config
					.setDomain(localInetAddress.getHostAddress() + RFC3261.SCHEME_SEPARATOR + this.config.getSipPort());

			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 config error , please check error logs", e);
		}

	}

	@Override
	public void register() {
		try {

			userAgent = new UserAgent(getSipListener(), this.config, LOGGER, soundManager);
		} catch (Exception e) {
			throw new PhoneException("setup java sip softphone error , please check error logs", e);
		}
	}

	@Override
	public void call(final String phoneNumber, final String callId) {
		if (null == getUserAgent().getConfig().getDomain()) {
			throw new PhoneException(
					"It seems Anymous Phone , It can't support dial action , please use invite with SIPURI mode");
		}
	}

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

	@Override
	Config getConfig() {
		return config;
	}

	@Override
	File getTempMediaFile() {
		return tempMediaFile;
	}

	@Override
	public void disableRealVoice() {
		this.soundManager = new LinuxDtmfSuccessSoundManager();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy