00001 #ifndef __ARC_SEC_RESPONSE_H__
00002 #define __ARC_SEC_RESPONSE_H__
00003
00004 #include <list>
00005 #include <arc/XMLNode.h>
00006 #include <arc/Logger.h>
00007 #include "EvaluationCtx.h"
00008 #include "policy/Policy.h"
00009
00010 namespace ArcSec {
00011
00012 typedef std::list<Policy*> Policies;
00013
00015
00016 class ResponseItem {
00017 public:
00018 ResponseItem():reqtp(NULL){};
00019 public:
00020
00021 RequestTuple* reqtp;
00022 Result res;
00023 Arc::XMLNode reqxml;
00024 Policies pls;
00025 std::list<Arc::XMLNode> plsxml;
00026 };
00027
00028 class ResponseList {
00029 public:
00030 void addItem(ResponseItem* item) {
00031 int n = (resps.size());
00032 resps.insert(std::pair<int, ResponseItem*>(n, item));
00033 };
00034 int size() { return resps.size();};
00035 ResponseItem* getItem(int n) { return resps[n]; };
00036 ResponseItem* operator[](int n) { return resps[n]; };
00037 bool empty() { return resps.empty(); };
00038 void clear() {
00039 std::map<int, ResponseItem*>::iterator it;
00040 for(it = resps.begin(); it != resps.end();it = resps.begin()){
00041 ResponseItem* item = it->second;
00042 resps.erase(it);
00043 if(item) {
00044 RequestTuple* tpl = item->reqtp;
00045 if(tpl) {
00046 tpl->erase();
00047 delete tpl;
00048 };
00049 delete item;
00050 };
00051 }
00052 };
00053 private:
00054 std::map<int, ResponseItem*> resps;
00055 };
00056
00058 class Response {
00059 private:
00060 int request_size;
00061 protected:
00062 ResponseList rlist;
00063 public:
00064 void setRequestSize(int size) { request_size = size; };
00065 int getRequestSize() { return request_size; };
00066 virtual ResponseList& getResponseItems () { return rlist; };
00067 virtual void setResponseItems (const ResponseList& rl) { rlist.clear(); rlist = rl; };
00068 virtual void addResponseItem(ResponseItem* respitem){ rlist.addItem(respitem); };
00069 virtual ~Response() { rlist.clear(); };
00070 };
00071
00072 }
00073
00074 #endif