A server that accepts SMPP client connections.
Switch branches/tags
Nothing to show
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Add JMX support. Aug 13, 2012
.gitignore Initial Import. Apr 19, 2011
README.md Update the release version to 0.4.2 Nov 30, 2014
pom.xml [maven-release-plugin] prepare for next development iteration Nov 30, 2014


SMPP Server

Build Status

A project based on the Cloudhopper SMPP library that accepts client connections and allows you to easily handle SMPP packets.


If you are using Maven, you will need to configure the repository in the pom.xml file first:


And then add the dependency:


Starting and stopping

To start the server you need to instantiate the net.gescobar.smppserver.SmppServer class and call the start() method:

SmppServer server = new SmppServer(4444); // 4444 is the port, change it as needed
// somewhere else

Processing SMPP packets

To process SMPP packets, you will need to provide an implementation of the net.gescobar.smppserver.PacketProcessor. For example:

public class MyPacketProcessor implements PacketProcessor {
	public void processPacket(SmppRequest packet, ResponseSender responseSender) {
		if (packet.isBind()) {
	   	 	// check the credentials and return the corresponding SMPP command status
	   	 	Bind bind = (Bind) packet;
	   	 	responseSender.send( Response.OK ):
	   	 } else if (packet.getCommandId() == SmppPacket.SUBMIT_SM) {
	   	 	// a message has arrived, what do you want to do with it?
	   	 	SubmitSm submit = (SubmitSm) packet;
	   	 	responseSender.send( Response.INVALID_DEST_ADDRESS ); // just an example

To use your PacketProcessor implementation, set it in the SmppServer using the constructor or the setter method:

SmppServer server = new SmppServer(4444, new MyPacketProcessor());
// or
server.setPacketProcessor(new MyPacketProcessor());

If you don't provide a PacketProcessor implementation, the default one (that always returns Response.OK) will be used.

Sending SMPP requests to the client

You can also send requests to the client (e.g. deliver_sm or unbind) through a session. For example:

// first, we need to find the session to which we want to send the request
SmppSession targetSession = null;

Collection<SmppSession> sessions = server.getSessions();
for (SmppSession s : sessions) {
	// check if this is the session we are looking for
	if (s.getSystemId().equals("test") && s.getBindType().equals(BindType.TRANSCEIVER)) {
		targetSession = s;

// create the request and send it
DeliverSm ds = new DeliverSm();
// ... set other fields

DeliverSmResp deliverSmResp = targetSession.sendRequest(ds, 1000);

That's it! As you can see, it's a simple, yet powerful design that will allow you to accept SMPP client connections, process incoming SMPP packets and send requests to the clients.