• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright 2005 The Android Open Source Project
3 //
4 // Create or attach to a named bi-directional channel on the local machine.
5 //
6 #ifndef __LIBS_LOCALBICHANNEL_H
7 #define __LIBS_LOCALBICHANNEL_H
8 
9 #ifdef HAVE_ANDROID_OS
10 #error DO NOT USE THIS FILE IN THE DEVICE BUILD
11 #endif
12 
13 #include <utils/Pipe.h>
14 
15 namespace android {
16 
17 /*
18  * This is essentially a wrapper class for UNIX-domain sockets.  The
19  * idea is to set one up with create() or attach to one with attach()
20  * and then extract the unidirectional read/write Pipes.  These can
21  * be used directly or stuffed into a MessageStream.
22  *
23  * The name for the pipe should be a short filename made up of alphanumeric
24  * characters.  Depending on the implementation, we may create a file in
25  * /tmp with the specified name, removing any existing copy.
26  */
27 class LocalBiChannel {
28 public:
29     LocalBiChannel(void);
30     ~LocalBiChannel(void);
31 
32     /* create the "listen" side */
33     bool create(const char* name);
34 
35     /*
36      * Listen for a connection.  When we get one, we create unidirectional
37      * read/write pipes and return them.
38      */
39     bool listen(Pipe** ppReadPipe, Pipe** ppWritePipe);
40 
41     /*
42      * Attach to a channel created by somebody else.  Returns pipes.
43      */
44     bool attach(const char* name, Pipe** ppReadPipe, Pipe** ppWritePipe);
45 
46 private:
47     char*       mFileName;
48     bool        mIsListener;
49     unsigned long mHandle;
50 };
51 
52 }; // namespace android
53 
54 #endif // __LIBS_LOCALBICHANNEL_H
55