Logic::~Logic() {
}
-PolicyResult Logic::check(int sourceDesc UNUSED, const PolicyKey &key UNUSED) {
+PolicyResult Logic::check(const RequestContext &context UNUSED, const PolicyKey &key UNUSED) {
//todo this is only a stub
return PolicyResult(PredefinedPolicyType::ALLOW);
}
#include <types/PolicyKey.h>
#include <types/PolicyResult.h>
+#include <request/RequestContext.h>
+
namespace Cynara {
class Logic {
Logic();
~Logic();
- PolicyResult check(int sourceDesc, const PolicyKey &key);
+ PolicyResult check(const RequestContext &context, const PolicyKey &key);
};
} // namespace Cynara
namespace Cynara {
-void ResponseTaker::appendResponseToBuffer(CheckResponse &&response UNUSED) {
+void ResponseTaker::appendResponseToBuffer(BinaryQueue &queue UNUSED,
+ CheckResponse &&response UNUSED) {
throw NotImplementedException();
}
#ifndef SRC_SERVICE_PROTOCOL_RESPONSETAKER_H_
#define SRC_SERVICE_PROTOCOL_RESPONSETAKER_H_
+#include <common.h>
+
#include <response/CheckResponse.h>
namespace Cynara {
ResponseTaker() = default;
virtual ~ResponseTaker() = default;
- virtual void appendResponseToBuffer(CheckResponse &&response);
+ virtual void appendResponseToBuffer(BinaryQueue &queue, CheckResponse &&response);
};
} // namespace Cynara
#include <common.h>
#include <types/PolicyResult.h>
-#include <protocol/Protocol.h>
+#include <logic/Logic.h>
+#include <main/Cynara.h>
#include <request/RequestContext.h>
#include "CheckRequest.h"
CheckRequest::CheckRequest(const PolicyKey &key) : m_key(key) {
}
-void CheckRequest::execute(Logic *logic, int sourceDesc) {
- PolicyResult result = logic->check(sourceDesc, m_key);
- BinaryQueue &queue = RequestContext::resultQueue(sourceDesc);
- RequestContext::protocol(sourceDesc)->appendResponseToBuffer(CheckResponse(queue, result));
+void CheckRequest::execute(const RequestContext &context) {
+ PolicyResult result = Cynara::getLogic()->check(context, m_key);
+ context.returnResponse(CheckResponse(result));
}
} // namespace Cynara
#include <types/PolicyKey.h>
-#include "Request.h"
+#include <request/Request.h>
+#include <request/RequestContext.h>
namespace Cynara {
CheckRequest(const PolicyKey &key);
virtual ~CheckRequest() = default;
- virtual void execute(Logic *logic, int sourceDesc);
+ virtual void execute(const RequestContext &context);
};
} // namespace Cynara
#include <memory>
-#include <logic/Logic.h>
+#include "RequestContext.h"
namespace Cynara {
Request();
virtual ~Request();
- virtual void execute(Logic *logic, int sourceDesc) = 0;
+ virtual void execute(const RequestContext &context) = 0;
};
typedef std::shared_ptr<Request> RequestPtr;
*/
#include <main/Cynara.h>
+#include <sockets/Descriptor.h>
#include <sockets/SocketManager.h>
#include "RequestContext.h"
namespace Cynara {
-BinaryQueue &RequestContext::resultQueue(int fd) {
- return Cynara::getSocketManager()->descriptor(fd).writeQueue();
+RequestContext::RequestContext(int desc) : m_desc(desc) {
}
-ProtocolPtr RequestContext::protocol(int fd) {
- return Cynara::getSocketManager()->descriptor(fd).protocol();
+ResponseTaker &RequestContext::responseTaker(void) const {
+ return Cynara::getSocketManager()->descriptor(m_desc).responseTaker();
+}
+
+BinaryQueue &RequestContext::responseQueue(void) const {
+ return Cynara::getSocketManager()->descriptor(m_desc).writeQueue();
}
} // namespace Cynara
#include <common.h>
-#include <protocol/Protocol.h>
+#include <protocol/ResponseTaker.h>
namespace Cynara {
class RequestContext {
+private:
+ int m_desc;
+
+ ResponseTaker &responseTaker(void) const;
+ BinaryQueue &responseQueue(void) const;
public:
- static BinaryQueue &resultQueue(int fd);
- static ProtocolPtr protocol(int fd);
+ RequestContext(int desc);
+
+ template <class T>
+ void returnResponse(T &&response) const {
+ responseTaker().appendResponseToBuffer(responseQueue(), std::move(response));
+ }
};
} // namespace Cynara
namespace Cynara {
struct CheckResponse {
- BinaryQueue &m_queueRef;
const PolicyResult &m_resultRef;
- CheckResponse(BinaryQueue &queue, const PolicyResult &result)
- : m_queueRef(queue), m_resultRef(result) {}
+ CheckResponse(const PolicyResult &result) : m_resultRef(result) {
+ }
};
} // namespace Cynara
LOGD("request extracted");
try {
- req->execute(Cynara::getLogic(), fd);
+ req->execute(fd);
if (desc.hasDataToWrite())
addWriteSocket(fd);