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