Skip to content

Commit 9d63e11

Browse files
Add Extension point in SmppMessageHandler.redirectToHostedSmsApp
1 parent 6d1a3f2 commit 9d63e11

1 file changed

Lines changed: 63 additions & 41 deletions

File tree

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

Lines changed: 63 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,12 @@
4141
import org.restcomm.connect.dao.common.OrganizationUtil;
4242
import org.restcomm.connect.dao.entities.Application;
4343
import org.restcomm.connect.dao.entities.IncomingPhoneNumber;
44+
import org.restcomm.connect.extension.api.ExtensionResponse;
4445
//import org.restcomm.connect.extension.api.ExtensionRequest;
4546
//import org.restcomm.connect.extension.api.ExtensionResponse;
4647
import org.restcomm.connect.extension.api.ExtensionType;
4748
import org.restcomm.connect.extension.api.IExtensionCreateSmsSessionRequest;
49+
import org.restcomm.connect.extension.api.IExtensionFeatureAccessRequest;
4850
import org.restcomm.connect.extension.api.RestcommExtensionException;
4951
import org.restcomm.connect.extension.api.RestcommExtensionGeneric;
5052
import org.restcomm.connect.extension.controller.ExtensionController;
@@ -56,6 +58,7 @@
5658
import org.restcomm.connect.sms.api.CreateSmsSession;
5759
import org.restcomm.connect.sms.api.DestroySmsSession;
5860
import org.restcomm.connect.sms.api.SmsServiceResponse;
61+
import org.restcomm.connect.telephony.api.FeatureAccessRequest;
5962
import org.restcomm.smpp.parameter.TlvSet;
6063

