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
1571 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 |
# File 'lib/amq/protocol/client.rb', line 1571 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
1483 1484 1485 1486 1487 1488 |
# File 'lib/amq/protocol/client.rb', line 1483 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
1491 1492 1493 1494 1495 1496 |
# File 'lib/amq/protocol/client.rb', line 1491 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
1399 1400 1401 1402 1403 1404 |
# File 'lib/amq/protocol/client.rb', line 1399 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
1391 1392 1393 1394 1395 1396 |
# File 'lib/amq/protocol/client.rb', line 1391 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
1428 1429 1430 1431 1432 1433 |
# File 'lib/amq/protocol/client.rb', line 1428 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
1414 1415 1416 1417 1418 |
# File 'lib/amq/protocol/client.rb', line 1414 def self.encode_delivery_mode(value) buffer = '' buffer << [value].pack(PACK_CHAR) [3, 0x1000, buffer] end |
.encode_expiration(value) ⇒ Object
1 << 8
1444 1445 1446 1447 1448 1449 |
# File 'lib/amq/protocol/client.rb', line 1444 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
1407 1408 1409 1410 1411 |
# File 'lib/amq/protocol/client.rb', line 1407 def self.encode_headers(value) buffer = '' buffer << AMQ::Protocol::Table.encode(value) [2, 0x2000, buffer] end |
.encode_message_id(value) ⇒ Object
1 << 7
1452 1453 1454 1455 1456 1457 |
# File 'lib/amq/protocol/client.rb', line 1452 def self.(value) buffer = '' buffer << value.to_s.bytesize.chr buffer << value.to_s [8, 0x0080, buffer] end |
.encode_priority(value) ⇒ Object
1 << 11
1421 1422 1423 1424 1425 |
# File 'lib/amq/protocol/client.rb', line 1421 def self.encode_priority(value) buffer = '' buffer << [value].pack(PACK_CHAR) [4, 0x0800, buffer] end |
.encode_properties(body_size, properties) ⇒ Object
1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 |
# File 'lib/amq/protocol/client.rb', line 1500 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
1436 1437 1438 1439 1440 1441 |
# File 'lib/amq/protocol/client.rb', line 1436 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
1460 1461 1462 1463 1464 |
# File 'lib/amq/protocol/client.rb', line 1460 def self.(value) buffer = '' buffer << AMQ::Pack.pack_uint64_big_endian(value) [9, 0x0040, buffer] end |
.encode_type(value) ⇒ Object
1 << 5
1467 1468 1469 1470 1471 1472 |
# File 'lib/amq/protocol/client.rb', line 1467 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
1475 1476 1477 1478 1479 1480 |
# File 'lib/amq/protocol/client.rb', line 1475 def self.encode_user_id(value) buffer = '' buffer << value.to_s.bytesize.chr buffer << value.to_s [11, 0x0010, buffer] end |