// Interface to AsyncHttpRequest
 void sendResponseMessage(HttpResponse response) throws IOException {
   // do not process if request has been cancelled
   if (!Thread.currentThread().isInterrupted()) {
     StatusLine status = response.getStatusLine();
     byte[] responseBody;
     responseBody = getResponseData(response.getEntity());
     // additional cancellation check as getResponseData() can take non-zero time to process
     if (!Thread.currentThread().isInterrupted()) {
       if (status.getStatusCode() >= 300) {
         sendFailureMessage(
             status.getStatusCode(),
             response.getAllHeaders(),
             responseBody,
             new HttpResponseException(status.getStatusCode(), status.getReasonPhrase()));
       } else {
         sendSuccessMessage(status.getStatusCode(), response.getAllHeaders(), responseBody);
       }
     }
   }
 }