SocketClient.h revision b7286aa02e1e554a1ef21a957fabe593f05c1260
1fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#ifndef _SOCKET_CLIENT_H 2fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#define _SOCKET_CLIENT_H 3fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 4b7286aa02e1e554a1ef21a957fabe593f05c1260Mathias Agopian#include "List.h" 5fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 6fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <pthread.h> 730abb7234de2a9caa1add4b00a189436f0b24560Kenny Root#include <sys/types.h> 8fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 9fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatclass SocketClient { 10fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int mSocket; 114520246d3534c087f3e9253c34f99dd1e45b7bd7Xianzhu Wang bool mSocketOwned; 12fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat pthread_mutex_t mWriteMutex; 13fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 1430abb7234de2a9caa1add4b00a189436f0b24560Kenny Root /* Peer process ID */ 1530abb7234de2a9caa1add4b00a189436f0b24560Kenny Root pid_t mPid; 1630abb7234de2a9caa1add4b00a189436f0b24560Kenny Root 1730abb7234de2a9caa1add4b00a189436f0b24560Kenny Root /* Peer user ID */ 1830abb7234de2a9caa1add4b00a189436f0b24560Kenny Root uid_t mUid; 1930abb7234de2a9caa1add4b00a189436f0b24560Kenny Root 2030abb7234de2a9caa1add4b00a189436f0b24560Kenny Root /* Peer group ID */ 2130abb7234de2a9caa1add4b00a189436f0b24560Kenny Root gid_t mGid; 2230abb7234de2a9caa1add4b00a189436f0b24560Kenny Root 23648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick /* Reference count (starts at 1) */ 24648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick pthread_mutex_t mRefCountMutex; 25648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick int mRefCount; 26648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick 27fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatpublic: 284520246d3534c087f3e9253c34f99dd1e45b7bd7Xianzhu Wang SocketClient(int sock, bool owned); 294520246d3534c087f3e9253c34f99dd1e45b7bd7Xianzhu Wang virtual ~SocketClient(); 30fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 31fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int getSocket() { return mSocket; } 3230abb7234de2a9caa1add4b00a189436f0b24560Kenny Root pid_t getPid() const { return mPid; } 3330abb7234de2a9caa1add4b00a189436f0b24560Kenny Root uid_t getUid() const { return mUid; } 3430abb7234de2a9caa1add4b00a189436f0b24560Kenny Root gid_t getGid() const { return mGid; } 35fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 368c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick // Send null-terminated C strings: 37db017545796747115b8797f03e662b0f398a7c7bSan Mehat int sendMsg(int code, const char *msg, bool addErrno); 38a8185a622e368d1957e18a3ee9d29d45eda12cfcGuang Zhu int sendMsg(const char *msg); 398c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick 40a8185a622e368d1957e18a3ee9d29d45eda12cfcGuang Zhu // Sending binary data: 418c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick int sendData(const void *data, int len); 42648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick 43648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // Optional reference counting. Reference count starts at 1. If 44648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // it's decremented to 0, it deletes itself. 45648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // SocketListener creates a SocketClient (at refcount 1) and calls 46648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // decRef() when it's done with the client. 47648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick void incRef(); 484be4e69f0128b7d9b0a29651ef4b79d806ae3ce7Brad Fitzpatrick bool decRef(); // returns true at 0 (but note: SocketClient already deleted) 49fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}; 50fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 51b7286aa02e1e554a1ef21a957fabe593f05c1260Mathias Agopiantypedef android::sysutils::List<SocketClient *> SocketClientCollection; 52fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#endif 53