6164
import com.cloudhopper.commons.charset.CharsetUtil;
@@ -173,50 +176,69 @@ private boolean redirectToHostedSmsApp(final ActorRef self, final SmppInboundMes
173176
if (number != null) {
174177
ActorRef interpreter = null;
175178

176-
URI appUri = number.getSmsUrl();
177-
178-
final SmppInterpreterParams.Builder builder = new SmppInterpreterParams.Builder();
179-
builder.setSmsService(self);
180-
builder.setConfiguration(configuration);
181-
builder.setStorage(storage);
182-
builder.setAccountId(number.getAccountSid());
183-
builder.setVersion(number.getApiVersion());
184-
final Sid sid = number.getSmsApplicationSid();
185-
boolean isApplicationNull=true;
186-
if (sid != null) {
187-
final Application application = applications.getApplication(sid);
188-
if(application != null){
189-
isApplicationNull=false;
190-
RcmlserverConfigurationSet rcmlserverConfig = RestcommConfiguration.getInstance().getRcmlserver();
191-
RcmlserverResolver resolver = RcmlserverResolver.getInstance(rcmlserverConfig.getBaseUrl(), rcmlserverConfig.getApiPath());
192-
builder.setUrl(UriUtils.resolve(resolver.resolveRelative(application.getRcmlUrl())));
179+
ExtensionController ec = ExtensionController.getInstance();
180+
IExtensionFeatureAccessRequest far = new FeatureAccessRequest(FeatureAccessRequest.Feature.INBOUND_SMS, number.getAccountSid());
181+
ExtensionResponse er = ec.executePreInboundAction(far, extensions);
182+
183+
if (er.isAllowed()) {
184+
URI appUri = number.getSmsUrl();
185+
186+
final SmppInterpreterParams.Builder builder = new SmppInterpreterParams.Builder();
187+
builder.setSmsService(self);
188+
builder.setConfiguration(configuration);
189+
builder.setStorage(storage);
190+
builder.setAccountId(number.getAccountSid());
191+
builder.setVersion(number.getApiVersion());
192+
final Sid sid = number.getSmsApplicationSid();
193+
boolean isApplicationNull=true;
194+
if (sid != null) {
195+
final Application application = applications.getApplication(sid);
196+
if(application != null){
197+
isApplicationNull=false;
198+
RcmlserverConfigurationSet rcmlserverConfig = RestcommConfiguration.getInstance().getRcmlserver();
199+
RcmlserverResolver resolver = RcmlserverResolver.getInstance(rcmlserverConfig.getBaseUrl(), rcmlserverConfig.getApiPath());
200+
builder.setUrl(UriUtils.resolve(resolver.resolveRelative(application.getRcmlUrl())));
201+
}
193202
}
194-
}
195-
if (isApplicationNull && appUri != null) {
196-
builder.setUrl(UriUtils.resolve(appUri));
197-
} else if (isApplicationNull){
198-
logger.warning("the matched number doesn't have SMS application attached, number: "+number.getPhoneNumber());
203+
if (isApplicationNull && appUri != null) {
204+
builder.setUrl(UriUtils.resolve(appUri));
205+
} else if (isApplicationNull){
206+
logger.warning("the matched number doesn't have SMS application attached, number: "+number.getPhoneNumber());
207+
return false;
208+
}
209+
builder.setMethod(number.getSmsMethod());
210+
URI appFallbackUrl = number.getSmsFallbackUrl();
211+
if (appFallbackUrl != null) {
212+
builder.setFallbackUrl(UriUtils.resolve(number.getSmsFallbackUrl()));
213+
builder.setFallbackMethod(number.getSmsFallbackMethod());
214+
}
215+
final Props props = SmppInterpreter.props(builder.build());
216+
interpreter = getContext().actorOf(props);
217+
218+
Sid organizationSid = storage.getOrganizationsDao().getOrganization(storage.getAccountsDao().getAccount(number.getAccountSid()).getOrganizationSid()).getSid();
219+
if(logger.isDebugEnabled())
220+
logger.debug("redirectToHostedSmsApp organizationSid = "+organizationSid);
221+
Configuration cfg = this.configuration;
222+
//Extension
223+
final ActorRef session = session(cfg, organizationSid);
224+
session.tell(request, self);
225+
final StartInterpreter start = new StartInterpreter(session);
226+
interpreter.tell(start, self);
227+
isFoundHostedApp = true;
228+
}else {
229+
if (logger.isDebugEnabled()) {
230+
final String errMsg = "Inbound SMS is not Allowed";
231+
logger.debug(errMsg);
232+
}
233+
String errMsg = "Inbound SMS to Number: " + number.getPhoneNumber()
234+
+ " is not allowed";
235+
//sendNotification(errMsg, 11001, "warning", true);
236+
//final SipServletResponse resp = request.createResponse(SC_FORBIDDEN, "SMS not allowed");
237+
//resp.send();
238+
ec.executePostOutboundAction(far, extensions);
199239
return false;
200240
}
201-
builder.setMethod(number.getSmsMethod());
202-
URI appFallbackUrl = number.getSmsFallbackUrl();
203-
if (appFallbackUrl != null) {
204-
builder.setFallbackUrl(UriUtils.resolve(number.getSmsFallbackUrl()));
205-
builder.setFallbackMethod(number.getSmsFallbackMethod());
206-
}
207-
final Props props = SmppInterpreter.props(builder.build());
208-
interpreter = getContext().actorOf(props);
209-
210-
Sid organizationSid = storage.getOrganizationsDao().getOrganization(storage.getAccountsDao().getAccount(number.getAccountSid()).getOrganizationSid()).getSid();
211-
if(logger.isDebugEnabled())
212-
logger.debug("redirectToHostedSmsApp organizationSid = "+organizationSid);
213-
Configuration cfg = this.configuration;
214-
//Extension
215-
final ActorRef session = session(cfg, organizationSid);
216-
session.tell(request, self);
217-
final StartInterpreter start = new StartInterpreter(session);
218-
interpreter.tell(start, self);
219-
isFoundHostedApp = true;
241+
220242

221243
}
222244
} catch (Exception e) {

0 commit comments

Comments
 (0)