lib/amq/protocol.rb in amq-protocol-0.0.1.pre vs lib/amq/protocol.rb in amq-protocol-0.5.0

- old
+ new

@@ -1,1473 +1,4 @@ -# encoding: binary +# -*- coding: utf-8 -*- -# THIS IS AN AUTOGENERATED FILE, DO NOT MODIFY -# IT DIRECTLY ! FOR CHANGES, PLEASE UPDATE CODEGEN.PY -# IN THE ROOT DIRECTORY OF THE AMQP-PROTOCOL REPOSITORY. - -require_relative "protocol/table.rb" -require_relative "protocol/frame.rb" - -module AMQ - module Protocol - PROTOCOL_VERSION = "0.9.1" - PREAMBLE = "AMQP\x00\x00\x09\x01" - DEFAULT_PORT = 5672 - - # caching - EMPTY_STRING = "".freeze - - # @version 0.0.1 - # @return [Array] Collection of subclasses of AMQ::Protocol::Class. - def self.classes - Class.classes - end - - # @version 0.0.1 - # @return [Array] Collection of subclasses of AMQ::Protocol::Method. - def self.methods - Method.methods - end - - class Error < StandardError - def initialize(message = "AMQP error") - super(message) - end - end - - class ConnectionError < Error - def initialize(types) - super("Must be one of #{types.inspect}") - end - end - - # We don"t instantiate the following classes, - # as we don"t actually need any per-instance state. - # Also, this is pretty low-level functionality, - # hence it should have a reasonable performance. - # As everyone knows, garbage collector in MRI performs - # really badly, which is another good reason for - # not creating any objects, but only use class as - # a struct. Creating classes is quite expensive though, - # but here the inheritance comes handy and mainly - # as we can"t simply make a reference to a function, - # we can"t use a hash or an object. I"ve been also - # considering to have just a bunch of methods, but - # here"s the problem, that after we"d require this file, - # all these methods would become global which would - # be a bad, bad thing to do. - class Class - @@classes = Array.new - - def self.method - @method - end - - def self.name - @name - end - - def self.inherited(base) - if self == Class - @@classes << base - end - end - - def self.classes - @@classes - end - end - - class Method - @@methods = Array.new - def self.method - @method - end - - def self.name - @name - end - - def self.index - @index - end - - def self.inherited(base) - if self == Method - @@methods << base - end - end - - def self.methods - @@methods - end - - def self.split_headers(user_headers, properties_set) - properties, headers = {}, {} - user_headers.iteritems.each do |key, value| - if properties_set.has_key?(key) - properties[key] = value - else - headers[key] = value - end - end - - return props, headers - end - - def self.encode_body(body, frame_size) - # Spec is broken: Our errata says that it does define - # something, but it just doesn"t relate do method and - # properties frames. Which makes it, well, suboptimal. - # https://dev.rabbitmq.com/wiki/Amqp091Errata#section_11 - limit = frame_size - 7 - 1 - - Array.new.tap do |array| - while body - payload, body = body[0..limit], body[limit..-1] - array << [0x03, payload] - end - end - end - - # We can return different: - # - instantiate given subclass of Method - # - create an OpenStruct object - # - create a hash - # - yield params into the block rather than just return - # @api plugin - def self.instantiate(*args, &block) - self.new(*args, &block) - # or OpenStruct.new(args.first) - # or args.first - # or block.call(*args) - end - end - - class Connection < Class - @name = "connection" - @method = 10 - - class Start < Method - @name = "connection.start" - @method = 10 - @index = 0x000A000A # 10, 10, 655370 - - # @return - def self.decode(data) - offset = 0 - version_major = data[offset...(offset + 1)].unpack("c").first - offset += 1 - version_minor = data[offset...(offset + 1)].unpack("c").first - offset += 1 - table_length = Table.length(data[offset..(offset + 4)]) - server_properties = Table.decode(data[offset..table_length]) - length = data[offset..(offset + 4)].unpack("N").first - offset += 4 - mechanisms = data[offset..(offset + length)] - offset += length - length = data[offset..(offset + 4)].unpack("N").first - offset += 4 - locales = data[offset..(offset + length)] - offset += length - self.new(version_major, version_minor, server_properties, mechanisms, locales) - end - - attr_reader :version_major, :version_minor, :server_properties, :mechanisms, :locales - def initialize(version_major, version_minor, server_properties, mechanisms, locales) - @version_major = version_major - @version_minor = version_minor - @server_properties = server_properties - @mechanisms = mechanisms - @locales = locales - end - end - - class StartOk < Method - @name = "connection.start-ok" - @method = 11 - @index = 0x000A000B # 10, 11, 655371 - - # @return - # ["client_properties = nil", "mechanism = "PLAIN"", "response = nil", "locale = "en_US""] - def self.encode(client_properties, mechanism, response, locale) - pieces = [] - pieces << [10, 11].pack("n2") - pieces << AMQ::Protocol::Table.encode(client_properties) - pieces << mechanism.bytesize.chr - pieces << mechanism - pieces << [response.bytesize].pack("N") - pieces << response - pieces << locale.bytesize.chr - pieces << locale - pieces.join("") - end - end - - class Secure < Method - @name = "connection.secure" - @method = 20 - @index = 0x000A0014 # 10, 20, 655380 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 4)].unpack("N").first - offset += 4 - challenge = data[offset..(offset + length)] - offset += length - self.new(challenge) - end - - attr_reader :challenge - def initialize(challenge) - @challenge = challenge - end - end - - class SecureOk < Method - @name = "connection.secure-ok" - @method = 21 - @index = 0x000A0015 # 10, 21, 655381 - - # @return - # ["response = nil"] - def self.encode(response) - pieces = [] - pieces << [10, 21].pack("n2") - pieces << [response.bytesize].pack("N") - pieces << response - pieces.join("") - end - end - - class Tune < Method - @name = "connection.tune" - @method = 30 - @index = 0x000A001E # 10, 30, 655390 - - # @return - def self.decode(data) - offset = 0 - channel_max = data[offset..(offset + 2)].unpack("n").first - offset += 2 - frame_max = data[offset..(offset + 4)].unpack("N").first - offset += 4 - heartbeat = data[offset..(offset + 2)].unpack("n").first - offset += 2 - self.new(channel_max, frame_max, heartbeat) - end - - attr_reader :channel_max, :frame_max, :heartbeat - def initialize(channel_max, frame_max, heartbeat) - @channel_max = channel_max - @frame_max = frame_max - @heartbeat = heartbeat - end - end - - class TuneOk < Method - @name = "connection.tune-ok" - @method = 31 - @index = 0x000A001F # 10, 31, 655391 - - # @return - # ["channel_max = false", "frame_max = false", "heartbeat = false"] - def self.encode(channel_max, frame_max, heartbeat) - pieces = [] - pieces << [10, 31].pack("n2") - pieces << [channel_max].pack("n") - pieces << [frame_max].pack("N") - pieces << [heartbeat].pack("n") - pieces.join("") - end - end - - class Open < Method - @name = "connection.open" - @method = 40 - @index = 0x000A0028 # 10, 40, 655400 - - # @return - # ["virtual_host = "/"", "capabilities = """, "insist = false"] - def self.encode(virtual_host, capabilities, insist) - pieces = [] - pieces << [10, 40].pack("n2") - pieces << virtual_host.bytesize.chr - pieces << virtual_host - pieces << capabilities.bytesize.chr - pieces << capabilities - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if insist - pieces.join("") - end - end - - class OpenOk < Method - @name = "connection.open-ok" - @method = 41 - @index = 0x000A0029 # 10, 41, 655401 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - known_hosts = data[offset..(offset + length)] - offset += length - self.new(known_hosts) - end - - attr_reader :known_hosts - def initialize(known_hosts) - @known_hosts = known_hosts - end - end - - class Close < Method - @name = "connection.close" - @method = 50 - @index = 0x000A0032 # 10, 50, 655410 - - # @return - def self.decode(data) - offset = 0 - reply_code = data[offset..(offset + 2)].unpack("n").first - offset += 2 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - reply_text = data[offset..(offset + length)] - offset += length - class_id = data[offset..(offset + 2)].unpack("n").first - offset += 2 - method_id = data[offset..(offset + 2)].unpack("n").first - offset += 2 - self.new(reply_code, reply_text, class_id, method_id) - end - - attr_reader :reply_code, :reply_text, :class_id, :method_id - def initialize(reply_code, reply_text, class_id, method_id) - @reply_code = reply_code - @reply_text = reply_text - @class_id = class_id - @method_id = method_id - end - - # @return - # ["reply_code = nil", "reply_text = """, "class_id = nil", "method_id = nil"] - def self.encode(reply_code, reply_text, class_id, method_id) - pieces = [] - pieces << [10, 50].pack("n2") - pieces << [reply_code].pack("n") - pieces << reply_text.bytesize.chr - pieces << reply_text - pieces << [class_id].pack("n") - pieces << [method_id].pack("n") - pieces.join("") - end - end - - class CloseOk < Method - @name = "connection.close-ok" - @method = 51 - @index = 0x000A0033 # 10, 51, 655411 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - - # @return - # [] - def self.encode() - pieces = [] - pieces << [10, 51].pack("n2") - pieces.join("") - end - end - end - - class Channel < Class - @name = "channel" - @method = 20 - - class Open < Method - @name = "channel.open" - @method = 10 - @index = 0x0014000A # 20, 10, 1310730 - - # @return - # ["out_of_band = """] - def self.encode(out_of_band) - pieces = [] - pieces << [20, 10].pack("n2") - pieces << out_of_band.bytesize.chr - pieces << out_of_band - pieces.join("") - end - end - - class OpenOk < Method - @name = "channel.open-ok" - @method = 11 - @index = 0x0014000B # 20, 11, 1310731 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 4)].unpack("N").first - offset += 4 - channel_id = data[offset..(offset + length)] - offset += length - self.new(channel_id) - end - - attr_reader :channel_id - def initialize(channel_id) - @channel_id = channel_id - end - end - - class Flow < Method - @name = "channel.flow" - @method = 20 - @index = 0x00140014 # 20, 20, 1310740 - - # @return - def self.decode(data) - offset = 0 - bit_buffer = data[offset..(offset + 1)].unpack("c").first - offset += 1 - active = (bit_buffer & (1 << 0)) != 0 - self.new(active) - end - - attr_reader :active - def initialize(active) - @active = active - end - - # @return - # ["active = nil"] - def self.encode(active) - pieces = [] - pieces << [20, 20].pack("n2") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if active - pieces.join("") - end - end - - class FlowOk < Method - @name = "channel.flow-ok" - @method = 21 - @index = 0x00140015 # 20, 21, 1310741 - - # @return - def self.decode(data) - offset = 0 - bit_buffer = data[offset..(offset + 1)].unpack("c").first - offset += 1 - active = (bit_buffer & (1 << 0)) != 0 - self.new(active) - end - - attr_reader :active - def initialize(active) - @active = active - end - - # @return - # ["active = nil"] - def self.encode(active) - pieces = [] - pieces << [20, 21].pack("n2") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if active - pieces.join("") - end - end - - class Close < Method - @name = "channel.close" - @method = 40 - @index = 0x00140028 # 20, 40, 1310760 - - # @return - def self.decode(data) - offset = 0 - reply_code = data[offset..(offset + 2)].unpack("n").first - offset += 2 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - reply_text = data[offset..(offset + length)] - offset += length - class_id = data[offset..(offset + 2)].unpack("n").first - offset += 2 - method_id = data[offset..(offset + 2)].unpack("n").first - offset += 2 - self.new(reply_code, reply_text, class_id, method_id) - end - - attr_reader :reply_code, :reply_text, :class_id, :method_id - def initialize(reply_code, reply_text, class_id, method_id) - @reply_code = reply_code - @reply_text = reply_text - @class_id = class_id - @method_id = method_id - end - - # @return - # ["reply_code = nil", "reply_text = """, "class_id = nil", "method_id = nil"] - def self.encode(reply_code, reply_text, class_id, method_id) - pieces = [] - pieces << [20, 40].pack("n2") - pieces << [reply_code].pack("n") - pieces << reply_text.bytesize.chr - pieces << reply_text - pieces << [class_id].pack("n") - pieces << [method_id].pack("n") - pieces.join("") - end - end - - class CloseOk < Method - @name = "channel.close-ok" - @method = 41 - @index = 0x00140029 # 20, 41, 1310761 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - - # @return - # [] - def self.encode() - pieces = [] - pieces << [20, 41].pack("n2") - pieces.join("") - end - end - end - - class Exchange < Class - @name = "exchange" - @method = 40 - - class Declare < Method - @name = "exchange.declare" - @method = 10 - @index = 0x0028000A # 40, 10, 2621450 - - # @return - # ["ticket = false", "exchange = nil", "type = "direct"", "passive = false", "durable = false", "auto_delete = false", "internal = false", "nowait = false", "arguments = {}"] - def self.encode(ticket, exchange, type, passive, durable, auto_delete, internal, nowait, arguments) - pieces = [] - pieces << [40, 10].pack("n2") - pieces << [ticket].pack("n") - pieces << exchange.bytesize.chr - pieces << exchange - pieces << type.bytesize.chr - pieces << type - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if passive - bit_buffer = bit_buffer | (1 << 1) if durable - bit_buffer = bit_buffer | (1 << 2) if auto_delete - bit_buffer = bit_buffer | (1 << 3) if internal - bit_buffer = bit_buffer | (1 << 4) if nowait - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class DeclareOk < Method - @name = "exchange.declare-ok" - @method = 11 - @index = 0x0028000B # 40, 11, 2621451 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - - class Delete < Method - @name = "exchange.delete" - @method = 20 - @index = 0x00280014 # 40, 20, 2621460 - - # @return - # ["ticket = false", "exchange = nil", "if_unused = false", "nowait = false"] - def self.encode(ticket, exchange, if_unused, nowait) - pieces = [] - pieces << [40, 20].pack("n2") - pieces << [ticket].pack("n") - pieces << exchange.bytesize.chr - pieces << exchange - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if if_unused - bit_buffer = bit_buffer | (1 << 1) if nowait - pieces.join("") - end - end - - class DeleteOk < Method - @name = "exchange.delete-ok" - @method = 21 - @index = 0x00280015 # 40, 21, 2621461 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - - class Bind < Method - @name = "exchange.bind" - @method = 30 - @index = 0x0028001E # 40, 30, 2621470 - - # @return - # ["ticket = false", "destination = nil", "source = nil", "routing_key = """, "nowait = false", "arguments = {}"] - def self.encode(ticket, destination, source, routing_key, nowait, arguments) - pieces = [] - pieces << [40, 30].pack("n2") - pieces << [ticket].pack("n") - pieces << destination.bytesize.chr - pieces << destination - pieces << source.bytesize.chr - pieces << source - pieces << routing_key.bytesize.chr - pieces << routing_key - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if nowait - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class BindOk < Method - @name = "exchange.bind-ok" - @method = 31 - @index = 0x0028001F # 40, 31, 2621471 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - - class Unbind < Method - @name = "exchange.unbind" - @method = 40 - @index = 0x00280028 # 40, 40, 2621480 - - # @return - # ["ticket = false", "destination = nil", "source = nil", "routing_key = """, "nowait = false", "arguments = {}"] - def self.encode(ticket, destination, source, routing_key, nowait, arguments) - pieces = [] - pieces << [40, 40].pack("n2") - pieces << [ticket].pack("n") - pieces << destination.bytesize.chr - pieces << destination - pieces << source.bytesize.chr - pieces << source - pieces << routing_key.bytesize.chr - pieces << routing_key - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if nowait - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class UnbindOk < Method - @name = "exchange.unbind-ok" - @method = 51 - @index = 0x00280033 # 40, 51, 2621491 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - end - - class Queue < Class - @name = "queue" - @method = 50 - - class Declare < Method - @name = "queue.declare" - @method = 10 - @index = 0x0032000A # 50, 10, 3276810 - - # @return - # ["ticket = false", "queue = """, "passive = false", "durable = false", "exclusive = false", "auto_delete = false", "nowait = false", "arguments = {}"] - def self.encode(ticket, queue, passive, durable, exclusive, auto_delete, nowait, arguments) - pieces = [] - pieces << [50, 10].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if passive - bit_buffer = bit_buffer | (1 << 1) if durable - bit_buffer = bit_buffer | (1 << 2) if exclusive - bit_buffer = bit_buffer | (1 << 3) if auto_delete - bit_buffer = bit_buffer | (1 << 4) if nowait - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class DeclareOk < Method - @name = "queue.declare-ok" - @method = 11 - @index = 0x0032000B # 50, 11, 3276811 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - queue = data[offset..(offset + length)] - offset += length - message_count = data[offset..(offset + 4)].unpack("N").first - offset += 4 - consumer_count = data[offset..(offset + 4)].unpack("N").first - offset += 4 - self.new(queue, message_count, consumer_count) - end - - attr_reader :queue, :message_count, :consumer_count - def initialize(queue, message_count, consumer_count) - @queue = queue - @message_count = message_count - @consumer_count = consumer_count - end - end - - class Bind < Method - @name = "queue.bind" - @method = 20 - @index = 0x00320014 # 50, 20, 3276820 - - # @return - # ["ticket = false", "queue = nil", "exchange = nil", "routing_key = """, "nowait = false", "arguments = {}"] - def self.encode(ticket, queue, exchange, routing_key, nowait, arguments) - pieces = [] - pieces << [50, 20].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - pieces << exchange.bytesize.chr - pieces << exchange - pieces << routing_key.bytesize.chr - pieces << routing_key - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if nowait - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class BindOk < Method - @name = "queue.bind-ok" - @method = 21 - @index = 0x00320015 # 50, 21, 3276821 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - - class Purge < Method - @name = "queue.purge" - @method = 30 - @index = 0x0032001E # 50, 30, 3276830 - - # @return - # ["ticket = false", "queue = nil", "nowait = false"] - def self.encode(ticket, queue, nowait) - pieces = [] - pieces << [50, 30].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if nowait - pieces.join("") - end - end - - class PurgeOk < Method - @name = "queue.purge-ok" - @method = 31 - @index = 0x0032001F # 50, 31, 3276831 - - # @return - def self.decode(data) - offset = 0 - message_count = data[offset..(offset + 4)].unpack("N").first - offset += 4 - self.new(message_count) - end - - attr_reader :message_count - def initialize(message_count) - @message_count = message_count - end - end - - class Delete < Method - @name = "queue.delete" - @method = 40 - @index = 0x00320028 # 50, 40, 3276840 - - # @return - # ["ticket = false", "queue = nil", "if_unused = false", "if_empty = false", "nowait = false"] - def self.encode(ticket, queue, if_unused, if_empty, nowait) - pieces = [] - pieces << [50, 40].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if if_unused - bit_buffer = bit_buffer | (1 << 1) if if_empty - bit_buffer = bit_buffer | (1 << 2) if nowait - pieces.join("") - end - end - - class DeleteOk < Method - @name = "queue.delete-ok" - @method = 41 - @index = 0x00320029 # 50, 41, 3276841 - - # @return - def self.decode(data) - offset = 0 - message_count = data[offset..(offset + 4)].unpack("N").first - offset += 4 - self.new(message_count) - end - - attr_reader :message_count - def initialize(message_count) - @message_count = message_count - end - end - - class Unbind < Method - @name = "queue.unbind" - @method = 50 - @index = 0x00320032 # 50, 50, 3276850 - - # @return - # ["ticket = false", "queue = nil", "exchange = nil", "routing_key = """, "arguments = {}"] - def self.encode(ticket, queue, exchange, routing_key, arguments) - pieces = [] - pieces << [50, 50].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - pieces << exchange.bytesize.chr - pieces << exchange - pieces << routing_key.bytesize.chr - pieces << routing_key - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class UnbindOk < Method - @name = "queue.unbind-ok" - @method = 51 - @index = 0x00320033 # 50, 51, 3276851 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - end - - class Basic < Class - @name = "basic" - @method = 60 - - PROPERTIES = [ - :content_type, # shortstr - :content_encoding, # shortstr - :headers, # table - :delivery_mode, # octet - :priority, # octet - :correlation_id, # shortstr - :reply_to, # shortstr - :expiration, # shortstr - :message_id, # shortstr - :timestamp, # timestamp - :type, # shortstr - :user_id, # shortstr - :app_id, # shortstr - :cluster_id, # shortstr - ] - - # 1 << 15 - def self.encode_content_type(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [0, 0x8000, result] - end - - # 1 << 14 - def self.encode_content_encoding(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [1, 0x4000, result] - end - - # 1 << 13 - def self.encode_headers(value) - pieces = [] - pieces << AMQ::Protocol::Table.encode(result) - [2, 0x2000, result] - end - - # 1 << 12 - def self.encode_delivery_mode(value) - pieces = [] - pieces << [result].pack("B") - [3, 0x1000, result] - end - - # 1 << 11 - def self.encode_priority(value) - pieces = [] - pieces << [result].pack("B") - [4, 0x0800, result] - end - - # 1 << 10 - def self.encode_correlation_id(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [5, 0x0400, result] - end - - # 1 << 9 - def self.encode_reply_to(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [6, 0x0200, result] - end - - # 1 << 8 - def self.encode_expiration(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [7, 0x0100, result] - end - - # 1 << 7 - def self.encode_message_id(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [8, 0x0080, result] - end - - # 1 << 6 - def self.encode_timestamp(value) - pieces = [] - pieces << [result].pack(">Q") - [9, 0x0040, result] - end - - # 1 << 5 - def self.encode_type(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [10, 0x0020, result] - end - - # 1 << 4 - def self.encode_user_id(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [11, 0x0010, result] - end - - # 1 << 3 - def self.encode_app_id(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [12, 0x0008, result] - end - - # 1 << 2 - def self.encode_cluster_id(value) - pieces = [] - pieces << result.bytesize.chr - pieces << result - [13, 0x0004, result] - end - - def self.encode_properties(body_size, properties) - pieces = Array.new(14) { AMQ::Protocol::EMPTY_STRING } - flags = 0 - - properties.each do |key, value| - i, f, result = self.send(:"encode_#{key}", value) - flags |= f - pieces[i] = result - end - - result = [CLASS_BASIC, 0, body_size, flags].pack("!HHQH") - [0x02, result, pieces.join("")].join("") - end - - #def self.decode_properties - # print "def %s(data, offset):" % (c.decode,) - # print " props = {}" - # print " flags, = struct.unpack_from("!H", data, offset)" - # print " offset += 2" - # print " assert (flags & 0x01) == 0" - # for i, f in enumerate(c.fields): - # print " if (flags & 0x%04x): # 1 << %i" % (1 << (15-i), 15-i) - # fields = codegen_helpers.UnpackWrapper() - # fields.add(f.n, f.t) - # fields.do_print(" "*8, "props["%s"]") - # print " return props, offset" - #end - - class Qos < Method - @name = "basic.qos" - @method = 10 - @index = 0x003C000A # 60, 10, 3932170 - - # @return - # ["prefetch_size = false", "prefetch_count = false", "global = false"] - def self.encode(prefetch_size, prefetch_count, global) - pieces = [] - pieces << [60, 10].pack("n2") - pieces << [prefetch_size].pack("N") - pieces << [prefetch_count].pack("n") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if global - pieces.join("") - end - end - - class QosOk < Method - @name = "basic.qos-ok" - @method = 11 - @index = 0x003C000B # 60, 11, 3932171 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - - class Consume < Method - @name = "basic.consume" - @method = 20 - @index = 0x003C0014 # 60, 20, 3932180 - - # @return - # ["ticket = false", "queue = nil", "consumer_tag = """, "no_local = false", "no_ack = false", "exclusive = false", "nowait = false", "arguments = {}"] - def self.encode(ticket, queue, consumer_tag, no_local, no_ack, exclusive, nowait, arguments) - pieces = [] - pieces << [60, 20].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - pieces << consumer_tag.bytesize.chr - pieces << consumer_tag - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if no_local - bit_buffer = bit_buffer | (1 << 1) if no_ack - bit_buffer = bit_buffer | (1 << 2) if exclusive - bit_buffer = bit_buffer | (1 << 3) if nowait - pieces << AMQ::Protocol::Table.encode(arguments) - pieces.join("") - end - end - - class ConsumeOk < Method - @name = "basic.consume-ok" - @method = 21 - @index = 0x003C0015 # 60, 21, 3932181 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - consumer_tag = data[offset..(offset + length)] - offset += length - self.new(consumer_tag) - end - - attr_reader :consumer_tag - def initialize(consumer_tag) - @consumer_tag = consumer_tag - end - end - - class Cancel < Method - @name = "basic.cancel" - @method = 30 - @index = 0x003C001E # 60, 30, 3932190 - - # @return - # ["consumer_tag = nil", "nowait = false"] - def self.encode(consumer_tag, nowait) - pieces = [] - pieces << [60, 30].pack("n2") - pieces << consumer_tag.bytesize.chr - pieces << consumer_tag - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if nowait - pieces.join("") - end - end - - class CancelOk < Method - @name = "basic.cancel-ok" - @method = 31 - @index = 0x003C001F # 60, 31, 3932191 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - consumer_tag = data[offset..(offset + length)] - offset += length - self.new(consumer_tag) - end - - attr_reader :consumer_tag - def initialize(consumer_tag) - @consumer_tag = consumer_tag - end - end - - class Publish < Method - @name = "basic.publish" - @method = 40 - @index = 0x003C0028 # 60, 40, 3932200 - - # @return - # ["ticket = false", "exchange = """, "routing_key = """, "mandatory = false", "immediate = false", "user_headers = nil", "payload = """, "frame_size = nil"] - def self.encode(ticket, exchange, routing_key, mandatory, immediate, user_headers, payload, frame_size) - pieces = [] - pieces << [60, 40].pack("n2") - pieces << [ticket].pack("n") - pieces << exchange.bytesize.chr - pieces << exchange - pieces << routing_key.bytesize.chr - pieces << routing_key - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if mandatory - bit_buffer = bit_buffer | (1 << 1) if immediate - pieces.join("") - end - end - - class Return < Method - @name = "basic.return" - @method = 50 - @index = 0x003C0032 # 60, 50, 3932210 - - # @return - def self.decode(data) - offset = 0 - reply_code = data[offset..(offset + 2)].unpack("n").first - offset += 2 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - reply_text = data[offset..(offset + length)] - offset += length - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - exchange = data[offset..(offset + length)] - offset += length - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - routing_key = data[offset..(offset + length)] - offset += length - self.new(reply_code, reply_text, exchange, routing_key) - end - - attr_reader :reply_code, :reply_text, :exchange, :routing_key - def initialize(reply_code, reply_text, exchange, routing_key) - @reply_code = reply_code - @reply_text = reply_text - @exchange = exchange - @routing_key = routing_key - end - end - - class Deliver < Method - @name = "basic.deliver" - @method = 60 - @index = 0x003C003C # 60, 60, 3932220 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - consumer_tag = data[offset..(offset + length)] - offset += length - delivery_tag = data[offset..(offset + 8)].unpack("N2").first - offset += 8 - bit_buffer = data[offset..(offset + 1)].unpack("c").first - offset += 1 - redelivered = (bit_buffer & (1 << 0)) != 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - exchange = data[offset..(offset + length)] - offset += length - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - routing_key = data[offset..(offset + length)] - offset += length - self.new(consumer_tag, delivery_tag, redelivered, exchange, routing_key) - end - - attr_reader :consumer_tag, :delivery_tag, :redelivered, :exchange, :routing_key - def initialize(consumer_tag, delivery_tag, redelivered, exchange, routing_key) - @consumer_tag = consumer_tag - @delivery_tag = delivery_tag - @redelivered = redelivered - @exchange = exchange - @routing_key = routing_key - end - end - - class Get < Method - @name = "basic.get" - @method = 70 - @index = 0x003C0046 # 60, 70, 3932230 - - # @return - # ["ticket = false", "queue = nil", "no_ack = false"] - def self.encode(ticket, queue, no_ack) - pieces = [] - pieces << [60, 70].pack("n2") - pieces << [ticket].pack("n") - pieces << queue.bytesize.chr - pieces << queue - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if no_ack - pieces.join("") - end - end - - class GetOk < Method - @name = "basic.get-ok" - @method = 71 - @index = 0x003C0047 # 60, 71, 3932231 - - # @return - def self.decode(data) - offset = 0 - delivery_tag = data[offset..(offset + 8)].unpack("N2").first - offset += 8 - bit_buffer = data[offset..(offset + 1)].unpack("c").first - offset += 1 - redelivered = (bit_buffer & (1 << 0)) != 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - exchange = data[offset..(offset + length)] - offset += length - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - routing_key = data[offset..(offset + length)] - offset += length - message_count = data[offset..(offset + 4)].unpack("N").first - offset += 4 - self.new(delivery_tag, redelivered, exchange, routing_key, message_count) - end - - attr_reader :delivery_tag, :redelivered, :exchange, :routing_key, :message_count - def initialize(delivery_tag, redelivered, exchange, routing_key, message_count) - @delivery_tag = delivery_tag - @redelivered = redelivered - @exchange = exchange - @routing_key = routing_key - @message_count = message_count - end - end - - class GetEmpty < Method - @name = "basic.get-empty" - @method = 72 - @index = 0x003C0048 # 60, 72, 3932232 - - # @return - def self.decode(data) - offset = 0 - length = data[offset..(offset + 1)].unpack("N")[0] - offset += 1 - cluster_id = data[offset..(offset + length)] - offset += length - self.new(cluster_id) - end - - attr_reader :cluster_id - def initialize(cluster_id) - @cluster_id = cluster_id - end - end - - class Ack < Method - @name = "basic.ack" - @method = 80 - @index = 0x003C0050 # 60, 80, 3932240 - - # @return - # ["delivery_tag = false", "multiple = false"] - def self.encode(delivery_tag, multiple) - pieces = [] - pieces << [60, 80].pack("n2") - pieces << [delivery_tag].pack(">Q") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if multiple - pieces.join("") - end - end - - class Reject < Method - @name = "basic.reject" - @method = 90 - @index = 0x003C005A # 60, 90, 3932250 - - # @return - # ["delivery_tag = nil", "requeue = true"] - def self.encode(delivery_tag, requeue) - pieces = [] - pieces << [60, 90].pack("n2") - pieces << [delivery_tag].pack(">Q") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if requeue - pieces.join("") - end - end - - class RecoverAsync < Method - @name = "basic.recover-async" - @method = 100 - @index = 0x003C0064 # 60, 100, 3932260 - - # @return - # ["requeue = false"] - def self.encode(requeue) - pieces = [] - pieces << [60, 100].pack("n2") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if requeue - pieces.join("") - end - end - - class Recover < Method - @name = "basic.recover" - @method = 110 - @index = 0x003C006E # 60, 110, 3932270 - - # @return - # ["requeue = false"] - def self.encode(requeue) - pieces = [] - pieces << [60, 110].pack("n2") - bit_buffer = 0 - bit_buffer = bit_buffer | (1 << 0) if requeue - pieces.join("") - end - end - - class RecoverOk < Method - @name = "basic.recover-ok" - @method = 111 - @index = 0x003C006F # 60, 111, 3932271 - - # @return - def self.decode(data) - offset = 0 - self.new() - end - - attr_reader - def initialize() - end - end - end - - METHODS = begin - Method.methods.inject(Hash.new) do |hash, klass| - hash.merge!(klass.index => klass) - end - end - end -end +require "amq/protocol/version" +require "amq/protocol/client"