libdap++  Updated for version 3.11.7
XDRStreamMarshaller.h
Go to the documentation of this file.
1 // XDRStreamMarshaller.h
2 
3 // -*- mode: c++; c-basic-offset:4 -*-
4 
5 // This file is part of libdap, A C++ implementation of the OPeNDAP Data
6 // Access Protocol.
7 
8 // Copyright (c) 2002,2003 OPeNDAP, Inc.
9 // Author: Patrick West <pwest@ucar.edu>
10 //
11 // This library is free software; you can redistribute it and/or
12 // modify it under the terms of the GNU Lesser General Public
13 // License as published by the Free Software Foundation; either
14 // version 2.1 of the License, or (at your option) any later version.
15 //
16 // This library is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 // Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License along with this library; if not, write to the Free Software
23 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 //
25 // You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
26 
27 // (c) COPYRIGHT URI/MIT 1994-1999
28 // Please read the full copyright statement in the file COPYRIGHT_URI.
29 //
30 // Authors:
31 // pwest Patrick West <pwest@ucar.edu>
32 
33 #ifndef I_XDRStreamMarshaller_h
34 #define I_XDRStreamMarshaller_h 1
35 
36 #include <iostream>
37 
38 #include <openssl/md5.h>
39 
40 using std::ostream ;
41 using std::cout ;
42 
43 #include "Marshaller.h"
44 #include "XDRUtils.h"
45 
46 #if 0
47 #include <openssl/md5.h>
48 
49 unsigned char *MD5(const unsigned char *d, unsigned long n,
50  unsigned char *md);
51 
52 int MD5_Init(MD5_CTX *c);
53 int MD5_Update(MD5_CTX *c, const void *data,
54  unsigned long len);
55 int MD5_Final(unsigned char *md, MD5_CTX *c);
56 #endif
57 
58 namespace libdap
59 {
60 
68 {
69 private:
70  static char * _buf ;
71  XDR * _sink ;
72  ostream & _out ;
73  MD5_CTX * _md5 ; // jhrg 1/18/12
74  bool _write_data ; // jhrg 1/27/12
75  bool _checksum_ctx_valid ;
76 
79  XDRStreamMarshaller &operator=( const XDRStreamMarshaller & ) ;
80 
81 public:
82  /* XDRStreamMarshaller( ostream &out ) ; */
83  XDRStreamMarshaller( ostream &out, bool checksum = false, bool write_data = true) ;
84  virtual ~XDRStreamMarshaller() ;
85 
86  virtual void reset_checksum() ;
87  virtual string get_checksum() ;
88  virtual void checksum_update(const void *data, unsigned long len) ;
89 
90  virtual void put_byte( dods_byte val ) ;
91 
92  virtual void put_int16( dods_int16 val ) ;
93  virtual void put_int32( dods_int32 val ) ;
94 
95  virtual void put_float32( dods_float32 val ) ;
96  virtual void put_float64( dods_float64 val ) ;
97 
98  virtual void put_uint16( dods_uint16 val ) ;
99  virtual void put_uint32( dods_uint32 val ) ;
100 
101  virtual void put_str( const string &val ) ;
102  virtual void put_url( const string &val ) ;
103 
104  virtual void put_opaque( char *val, unsigned int len ) ;
105  virtual void put_int( int val ) ;
106 
107  virtual void put_vector( char *val, int num, Vector &vec ) ;
108  virtual void put_vector( char *val, int num, int width, Vector &vec ) ;
109 
110  virtual void dump(ostream &strm) const ;
111 } ;
112 
113 } // namespace libdap
114 
115 #endif // I_XDRStreamMarshaller_h
116