mirror of
				https://github.com/zeromq/libzmq.git
				synced 2025-10-28 11:31:56 +01:00 
			
		
		
		
	LABELS and COMMANDs removed
Signed-off-by: Martin Sustrik <sustrik@250bpm.com>
This commit is contained in:
		
							
								
								
									
										46
									
								
								src/req.cpp
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								src/req.cpp
									
									
									
									
									
								
							| @@ -1,6 +1,7 @@ | ||||
| /* | ||||
|     Copyright (c) 2009-2011 250bpm s.r.o. | ||||
|     Copyright (c) 2007-2011 iMatix Corporation | ||||
|     Copyright (c) 2011 VMware, Inc. | ||||
|     Copyright (c) 2007-2011 Other contributors as noted in the AUTHORS file | ||||
|  | ||||
|     This file is part of 0MQ. | ||||
| @@ -29,8 +30,7 @@ | ||||
| zmq::req_t::req_t (class ctx_t *parent_, uint32_t tid_) : | ||||
|     xreq_t (parent_, tid_), | ||||
|     receiving_reply (false), | ||||
|     message_begins (true), | ||||
|     request_id (generate_random ()) | ||||
|     message_begins (true) | ||||
| { | ||||
|     options.type = ZMQ_REQ; | ||||
| } | ||||
| @@ -50,19 +50,17 @@ int zmq::req_t::xsend (msg_t *msg_, int flags_) | ||||
|  | ||||
|     //  First part of the request is the request identity. | ||||
|     if (message_begins) { | ||||
|         msg_t prefix; | ||||
|         int rc = prefix.init_size (4); | ||||
|         msg_t bottom; | ||||
|         int rc = bottom.init (); | ||||
|         errno_assert (rc == 0); | ||||
|         prefix.set_flags (msg_t::label); | ||||
|         unsigned char *data = (unsigned char*) prefix.data (); | ||||
|         put_uint32 (data, request_id); | ||||
|         rc = xreq_t::xsend (&prefix, flags_); | ||||
|         bottom.set_flags (msg_t::more); | ||||
|         rc = xreq_t::xsend (&bottom, 0); | ||||
|         if (rc != 0) | ||||
|             return rc; | ||||
|             return -1; | ||||
|         message_begins = false; | ||||
|     } | ||||
|  | ||||
|     bool more = msg_->flags () & (msg_t::more | msg_t::label) ? true : false; | ||||
|     bool more = msg_->flags () & msg_t::more ? true : false; | ||||
|  | ||||
|     int rc = xreq_t::xsend (msg_, flags_); | ||||
|     if (rc != 0) | ||||
| @@ -92,25 +90,11 @@ int zmq::req_t::xrecv (msg_t *msg_, int flags_) | ||||
|             return rc; | ||||
|  | ||||
|         // TODO: This should also close the connection with the peer! | ||||
|         if (unlikely (!(msg_->flags () & msg_t::label) || msg_->size () != 4)) { | ||||
|         if (unlikely (!(msg_->flags () & msg_t::more) || msg_->size () != 0)) { | ||||
|             while (true) { | ||||
|                 int rc = xreq_t::xrecv (msg_, flags_); | ||||
|                 errno_assert (rc == 0); | ||||
|                 if (!(msg_->flags () & (msg_t::label | msg_t::more))) | ||||
|                     break; | ||||
|             } | ||||
|             msg_->close (); | ||||
|             msg_->init (); | ||||
|             errno = EAGAIN; | ||||
|             return -1; | ||||
|         } | ||||
|          | ||||
|         unsigned char *data = (unsigned char*) msg_->data (); | ||||
|         if (unlikely (get_uint32 (data) != request_id)) { | ||||
|             while (true) { | ||||
|                 int rc = xreq_t::xrecv (msg_, flags_); | ||||
|                 errno_assert (rc == 0); | ||||
|                 if (!(msg_->flags () & (msg_t::label | msg_t::more))) | ||||
|                 if (!(msg_->flags () & msg_t::more)) | ||||
|                     break; | ||||
|             } | ||||
|             msg_->close (); | ||||
| @@ -118,6 +102,7 @@ int zmq::req_t::xrecv (msg_t *msg_, int flags_) | ||||
|             errno = EAGAIN; | ||||
|             return -1; | ||||
|         } | ||||
|  | ||||
|         message_begins = false; | ||||
|     } | ||||
|  | ||||
| @@ -126,8 +111,7 @@ int zmq::req_t::xrecv (msg_t *msg_, int flags_) | ||||
|         return rc; | ||||
|  | ||||
|     //  If the reply is fully received, flip the FSM into request-sending state. | ||||
|     if (!(msg_->flags () & (msg_t::more | msg_t::label))) { | ||||
|         request_id++; | ||||
|     if (!(msg_->flags () & msg_t::more)) { | ||||
|         receiving_reply = false; | ||||
|         message_begins = true; | ||||
|     } | ||||
| @@ -167,8 +151,8 @@ zmq::req_session_t::~req_session_t () | ||||
|  | ||||
| int zmq::req_session_t::write (msg_t *msg_) | ||||
| { | ||||
|     if (state == request_id) { | ||||
|         if (msg_->flags () == msg_t::label && msg_->size () == 4) { | ||||
|     if (state == bottom) { | ||||
|         if (msg_->flags () == msg_t::more && msg_->size () == 0) { | ||||
|             state = body; | ||||
|             return xreq_session_t::write (msg_); | ||||
|         } | ||||
| @@ -177,7 +161,7 @@ int zmq::req_session_t::write (msg_t *msg_) | ||||
|         if (msg_->flags () == msg_t::more) | ||||
|             return xreq_session_t::write (msg_); | ||||
|         if (msg_->flags () == 0) { | ||||
|             state = request_id; | ||||
|             state = bottom; | ||||
|             return xreq_session_t::write (msg_); | ||||
|         } | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Martin Sustrik
					Martin Sustrik