android-ngn-stack/src/main/java/org/doubango/ngn/sip/NgnSipStack.java
c732d49e
 /*
74ca6d11
 * Copyright (C) 2020, University of the Basque Country (UPV/EHU)
c732d49e
 *  Contact for licensing options: <licensing-mcpttclient(at)mcopenplatform(dot)com>
 *
 * The original file was part of Open Source IMSDROID
 *  Copyright (C) 2010-2011, Mamadou Diop.
 *  Copyright (C) 2011, Doubango Telecom.
 *
 *
 * Contact: Mamadou Diop <diopmamadou(at)doubango(dot)org>
 *
 * This file is part of Open Source Doubango Framework.
 *
 * This 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 (at your option) any later version.
 *
 * This 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, write to the Free Software Foundation, Inc.,
 * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
 package org.doubango.ngn.sip;
 
 import org.doubango.ngn.BuildConfig;
 import org.doubango.ngn.NgnApplication;
 import org.doubango.ngn.NgnEngine;
 import org.doubango.ngn.services.INgnNetworkService;
 import org.doubango.ngn.services.impl.NgnNetworkService.DNS_TYPE;
 import org.doubango.tinyWRAP.SipCallback;
 import org.doubango.tinyWRAP.SipStack;
 import org.doubango.tinyWRAP.SipUri;
 
 /**
  * SIP/IMS Stack
  */
 public class NgnSipStack extends SipStack{
 
 	public enum STACK_STATE {
 	     NONE, STARTING, STARTED, STOPPING, STOPPED, DISCONNECTED
 	}
 	
 	private STACK_STATE mState = STACK_STATE.NONE;
 	private String mCompId;
 	private final INgnNetworkService mNetworkService;
 	
 	/**
 	 * Creates new SIP/IMS Stack. You should use
 	 * @param callback
 	 * @param realmUri
 	 * @param impiUri
 	 * @param impuUri
 	 */
 	public NgnSipStack(SipCallback callback, String realmUri, String impiUri, String impuUri
 	){
 		super(callback, realmUri, impiUri, impuUri);
 		
 		// Services
 		mNetworkService = NgnEngine.getInstance().getNetworkService();
 		
 		// Set first and second DNS servers (used for DNS NAPTR+SRV discovery and ENUM)
 		String dnsServer;
 		if((dnsServer = mNetworkService.getDnsServer(DNS_TYPE.DNS_1)) != null && !dnsServer.equals("0.0.0.0")){
 			this.addDnsServer(dnsServer);
 			if((dnsServer = mNetworkService.getDnsServer(DNS_TYPE.DNS_2)) != null && !dnsServer.equals("0.0.0.0")){
 				this.addDnsServer(dnsServer);
 			}
 		}
 		else{
 			// On the emulator FIXME
 			this.addDnsServer("212.27.40.241");
 		}
 		
 	     // Sip headers
         super.addHeader("Allow", "INVITE, ACK, CANCEL, BYE, MESSAGE, OPTIONS, NOTIFY, PRACK, UPDATE, REFER");
         super.addHeader("Privacy", "none");
         super.addHeader("P-Access-Network-Info", "ADSL;utran-cell-id-3gpp=00000000");
 			super.addHeader("User-Agent", String.format(BuildConfig.APP_NAME_PROPIETARY+" /v %s",NgnApplication.getVersionName()));
 
 
 	}
 
 	@Override
 	public boolean start() {
 		if(mNetworkService.acquire()){
 			mState = STACK_STATE.STARTING;
 			return super.start();
 		}
 		else{
 			return false;
 		}
 	}
 
 	@Override
 	public boolean stop() {
 		mNetworkService.release();
 		mState = STACK_STATE.STOPPING;
 		return super.stop();
 	}
 	
 	public void setState(STACK_STATE state){
 		mState = state;
 	}
 	
 	public STACK_STATE getState(){
 		return mState;
 	}
 	
 	public String getSigCompId(){
 		return mCompId;
 	}
 	
 	public void setSigCompId(String compId){
 		if(mCompId != null && mCompId != compId){
 			super.removeSigCompCompartment(mCompId);
 		}
 		if((mCompId = compId) != null){
 			super.addSigCompCompartment(mCompId);
 		}
 	}
 	public boolean setServerLocation(String uriSIP)
 	{
 		if (!SipUri.isValid(uriSIP)) return false;
 		return this.setLocationPAssertedIdentityServer(uriSIP);
 	}
 
 	public boolean setServerMbms(String uriSIP)
 	{
 		if (!SipUri.isValid(uriSIP)) return false;
 		return this.setMbmsPAssertedIdentityServer(uriSIP);
 	}
 
 }