#pragma once
#include <map>
+#include <credentials.h>
#include <generic-socket-manager.h>
#include <message-buffer.h>
namespace SecurityManager
{
struct ConnectionInfo {
+ ConnectionInfo(InterfaceID inter, Credentials crd)
+ : interfaceID(inter)
+ , creds(std::move(crd))
+ {}
+
InterfaceID interfaceID;
+ Credentials creds;
MessageBuffer buffer;
};
#include <dpl/exception.h>
+#include <credentials.h>
#include <generic-event.h>
extern "C" {
typedef std::vector<ServiceDescription> ServiceDescriptionVector;
struct AcceptEvent : public GenericEvent {
+ AcceptEvent(ConnectionID connection, InterfaceID interface, Credentials crd)
+ : connectionID(connection)
+ , interfaceID(interface)
+ , creds(std::move(crd))
+ {}
ConnectionID connectionID;
InterfaceID interfaceID;
+ Credentials creds;
};
struct WriteEvent : public GenericEvent {
#include <dpl/assert.h>
#include <dpl/errno_string.h>
+#include <credentials.h>
#include <smack-check.h>
#include <socket-manager.h>
desc.service = m_socketDescriptionVector[sock].service;
desc.useSendMsg = m_socketDescriptionVector[sock].useSendMsg;
- GenericSocketService::AcceptEvent event;
- event.connectionID.sock = client;
- event.connectionID.counter = desc.counter;
- event.interfaceID = desc.interfaceID;
+ GenericSocketService::AcceptEvent event(
+ ConnectionID{client, desc.counter},
+ desc.interfaceID,
+ Credentials::getCredentialsFromSocket(client));
desc.service->Event(event);
}
" ConnectionID.counter: " << event.connectionID.counter <<
" ServiceID: " << event.interfaceID);
- auto &info = m_connectionInfoMap[event.connectionID.counter];
- info.interfaceID = event.interfaceID;
+ m_connectionInfoMap.emplace(
+ std::make_pair(
+ event.connectionID.counter,
+ ConnectionInfo(event.interfaceID, event.creds)));
}
void BaseService::write(const WriteEvent &event)
void BaseService::process(const ReadEvent &event)
{
LogDebug("Read event for counter: " << event.connectionID.counter);
- auto &info = m_connectionInfoMap[event.connectionID.counter];
+ auto &info = m_connectionInfoMap.at(event.connectionID.counter);
info.buffer.Push(event.rawBuffer);
// We can get several requests in one package.
if (IFACE == interfaceID) {
Try {
- Credentials creds = Credentials::getCredentialsFromSocket(conn.sock);
-
+ Credentials &creds = m_connectionInfoMap.at(conn.counter).creds;
// deserialize API call type
int call_type_int;
Deserialization::Deserialize(buffer, call_type_int);