1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set sw=2 ts=2 et ft=cpp: tw=80: */ 3 4 /* This Source Code Form is subject to the terms of the Mozilla Public 5 * License, v. 2.0. If a copy of the MPL was not distributed with this 6 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 7 8 #ifndef mozilla_ipc_KeyStoreConnector_h 9 #define mozilla_ipc_KeyStoreConnector_h 10 11 #include "mozilla/ipc/UnixSocketConnector.h" 12 13 namespace mozilla { 14 namespace ipc { 15 16 class KeyStoreConnector final : public UnixSocketConnector 17 { 18 public: 19 KeyStoreConnector(const char** const aAllowedUsers); 20 ~KeyStoreConnector(); 21 22 // Methods for |UnixSocketConnector| 23 // 24 25 nsresult ConvertAddressToString(const struct sockaddr& aAddress, 26 socklen_t aAddressLength, 27 nsACString& aAddressString) override; 28 29 nsresult CreateListenSocket(struct sockaddr* aAddress, 30 socklen_t* aAddressLength, 31 int& aListenFd) override; 32 33 nsresult AcceptStreamSocket(int aListenFd, 34 struct sockaddr* aAddress, 35 socklen_t* aAddressLength, 36 int& aStreamFd) override; 37 38 nsresult CreateStreamSocket(struct sockaddr* aAddress, 39 socklen_t* aAddressLength, 40 int& aStreamFd) override; 41 42 nsresult Duplicate(UnixSocketConnector*& aConnector) override; 43 44 private: 45 nsresult CreateSocket(int& aFd) const; 46 nsresult SetSocketFlags(int aFd) const; 47 nsresult CheckPermission(int aFd) const; 48 nsresult CreateAddress(struct sockaddr& aAddress, 49 socklen_t& aAddressLength) const; 50 51 const char** const mAllowedUsers; 52 }; 53 54 } 55 } 56 57 #endif 58