package org.sana.net.http; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.apache.http.params.HttpParams; import org.sana.net.qos.QOS; import java.util.Date; /** * */ public class HttpQOS { /** * Http header names for the transmission qos data. Parameter names are * designed to be consistent with default MDS implementation. MDS is * implemented in Django by default and hence usage of 'HTTP_' prefix and * QOS field names in camel case converted to lowercase with underscores * with subsequent capitalization. */ public static interface Params { public static final String PREFIX = "HTTP_"; public static final String SOURCE = PREFIX + "SOURCE"; public static final String TARGET = PREFIX + "TARGET"; public static final String SENT = PREFIX + "SENT"; public static final String SEND_COUNT = PREFIX + "SEND_COUNT"; public static final String EVENT_START = PREFIX + "EVENT_START"; public static final String EVENT_COMPLETE = PREFIX + "EVENT_COMPLETE"; public static final String RECEIVED = PREFIX + "RECEIVED"; public static final String REQUEST_COMPLETE = PREFIX + "REQUEST_COMPLETE"; } /** * Writes transmission quality data to an HttpRequest's headers. * @param request The HttpRequest to write to. * @param data The transmission data to write. */ public static void write(HttpRequest request, QOS data) { HttpParams params = request.getParams(); params.setParameter(Params.SOURCE, data.source); params.setParameter(Params.TARGET, data.target); if (data.sent != null){ params.setLongParameter(Params.SENT, data.sent.getTime()); } params.setIntParameter(Params.SEND_COUNT, data.sendCount); if (data.eventStart != null){ params.setLongParameter(Params.EVENT_START, data.eventStart.getTime()); } if (data.eventComplete != null){ params.setLongParameter(Params.EVENT_COMPLETE, data.eventComplete.getTime()); } if (data.received != null){ params.setLongParameter(Params.RECEIVED, data.received.getTime()); } if(data.requestComplete != null) { params.setLongParameter(Params.REQUEST_COMPLETE, data.requestComplete.getTime()); } request.setParams(params); } /** * Reads quality of service data from the response headers and returns a * new {@link org.sana.net.qos.QOS QOS} object. * @param response The object to read the qos data from. * @return A new */ public static final QOS read(HttpResponse response){ HttpParams params = response.getParams(); QOS qos = new QOS(); qos.source = String.valueOf(params.getParameter(Params.SOURCE)); qos.target = String.valueOf(params.getParameter(Params.TARGET)); qos.sent = new Date(params.getLongParameter(Params.SENT, 0)); qos.sendCount = params.getIntParameter(Params.SEND_COUNT, 1); qos.eventStart = new Date(params.getLongParameter(Params.EVENT_START, 0)); qos.eventComplete = new Date(params.getLongParameter(Params.EVENT_COMPLETE, 0)); qos.received = new Date(params.getLongParameter(Params.RECEIVED, 0)); qos.requestComplete = new Date(params.getLongParameter(Params.RECEIVED, 0)); return qos; } }