code: @Override
  	public final InputStream doRequest(InputStream httpBody) throws CommunicationException {
  		InputStream reply = null;
  
  		try {
  
  			getSocket();
  
  			prepareCommunication();
  
  			createPostRequest(getPath());
  
  			writeHostLine();
  
  			writeContentTypeHeaders();
  
  			httpBody = logAndCloneInputStream(httpBody, "request");
  
  			if (usesGzip()) {
  				httpBody = compressInputStream(httpBody);
  				writeGzipHeaders();
  			}
  
  			if (usesBasicAuth()) {
  				writeAuthHeader();
  			}
  
  			writeContentLengthHeader(httpBody.available());
  
  			finishHeaders();
  
  			reply = doActualRequest(httpBody);
  
  			reply = logAndCloneInputStream(reply, "response");
  
  			if (replyIsGzipped()) {
  				reply = new GZIPInputStream(reply);
  			}
  
  			return reply;
  
  		} catch (IOException e) {
  			throw new CommunicationException(e.getMessage());
  		}
  	}
docs: /*
  Template method.
  
  (non-Javadoc)
  @see de.fhhannover.inform.trust.ifmapj.channel.CommunicationHandler#doRequest(java.io.InputStream)