1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _TOOLS_INETSTRM_HXX 24 #define _TOOLS_INETSTRM_HXX 25 26 #include "tools/toolsdllapi.h" 27 #include <sal/types.h> 28 #include <tools/string.hxx> 29 30 class INetMessage; 31 class INetMIMEMessage; 32 class INetHTTPMessage; 33 class SvMemoryStream; 34 class SvStream; 35 36 /*========================================================================= 37 * 38 * INetStream Interface. 39 * 40 *=======================================================================*/ 41 enum INetStreamStatus 42 { 43 INETSTREAM_STATUS_LOADED = -4, 44 INETSTREAM_STATUS_WOULDBLOCK = -3, 45 INETSTREAM_STATUS_OK = -2, 46 INETSTREAM_STATUS_ERROR = -1 47 }; 48 49 /* 50 * INetIStream. 51 */ 52 class TOOLS_DLLPUBLIC INetIStream 53 { 54 // Not implemented. 55 INetIStream (const INetIStream& rStrm); 56 INetIStream& operator= (const INetIStream& rStrm); 57 58 protected: 59 virtual int GetData (sal_Char *pData, sal_uIntPtr nSize) = 0; 60 61 public: 62 INetIStream (); 63 virtual ~INetIStream (void); 64 65 int Read (sal_Char *pData, sal_uIntPtr nSize); 66 67 static void Decode64 (SvStream& rIn, SvStream& rOut); 68 static void Encode64 (SvStream& rIn, SvStream& rOut); 69 }; 70 71 /* 72 * INetOStream. 73 */ 74 class INetOStream 75 { 76 // Not implemented. 77 INetOStream (const INetOStream& rStrm); 78 INetOStream& operator= (const INetOStream& rStrm); 79 80 protected: 81 virtual int PutData ( 82 const sal_Char *pData, sal_uIntPtr nSize) = 0; 83 84 public: 85 INetOStream (); 86 virtual ~INetOStream (void); 87 88 int Write (const sal_Char *pData, sal_uIntPtr nSize); 89 }; 90 91 /* 92 * INetIOStream. 93 */ 94 class INetIOStream : public INetIStream, public INetOStream 95 { 96 // Not implemented. 97 INetIOStream (const INetIOStream& rStrm); 98 INetIOStream& operator= (const INetIOStream& rStrm); 99 100 public: 101 INetIOStream (sal_uIntPtr nIBufferSize = 0, sal_uIntPtr nOBufferSize = 0); 102 virtual ~INetIOStream (void); 103 }; 104 105 /*========================================================================= 106 * 107 * INetMessageStream Interface. 108 * 109 *=======================================================================*/ 110 enum INetMessageStreamState 111 { 112 INETMSG_EOL_BEGIN, 113 INETMSG_EOL_DONE, 114 INETMSG_EOL_SCR, 115 INETMSG_EOL_FCR, 116 INETMSG_EOL_FLF, 117 INETMSG_EOL_FSP, 118 INETMSG_EOL_FESC 119 }; 120 121 /* 122 * INetMessageIStream (Message Generator) Interface. 123 */ 124 class INetMessageIStream : public INetIStream 125 { 126 INetMessage *pSourceMsg; 127 sal_Bool bHeaderGenerated; 128 129 sal_uIntPtr nBufSiz; 130 sal_Char *pBuffer; 131 sal_Char *pRead; 132 sal_Char *pWrite; 133 134 SvStream *pMsgStrm; 135 SvMemoryStream *pMsgBuffer; 136 sal_Char *pMsgRead; 137 sal_Char *pMsgWrite; 138 139 virtual int GetData (sal_Char *pData, sal_uIntPtr nSize); 140 141 // Not implemented. 142 INetMessageIStream (const INetMessageIStream& rStrm); 143 INetMessageIStream& operator= (const INetMessageIStream& rStrm); 144 145 protected: 146 virtual int GetMsgLine (sal_Char *pData, sal_uIntPtr nSize); 147 148 public: 149 INetMessageIStream (sal_uIntPtr nBufferSize = 2048); 150 virtual ~INetMessageIStream (void); 151 GetSourceMessage(void) const152 INetMessage *GetSourceMessage (void) const { return pSourceMsg; } SetSourceMessage(INetMessage * pMsg)153 void SetSourceMessage (INetMessage *pMsg) { pSourceMsg = pMsg; } 154 GenerateHeader(sal_Bool bGen=sal_True)155 void GenerateHeader (sal_Bool bGen = sal_True) { bHeaderGenerated = !bGen; } IsHeaderGenerated(void) const156 sal_Bool IsHeaderGenerated (void) const { return bHeaderGenerated; } 157 }; 158 159 /* 160 * INetMessageOStream (Message Parser) Interface. 161 */ 162 class INetMessageOStream : public INetOStream 163 { 164 INetMessage *pTargetMsg; 165 sal_Bool bHeaderParsed; 166 167 INetMessageStreamState eOState; 168 169 SvMemoryStream *pMsgBuffer; 170 171 virtual int PutData (const sal_Char *pData, sal_uIntPtr nSize); 172 173 // Not implemented. 174 INetMessageOStream (const INetMessageOStream& rStrm); 175 INetMessageOStream& operator= (const INetMessageOStream& rStrm); 176 177 protected: 178 virtual int PutMsgLine (const sal_Char *pData, sal_uIntPtr nSize); 179 180 public: 181 INetMessageOStream (void); 182 virtual ~INetMessageOStream (void); 183 GetTargetMessage(void) const184 INetMessage *GetTargetMessage (void) const { return pTargetMsg; } SetTargetMessage(INetMessage * pMsg)185 void SetTargetMessage (INetMessage *pMsg) { pTargetMsg = pMsg; } 186 ParseHeader(sal_Bool bParse=sal_True)187 void ParseHeader (sal_Bool bParse = sal_True) { bHeaderParsed = !bParse; } IsHeaderParsed(void) const188 sal_Bool IsHeaderParsed (void) const { return bHeaderParsed; } 189 }; 190 191 /* 192 * INetMessageIOStream Interface. 193 */ 194 class INetMessageIOStream 195 : public INetMessageIStream, 196 public INetMessageOStream 197 { 198 // Not implemented. 199 INetMessageIOStream (const INetMessageIOStream& rStrm); 200 INetMessageIOStream& operator= (const INetMessageIOStream& rStrm); 201 202 public: 203 INetMessageIOStream (sal_uIntPtr nBufferSize = 2048); 204 virtual ~INetMessageIOStream (void); 205 }; 206 207 /*========================================================================= 208 * 209 * INetMIMEMessageStream Interface. 210 * 211 *=======================================================================*/ 212 enum INetMessageEncoding 213 { 214 INETMSG_ENCODING_7BIT, 215 INETMSG_ENCODING_8BIT, 216 INETMSG_ENCODING_BINARY, 217 INETMSG_ENCODING_QUOTED, 218 INETMSG_ENCODING_BASE64 219 }; 220 221 class TOOLS_DLLPUBLIC INetMIMEMessageStream : public INetMessageIOStream 222 { 223 int eState; 224 225 sal_uIntPtr nChildIndex; 226 INetMIMEMessageStream *pChildStrm; 227 228 INetMessageEncoding eEncoding; 229 INetMessageIStream *pEncodeStrm; 230 INetMessageOStream *pDecodeStrm; 231 232 SvMemoryStream *pMsgBuffer; 233 234 static INetMessageEncoding GetMsgEncoding ( 235 const String& rContentType); 236 237 // Not implemented. 238 INetMIMEMessageStream (const INetMIMEMessageStream& rStrm); 239 INetMIMEMessageStream& operator= (const INetMIMEMessageStream& rStrm); 240 241 protected: 242 virtual int GetMsgLine (sal_Char *pData, sal_uIntPtr nSize); 243 virtual int PutMsgLine (const sal_Char *pData, sal_uIntPtr nSize); 244 245 public: 246 INetMIMEMessageStream (sal_uIntPtr nBufferSize = 2048); 247 virtual ~INetMIMEMessageStream (void); 248 249 using INetMessageIStream::SetSourceMessage; SetSourceMessage(INetMIMEMessage * pMsg)250 void SetSourceMessage (INetMIMEMessage *pMsg) 251 { 252 INetMessageIStream::SetSourceMessage ((INetMessage *)pMsg); 253 } GetSourceMessage(void) const254 INetMIMEMessage *GetSourceMessage (void) const 255 { 256 return ((INetMIMEMessage *)INetMessageIStream::GetSourceMessage()); 257 } 258 259 using INetMessageOStream::SetTargetMessage; SetTargetMessage(INetMIMEMessage * pMsg)260 void SetTargetMessage (INetMIMEMessage *pMsg) 261 { 262 INetMessageOStream::SetTargetMessage ((INetMessage *)pMsg); 263 } GetTargetMessage(void) const264 INetMIMEMessage *GetTargetMessage (void) const 265 { 266 return ((INetMIMEMessage *)INetMessageOStream::GetTargetMessage()); 267 } 268 }; 269 270 #endif /* !_TOOLS_INETSTRM_HXX */ 271 272