SocketListener.h revision db017545796747115b8797f03e662b0f398a7c7b
1168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat/* 2168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Copyright (C) 2008 The Android Open Source Project 3168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 4168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Licensed under the Apache License, Version 2.0 (the "License"); 5168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * you may not use this file except in compliance with the License. 6168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * You may obtain a copy of the License at 7168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 8168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * http://www.apache.org/licenses/LICENSE-2.0 9168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * 10168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * Unless required by applicable law or agreed to in writing, software 11168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * distributed under the License is distributed on an "AS IS" BASIS, 12168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * See the License for the specific language governing permissions and 14168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat * limitations under the License. 15168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat */ 16168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#ifndef _SOCKETLISTENER_H 17168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#define _SOCKETLISTENER_H 18168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 19fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <pthread.h> 20fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 21fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <sysutils/SocketClient.h> 22fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 23168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatclass SocketListener { 24fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int mSock; 25fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat const char *mSocketName; 26fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat SocketClientCollection *mClients; 27fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat pthread_mutex_t mClientsLock; 28fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat bool mListen; 29fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int mCtrlPipe[2]; 30fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat pthread_t mThread; 31168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 32168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatpublic: 33fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat SocketListener(const char *socketNames, bool listen); 34fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat SocketListener(int socketFd, bool listen); 35168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 36168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat virtual ~SocketListener() {} 37fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int startListener(); 38fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int stopListener(); 39fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 40db017545796747115b8797f03e662b0f398a7c7bSan Mehat void sendBroadcast(int code, const char *msg, bool addErrno); 41db017545796747115b8797f03e662b0f398a7c7bSan Mehat void sendBroadcast(const char *msg); 42168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat 43168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehatprotected: 44fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat virtual bool onDataAvailable(SocketClient *c) = 0; 45fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 46fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatprivate: 47fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat static void *threadStart(void *obj); 48fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat void runListener(); 49168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat}; 50168415b822cae1f8b54ef09c41c11a9b97b87f40San Mehat#endif 51