mechanism.hpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #ifndef __ZMQ_MECHANISM_HPP_INCLUDED__
4 #define __ZMQ_MECHANISM_HPP_INCLUDED__
5 
6 #include "stdint.hpp"
7 #include "options.hpp"
8 #include "blob.hpp"
9 #include "metadata.hpp"
10 
11 namespace zmq
12 {
13 class msg_t;
14 class session_base_t;
15 
16 // Abstract class representing security mechanism.
17 // Different mechanism extends this class.
18 
20 {
21  public:
22  enum status_t
23  {
27  };
28 
30 
31  virtual ~mechanism_t ();
32 
33  // Prepare next handshake command that is to be sent to the peer.
34  virtual int next_handshake_command (msg_t *msg_) = 0;
35 
36  // Process the handshake command received from the peer.
37  virtual int process_handshake_command (msg_t *msg_) = 0;
38 
39  virtual int encode (msg_t *) { return 0; }
40 
41  virtual int decode (msg_t *) { return 0; }
42 
43  // Notifies mechanism about availability of ZAP message.
44  virtual int zap_msg_available () { return 0; }
45 
46  // Returns the status of this mechanism.
47  virtual status_t status () const = 0;
48 
49  void set_peer_routing_id (const void *id_ptr_, size_t id_size_);
50 
51  void peer_routing_id (msg_t *msg_);
52 
53  void set_user_id (const void *user_id_, size_t size_);
54 
55  const blob_t &get_user_id () const;
56 
58  {
59  return _zmtp_properties;
60  }
61 
63  {
64  return _zap_properties;
65  }
66 
67  protected:
68  // Only used to identify the socket for the Socket-Type
69  // property in the wire protocol.
70  static const char *socket_type_string (int socket_type_);
71 
72  static size_t add_property (unsigned char *ptr_,
73  size_t ptr_capacity_,
74  const char *name_,
75  const void *value_,
76  size_t value_len_);
77  static size_t property_len (const char *name_, size_t value_len_);
78 
79  size_t add_basic_properties (unsigned char *ptr_,
80  size_t ptr_capacity_) const;
81  size_t basic_properties_len () const;
82 
84  const char *prefix_,
85  size_t prefix_len_) const;
86 
87  // Parses a metadata.
88  // Metadata consists of a list of properties consisting of
89  // name and value as size-specified strings.
90  // Returns 0 on success and -1 on error, in which case errno is set.
91  int parse_metadata (const unsigned char *ptr_,
92  size_t length_,
93  bool zap_flag_ = false);
94 
95  // This is called by parse_property method whenever it
96  // parses a new property. The function should return 0
97  // on success and -1 on error, in which case it should
98  // set errno. Signaling error prevents parser from
99  // parsing remaining data.
100  // Derived classes are supposed to override this
101  // method to handle custom processing.
102  virtual int
103  property (const std::string &name_, const void *value_, size_t length_);
104 
106 
107  private:
108  // Properties received from ZMTP peer.
110 
111  // Properties received from ZAP server.
113 
115 
117 
118  // Returns true iff socket associated with the mechanism
119  // is compatible with a given socket type 'type_'.
120  bool check_socket_type (const char *type_, size_t len_) const;
121 };
122 }
123 
124 #endif
zmq::mechanism_t::mechanism_t
mechanism_t(const options_t &options_)
Definition: mechanism.cpp:14
zmq::mechanism_t::make_command_with_basic_properties
void make_command_with_basic_properties(msg_t *msg_, const char *prefix_, size_t prefix_len_) const
Definition: mechanism.cpp:193
zmq::mechanism_t::set_peer_routing_id
void set_peer_routing_id(const void *id_ptr_, size_t id_size_)
Definition: mechanism.cpp:22
zmq::options_t
Definition: options.hpp:34
zmq::mechanism_t::ready
@ ready
Definition: mechanism.hpp:25
zmq::mechanism_t::_zmtp_properties
metadata_t::dict_t _zmtp_properties
Definition: mechanism.hpp:109
zmq::mechanism_t::property_len
static size_t property_len(const char *name_, size_t value_len_)
Definition: mechanism.cpp:133
zmq::mechanism_t::encode
virtual int encode(msg_t *)
Definition: mechanism.hpp:39
string
GLsizei const GLchar *const * string
Definition: glcorearb.h:3083
error
Definition: cJSON.c:88
zmq::mechanism_t::decode
virtual int decode(msg_t *)
Definition: mechanism.hpp:41
zmq::metadata_t::dict_t
std::map< std::string, std::string > dict_t
Definition: metadata.hpp:16
zmq::mechanism_t::parse_metadata
int parse_metadata(const unsigned char *ptr_, size_t length_, bool zap_flag_=false)
Definition: mechanism.cpp:210
zmq::mechanism_t::get_user_id
const blob_t & get_user_id() const
Definition: mechanism.cpp:44
zmq::mechanism_t::get_zmtp_properties
const metadata_t::dict_t & get_zmtp_properties() const
Definition: mechanism.hpp:57
zmq
Definition: zmq.hpp:229
zmq::mechanism_t
Definition: mechanism.hpp:19
stdint.hpp
zmq::mechanism_t::handshaking
@ handshaking
Definition: mechanism.hpp:24
zmq::mechanism_t::check_socket_type
bool check_socket_type(const char *type_, size_t len_) const
Definition: mechanism.cpp:283
zmq::mechanism_t::add_property
static size_t add_property(unsigned char *ptr_, size_t ptr_capacity_, const char *name_, const void *value_, size_t value_len_)
Definition: mechanism.cpp:111
zmq::mechanism_t::next_handshake_command
virtual int next_handshake_command(msg_t *msg_)=0
zmq::mechanism_t::process_handshake_command
virtual int process_handshake_command(msg_t *msg_)=0
zmq::mechanism_t::status
virtual status_t status() const =0
zmq::mechanism_t::add_basic_properties
size_t add_basic_properties(unsigned char *ptr_, size_t ptr_capacity_) const
Definition: mechanism.cpp:141
zmq::mechanism_t::basic_properties_len
size_t basic_properties_len() const
Definition: mechanism.cpp:172
zmq::mechanism_t::status_t
status_t
Definition: mechanism.hpp:22
name_
string name_
Definition: googletest.cc:182
zmq::mechanism_t::_zap_properties
metadata_t::dict_t _zap_properties
Definition: mechanism.hpp:112
zmq::blob_t
Definition: blob.hpp:46
value_
int value_
Definition: gmock-matchers_test.cc:571
metadata.hpp
zmq::mechanism_t::~mechanism_t
virtual ~mechanism_t()
Definition: mechanism.cpp:18
zmq::mechanism_t::_user_id
blob_t _user_id
Definition: mechanism.hpp:116
options.hpp
blob.hpp
zmq::mechanism_t::socket_type_string
static const char * socket_type_string(int socket_type_)
Definition: mechanism.cpp:73
zmq::mechanism_t::options
const options_t options
Definition: mechanism.hpp:105
zmq::mechanism_t::zap_msg_available
virtual int zap_msg_available()
Definition: mechanism.hpp:44
zmq::mechanism_t::get_zap_properties
const metadata_t::dict_t & get_zap_properties() const
Definition: mechanism.hpp:62
zmq::mechanism_t::peer_routing_id
void peer_routing_id(msg_t *msg_)
Definition: mechanism.cpp:28
zmq::mechanism_t::set_user_id
void set_user_id(const void *user_id_, size_t size_)
Definition: mechanism.cpp:36
zmq::mechanism_t::property
virtual int property(const std::string &name_, const void *value_, size_t length_)
Definition: mechanism.cpp:265
zmq::msg_t
Definition: msg.hpp:33
zmq::mechanism_t::_routing_id
blob_t _routing_id
Definition: mechanism.hpp:114
options_
DebugStringOptions options_
Definition: src/google/protobuf/descriptor.cc:2410
prefix_
std::string prefix_
Definition: src/google/protobuf/descriptor.cc:378


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:56