00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef PTLIB_INDIRECTCHANNEL_H
00035 #define PTLIB_INDIRECTCHANNEL_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <ptlib/channel.h>
00042 #include <ptlib/syncthrd.h>
00043
00049 class PIndirectChannel : public PChannel
00050 {
00051 PCLASSINFO(PIndirectChannel, PChannel);
00052
00053 public:
00060 PIndirectChannel();
00061
00063 ~PIndirectChannel();
00065
00066
00075 Comparison Compare(
00076 const PObject & obj
00077 ) const;
00079
00080
00090 virtual PString GetName() const;
00091
00098 virtual PBoolean Close();
00099
00107 virtual PBoolean IsOpen() const;
00108
00124 virtual PBoolean Read(
00125 void * buf,
00126 PINDEX len
00127 );
00128
00143 virtual PBoolean Write(
00144 const void * buf,
00145 PINDEX len
00146 );
00147
00156 virtual PBoolean Shutdown(
00157 ShutdownValue option
00158 );
00159
00167 virtual bool SetLocalEcho(
00168 bool localEcho
00169 );
00170
00171
00180 virtual PChannel * GetBaseReadChannel() const;
00181
00190 virtual PChannel * GetBaseWriteChannel() const;
00191
00197 virtual PString GetErrorText(
00198 ErrorGroup group = NumErrorGroups
00199 ) const;
00201
00211 PBoolean Open(
00212 PChannel & channel
00213 );
00214
00225 PBoolean Open(
00226 PChannel * channel,
00227 PBoolean autoDelete = true
00228 );
00229
00241 PBoolean Open(
00242 PChannel * readChannel,
00243 PChannel * writeChannel,
00244 PBoolean autoDeleteRead = true,
00245 PBoolean autoDeleteWrite = true
00246 );
00247
00253 PChannel * GetReadChannel() const;
00254
00260 bool SetReadChannel(
00261 PChannel * channel,
00262 bool autoDelete = true,
00263 bool closeExisting = false
00264 );
00265
00271 PChannel * GetWriteChannel() const;
00272
00278 PBoolean SetWriteChannel(
00279 PChannel * channel,
00280 bool autoDelete = true,
00281 bool closeExisting = false
00282 );
00284
00285
00286 protected:
00296 virtual PBoolean OnOpen();
00297
00298
00299
00301 PChannel * readChannel;
00302
00304 PBoolean readAutoDelete;
00305
00307 PChannel * writeChannel;
00308
00310 PBoolean writeAutoDelete;
00311
00313 PReadWriteMutex channelPointerMutex;
00314 };
00315
00316
00317 #endif // PTLIB_INDIRECTCHANNEL_H
00318
00319
00320