SocketClient.h revision 4be4e69f0128b7d9b0a29651ef4b79d806ae3ce7
1fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#ifndef _SOCKET_CLIENT_H 2fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#define _SOCKET_CLIENT_H 3fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 4fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include "../../../frameworks/base/include/utils/List.h" 5fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 6fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#include <pthread.h> 730abb7234de2a9caa1add4b00a189436f0b24560Kenny Root#include <sys/types.h> 8fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 9fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatclass SocketClient { 10fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int mSocket; 11fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat pthread_mutex_t mWriteMutex; 12fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 1330abb7234de2a9caa1add4b00a189436f0b24560Kenny Root /* Peer process ID */ 1430abb7234de2a9caa1add4b00a189436f0b24560Kenny Root pid_t mPid; 1530abb7234de2a9caa1add4b00a189436f0b24560Kenny Root 1630abb7234de2a9caa1add4b00a189436f0b24560Kenny Root /* Peer user ID */ 1730abb7234de2a9caa1add4b00a189436f0b24560Kenny Root uid_t mUid; 1830abb7234de2a9caa1add4b00a189436f0b24560Kenny Root 1930abb7234de2a9caa1add4b00a189436f0b24560Kenny Root /* Peer group ID */ 2030abb7234de2a9caa1add4b00a189436f0b24560Kenny Root gid_t mGid; 2130abb7234de2a9caa1add4b00a189436f0b24560Kenny Root 22648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick /* Reference count (starts at 1) */ 23648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick pthread_mutex_t mRefCountMutex; 24648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick int mRefCount; 25648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick 26fa644ffe944c01a9b00f8d7676d58394fabee285San Mehatpublic: 27fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat SocketClient(int sock); 28fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat virtual ~SocketClient() {} 29fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 30fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat int getSocket() { return mSocket; } 3130abb7234de2a9caa1add4b00a189436f0b24560Kenny Root pid_t getPid() const { return mPid; } 3230abb7234de2a9caa1add4b00a189436f0b24560Kenny Root uid_t getUid() const { return mUid; } 3330abb7234de2a9caa1add4b00a189436f0b24560Kenny Root gid_t getGid() const { return mGid; } 34fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 358c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick // Send null-terminated C strings: 36db017545796747115b8797f03e662b0f398a7c7bSan Mehat int sendMsg(int code, const char *msg, bool addErrno); 37db017545796747115b8797f03e662b0f398a7c7bSan Mehat int sendMsg(const char *msg); 388c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick 398c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick // Sending binary data: 408c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick int sendData(const void *data, int len); 41648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick 42648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // Optional reference counting. Reference count starts at 1. If 43648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // it's decremented to 0, it deletes itself. 44648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // SocketListener creates a SocketClient (at refcount 1) and calls 45648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick // decRef() when it's done with the client. 46648ebad883e7825353c841950dd7d78664c238e6Brad Fitzpatrick void incRef(); 474be4e69f0128b7d9b0a29651ef4b79d806ae3ce7Brad Fitzpatrick bool decRef(); // returns true at 0 (but note: SocketClient already deleted) 48fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat}; 49fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat 50fa644ffe944c01a9b00f8d7676d58394fabee285San Mehattypedef android::List<SocketClient *> SocketClientCollection; 51fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#endif 52