Skip to content

Commit da1ca52

Browse files
RESTCOMM-1785: Add notification when inboundSMS SMPP is blocked. Duplicate notification() from SMSService.
1 parent 9d63e11 commit da1ca52

File tree

1 file changed

+60
-3
lines changed

1 file changed

+60
-3
lines changed

restcomm/restcomm.sms/src/main/java/org/restcomm/connect/sms/smpp/SmppMessageHandler.java

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
import java.io.IOException;
2323
import java.net.URI;
24+
import java.net.URISyntaxException;
2425
import java.util.Collection;
2526
import java.util.List;
2627

@@ -30,6 +31,7 @@
3031
import javax.servlet.sip.SipURI;
3132

3233
import org.apache.commons.configuration.Configuration;
34+
import org.joda.time.DateTime;
3335
import org.restcomm.connect.commons.configuration.RestcommConfiguration;
3436
import org.restcomm.connect.commons.configuration.sets.RcmlserverConfigurationSet;
3537
import org.restcomm.connect.commons.dao.Sid;
@@ -38,9 +40,11 @@
3840
import org.restcomm.connect.dao.AccountsDao;
3941
import org.restcomm.connect.dao.ApplicationsDao;
4042
import org.restcomm.connect.dao.DaoManager;
43+
import org.restcomm.connect.dao.NotificationsDao;
4144
import org.restcomm.connect.dao.common.OrganizationUtil;
4245
import org.restcomm.connect.dao.entities.Application;
4346
import org.restcomm.connect.dao.entities.IncomingPhoneNumber;
47+
import org.restcomm.connect.dao.entities.Notification;
4448
import org.restcomm.connect.extension.api.ExtensionResponse;
4549
//import org.restcomm.connect.extension.api.ExtensionRequest;
4650
//import org.restcomm.connect.extension.api.ExtensionResponse;
@@ -94,6 +98,9 @@ public class SmppMessageHandler extends RestcommUntypedActor {
9498
//List of extensions for SmsService
9599
List<RestcommExtensionGeneric> extensions;
96100

101+
private static final int ERROR_NOTIFICATION = 0;
102+
private static final int WARNING_NOTIFICATION = 1;
103+
97104
public SmppMessageHandler(final ServletContext servletContext) {
98105
this.servletContext = servletContext;
99106
this.storage = (DaoManager) servletContext.getAttribute(DaoManager.class.getName());
@@ -230,11 +237,13 @@ private boolean redirectToHostedSmsApp(final ActorRef self, final SmppInboundMes
230237
final String errMsg = "Inbound SMS is not Allowed";
231238
logger.debug(errMsg);
232239
}
240+
//TODO: Notifications API and idioms need to be cleaned up across whole RC
233241
String errMsg = "Inbound SMS to Number: " + number.getPhoneNumber()
234242
+ " is not allowed";
235-
//sendNotification(errMsg, 11001, "warning", true);
236-
//final SipServletResponse resp = request.createResponse(SC_FORBIDDEN, "SMS not allowed");
237-
//resp.send();
243+
final NotificationsDao notifications = storage.getNotificationsDao();
244+
final Notification notification = notification(WARNING_NOTIFICATION, 11001, errMsg);
245+
notifications.addNotification(notification);
246+
//TODO: implement DLR here
238247
ec.executePostOutboundAction(far, extensions);
239248
return false;
240249
}
@@ -320,4 +329,52 @@ public void outbound(SmppOutboundMessageEntity request) throws SmppInvalidArgume
320329
logger.error("SMPP message cannot be sent : " + e );
321330
}
322331
}
332+
333+
//TODO: Notifications API and idioms need to be cleaned up across whole RC
334+
//FIXME: duplicate of SmsService
335+
private Notification notification(final int log, final int error, final String message) {
336+
String version = configuration.subset("runtime-settings").getString("api-version");
337+
Sid accountId = new Sid("ACae6e420f425248d6a26948c17a9e2acf");
338+
// Sid callSid = new Sid("CA00000000000000000000000000000000");
339+
final Notification.Builder builder = Notification.builder();
340+
final Sid sid = Sid.generate(Sid.Type.NOTIFICATION);
341+
builder.setSid(sid);
342+
// builder.setAccountSid(accountId);
343+
builder.setAccountSid(accountId);
344+
// builder.setCallSid(callSid);
345+
builder.setApiVersion(version);
346+
builder.setLog(log);
347+
builder.setErrorCode(error);
348+
final String base = configuration.subset("runtime-settings").getString("error-dictionary-uri");
349+
StringBuilder buffer = new StringBuilder();
350+
buffer.append(base);
351+
if (!base.endsWith("/")) {
352+
buffer.append("/");
353+
}
354+
buffer.append(error).append(".html");
355+
final URI info = URI.create(buffer.toString());
356+
builder.setMoreInfo(info);
357+
builder.setMessageText(message);
358+
final DateTime now = DateTime.now();
359+
builder.setMessageDate(now);
360+
try {
361+
builder.setRequestUrl(new URI(""));
362+
} catch (URISyntaxException e) {
363+
e.printStackTrace();
364+
}
365+
/**
366+
* if (response != null) { builder.setRequestUrl(request.getUri()); builder.setRequestMethod(request.getMethod());
367+
* builder.setRequestVariables(request.getParametersAsString()); }
368+
**/
369+
370+
builder.setRequestMethod("");
371+
builder.setRequestVariables("");
372+
buffer = new StringBuilder();
373+
buffer.append("/").append(version).append("/Accounts/");
374+
buffer.append(accountId.toString()).append("/Notifications/");
375+
buffer.append(sid.toString());
376+
final URI uri = URI.create(buffer.toString());
377+
builder.setUri(uri);
378+
return builder.build();
379+
}
323380
}

0 commit comments

Comments
 (0)