brettwiesner wrote on Wednesday, October 01, 2008 3:27 PM: > Hey Robert, > > I'm confused about what you mean here. Many plugins have read/ write > methods that take istreams/ ostreams (ReaderWriterIVE being one of > them). However, since I can't subclass them I can't attach to the > stream. For example, in ReaderWriterIVE::writeNode() a std::ofstream is > created but there's no way for me to attach it to a stream buffer. > > It seems like the osga plugin would have the same problem. The doread()/ > dowrite() methods call up to whatever ReaderWriter was passed in and I > can't subclass those.
I think Robert was suggesting implementing your own istream/ostream that does the encryption internally, then passing that to the read/write methods that take streams. > Robert Osfield wrote: >> Hi Brett, >> >> A number of the plugins support reading a writing from istream/ostream >> which means you can implement your std::streambuffer and attach to the >> stream and then pass this to the plugin. This technique allows you to >> do items like compression/decompression/encription/decription. Have a >> look at the osga and curl plugins as they provide examples of using >> streams this way. >> >> Robert. >> >> On Wed, Oct 1, 2008 at 5:02 PM, brettwiesner <[EMAIL PROTECTED]> wrote: >> >>> Hi, >>> >>> I've got a requirement to ship certain 3rd party model data only in an >>> encrypted format. So I wrote my own loader that does the encryption/ >>> decryption but uses the IVE loader for everything. This works except for >>> files that reference other files. The master file is encrypted, but the >>> referenced files are saved out as .ive's. >>> >>> Ideally all I would have to do is subclass ReaderWriterIVE and override the >>> following stream methods: >>> >>> virtual osgDB::ReaderWriter::ReadResult readObject(std::istream& fin, >>> const osgDB::ReaderWriter::Options* options) const; >>> >>> virtual osgDB::ReaderWriter::ReadResult readImage(std::istream& fin, >>> const osgDB::ReaderWriter::Options* options) const; >>> >>> virtual osgDB::ReaderWriter::ReadResult readNode(std::istream& fin, >>> const osgDB::ReaderWriter::Options* options) const; >>> >>> virtual osgDB::ReaderWriter::WriteResult writeObject(const osg::Object& >>> object, std::ostream& fout, const osgDB::ReaderWriter::Options* >>> options) const; >>> >>> virtual osgDB::ReaderWriter::WriteResult writeImage(const osg::Image& >>> image, std::ostream& fout, const osgDB::ReaderWriter::Options* options) >>> const; >>> >>> virtual osgDB::ReaderWriter::WriteResult writeNode(const osg::Node& node, >>> std::ostream& fout, const osgDB::ReaderWriter::Options* options) const; >>> >>> For writing I could get the raw data from the ive loader encrypt it and >>> write it out. For reading I could decrypt the data, then pass the >>> unencrypted data up to the ive loader for use. >>> >>> There is one fatal flaw... I can't subclass the ReaderWriterIVE plugin. :( >>> >>> 1) Has anyone besides me ever wanted to derive from a file loader? Would it >>> make sense to keep the logic in a lib with headers, then have another >>> library that is just the plugin? >>> >>> 2) Is there some other mechanism in OSG that will let me do this? -- Bryan Thrall FlightSafety International [EMAIL PROTECTED] _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org