31 #include "platform.hpp" 32 #ifdef ZMQ_HAVE_WINDOWS 47 const std::string &peer_address_,
51 peer_address (peer_address_),
52 ready_command_sent (false),
53 error_command_sent (false),
54 ready_command_received (false),
55 error_command_received (false),
56 zap_connected (false),
57 zap_request_sent (false),
58 zap_reply_received (false)
94 unsigned char *msg_data =
95 static_cast <
unsigned char *> (msg_->
data ());
96 memcpy (msg_data,
"\5ERROR", 6);
103 unsigned char *
const command_buffer = (
unsigned char *) malloc (512);
106 unsigned char *ptr = command_buffer;
109 memcpy (ptr,
"\5READY", 6);
114 ptr +=
add_property (ptr,
"Socket-Type", socket_type, strlen (socket_type));
122 const size_t command_size = ptr - command_buffer;
123 const int rc = msg_->
init_size (command_size);
125 memcpy (msg_->
data (), command_buffer, command_size);
126 free (command_buffer);
137 puts (
"NULL I: client sent invalid NULL handshake (duplicate READY)");
142 const unsigned char *cmd_data =
143 static_cast <
unsigned char *> (msg_->
data ());
144 const size_t data_size = msg_->
size ();
147 if (data_size >= 6 && !memcmp (cmd_data,
"\5READY", 6))
150 if (data_size >= 6 && !memcmp (cmd_data,
"\5ERROR", 6))
154 puts (
"NULL I: client sent invalid NULL handshake (not READY)");
169 const unsigned char *cmd_data,
size_t data_size)
176 const unsigned char *cmd_data,
size_t data_size)
182 const size_t error_reason_len = static_cast <
size_t> (cmd_data [6]);
183 if (error_reason_len > data_size - 7) {
205 const bool command_sent =
207 const bool command_received =
213 if (command_sent && command_received)
234 memcpy (msg.
data (),
"1.0", 3);
242 memcpy (msg.
data (),
"1", 1);
274 memcpy (msg.
data (),
"NULL", 4);
285 for (
int i = 0; i < 7; i++) {
286 rc = msg [i].
init ();
290 for (
int i = 0; i < 7; i++) {
296 puts (
"NULL I: ZAP handler sent incomplete reply message");
307 if (msg [0].
size () > 0) {
309 puts (
"NULL I: ZAP handler sent malformed reply message");
316 if (msg [1].
size () != 3 || memcmp (msg [1].data (),
"1.0", 3)) {
318 puts (
"NULL I: ZAP handler sent bad version number");
325 if (msg [2].
size () != 1 || memcmp (msg [2].data (),
"1", 1)) {
327 puts (
"NULL I: ZAP handler sent bad request ID");
334 if (msg [3].
size () != 3) {
336 puts (
"NULL I: ZAP handler rejected client authentication");
349 rc =
parse_metadata (static_cast <const unsigned char*> (msg [6].data ()),
350 msg [6].
size (),
true);
353 for (
int i = 0; i < 7; i++) {
354 const int rc2 = msg [i].
close ();
int receive_and_process_zap_reply()
virtual int next_handshake_command(msg_t *msg_)
virtual int process_handshake_command(msg_t *msg_)
virtual int zap_msg_available()
int process_ready_command(const unsigned char *cmd_data, size_t data_size)
null_mechanism_t(session_base_t *session_, const std::string &peer_address, const options_t &options_)
bool error_command_received
int write_zap_msg(msg_t *msg_)
int init_size(size_t size_)
bool ready_command_received
virtual ~null_mechanism_t()
int parse_metadata(const unsigned char *ptr_, size_t length, bool zap_flag=false)
unsigned char identity[256]
int read_zap_msg(msg_t *msg_)
const char * socket_type_string(int socket_type) const
void set_flags(unsigned char flags_)
virtual status_t status() const
const std::string peer_address
session_base_t *const session
unsigned char data[max_vsm_size]
size_t add_property(unsigned char *ptr, const char *name, const void *value, size_t value_len) const
unsigned char identity_size
int process_error_command(const unsigned char *cmd_data, size_t data_size)
void set_user_id(const void *user_id, size_t size)