Skip to content

Commit

Permalink
Add Extension point in SmppMessageHandler.redirectToHostedSmsApp
Browse files Browse the repository at this point in the history
  • Loading branch information
abdulazizali77 committed Feb 26, 2018
1 parent 2cdd94c commit 2b780f0
Showing 1 changed file with 63 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@
import org.restcomm.connect.dao.common.OrganizationUtil;
import org.restcomm.connect.dao.entities.Application;
import org.restcomm.connect.dao.entities.IncomingPhoneNumber;
import org.restcomm.connect.extension.api.ExtensionResponse;
//import org.restcomm.connect.extension.api.ExtensionRequest;
//import org.restcomm.connect.extension.api.ExtensionResponse;
import org.restcomm.connect.extension.api.ExtensionType;
import org.restcomm.connect.extension.api.IExtensionCreateSmsSessionRequest;
import org.restcomm.connect.extension.api.IExtensionFeatureAccessRequest;
import org.restcomm.connect.extension.api.RestcommExtensionException;
import org.restcomm.connect.extension.api.RestcommExtensionGeneric;
import org.restcomm.connect.extension.controller.ExtensionController;
Expand All @@ -56,6 +58,7 @@
import org.restcomm.connect.sms.api.CreateSmsSession;
import org.restcomm.connect.sms.api.DestroySmsSession;
import org.restcomm.connect.sms.api.SmsServiceResponse;
import org.restcomm.connect.telephony.api.FeatureAccessRequest;
import org.restcomm.smpp.parameter.TlvSet;

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

URI appUri = number.getSmsUrl();

final SmppInterpreterParams.Builder builder = new SmppInterpreterParams.Builder();
builder.setSmsService(self);
builder.setConfiguration(configuration);
builder.setStorage(storage);
builder.setAccountId(number.getAccountSid());
builder.setVersion(number.getApiVersion());
final Sid sid = number.getSmsApplicationSid();
boolean isApplicationNull=true;
if (sid != null) {
final Application application = applications.getApplication(sid);
if(application != null){
isApplicationNull=false;
RcmlserverConfigurationSet rcmlserverConfig = RestcommConfiguration.getInstance().getRcmlserver();
RcmlserverResolver resolver = RcmlserverResolver.getInstance(rcmlserverConfig.getBaseUrl(), rcmlserverConfig.getApiPath());
builder.setUrl(UriUtils.resolve(resolver.resolveRelative(application.getRcmlUrl())));
ExtensionController ec = ExtensionController.getInstance();
IExtensionFeatureAccessRequest far = new FeatureAccessRequest(FeatureAccessRequest.Feature.INBOUND_SMS, number.getAccountSid());
ExtensionResponse er = ec.executePreInboundAction(far, extensions);

if (er.isAllowed()) {
URI appUri = number.getSmsUrl();

final SmppInterpreterParams.Builder builder = new SmppInterpreterParams.Builder();
builder.setSmsService(self);
builder.setConfiguration(configuration);
builder.setStorage(storage);
builder.setAccountId(number.getAccountSid());
builder.setVersion(number.getApiVersion());
final Sid sid = number.getSmsApplicationSid();
boolean isApplicationNull=true;
if (sid != null) {
final Application application = applications.getApplication(sid);
if(application != null){
isApplicationNull=false;
RcmlserverConfigurationSet rcmlserverConfig = RestcommConfiguration.getInstance().getRcmlserver();
RcmlserverResolver resolver = RcmlserverResolver.getInstance(rcmlserverConfig.getBaseUrl(), rcmlserverConfig.getApiPath());
builder.setUrl(UriUtils.resolve(resolver.resolveRelative(application.getRcmlUrl())));
}
}
}
if (isApplicationNull && appUri != null) {
builder.setUrl(UriUtils.resolve(appUri));
} else if (isApplicationNull){
logger.warning("the matched number doesn't have SMS application attached, number: "+number.getPhoneNumber());
if (isApplicationNull && appUri != null) {
builder.setUrl(UriUtils.resolve(appUri));
} else if (isApplicationNull){
logger.warning("the matched number doesn't have SMS application attached, number: "+number.getPhoneNumber());
return false;
}
builder.setMethod(number.getSmsMethod());
URI appFallbackUrl = number.getSmsFallbackUrl();
if (appFallbackUrl != null) {
builder.setFallbackUrl(UriUtils.resolve(number.getSmsFallbackUrl()));
builder.setFallbackMethod(number.getSmsFallbackMethod());
}
final Props props = SmppInterpreter.props(builder.build());
interpreter = getContext().actorOf(props);

Sid organizationSid = storage.getOrganizationsDao().getOrganization(storage.getAccountsDao().getAccount(number.getAccountSid()).getOrganizationSid()).getSid();
if(logger.isDebugEnabled())
logger.debug("redirectToHostedSmsApp organizationSid = "+organizationSid);
Configuration cfg = this.configuration;
//Extension
final ActorRef session = session(cfg, organizationSid);
session.tell(request, self);
final StartInterpreter start = new StartInterpreter(session);
interpreter.tell(start, self);
isFoundHostedApp = true;
}else {
if (logger.isDebugEnabled()) {
final String errMsg = "Inbound SMS is not Allowed";
logger.debug(errMsg);
}
String errMsg = "Inbound SMS to Number: " + number.getPhoneNumber()
+ " is not allowed";
//sendNotification(errMsg, 11001, "warning", true);
//final SipServletResponse resp = request.createResponse(SC_FORBIDDEN, "SMS not allowed");
//resp.send();
ec.executePostOutboundAction(far, extensions);
return false;
}
builder.setMethod(number.getSmsMethod());
URI appFallbackUrl = number.getSmsFallbackUrl();
if (appFallbackUrl != null) {
builder.setFallbackUrl(UriUtils.resolve(number.getSmsFallbackUrl()));
builder.setFallbackMethod(number.getSmsFallbackMethod());
}
final Props props = SmppInterpreter.props(builder.build());
interpreter = getContext().actorOf(props);

Sid organizationSid = storage.getOrganizationsDao().getOrganization(storage.getAccountsDao().getAccount(number.getAccountSid()).getOrganizationSid()).getSid();
if(logger.isDebugEnabled())
logger.debug("redirectToHostedSmsApp organizationSid = "+organizationSid);
Configuration cfg = this.configuration;
//Extension
final ActorRef session = session(cfg, organizationSid);
session.tell(request, self);
final StartInterpreter start = new StartInterpreter(session);
interpreter.tell(start, self);
isFoundHostedApp = true;


}
} catch (Exception e) {
Expand Down

0 comments on commit 2b780f0

Please sign in to comment.