Ejemplo n.º 1
0
    @Override
    public void execute(final Object message) throws Exception {
      if (logger.isInfoEnabled()) {
        logger.info("UssdInterpreter Processing INFO request");
      }
      final NotificationsDao notifications = storage.getNotificationsDao();
      SipServletRequest info = (SipServletRequest) message;

      SipServletResponse okay = info.createResponse(200);
      okay.send();

      UssdInfoRequest ussdInfoRequest = new UssdInfoRequest(info);
      String ussdText = ussdInfoRequest.getMessage();
      if (ussdCollectAction != null && !ussdCollectAction.isEmpty() && ussdText != null) {
        URI target = null;
        try {
          target = URI.create(ussdCollectAction);
        } catch (final Exception exception) {
          final Notification notification =
              notification(ERROR_NOTIFICATION, 11100, ussdCollectAction + " is an invalid URI.");
          notifications.addNotification(notification);
          sendMail(notification);
          final StopInterpreter stop = new StopInterpreter();
          source.tell(stop, source);
          return;
        }
        final URI base = request.getUri();
        final URI uri = UriUtils.resolve(base, target);
        // Parse "method".
        String method = "POST";
        Attribute attribute = null;
        try {
          attribute = verb.attribute("method");
        } catch (Exception e) {
        }
        if (attribute != null) {
          method = attribute.value();
          if (method != null && !method.isEmpty()) {
            if (!"GET".equalsIgnoreCase(method) && !"POST".equalsIgnoreCase(method)) {
              final Notification notification =
                  notification(
                      WARNING_NOTIFICATION,
                      14104,
                      method + " is not a valid HTTP method for <Gather>");
              notifications.addNotification(notification);
              method = "POST";
            }
          } else {
            method = "POST";
          }
        }

        final List<NameValuePair> parameters = parameters();
        parameters.add(new BasicNameValuePair("Digits", ussdText));
        request = new HttpRequestDescriptor(uri, method, parameters);
        downloader.tell(request, source);
        ussdCollectTag = null;
        ussdLanguageTag = null;
        ussdMessageTags = new LinkedBlockingQueue<Tag>();
        return;
      } else if (ussdInfoRequest
          .getUssdMessageType()
          .equals(UssdMessageType.unstructuredSSNotify_Response)) {
        UssdRestcommResponse ussdRestcommResponse = new UssdRestcommResponse();
        ussdRestcommResponse.setErrorCode("1");
        ussdRestcommResponse.setIsFinalMessage(true);
        ussdCall.tell(ussdRestcommResponse, source);
        return;
      }
      // Ask the parser for the next action to take.
      final GetNextVerb next = GetNextVerb.instance();
      parser.tell(next, self());
    }