Remove unused sendmsg functionality 90/277490/1
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 7 Jul 2022 12:00:27 +0000 (14:00 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 7 Jul 2022 12:29:38 +0000 (14:29 +0200)
Kind of reverts 0798413641b7961a0132050aef6bd03270936625

Change-Id: I815e63a370528762f69b760340398e068b541b74

src/server/CMakeLists.txt
src/server/main/generic-socket-manager.cpp [deleted file]
src/server/main/include/generic-socket-manager.h
src/server/main/include/socket-manager.h
src/server/main/socket-manager.cpp
src/server/service/service.cpp

index 8e2f849d5d8a3068224d1a3bf858cbaea5ffbaf5..7b2350da76bedf6cedb8d79fa59de193ea1dbe0a 100644 (file)
@@ -45,7 +45,6 @@ INCLUDE_DIRECTORIES(
     )
 
 SET(SERVER_SOURCES
-    ${SERVER_PATH}/main/generic-socket-manager.cpp
     ${SERVER_PATH}/main/socket-manager.cpp
     ${SERVER_PATH}/main/server-main.cpp
     ${SERVER_PATH}/main/service-thread.cpp
diff --git a/src/server/main/generic-socket-manager.cpp b/src/server/main/generic-socket-manager.cpp
deleted file mode 100644 (file)
index cc46bb0..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2013-2020 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * This file is licensed under the terms of MIT License or the Apache License
- * Version 2.0 of your choice. See the LICENSE.MIT file for MIT license details.
- * See the LICENSE file or the notice below for Apache License Version 2.0
- * details.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/*
- * @file        generic-socket-manager.cpp
- * @author      Bartlomiej Grzelewski (b.grzelewski@samsung.com)
- * @version     1.0
- * @brief       Implementation of GenericSocketService and GenericSocketManager.
- */
-
-#include <sys/socket.h>
-#include <sys/types.h>
-
-#include <generic-socket-manager.h>
-
-namespace SecurityManager {
-
-class SendMsgData::Internal {
-public:
-    Internal(int resultCode, int fileDesc)
-      : m_resultCode(resultCode)
-      , m_fileDesc(fileDesc)
-    {
-        memset(&m_hdr, 0, sizeof(msghdr));
-        memset(m_cmsgbuf, 0, CMSG_SPACE(sizeof(int)));
-
-        m_iov.iov_base = &m_resultCode;
-        m_iov.iov_len = sizeof(m_resultCode);
-
-        m_hdr.msg_iov = &m_iov;
-        m_hdr.msg_iovlen = 1;
-
-        if (fileDesc != -1) {
-            m_hdr.msg_control = m_cmsgbuf;
-            m_hdr.msg_controllen = CMSG_SPACE(sizeof(int));
-
-            cmsghdr *m_cmsg = CMSG_FIRSTHDR(&m_hdr);
-            m_cmsg->cmsg_len = CMSG_LEN(sizeof(int));
-            m_cmsg->cmsg_level = SOL_SOCKET;
-            m_cmsg->cmsg_type = SCM_RIGHTS;
-
-            memmove(CMSG_DATA(m_cmsg), &m_fileDesc, sizeof(int));
-        }
-    }
-
-    msghdr* data() { return &m_hdr; }
-
-private:
-    msghdr m_hdr;
-    iovec m_iov;
-    unsigned char m_cmsgbuf[CMSG_SPACE(sizeof(int))];
-    int m_resultCode;
-    int m_fileDesc;
-};
-
-SendMsgData::SendMsgData()
-  : m_resultCode(0)
-  , m_fileDesc(-1)
-  , m_flags(0)
-  , m_pimpl(NULL)
-{}
-
-SendMsgData::SendMsgData(int resultCode, int fileDesc, int flags)
-  : m_resultCode(resultCode)
-  , m_fileDesc(fileDesc)
-  , m_flags(flags)
-  , m_pimpl(NULL)
-{}
-
-SendMsgData::SendMsgData(const SendMsgData &second)
-  : m_resultCode(second.m_resultCode)
-  , m_fileDesc(second.m_fileDesc)
-  , m_flags(second.m_flags)
-  , m_pimpl(NULL)
-{}
-
-SendMsgData::~SendMsgData() {
-    delete m_pimpl;
-}
-
-SendMsgData& SendMsgData::operator=(const SendMsgData &second) {
-    m_resultCode = second.m_resultCode;
-    m_fileDesc = second.m_fileDesc;
-    m_flags = second.m_flags;
-    delete m_pimpl;
-    m_pimpl = NULL;
-    return *this;
-}
-
-msghdr* SendMsgData::getMsghdr() {
-    if (!m_pimpl)
-        m_pimpl = new Internal(m_resultCode, m_fileDesc);
-    return m_pimpl->data();
-}
-
-int SendMsgData::flags() {
-    return m_flags;
-}
-
-} // namespace SecurityManager
-
index 7f7872c01715d0d17a0f0d8395caf4ad443ac77f..5934ae159e1558e983b999affd0e93db6e0a54e9 100644 (file)
 #include <credentials.h>
 #include <generic-event.h>
 
-extern "C" {
-struct msghdr;
-} // extern "C"
-
 namespace SecurityManager {
 
 typedef int InterfaceID;
@@ -63,19 +59,16 @@ struct GenericSocketService {
         ServiceDescription(const char *path,
             const char *smackLabel,
             InterfaceID interfaceID = 0,
-            bool useSendMsg = false,
             bool systemdOnly = false)
           : smackLabel(smackLabel)
           , interfaceID(interfaceID)
           , serviceHandlerPath(path)
-          , useSendMsg(useSendMsg)
           , systemdOnly(systemdOnly)
         {}
 
         SmackLabel smackLabel;                 // Smack label for socket
         InterfaceID interfaceID;               // All data from serviceHandlerPath will be marked with this interfaceHandler
         ServiceHandlerPath serviceHandlerPath; // Path to file
-        bool useSendMsg;
         bool systemdOnly;
     };
 
@@ -126,31 +119,11 @@ protected:
     GenericSocketManager *m_serviceManager;
 };
 
-class SendMsgData {
-public:
-    class Internal;
-
-    SendMsgData();
-    SendMsgData(int resultCode, int fileDesc, int flags = 0);
-    SendMsgData(const SendMsgData &second);
-    SendMsgData& operator=(const SendMsgData &second);
-    virtual ~SendMsgData();
-
-    msghdr* getMsghdr();
-    int flags();
-private:
-    int m_resultCode;
-    int m_fileDesc;
-    int m_flags;
-    Internal *m_pimpl;
-};
-
 struct GenericSocketManager {
     virtual void MainLoop() = 0;
     virtual void RegisterSocketService(GenericSocketService *ptr) = 0;
     virtual void Close(ConnectionID connectionID) = 0;
     virtual void Write(ConnectionID connectionID, const RawBuffer &rawBuffer) = 0;
-    virtual void Write(ConnectionID connectionID, const SendMsgData &sendMsgData) = 0;
     virtual ~GenericSocketManager(){}
 };
 
index 97792d3e57a99d90046edfd2f8de46bb9c09a129..69a33ecfa3190987cdb7eba89fc4c5a6db22e1bb 100644 (file)
@@ -55,7 +55,6 @@ public:
     virtual void RegisterSocketService(GenericSocketService *service);
     virtual void Close(ConnectionID connectionID);
     virtual void Write(ConnectionID connectionID, const RawBuffer &rawBuffer);
-    virtual void Write(ConnectionID connectionID, const SendMsgData &sendMsgData);
 
 protected:
     void CreateDomainSocket(
@@ -68,8 +67,6 @@ protected:
 
     void ReadyForRead(int sock);
     void ReadyForWrite(int sock);
-    void ReadyForWriteBuffer(int sock);
-    void ReadyForSendMsg(int sock);
     void ReadyForAccept(int sock);
     void ProcessQueue(void);
     void NotifyMe(void);
@@ -79,19 +76,16 @@ protected:
         bool isListen;
         bool isOpen;
         bool isTimeout;
-        bool useSendMsg;
         InterfaceID interfaceID;
         GenericSocketService *service;
         time_t timeout;
         RawBuffer rawBuffer;
-        std::queue<SendMsgData> sendMsgDataQueue;
         int counter;
 
         SocketDescription()
           : isListen(false)
           , isOpen(false)
           , isTimeout(false)
-          , useSendMsg(false)
           , interfaceID(-1)
           , service(NULL)
           , timeout(0)
@@ -108,11 +102,6 @@ protected:
         RawBuffer rawBuffer;
     };
 
-    struct WriteData {
-        ConnectionID connectionID;
-        SendMsgData sendMsgData;
-    };
-
     struct Timeout {
         time_t time;
         int sock;
@@ -128,7 +117,6 @@ protected:
     bool m_working;
     std::mutex m_eventQueueMutex;
     std::queue<WriteBuffer> m_writeBufferQueue;
-    std::queue<WriteData> m_writeDataQueue;
     std::queue<ConnectionID> m_closeQueue;
     int m_notifyMe[2];
     int m_counter;
index c08e796d9f632f3d6879a83d5aba263ffb3283bd..2bd4f3a7c4052446d51010e5e7e190f99e30a647 100644 (file)
@@ -224,7 +224,6 @@ void SocketManager::ReadyForAccept(int sock) {
     auto &desc = CreateDefaultReadSocketDescription(client, true);
     desc.interfaceID = m_socketDescriptionVector[sock].interfaceID;
     desc.service = m_socketDescriptionVector[sock].service;
-    desc.useSendMsg = m_socketDescriptionVector[sock].useSendMsg;
 
     GenericSocketService::AcceptEvent event(
         ConnectionID{client, desc.counter},
@@ -268,50 +267,7 @@ void SocketManager::ReadyForRead(int sock) {
     }
 }
 
-void SocketManager::ReadyForSendMsg(int sock) {
-    auto &desc = m_socketDescriptionVector[sock];
-
-    if (desc.sendMsgDataQueue.empty()) {
-         FD_CLR(sock, &m_writeSet);
-         return;
-    }
-
-    auto data = desc.sendMsgDataQueue.front();
-    ssize_t result = sendmsg(sock, data.getMsghdr(), data.flags());
-
-    if (result == -1) {
-        int err = errno;
-        switch (err) {
-        case EAGAIN:
-        case EINTR:
-            break;
-        case EPIPE:
-        default:
-            LogError("Error during send: " << GetErrnoString(err));
-            CloseSocket(sock);
-            break;
-        }
-        return;
-    } else {
-        desc.sendMsgDataQueue.pop();
-    }
-
-    if (desc.sendMsgDataQueue.empty()) {
-        FD_CLR(sock, &m_writeSet);
-    }
-
-    desc.timeout = monotonicNow() + SOCKET_TIMEOUT;
-
-    GenericSocketService::WriteEvent event;
-    event.connectionID.sock = sock;
-    event.connectionID.counter = desc.counter;
-    event.size = result;
-    event.left = desc.sendMsgDataQueue.size();
-
-    desc.service->Event(std::move(event));
-}
-
-void SocketManager::ReadyForWriteBuffer(int sock) {
+void SocketManager::ReadyForWrite(int sock) {
     auto &desc = m_socketDescriptionVector[sock];
     size_t size = desc.rawBuffer.size();
     ssize_t result = write(sock, &desc.rawBuffer[0], size);
@@ -347,11 +303,6 @@ void SocketManager::ReadyForWriteBuffer(int sock) {
     desc.service->Event(std::move(event));
 }
 
-void SocketManager::ReadyForWrite(int sock) {
-    m_socketDescriptionVector[sock].useSendMsg ?
-        ReadyForSendMsg(sock) : ReadyForWriteBuffer(sock);
-}
-
 void SocketManager::MainLoop() {
     // remove evironment values passed by systemd
     sd_listen_fds(1);
@@ -584,7 +535,6 @@ void SocketManager::CreateDomainSocket(
 
     description.isListen = true;
     description.interfaceID = desc.interfaceID;
-    description.useSendMsg = desc.useSendMsg;
     description.service = service;
 
     LogDebug("Listen on socket: " << sockfd <<
@@ -629,24 +579,12 @@ void SocketManager::Write(ConnectionID connectionID, const RawBuffer &rawBuffer)
     NotifyMe();
 }
 
-void SocketManager::Write(ConnectionID connectionID, const SendMsgData &sendMsgData) {
-    WriteData data;
-    data.connectionID = connectionID;
-    data.sendMsgData = sendMsgData;
-    {
-        std::lock_guard<std::mutex> ulock(m_eventQueueMutex);
-        m_writeDataQueue.push(data);
-    }
-    NotifyMe();
-}
-
 void SocketManager::NotifyMe() {
     TEMP_FAILURE_RETRY(write(m_notifyMe[1], "You have message ;-)", 1));
 }
 
 void SocketManager::ProcessQueue() {
     WriteBuffer buffer;
-    WriteData data;
     {
         std::lock_guard<std::mutex> ulock(m_eventQueueMutex);
         while (!m_writeBufferQueue.empty()) {
@@ -668,12 +606,6 @@ void SocketManager::ProcessQueue() {
                 continue;
             }
 
-            if (desc.useSendMsg) {
-                LogError("Some service tried to push rawdata to socket that usees sendmsg! Socket: "
-                         << buffer.connectionID.sock);
-                continue;
-            }
-
             std::copy(
                 buffer.rawBuffer.begin(),
                 buffer.rawBuffer.end(),
@@ -681,36 +613,6 @@ void SocketManager::ProcessQueue() {
 
             FD_SET(buffer.connectionID.sock, &m_writeSet);
         }
-
-        while (!m_writeDataQueue.empty()) {
-            data = m_writeDataQueue.front();
-            m_writeDataQueue.pop();
-
-            auto &desc = m_socketDescriptionVector[data.connectionID.sock];
-
-            if (!desc.isOpen) {
-                LogDebug("Received packet for sendmsg but connection is closed. Packet ignored! Socket: "
-                          << data.connectionID.sock);
-                continue;
-            }
-
-            if (desc.counter != data.connectionID.counter)
-            {
-                LogDebug("Received packet for write but counter is broken. Packet ignored! Socket: "
-                          << data.connectionID.sock);
-                continue;
-            }
-
-            if (!desc.useSendMsg) {
-                LogError("Some service tries to push SendMsgData to socket that uses write! Socket: "
-                          << data.connectionID.sock);
-                continue;
-            }
-
-            desc.sendMsgDataQueue.push(data.sendMsgData);
-
-            FD_SET(data.connectionID.sock, &m_writeSet);
-        }
     }
 
     while (1) {
@@ -753,8 +655,6 @@ void SocketManager::CloseSocket(int sock) {
     desc.service = NULL;
     desc.interfaceID = -1;
     desc.rawBuffer.clear();
-    while (!desc.sendMsgDataQueue.empty())
-        desc.sendMsgDataQueue.pop();
 
     if (service)
         service->Event(std::move(event));
index 5e2088c3e8edf0e2421bbf047613d8ac7fe656c2..0457627c1a43e509631adcb33e3fec6500f9a26c 100644 (file)
@@ -51,7 +51,6 @@ GenericSocketService::ServiceDescriptionVector Service::GetServiceDescription()
         {SERVICE_SOCKET,  /* path */
         "*",   /* smackLabel label (not used, we rely on systemd) */
         IFACE, /* InterfaceID */
-        false, /* useSendMsg */
         false}, /* systemdOnly */
     };
 }