1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 #ifndef _LOG4CXX_HELPERS_OBJECTOUTPUTSTREAM_H 19 #define _LOG4CXX_HELPERS_OBJECTOUTPUTSTREAM_H 20 21 #include <log4cxx/helpers/objectimpl.h> 22 #include <log4cxx/mdc.h> 23 #include <log4cxx/helpers/outputstream.h> 24 #include <log4cxx/helpers/charsetencoder.h> 25 26 namespace log4cxx 27 { 28 namespace helpers 29 { 30 /** 31 * Emulates java serialization. 32 */ 33 class LOG4CXX_EXPORT ObjectOutputStream : public ObjectImpl 34 { 35 public: 36 DECLARE_ABSTRACT_LOG4CXX_OBJECT(ObjectOutputStream) 37 BEGIN_LOG4CXX_CAST_MAP() 38 LOG4CXX_CAST_ENTRY(ObjectOutputStream) 39 END_LOG4CXX_CAST_MAP() 40 41 ObjectOutputStream(OutputStreamPtr os, Pool& p); 42 virtual ~ObjectOutputStream(); 43 44 void close(Pool& p); 45 void flush(Pool& p); 46 void reset(Pool& p); 47 48 void writeObject(const LogString&, Pool& p); 49 void writeUTFString(const std::string&, Pool& p); 50 void writeObject(const MDC::Map& mdc, Pool& p); 51 void writeInt(int val, Pool& p); 52 void writeLong(log4cxx_time_t val, Pool& p); 53 void writeProlog(const char* className, 54 int classDescIncrement, 55 char* bytes, 56 size_t len, 57 Pool& p); 58 void writeNull(Pool& p); 59 60 enum { STREAM_MAGIC = 0xACED }; 61 enum { STREAM_VERSION = 5 }; 62 enum 63 { 64 TC_NULL = 0x70, 65 TC_REFERENCE = 0x71, 66 TC_CLASSDESC = 0x72, 67 TC_OBJECT = 0x73, 68 TC_STRING = 0x74, 69 TC_ARRAY = 0x75, 70 TC_CLASS = 0x76, 71 TC_BLOCKDATA = 0x77, 72 TC_ENDBLOCKDATA = 0x78, 73 TC_RESET = 0x79 74 }; 75 enum 76 { 77 SC_WRITE_METHOD = 0x01, 78 SC_SERIALIZABLE = 0x02 79 }; 80 81 void writeByte(char val, Pool& p); 82 void writeBytes(const char* bytes, size_t len, Pool& p); 83 84 private: 85 ObjectOutputStream(const ObjectOutputStream&); 86 ObjectOutputStream& operator=(const ObjectOutputStream&); 87 88 OutputStreamPtr os; 89 log4cxx::helpers::CharsetEncoderPtr utf8Encoder; 90 const unsigned int objectHandleDefault; 91 unsigned int objectHandle; 92 typedef std::map<std::string, unsigned int> ClassDescriptionMap; 93 ClassDescriptionMap* classDescriptions; 94 }; 95 96 LOG4CXX_PTR_DEF(ObjectOutputStream); 97 } // namespace helpers 98 99 } //namespace log4cxx 100 101 #endif //_LOG4CXX_HELPERS_OUTPUTSTREAM_H 102 103