1 karl 1.4 //%2005////////////////////////////////////////////////////////////////////////
|
2 kumpf 1.1 //
|
3 karl 1.2 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
|
6 kumpf 1.1 // IBM Corp.; EMC Corporation, The Open Group.
|
7 karl 1.2 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
|
9 karl 1.4 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 kumpf 1.1 //
12 // Permission is hereby granted, free of charge, to any person obtaining a copy
13 // of this software and associated documentation files (the "Software"), to
14 // deal in the Software without restriction, including without limitation the
15 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16 // sell copies of the Software, and to permit persons to whom the Software is
17 // furnished to do so, subject to the following conditions:
18 //
19 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
20 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
21 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
22 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
23 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
25 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28 //==============================================================================
29 //
30 // Author: Carol Ann Krug Graves, Hewlett-Packard Company
31 // (carolann_graves@hp.com)
32 kumpf 1.1 //
|
33 david.dillard 1.3 // Modified By: David Dillard, VERITAS Software Corp.
34 // (david.dillard@veritas.com)
|
35 kumpf 1.1 //
36 //%/////////////////////////////////////////////////////////////////////////////
37
38 #ifndef Pegasus_AnonymousPipe_h
39 #define Pegasus_AnonymousPipe_h
40
41 #include <Pegasus/Common/Config.h>
42 #include <Pegasus/Common/Linkage.h>
43 #include <Pegasus/Common/String.h>
44 #include <Pegasus/Common/CIMMessage.h>
45
46
47 PEGASUS_NAMESPACE_BEGIN
48
49 /**
50 The AnonymousPipe class implements an anonymous pipe.
51
52 @author Hewlett-Packard Company
53
54 */
55 class PEGASUS_COMMON_LINKAGE AnonymousPipe
56 kumpf 1.1 {
57 public:
58 /**
59 Constructs an AnonymousPipe instance.
60
|
61 carolann.graves 1.5 @exception Exception (Failed to create pipe)
|
62 kumpf 1.1 */
63 AnonymousPipe ();
64
65 /**
66 Constructs an AnonymousPipe instance, given the read and/or write handle
67 in char form.
68
69 NOTE: before using this form of the constructor, the pipe must already
70 exist (a previous invocation of the AnonymousPipe () form of the
71 constructor), and the specified handle(s) should be open for the
72 specified operation (read or write). The read or write handle
73 should be obtained via a call to exportReadHandle () or
74 exportWriteHandle (), respectively.
75
76 @param readHandle char [] representation of the read handle to
77 the pipe
78 @param writeHandle char [] representation of the write handle to
79 the pipe
80
|
81 carolann.graves 1.5 @exception Exception (Failed to create pipe)
|
82 kumpf 1.1 */
83 AnonymousPipe (
84 const char * readHandle,
85 const char * writeHandle);
86
87 /**
88 Destructs the AnonymousPipe instance.
89
90 Closes the open pipe handles.
91 */
92 ~AnonymousPipe ();
93
94 /**
95 Defines symbolic constants for return values from read and write
96 methods.
97 */
98 enum Status {STATUS_INTERRUPT = -2,
99 STATUS_ERROR = -1,
100 STATUS_CLOSED = 0,
101 STATUS_SUCCESS = 1};
102
103 kumpf 1.1 /**
104 Writes data from a buffer to the AnonymousPipe.
105
106 @param buffer pointer to the input data buffer
107 @param bytesToWrite Number of bytes to write
108
109 @return STATUS_SUCCESS on success;
110 STATUS_CLOSED on closed connection;
111 STATUS_ERROR on error;
112 */
113 Status writeBuffer (
|
114 david.dillard 1.3 const void * buffer,
|
115 kumpf 1.1 Uint32 bytesToWrite);
116
117 /**
118 Writes a CIM message to the AnonymousPipe.
119
120 The message is serialized, then written to the pipe.
121
122 @param message pointer to the message
123
124 @return STATUS_SUCCESS on success;
125 STATUS_CLOSED on closed connection;
126 STATUS_ERROR on error;
127 */
128 Status writeMessage (
129 CIMMessage * message);
130
131 /**
132 Reads data into a buffer from the AnonymousPipe.
133
134 @param buffer pointer to the output data buffer
135 @param bytesToRead Number of bytes to read
136 kumpf 1.1
137 @return STATUS_SUCCESS on success;
138 STATUS_CLOSED on closed connection;
139 STATUS_ERROR on error;
140 STATUS_INTERRUPT on interrupt
141 */
142 Status readBuffer (
|
143 david.dillard 1.3 void * buffer,
|
144 kumpf 1.1 Uint32 bytesToRead);
145
146 /**
147 Reads a CIM message from the AnonymousPipe.
148
149 A message is read from the pipe, then de-serialized.
150
151 @param message pointer to the message (output parameter)
152
153 @return STATUS_SUCCESS on success;
154 STATUS_CLOSED on closed connection;
155 STATUS_ERROR on error;
156 STATUS_INTERRUPT on interrupt
157 */
158 Status readMessage (
159 CIMMessage * & message);
160
161 /**
162 Gets a char [] form of the pipe handle for reading from the
163 AnonymousPipe instance.
164
165 kumpf 1.1 NOTE: the caller must supply the buffer. The buffer size must be at
166 least 32.
167 */
168 void exportReadHandle (
169 char * buffer) const;
170
171 /**
172 Gets a char [] form of the pipe handle for writing to the
173 AnonymousPipe instance.
174
175 NOTE: the caller must supply the buffer. The buffer size must be at
176 least 32.
177 */
178 void exportWriteHandle (
179 char * buffer) const;
180
181 /**
182 Closes the pipe handle for reading from the AnonymousPipe instance.
183 */
184 void closeReadHandle ();
185
186 kumpf 1.1 /**
187 Closes the pipe handle for writing to the AnonymousPipe instance.
188 */
189 void closeWriteHandle ();
190
191 private:
192
193 /**
194 Private, unimplemented copy constructor to avoid implicit use of
195 the default copy constructor
196 */
197 AnonymousPipe (const AnonymousPipe & anonymousPipe) {}
198
199 /**
200 Private, unimplemented assignment operator to avoid implicit use of
201 the default assignment operator
202 */
203 AnonymousPipe & operator= (const AnonymousPipe & anonymousPipe)
204 {return *this;}
205
206 #if defined (PEGASUS_OS_TYPE_WINDOWS)
207 kumpf 1.1 typedef HANDLE AnonymousPipeHandle;
208 #else
209 typedef int AnonymousPipeHandle;
210 #endif
211
212 /**
213 Stores the read pipe handle.
214 */
215 AnonymousPipeHandle _readHandle;
216
217 /**
218 Stores the write pipe handle.
219 */
220 AnonymousPipeHandle _writeHandle;
221
222 /**
223 Indicates whether the read handle is open.
224 */
225 Boolean _readOpen;
226
227 /**
228 kumpf 1.1 Indicates whether the write handle is open.
229 */
230 Boolean _writeOpen;
231 };
232
233 PEGASUS_NAMESPACE_END
234
235 #endif /* Pegasus_AnonymousPipe_h */
|