|
41 | 41 | import org.restcomm.connect.dao.common.OrganizationUtil; |
42 | 42 | import org.restcomm.connect.dao.entities.Application; |
43 | 43 | import org.restcomm.connect.dao.entities.IncomingPhoneNumber; |
| 44 | +import org.restcomm.connect.extension.api.ExtensionResponse; |
44 | 45 | //import org.restcomm.connect.extension.api.ExtensionRequest; |
45 | 46 | //import org.restcomm.connect.extension.api.ExtensionResponse; |
46 | 47 | import org.restcomm.connect.extension.api.ExtensionType; |
47 | 48 | import org.restcomm.connect.extension.api.IExtensionCreateSmsSessionRequest; |
| 49 | +import org.restcomm.connect.extension.api.IExtensionFeatureAccessRequest; |
48 | 50 | import org.restcomm.connect.extension.api.RestcommExtensionException; |
49 | 51 | import org.restcomm.connect.extension.api.RestcommExtensionGeneric; |
50 | 52 | import org.restcomm.connect.extension.controller.ExtensionController; |
|
56 | 58 | import org.restcomm.connect.sms.api.CreateSmsSession; |
57 | 59 | import org.restcomm.connect.sms.api.DestroySmsSession; |
58 | 60 | import org.restcomm.connect.sms.api.SmsServiceResponse; |
| 61 | +import org.restcomm.connect.telephony.api.FeatureAccessRequest; |
59 | 62 | import org.restcomm.smpp.parameter.TlvSet; |
60 | 63 |
|
61 | 64 | import com.cloudhopper.commons.charset.CharsetUtil; |
@@ -173,50 +176,69 @@ private boolean redirectToHostedSmsApp(final ActorRef self, final SmppInboundMes |
173 | 176 | if (number != null) { |
174 | 177 | ActorRef interpreter = null; |
175 | 178 |
|
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 | + } |
193 | 202 | } |
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); |
199 | 239 | return false; |
200 | 240 | } |
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 | + |
220 | 242 |
|
221 | 243 | } |
222 | 244 | } catch (Exception e) { |
|
0 commit comments