128d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber/* 228d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * Copyright (C) 2017 The Android Open Source Project 328d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * 428d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 528d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * you may not use this file except in compliance with the License. 628d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * You may obtain a copy of the License at 728d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * 828d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 928d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * 1028d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * Unless required by applicable law or agreed to in writing, software 1128d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 1228d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1328d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * See the License for the specific language governing permissions and 1428d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * limitations under the License. 1528d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber */ 1628d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 1728d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#ifndef FRAMEWORKS_NATIVE_CMDS_LSHAL_PIPE_RELAY_H_ 1828d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 1928d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#define FRAMEWORKS_NATIVE_CMDS_LSHAL_PIPE_RELAY_H_ 2028d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 2128d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#include <android-base/macros.h> 2228d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#include <ostream> 2328d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#include <utils/Errors.h> 2428d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#include <utils/RefBase.h> 2528d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 2628d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Hubernamespace android { 2728d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Hubernamespace lshal { 2828d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 2928d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber/* Creates an AF_UNIX socketpair and spawns a thread that relays any data 3028d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber * written to the "write"-end of the pair to the specified output stream "os". 3128d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber */ 3228d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huberstruct PipeRelay { 3328d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber explicit PipeRelay(std::ostream &os); 3428d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber ~PipeRelay(); 3528d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 3628d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber status_t initCheck() const; 3728d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 3828d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber // Returns the file descriptor corresponding to the "write"-end of the 3928d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber // connection. 4028d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber int fd() const; 4128d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 4228d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huberprivate: 4328d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber struct RelayThread; 4428d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 4528d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber std::ostream &mOutStream; 4628d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber status_t mInitCheck; 4728d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber int mFds[2]; 4828d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber sp<RelayThread> mThread; 4928d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 5028d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber static void CloseFd(int *fd); 5128d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 5228d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber DISALLOW_COPY_AND_ASSIGN(PipeRelay); 5328d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber}; 5428d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 5528d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber} // namespace lshal 5628d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber} // namespace android 5728d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 5828d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber#endif // FRAMEWORKS_NATIVE_CMDS_LSHAL_PIPE_RELAY_H_ 5928d35913d5324dd520d80d9b6afdd0698afa8fd4Andreas Huber 60