/**
   * Uploads data in the form of streams to a server
   *
   * @param callback Callback object responsible for updating UI upon message delivery / request
   *     timeout
   */
  public void uploadStream(final String uploadUri, final ResponseCallback callback) {

    MonitoredDestinationListener responseListener;

    try {
      final URI uri = URI.create(uploadUri + ";deviceSide=true");

      responseListener =
          new MonitoredDestinationListener(
              "StreamData MessageListener [id: " + _listenerId++ + "]");
      final SenderDestination senderDestination =
          DestinationFactory.createNonBlockingSenderDestination(_context, uri, responseListener);

      // Create a byte array of size 10000
      final byte[] input = new byte[10000];
      for (int i = 0; i < input.length; i++) {
        input[i] = '5';
      }

      final ByteArrayInputStream bais = new ByteArrayInputStream(input);

      final StreamMessage message = senderDestination.createStreamMessage();
      ((HttpMessage) message).setMethod(HttpMessage.POST);

      message.setStreamPayload(bais);
      message.setPriority(2);
      message.setTransportHeader("Transfer-Encoding", "chunked");

      final TimeoutMonitor timeoutThread =
          new TimeoutMonitor(senderDestination, true, callback, responseListener, message);
      final Thread t1 = new Thread(timeoutThread, "monitor");

      t1.start();

    } catch (final Exception e) {
      alertDialog(e.toString());
    }
  }