San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 1 | #ifndef _SOCKET_CLIENT_H |
| 2 | #define _SOCKET_CLIENT_H |
| 3 | |
| 4 | #include "../../../frameworks/base/include/utils/List.h" |
| 5 | |
| 6 | #include <pthread.h> |
Kenny Root | 30abb72 | 2010-09-14 14:26:12 -0700 | [diff] [blame] | 7 | #include <sys/types.h> |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 8 | |
| 9 | class SocketClient { |
| 10 | int mSocket; |
Xianzhu Wang | 4520246 | 2011-09-29 12:59:55 +0800 | [diff] [blame] | 11 | bool mSocketOwned; |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 12 | pthread_mutex_t mWriteMutex; |
| 13 | |
Kenny Root | 30abb72 | 2010-09-14 14:26:12 -0700 | [diff] [blame] | 14 | /* Peer process ID */ |
| 15 | pid_t mPid; |
| 16 | |
| 17 | /* Peer user ID */ |
| 18 | uid_t mUid; |
| 19 | |
| 20 | /* Peer group ID */ |
| 21 | gid_t mGid; |
| 22 | |
Brad Fitzpatrick | 648ebad | 2011-03-17 15:41:20 -0700 | [diff] [blame] | 23 | /* Reference count (starts at 1) */ |
| 24 | pthread_mutex_t mRefCountMutex; |
| 25 | int mRefCount; |
| 26 | |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 27 | public: |
Xianzhu Wang | 4520246 | 2011-09-29 12:59:55 +0800 | [diff] [blame] | 28 | SocketClient(int sock, bool owned); |
| 29 | virtual ~SocketClient(); |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 30 | |
| 31 | int getSocket() { return mSocket; } |
Kenny Root | 30abb72 | 2010-09-14 14:26:12 -0700 | [diff] [blame] | 32 | pid_t getPid() const { return mPid; } |
| 33 | uid_t getUid() const { return mUid; } |
| 34 | gid_t getGid() const { return mGid; } |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 35 | |
Brad Fitzpatrick | 8c5669f | 2010-10-27 10:23:16 -0700 | [diff] [blame] | 36 | // Send null-terminated C strings: |
San Mehat | db01754 | 2009-05-20 15:27:14 -0700 | [diff] [blame] | 37 | int sendMsg(int code, const char *msg, bool addErrno); |
Guang Zhu | a8185a6 | 2012-02-07 19:13:28 -0800 | [diff] [blame^] | 38 | int sendMsg(const char *msg); |
Brad Fitzpatrick | 8c5669f | 2010-10-27 10:23:16 -0700 | [diff] [blame] | 39 | |
Guang Zhu | a8185a6 | 2012-02-07 19:13:28 -0800 | [diff] [blame^] | 40 | // Sending binary data: |
Brad Fitzpatrick | 8c5669f | 2010-10-27 10:23:16 -0700 | [diff] [blame] | 41 | int sendData(const void *data, int len); |
Brad Fitzpatrick | 648ebad | 2011-03-17 15:41:20 -0700 | [diff] [blame] | 42 | |
| 43 | // Optional reference counting. Reference count starts at 1. If |
| 44 | // it's decremented to 0, it deletes itself. |
| 45 | // SocketListener creates a SocketClient (at refcount 1) and calls |
| 46 | // decRef() when it's done with the client. |
| 47 | void incRef(); |
Brad Fitzpatrick | 4be4e69 | 2011-03-17 17:14:46 -0700 | [diff] [blame] | 48 | bool decRef(); // returns true at 0 (but note: SocketClient already deleted) |
San Mehat | fa644ff | 2009-05-08 11:15:53 -0700 | [diff] [blame] | 49 | }; |
| 50 | |
| 51 | typedef android::List<SocketClient *> SocketClientCollection; |
| 52 | #endif |