summaryrefslogtreecommitdiff
path: root/ACE/apps/JAWS/clients/Caching/URL_Properties.h
blob: b8d6c2c3a0e8da88c1a5b3d2e3521baf9d3f2c2f (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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// -*- C++ -*-


//=============================================================================
/**
 *  @file    URL_Properties.h
 *
 *  @author Nanbor Wang
 */
//=============================================================================


#ifndef ACE_URL_PROPERTIES_H
#define ACE_URL_PROPERTIES_H

#include "ace/SString.h"

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

#include "ace/Containers.h"

/**
 * @class ACE_WString_Helper
 *
 * @brief Some helper functions for manipulate ACE_WString.
 *
 * These functions simplify encoding/decoding of
 * ACE_WString objects for network communication.
 */
class ACE_Svc_Export ACE_WString_Helper
{
public:
  /// Returns the actual size (in bytes) required to contain the
  /// ACE_WString.
  static size_t size (const ACE_WString &wstr);

  /// Encode <wstr> into <buf> for network communication.
  /// Return total octets consumed.
  static size_t encode (void *buf, const ACE_WString &wstr);

  /**
   * This function doesn't relate to ACE_WString directly.
   * It converts an ACE_UINT16 string from network
   * byte order to host byte order.  Returns size of the string.
   */
  static size_t decode (void *buf);
};

/**
 * @class ACE_URL_Property
 *
 * @brief Defines a property of a URL.
 *
 * A property contains a <name> and a <value>.
 * A URL may contain some properties and we can "locate"
 * the URL's we are looking for by examming URL for certain
 * properties that match our need.
 */
class ACE_Svc_Export ACE_URL_Property
{
public:
  /// Create a new property.
  ACE_URL_Property (const char *name = 0,
                    const char *value=0);

  /// Create a new property using wchar strings.  This is mostly used
  /// to support DBCS or UNICODE.
  ACE_URL_Property (const ACE_UINT16 *name,
                    const ACE_UINT16 *value);

  /// Copy constructor.
  ACE_URL_Property (const ACE_URL_Property &p);

  /// Destructor.
  ~ACE_URL_Property (void);

  /// Assignment operator.
  ACE_URL_Property &operator= (const ACE_URL_Property &rhs);

  /// Equals operator.
  bool operator== (const ACE_URL_Property &rhs) const;

  /// Inequality operator.
  bool operator!= (const ACE_URL_Property &rhs) const;

  // = Query property name.
  ACE_WString &name_rep (void);
  const ACE_WString &name (void) const;

  // = Set property name.
  void name (const ACE_UINT16 *n);
  void name (const char *n);

  // = Query property value.
  ACE_WString &value_rep (void);
  const ACE_WString &value (void) const;

  // = Set property value.
  void value (const ACE_UINT16 *v);
  void value (const char *v);

  // = Helper functions for encoding and decoding.
  /// Returns memory size (in bytes) required to encode this object.
  size_t size (void) const;

  /// Encodes this object into buf for network transmission.
  size_t encode (void *buf) const;

  /// Decodes buf and modifies this object, you should
  /// probably create this with default ctor.
  size_t decode (void *buf);

  /// Dump out this object for debug.
  void dump (void) const;

protected:
  /// Property name pointer.
  ACE_WString name_;

  /// Property value.
  ACE_WString value_;
} ;

typedef ACE_Array<ACE_URL_Property> ACE_URL_Property_Seq;
// type of URL_Property collections.

/**
 * @class ACE_URL_Offer
 *
 * @brief Defines a URL offer.
 *
 * A URL offer is defined by a <url> and an
 * <ACE_URL_Property_Seq>.  An offer is stored at server end
 * thru registering or reported back to querying client from the
 * sever.
 */
class ACE_Svc_Export ACE_URL_Offer
{
public:
  /// Create an offer.
  ACE_URL_Offer (const size_t size = 1, const char *url = 0);

  /// Copy ctor.
  ACE_URL_Offer (const ACE_URL_Offer &o);

  /// Default destructor.
  ~ACE_URL_Offer (void);

  /// Assignment operator.
  ACE_URL_Offer &operator= (const ACE_URL_Offer &rhs);

  /// Equality operator.
  bool operator== (const ACE_URL_Offer &rhs) const;

  /// Inequality operator.
  bool operator!= (const ACE_URL_Offer &rhs) const;

  // = Get URL string.
  ACE_WString &url_rep (void);
  const ACE_WString &url (void) const;

  // = Set URL.
  void url (const char *url);
  void url (const ACE_UINT16 *url);

  /// Get properties of this offer.
  ACE_URL_Property_Seq &url_properties (void);

  /// Set properties of this offer.  This operation virtually get a
  /// copy of the passed in prop.
  void url_properties (const ACE_URL_Property_Seq &prop);

  // = Helper functions for encoding and decoding.
  /// Returns memory size (in bytes) required to encode this object.
  size_t size (void) const;

  /// Encodes this object into buf for network transmission.
  size_t encode (void *buf) const;

  /// Decodes buf into current object, you better use
  /// the default ctor.
  size_t decode (void *buf);

  /// Dump this object for debug.
  void dump (void) const;

protected:
  /// URL of this offer.
  ACE_WString url_;

  /// Properties associate with this offer.
  ACE_URL_Property_Seq prop_;
};

typedef ACE_Array<ACE_URL_Offer> ACE_URL_Offer_Seq;
// type of URL offer collections.

#if defined (__ACE_INLINE__)
#include "URL_Properties.inl"
#endif /* __ACE_INLINE__ */

#endif /* ACE_WEB_PROPERTIES_H */