Class: AMQ::Protocol::Basic
Defined Under Namespace
Classes: Ack, Cancel, CancelOk, Consume, ConsumeOk, Deliver, Get, GetEmpty, GetOk, Nack, Publish, Qos, QosOk, Recover, RecoverAsync, RecoverOk, Reject, Return
Constant Summary collapse
- 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 ]
- DECODE_PROPERTIES =
THIS DECODES ONLY FLAGS
{ 0x8000 => :content_type, 0x4000 => :content_encoding, 0x2000 => :headers, 0x1000 => :delivery_mode, 0x0800 => :priority, 0x0400 => :correlation_id, 0x0200 => :reply_to, 0x0100 => :expiration, 0x0080 => :message_id, 0x0040 => :timestamp, 0x0020 => :type, 0x0010 => :user_id, 0x0008 => :app_id, 0x0004 => :cluster_id, }
- DECODE_PROPERTIES_TYPE =
{ 0x8000 => :shortstr, 0x4000 => :shortstr, 0x2000 => :table, 0x1000 => :octet, 0x0800 => :octet, 0x0400 => :shortstr, 0x0200 => :shortstr, 0x0100 => :shortstr, 0x0080 => :shortstr, 0x0040 => :timestamp, 0x0020 => :shortstr, 0x0010 => :shortstr, 0x0008 => :shortstr, 0x0004 => :shortstr, }
- DECODE_PROPERTIES_KEYS =
Hash doesn’t give any guarantees on keys order, we will do it in a straightforward way
[ 0x8000, 0x4000, 0x2000, 0x1000, 0x0800, 0x0400, 0x0200, 0x0100, 0x0080, 0x0040, 0x0020, 0x0010, 0x0008, 0x0004, ]
Class Method Summary collapse
- .decode_properties(data) ⇒ Object
-
.encode_app_id(value) ⇒ Object
1 << 3.
-
.encode_cluster_id(value) ⇒ Object
1 << 2.
-
.encode_content_encoding(value) ⇒ Object
1 << 14.
-
.encode_content_type(value) ⇒ Object
1 << 15.
-
.encode_correlation_id(value) ⇒ Object
1 << 10.
-
.encode_delivery_mode(value) ⇒ Object
1 << 12.
-
.encode_expiration(value) ⇒ Object
1 << 8.
-
.encode_headers(value) ⇒ Object
1 << 13.
-
.encode_message_id(value) ⇒ Object
1 << 7.
-
.encode_priority(value) ⇒ Object
1 << 11.
- .encode_properties(body_size, properties) ⇒ Object
-
.encode_reply_to(value) ⇒ Object
1 << 9.
-
.encode_timestamp(value) ⇒ Object
1 << 6.
-
.encode_type(value) ⇒ Object
1 << 5.
-
.encode_user_id(value) ⇒ Object
1 << 4.
Methods inherited from Class
classes, inherited, method_id, name
Class Method Details
.decode_properties(data) ⇒ Object
1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 |
# File 'lib/amq/protocol/client.rb', line 1572 def self.decode_properties(data) offset, data_length, properties = 0, data.bytesize, {} compressed_index = data[offset, 2].unpack(PACK_UINT16)[0] offset += 2 while data_length > offset DECODE_PROPERTIES_KEYS.each do |key| next unless compressed_index >= key compressed_index -= key name = DECODE_PROPERTIES[key] || raise(RuntimeError.new("No property found for index #{index.inspect}!")) case DECODE_PROPERTIES_TYPE[key] when :shortstr size = data[offset, 1].unpack(PACK_CHAR)[0] offset += 1 result = data[offset, size] when :octet size = 1 result = data[offset, size].unpack(PACK_CHAR).first when :timestamp size = 8 result = Time.at(data[offset, size].unpack(PACK_UINT64_BE).last) when :table size = 4 + data[offset, 4].unpack(PACK_UINT32)[0] result = Table.decode(data[offset, size]) end properties[name] = result offset += size end end properties end |
.encode_app_id(value) ⇒ Object
1 << 3
1484 1485 1486 1487 1488 1489 |
# File 'lib/amq/protocol/client.rb', line 1484 def self.encode_app_id(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [12, 0x0008, buffer] end |
.encode_cluster_id(value) ⇒ Object
1 << 2
1492 1493 1494 1495 1496 1497 |
# File 'lib/amq/protocol/client.rb', line 1492 def self.encode_cluster_id(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [13, 0x0004, buffer] end |
.encode_content_encoding(value) ⇒ Object
1 << 14
1400 1401 1402 1403 1404 1405 |
# File 'lib/amq/protocol/client.rb', line 1400 def self.encode_content_encoding(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [1, 0x4000, buffer] end |
.encode_content_type(value) ⇒ Object
1 << 15
1392 1393 1394 1395 1396 1397 |
# File 'lib/amq/protocol/client.rb', line 1392 def self.encode_content_type(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [0, 0x8000, buffer] end |
.encode_correlation_id(value) ⇒ Object
1 << 10
1429 1430 1431 1432 1433 1434 |
# File 'lib/amq/protocol/client.rb', line 1429 def self.encode_correlation_id(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [5, 0x0400, buffer] end |
.encode_delivery_mode(value) ⇒ Object
1 << 12
1415 1416 1417 1418 1419 |
# File 'lib/amq/protocol/client.rb', line 1415 def self.encode_delivery_mode(value) buffer = +'' buffer << [value].pack(PACK_CHAR) [3, 0x1000, buffer] end |
.encode_expiration(value) ⇒ Object
1 << 8
1445 1446 1447 1448 1449 1450 |
# File 'lib/amq/protocol/client.rb', line 1445 def self.encode_expiration(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [7, 0x0100, buffer] end |
.encode_headers(value) ⇒ Object
1 << 13
1408 1409 1410 1411 1412 |
# File 'lib/amq/protocol/client.rb', line 1408 def self.encode_headers(value) buffer = +'' buffer << AMQ::Protocol::Table.encode(value) [2, 0x2000, buffer] end |
.encode_message_id(value) ⇒ Object
1 << 7
1453 1454 1455 1456 1457 1458 |
# File 'lib/amq/protocol/client.rb', line 1453 def self.(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [8, 0x0080, buffer] end |
.encode_priority(value) ⇒ Object
1 << 11
1422 1423 1424 1425 1426 |
# File 'lib/amq/protocol/client.rb', line 1422 def self.encode_priority(value) buffer = +'' buffer << [value].pack(PACK_CHAR) [4, 0x0800, buffer] end |
.encode_properties(body_size, properties) ⇒ Object
1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 |
# File 'lib/amq/protocol/client.rb', line 1501 def self.encode_properties(body_size, properties) pieces, flags = [], 0 properties.reject {|key, value| value.nil?}.each do |key, value| i, f, result = self.__send__(:"encode_#{key}", value) flags |= f pieces[i] = result end # result = [60, 0, body_size, flags].pack('n2Qn') result = [60, 0].pack(PACK_UINT16_X2) result += AMQ::Pack.pack_uint64_big_endian(body_size) result += [flags].pack(PACK_UINT16) pieces_joined = pieces.join(EMPTY_STRING) result.force_encoding(pieces_joined.encoding) + pieces_joined end |
.encode_reply_to(value) ⇒ Object
1 << 9
1437 1438 1439 1440 1441 1442 |
# File 'lib/amq/protocol/client.rb', line 1437 def self.encode_reply_to(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [6, 0x0200, buffer] end |
.encode_timestamp(value) ⇒ Object
1 << 6
1461 1462 1463 1464 1465 |
# File 'lib/amq/protocol/client.rb', line 1461 def self.(value) buffer = +'' buffer << AMQ::Pack.pack_uint64_big_endian(value) [9, 0x0040, buffer] end |
.encode_type(value) ⇒ Object
1 << 5
1468 1469 1470 1471 1472 1473 |
# File 'lib/amq/protocol/client.rb', line 1468 def self.encode_type(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [10, 0x0020, buffer] end |
.encode_user_id(value) ⇒ Object
1 << 4
1476 1477 1478 1479 1480 1481 |
# File 'lib/amq/protocol/client.rb', line 1476 def self.encode_user_id(value) buffer = +'' buffer << value.to_s.bytesize.chr buffer << value.to_s [11, 0x0010, buffer] end |