Example #1
0
 /**
  * @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;
 }
Example #2
0
 /**
  * @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;
 }
Example #5
0
 /**
  * @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;
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 /**
  * 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;
 }
Example #8
0
 /**
  * @param AMQPReader $args
  * @return array
  */
 public static function testTableOk($args)
 {
     $ret = array();
     $ret[] = $args->read_longlong();
     $ret[] = $args->read_longstr();
     return $ret;
 }
Example #9
0
 /**
  * @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);
 }
Example #11
0
 /**
  * @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;
 }
Example #12
0
 /**
  * @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;
 }