/*
* TeleStax, Open Source Cloud Communications Copyright 2012.
* and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.mobicents.protocols.ss7.m3ua;
import java.util.List;
import java.util.Map;
import org.mobicents.protocols.ss7.m3ua.parameter.NetworkAppearance;
import org.mobicents.protocols.ss7.m3ua.parameter.RoutingContext;
import org.mobicents.protocols.ss7.m3ua.parameter.TrafficModeType;
/**
*
* @author amit bhayani
*
*/
public interface M3UAManagement {
/**
* Unique name of this M3UA stack. The configuration of stack is persisted in name_m3ua.xml file
*
* @return name of this stack
*/
String getName();
/**
* The directory where configuration file is persisted.
*
* @return directory where configuration file is persisted
*/
String getPersistDir();
/**
* Set the directory where the configuration file is persisted
*
* @param persistDir
*/
void setPersistDir(String persistDir);
/**
* The maximum SLS value. By Default this is set to 256
*
* @return maximum SLS
*/
int getMaxSequenceNumber();
/**
* Set the maximum SLS
*
* @param maxSequenceNumber a integer value
*/
void setMaxSequenceNumber(int maxSequenceNumber) throws Exception;
/**
* <p>
* Returns maximum AS that can load-balance payload for given route.
* </p>
*
* @return maximum AS configured for given route
*/
int getMaxAsForRoute();
/**
* Set maximum AS that can be configured for given route
*
* @param maxAsForRoute
*/
void setMaxAsForRoute(int maxAsForRoute) throws Exception;
/**
* Returns the time in millisecond between two heartbeats
*
* @return
*/
int getHeartbeatTime();
/**
* Set the time in milliseconds between two heartbeats. Heartbeat is only sent when MUA association is idle.
*
* @param timeBetweenHeartbeat
*/
void setHeartbeatTime(int timeBetweenHeartbeat) throws Exception;
boolean isUseLsbForLinksetSelection();
void setUseLsbForLinksetSelection(boolean useLsbForLinksetSelection) throws Exception;
int getDeliveryMessageThreadCount();
String getRoutingLabelFormatStr();
/**
* Returns if an SCTP level supports netty.
*
* @return
*/
boolean isSctpLibNettySupport();
/**
* Start M3UA stack
*
* @throws Exception
*/
void start() throws Exception;
/**
* Stop M3UA stack
*
* @throws Exception
*/
void stop() throws Exception;
/**
* Returns true if this M3UA stack is started
*
* @return
*/
boolean isStarted();
/**
* Returns list of {@link As} configured for this stack
*
* @return list of {@link As} configured for this stack
*/
List<As> getAppServers();
/**
* Returns list of {@link AspFactory} configured for this stack
*
* @return
*/
List<AspFactory> getAspfactories();
/**
* Create new {@link As}.
*
* @param asName Unque name of As
* @param functionality {@link Functionality} of this As
* @param exchangeType {@link ExchangeType} of this As. The handshake mechanism before As is ACTIVE
* @param ipspType {@link IPSPType} of this As. This is used only if {@link Functionality} is IPSP
* @param rc Optional {@link RoutingContext}
* @param trafficMode Optional {@link TrafficModeType}.
* @param minAspActiveForLoadbalance Minimum {@link Asp} that should be ACTIVE before paylaod can be transfered. This is
* used only if {@link TrafficModeType} is Loadshare.
* @param na Optional {@link NetworkAppearance}.
* @return newly created {@link As}
* @throws Exception
*/
As createAs(String asName, Functionality functionality, ExchangeType exchangeType, IPSPType ipspType,
RoutingContext rc, TrafficModeType trafficMode, int minAspActiveForLoadbalance, NetworkAppearance na)
throws Exception;
/**
* Destroys the {@link As} that matches the passed asName. {@link As} should be DOWN before it can be destroyed
*
* @param asName name of As to be destroyed.
* @return destroyed {@link As}
* @throws Exception
*/
As destroyAs(String asName) throws Exception;
/**
* Create a new {@link AspFactory}. Unique ASP id is assigned. HEARTBEAT is disabled
*
* @param aspName unique name of this AspFactory
* @param associationName the underlying SCTP Association to be used
* @return newly created AspFactory
* @throws Exception
*/
AspFactory createAspFactory(String aspName, String associationName) throws Exception;
/**
* Create a new {@link AspFactory}. Unique ASP id is assigned
*
* @param aspName unique name of this AspFactory
* @param associationName the underlying SCTP Association to be used
* @param isHeartBeatEnabled Is the HEARTBEAT enabled for this association
* @return newly created AspFactory
* @throws Exception
*/
AspFactory createAspFactory(String aspName, String associationName, boolean isHeartBeatEnabled) throws Exception;
/**
* Create a new {@link AspFactory}.
*
* @param aspName unique name of this AspFactory
* @param associationName
* @param aspid unique asp id
* @param isHeartBeatEnabled Is the HEARTBEAT enabled for this association
* @return newly created AspFactory
* @throws Exception
*/
AspFactory createAspFactory(String aspName, String associationName, long aspid, boolean isHeartBeatEnabled)
throws Exception;
/**
* Destroys the {@link AspFactory} that matches the passed aspName. All the ASP within this AspFactory should be DOWN and
* un-assigned from As
*
* @param aspName name of AspFactory to be destroyed.
* @return destroyed AspFactory
* @throws Exception
*/
AspFactory destroyAspFactory(String aspName) throws Exception;
/**
* Creates a new {@link Asp} and assigns to {@link As}.
*
* @param asName name of As
* @param aspName name of {@link AspFactory} from which Asp is to be created
* @return newly created Asp
* @throws Exception
*/
Asp assignAspToAs(String asName, String aspName) throws Exception;
/**
* Unassigns {@link Asp} from {@link As}
*
* @param asName name of As
* @param aspName name of Asp
* @return unassigned Asp
* @throws Exception
*/
Asp unassignAspFromAs(String asName, String aspName) throws Exception;
/**
* Starts the {@link AspFactory} and all the {@link Asp} within this AspFactory will start the hand-shake mechanism
*
* @param aspName name of AspFactory
* @throws Exception
*/
void startAsp(String aspName) throws Exception;
/**
* Stops the {@link AspFactory} and all the {@link Asp} within this AspFactory will exchange messages to bring down ASP
*
* @param aspName name of AspFactory
* @throws Exception
*/
void stopAsp(String aspName) throws Exception;
/**
*
* Add new route based on Destination Point Code (DPC), Originating Point Code (OPC) and Service Indicator (SI). While DPC
* is mandatory and should be actual value, OPC and SI can be -1 indicating wild card
*
* @param dpc destination point code
* @param opc originating point code
* @param si service indicator
* @param asName name of {@link As}
* @throws Exception
*
*/
@Deprecated
void addRoute(int dpc, int opc, int si, String asName) throws Exception;
/**
* Add new route based on Destination Point Code (DPC), Originating Point Code (OPC) and Service Indicator (SI). While DPC
* is mandatory and should be actual value, OPC and SI can be -1 indicating wild card. Set the trafficModeType when declaring
* route for the first time.
*
* @param dpc destination point code
* @param opc originating point code
* @param si service indicator
* @param asName name of {@link As}
* @param trafficModeType {@link TrafficModeType} to decide how to distribute traffic between various AS for this route
* @throws Exception
*/
void addRoute(int dpc, int opc, int si, String asName, int trafficModeType) throws Exception;
/**
* Remove the As for given route
*
* @param dpc destination point code
* @param opc originating point code
* @param si service indicator
* @param asName name of {@link As}
* @throws Exception
*/
void removeRoute(int dpc, int opc, int si, String asName) throws Exception;
/**
* Convenient method to remove all the resources of this M3UA stack
*
* @throws Exception
*/
void removeAllResourses() throws Exception;
/**
* Add new {@link M3UAManagementEventListener}
*
* @param m3uaManagementEventListener
*/
void addM3UAManagementEventListener(M3UAManagementEventListener m3uaManagementEventListener);
/**
* Remove existing {@link M3UAManagementEventListener}
*
* @param m3uaManagementEventListener
*/
void removeM3UAManagementEventListener(M3UAManagementEventListener m3uaManagementEventListener);
/**
* Returns the Route table/Map with DPC as key and list of {@link As} array as potential As that can route Payload to this
* DPC
*
* @return
*/
Map<String, RouteAs> getRoute();
}