• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _SOCKET_CLIENT_H
2 #define _SOCKET_CLIENT_H
3 
4 #include "../../../frameworks/base/include/utils/List.h"
5 
6 #include <pthread.h>
7 #include <sys/types.h>
8 
9 class SocketClient {
10     int             mSocket;
11     bool            mSocketOwned;
12     pthread_mutex_t mWriteMutex;
13 
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 
23     /* Reference count (starts at 1) */
24     pthread_mutex_t mRefCountMutex;
25     int mRefCount;
26 
27 public:
28     SocketClient(int sock, bool owned);
29     virtual ~SocketClient();
30 
getSocket()31     int getSocket() { return mSocket; }
getPid()32     pid_t getPid() const { return mPid; }
getUid()33     uid_t getUid() const { return mUid; }
getGid()34     gid_t getGid() const { return mGid; }
35 
36     // Send null-terminated C strings:
37     int sendMsg(int code, const char *msg, bool addErrno);
38     int sendMsg(const char *msg);
39 
40     // Sending binary data:
41     int sendData(const void *data, int len);
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();
48     bool decRef(); // returns true at 0 (but note: SocketClient already deleted)
49 };
50 
51 typedef android::List<SocketClient *> SocketClientCollection;
52 #endif
53