summaryrefslogtreecommitdiff
path: root/TAO/tao/ZIOP/ZIOP.h
blob: 7230f11651def7fd17dc60f9064b2ccb967f6b3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// -*- C++ -*-

//=============================================================================
/**
 *  @file ZIOP.h
 *
 *  $Id$
 *
 *  Dynamic loader object for the ZIOP library
 *
 *
 *  @author  Johnny Willemsen  <jwillemsen@remedy.nl>
 */
//=============================================================================

#ifndef TAO_ZIOP_H
#define TAO_ZIOP_H
#include /**/ "ace/pre.h"

#include "tao/ZIOP/ziop_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "tao/PI/PI.h"
#include "tao/ZIOP_Adapter.h"
#include "tao/Compression/Compression.h"
#include "tao/Policy_Validator.h"
#include "ace/Service_Config.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

/**
 * @class TAO_ZIOP_Loader
 *
 * @brief Class that loads the BiDir library.
 */

class TAO_ZIOP_Export TAO_ZIOP_Loader : public TAO_ZIOP_Adapter
{
public:

  /// Constructor
  TAO_ZIOP_Loader (void);

  /// Destructor
  virtual ~TAO_ZIOP_Loader (void);

  virtual bool decompress (ACE_Data_Block **db, TAO_Queued_Data& qd, TAO_ORB_Core& orb_core);

  // Compress the @a stream. Starting point of the compression is rd_ptr()
  virtual bool marshal_data (TAO_OutputCDR& cdr, TAO_Stub& stub);
  virtual bool marshal_data (TAO_OutputCDR& cdr, TAO_ORB_Core& orb_core);

  /// Initialize the BiDIR loader hooks.
  virtual int init (int argc, ACE_TCHAR* []);

  virtual void load_policy_validators (TAO_Policy_Validator &validator);

  /// Used to force the initialization of the ORB code.
  static int Initializer (void);

  /// Converts compressor ID to a compressor name.
  static const char * ziop_compressorid_name (::Compression::CompressorId st);

private:

  /// Set to true after init is called.
  bool initialized_;

  /// dump a ZIOP datablock after (de)compression
  void dump_msg (const char *type,  const u_char *ptr,
                size_t len, size_t original_data_length,
                ::Compression::CompressorId  compressor_id,
                ::Compression::CompressionLevel compression_level);

  /// Get the compression low value, returns 0 when it is not set
  CORBA::ULong compression_low_value (CORBA::Policy_ptr policy) const;

    /// Get the compression min ratio value, returns 0 when it is not set
  Compression::CompressionRatio compression_minratio_value (
    CORBA::Policy_ptr policy) const;

  bool get_compressor_details (
                        ::Compression::CompressorIdLevelList *list,
                        Compression::CompressorId &compressor_id,
                        Compression::CompressionLevel &compression_level);

  bool get_compression_details(CORBA::Policy_ptr compression_enabling_policy,
                        CORBA::Policy_ptr compression_level_list_policy,
                        Compression::CompressorId &compressor_id,
                        Compression::CompressionLevel &compression_level);

  bool complete_compression (Compression::Compressor_ptr compressor,
                             TAO_OutputCDR &cdr,
                             ACE_Message_Block& mb,
                             char *initial_rd_ptr,
                             CORBA::ULong low_value,
                             Compression::CompressionRatio min_ratio,
                             CORBA::ULong original_data_length,
                             Compression::CompressorId compressor_id);

  bool compress_data (TAO_OutputCDR &cdr,
                      CORBA::Object_ptr compression_manager,
                      CORBA::ULong low_value,
                      ::Compression::CompressionRatio min_ratio,
                      ::Compression::CompressorId compressor_id,
                      ::Compression::CompressionLevel compression_level);

  bool compress (Compression::Compressor_ptr compressor,
                 const ::Compression::Buffer &source,
                 ::Compression::Buffer &target);

  bool decompress (Compression::Compressor_ptr compressor,
                   const ::Compression::Buffer &source,
                   ::Compression::Buffer &target);

  ::Compression::CompressionRatio get_ratio (CORBA::OctetSeq& uncompressed,
                          CORBA::OctetSeq& compressed);

  bool check_min_ratio (const ::Compression::CompressionRatio& this_ratio,
                        ::Compression::CompressionRatio overall_ratio,
                        ::Compression::CompressionRatio  min_ratio) const;
};

static int
TAO_Requires_ZIOP_Initializer = TAO_ZIOP_Loader::Initializer ();


ACE_STATIC_SVC_DECLARE (TAO_ZIOP_Loader)
ACE_FACTORY_DECLARE (TAO_ZIOP, TAO_ZIOP_Loader)

TAO_END_VERSIONED_NAMESPACE_DECL

#define TAO_ZIOP_SAFE_INCLUDE
#include "tao/ZIOP/ZIOPC.h"
#undef TAO_ZIOP_SAFE_INCLUDE

#include /**/ "ace/post.h"
#endif /* TAO_ZIOP_H */