/** * @return AMQPMessage * @throws \PhpAmqpLib\Exception\AMQPRuntimeException */ public function wait_content() { list($frame_type, $payload) = $this->next_frame(); $this->validate_header_frame($frame_type); $this->wait_content_reader->reuse(mb_substr($payload, 0, 12, 'ASCII')); // $payload_reader = new AMQPReader(substr($payload,0,12)); $class_id = $this->wait_content_reader->read_short(); $weight = $this->wait_content_reader->read_short(); $body_size = $this->wait_content_reader->read_longlong(); //hack to avoid creating new instances of AMQPReader; $this->msg_property_reader->reuse(mb_substr($payload, 12, mb_strlen($payload, 'ASCII') - 12, 'ASCII')); $msg = new AMQPMessage(); $msg->load_properties($this->msg_property_reader); $msg->body_size = $body_size; list($msg_body, $is_truncated) = $this->build_msg_body($body_size); $msg->body = $msg_body; $msg->is_truncated = $is_truncated; if ($this->auto_decode && isset($msg->content_encoding)) { try { $msg->body = $msg->body->decode($msg->content_encoding); } catch (\Exception $e) { $this->debug->debug_msg('Ignoring body decoding exception: ' . $e->getMessage()); } } return $msg; }
/** * @return AMQPMessage * @throws \PhpAmqpLib\Exception\AMQPRuntimeException */ public function wait_content() { $frm = $this->next_frame(); $frame_type = $frm[0]; $payload = $frm[1]; if ($frame_type != 2) { throw new AMQPRuntimeException('Expecting Content header'); } $this->wait_content_reader->reuse(mb_substr($payload, 0, 12, 'ASCII')); // $payload_reader = new AMQPReader(substr($payload,0,12)); $class_id = $this->wait_content_reader->read_short(); $weight = $this->wait_content_reader->read_short(); $body_size = $this->wait_content_reader->read_longlong(); //hack to avoid creating new instances of AMQPReader; $this->msg_property_reader->reuse(mb_substr($payload, 12, mb_strlen($payload, 'ASCII') - 12, 'ASCII')); $msg = new AMQPMessage(); $msg->load_properties($this->msg_property_reader); $msg->body_size = $body_size; $body_parts = array(); $body_received = 0; while (bccomp($body_size, $body_received, 0) == 1) { $frm = $this->next_frame(); $frame_type = $frm[0]; $payload = $frm[1]; if ($frame_type != 3) { $PROTOCOL_CONSTANTS_CLASS = self::$PROTOCOL_CONSTANTS_CLASS; throw new AMQPRuntimeException(sprintf('Expecting Content body, received frame type %s (%s)', $frame_type, $PROTOCOL_CONSTANTS_CLASS::$FRAME_TYPES[$frame_type])); } $body_received = bcadd($body_received, mb_strlen($payload, 'ASCII'), 0); if (!is_null($this->body_size_max) && $body_received > $this->body_size_max) { $msg->is_truncated = true; continue; } $body_parts[] = $payload; } $msg->body = implode('', $body_parts); if ($this->auto_decode && isset($msg->content_encoding)) { try { $msg->body = $msg->body->decode($msg->content_encoding); } catch (\Exception $e) { if ($this->debug) { MiscHelper::debug_msg('Ignoring body decoding exception: ' . $e->getMessage()); } } } return $msg; }
public function wait_content() { $frm = $this->next_frame(); $frame_type = $frm[0]; $payload = $frm[1]; if ($frame_type != 2) { throw new AMQPRuntimeException("Expecting Content header"); } $payload_reader = new AMQPReader(substr($payload, 0, 12)); $class_id = $payload_reader->read_short(); $weight = $payload_reader->read_short(); $body_size = $payload_reader->read_longlong(); $msg = new AMQPMessage(); $msg->load_properties(substr($payload, 12)); $body_parts = array(); $body_received = 0; while (bccomp($body_size, $body_received) == 1) { $frm = $this->next_frame(); $frame_type = $frm[0]; $payload = $frm[1]; if ($frame_type != 3) { throw new AMQPRuntimeException("Expecting Content body, received frame type {$frame_type} (" . self::$FRAME_TYPES[$frame_type] . ")"); } $body_parts[] = $payload; $body_received = bcadd($body_received, strlen($payload)); } $msg->body = implode("", $body_parts); if ($this->auto_decode && isset($msg->content_encoding)) { try { $msg->body = $msg->body->decode($msg->content_encoding); } catch (\Exception $e) { if ($this->debug) { MiscHelper::debug_msg("Ignoring body decoding exception: " . $e->getMessage()); } } } return $msg; }
/** * @param AMQPReader $propertyReader * @param AMQPReader $contentReader * @return \PhpAmqpLib\Message\AMQPMessage */ protected function createMessage($propertyReader, $contentReader) { $bodyChunks = array(); $bodyReceivedBytes = 0; $message = new AMQPMessage(); $message->load_properties($propertyReader)->setBodySize($contentReader->read_longlong()); while (bccomp($message->getBodySize(), $bodyReceivedBytes, 0) == 1) { list($frame_type, $payload) = $this->next_frame(); $this->validate_body_frame($frame_type); $bodyReceivedBytes = bcadd($bodyReceivedBytes, mb_strlen($payload, 'ASCII'), 0); if (is_int($this->maxBodySize) && $bodyReceivedBytes > $this->maxBodySize) { $message->setIsTruncated(true); continue; } $bodyChunks[] = $payload; } $message->setBody(implode('', $bodyChunks)); $messageEncoding = $message->getContentEncoding(); if ($this->auto_decode && !empty($messageEncoding)) { try { // Where does the decode() method come from if body is a string? $decodedBody = $message->getBody()->decode($messageEncoding); $message->setBody($decodedBody); } catch (\Exception $e) { $this->debug->debug_msg('Ignoring body decoding exception: ' . $e->getMessage()); } } return $message; }
/** * @param AMQPReader $reader * @return array */ public static function basicGetOk(AMQPReader $reader) { $response = array(); $response[] = $reader->read_longlong(); $response[] = $reader->read_bit(); $response[] = $reader->read_shortstr(); $response[] = $reader->read_shortstr(); $response[] = $reader->read_long(); return $response; }
/** * Provides client with a message * * @param AMQPReader $args * @param AMQPMessage $msg * @return AMQPMessage */ protected function basic_get_ok($args, $msg) { $delivery_tag = $args->read_longlong(); $redelivered = $args->read_bit(); $exchange = $args->read_shortstr(); $routing_key = $args->read_shortstr(); $message_count = $args->read_long(); $msg->delivery_info = array('delivery_tag' => $delivery_tag, 'redelivered' => $redelivered, 'exchange' => $exchange, 'routing_key' => $routing_key, 'message_count' => $message_count); return $msg; }
/** * provide client with a message * * @param AMQPReader $args * @param AMQPMessage $msg * @return AMQPMessage */ protected function basic_get_ok($args, $msg) { $delivery_tag = $args->read_longlong(); $redelivered = $args->read_bit(); $exchange = $args->read_shortstr(); $routing_key = $args->read_shortstr(); $message_count = $args->read_long(); $msg->delivery_info = array("delivery_tag" => $delivery_tag, "redelivered" => $redelivered, "exchange" => $exchange, "routing_key" => $routing_key, "message_count" => $message_count); return $msg; }
/** * @param AMQPReader $args * @return array */ public static function testTableOk($args) { $ret = array(); $ret[] = $args->read_longlong(); $ret[] = $args->read_longstr(); return $ret; }
/** * @param AMQPReader $reader * @return array */ public static function testTableOk(AMQPReader $reader) { $response = array(); $response[] = $reader->read_longlong(); $response[] = $reader->read_longstr(); return $response; }
/** * Called when the server sends a basic.ack * * @param \PhpAmqpLib\Wire\AMQPReader $args * @throws \PhpAmqpLib\Exception\AMQPRuntimeException */ protected function basic_ack_from_server(\PhpAmqpLib\Wire\AMQPReader $args) { $delivery_tag = $args->read_longlong(); $multiple = (bool) $args->read_bit(); if (!isset($this->published_messages[$delivery_tag])) { throw new \PhpAmqpLib\Exception\AMQPRuntimeException(sprintf('Server ack\'ed unknown delivery_tag %s', $delivery_tag)); } $this->internal_ack_handler($delivery_tag, $multiple, $this->ack_handler); }
/** * @param AMQPReader $args * @return array */ public static function basicGetOk($args) { $ret = array(); $ret[] = $args->read_longlong(); $ret[] = $args->read_bit(); $ret[] = $args->read_shortstr(); $ret[] = $args->read_shortstr(); $ret[] = $args->read_long(); return $ret; }
/** * @param AMQPReader $propertyReader * @param AMQPReader $contentReader * @return \PhpAmqpLib\Message\AMQPMessage */ protected function createMessage($propertyReader, $contentReader) { $bodyChunks = array(); $bodyReceivedBytes = 0; $message = new AMQPMessage(); $message->load_properties($propertyReader)->setBodySize($contentReader->read_longlong()); while (bccomp($message->getBodySize(), $bodyReceivedBytes, 0) == 1) { list($frame_type, $payload) = $this->next_frame(); $this->validate_body_frame($frame_type); $bodyReceivedBytes = bcadd($bodyReceivedBytes, mb_strlen($payload, 'ASCII'), 0); if (is_int($this->maxBodySize) && $bodyReceivedBytes > $this->maxBodySize) { $message->setIsTruncated(true); continue; } $bodyChunks[] = $payload; } $message->setBody(implode('', $bodyChunks)); return $message; }