Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,22 @@
*/
package org.restcomm.smpp;

import javolution.util.FastList;
import org.apache.log4j.Logger;

import com.cloudhopper.smpp.SmppBindType;
import com.cloudhopper.smpp.SmppSession;

import javolution.util.FastList;

/**
*
* @author Amit Bhayani
*
*/
public class EsmeCluster {

private final Logger LOG = Logger.getLogger(EsmeCluster.class);

private final String clusterName;
private final FastList<Esme> esmes = new FastList<Esme>();
private final int networkId;
Expand Down Expand Up @@ -83,24 +88,63 @@ void removeEsme(Esme esme) {
*
* @return
*/
synchronized Esme getNextEsme() {
synchronized Esme getNextEsme(final boolean anUpdateIndex) {
int idx = index;
if (LOG.isDebugEnabled()) {
LOG.debug("Index: " + idx + ". Getting next ESME.");
}
// TODO synchronized is correct here?
for (int i = 0; i < this.esmesToSendPdu.size(); i++) {
this.index++;
if (this.index >= this.esmesToSendPdu.size()) {
this.index = 0;
idx++;
if (idx >= this.esmesToSendPdu.size()) {
idx = 0;
}

Esme esme = this.esmesToSendPdu.get(this.index);
Esme esme = this.esmesToSendPdu.get(idx);
if (esme.isBound()) {
if (LOG.isDebugEnabled()) {
LOG.debug("Index: " + idx + ". Using ESME: " + esme.getName() + ".");
}
if (anUpdateIndex) {
index = idx;
}
return esme;
}
}

if (LOG.isDebugEnabled()) {
LOG.debug("Index: " + idx + ". Next ESME not selected.");
}
if (anUpdateIndex) {
index = idx;
}
return null;
}


boolean hasMoreEsmes() {
return (esmes.size() > 0);
}

@Override
public String toString() {
final int countAll = esmes.size();
final int countEsmesForSending = esmesToSendPdu.size();
final StringBuilder sb = new StringBuilder();
sb.append(clusterName).append("[");
for (int i = 0; i < countAll; i++) {
sb.append(esmes.get(i).getName());
if (i < countAll - 1) {
sb.append(",");
}
}
sb.append("][");
for (int i = 0; i < countEsmesForSending; i++) {
sb.append(esmesToSendPdu.get(i).getName());
if (i < countEsmesForSending - 1) {
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -159,14 +159,14 @@ public Esme getEsmeByName(String esmeName) {
}

@Override
public Esme getEsmeByClusterName(String esmeClusterName) {
EsmeCluster esmeCluster = this.esmeClusters.get(esmeClusterName);
public Esme getEsmeByClusterName(final String esmeClusterName, final boolean anIndexUpdate) {
final EsmeCluster esmeCluster = this.esmeClusters.get(esmeClusterName);
if (esmeCluster != null) {
return esmeCluster.getNextEsme();
return esmeCluster.getNextEsme(anIndexUpdate);
}
return null;
}

protected Esme getEsmeByPrimaryKey(String SystemId, String host, int port, SmppBindType smppBindType) {

// Check for actual SystemId, host and port
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public interface EsmeManagementMBean {

Esme getEsmeByName(String esmeName);

Esme getEsmeByClusterName(String esmeClusterName);
Esme getEsmeByClusterName(String esmeClusterName, boolean anIndexUpdate);

Esme createEsme(String name, String systemId, String password, String host, int port, boolean chargingEnabled,
String smppBindType, String systemType, String smppIntVersion, byte ton, byte npi, String address,
Expand Down