/* * Copyright (C) 2020, University of the Basque Country (UPV/EHU) * Contact for licensing options: * * The original file was part of Open Source IMSDROID * Copyright (C) 2010-2011, Mamadou Diop. * Copyright (C) 2011, Doubango Telecom. * * * Contact: Mamadou Diop * * 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); } }