SocketClient.h revision 4520246d3534c087f3e9253c34f99dd1e45b7bd7
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;
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);
38db017545796747115b8797f03e662b0f398a7c7bSan Mehat    int sendMsg(const char *msg);
398c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick
408c5669f9f9a228efebf4059fd4ceace5cece578bBrad Fitzpatrick    // 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
51fa644ffe944c01a9b00f8d7676d58394fabee285San Mehattypedef android::List<SocketClient *> SocketClientCollection;
52fa644ffe944c01a9b00f8d7676d58394fabee285San Mehat#endif
53