Back to index

nordugrid-arc-nox  1.1.0~rc6
Response.h
Go to the documentation of this file.
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   //TODO: Convertion method to decrease memory consumption
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 } // namespace ArcSec
00073 
00074 #endif /* __ARC_SEC_RESPONSE_H__ */