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
1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 |
# File 'lib/amq/protocol/client.rb', line 1498 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_UINT32_X2).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
1410 1411 1412 1413 1414 1415 |
# File 'lib/amq/protocol/client.rb', line 1410 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
1418 1419 1420 1421 1422 1423 |
# File 'lib/amq/protocol/client.rb', line 1418 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
1326 1327 1328 1329 1330 1331 |
# File 'lib/amq/protocol/client.rb', line 1326 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
1318 1319 1320 1321 1322 1323 |
# File 'lib/amq/protocol/client.rb', line 1318 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
1355 1356 1357 1358 1359 1360 |
# File 'lib/amq/protocol/client.rb', line 1355 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
1341 1342 1343 1344 1345 |
# File 'lib/amq/protocol/client.rb', line 1341 def self.encode_delivery_mode(value) buffer = '' buffer << [value].pack(PACK_CHAR) [3, 0x1000, buffer] end |
.encode_expiration(value) ⇒ Object
1 << 8
1371 1372 1373 1374 1375 1376 |
# File 'lib/amq/protocol/client.rb', line 1371 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
1334 1335 1336 1337 1338 |
# File 'lib/amq/protocol/client.rb', line 1334 def self.encode_headers(value) buffer = '' buffer << AMQ::Protocol::Table.encode(value) [2, 0x2000, buffer] end |
.encode_message_id(value) ⇒ Object
1 << 7
1379 1380 1381 1382 1383 1384 |
# File 'lib/amq/protocol/client.rb', line 1379 def self.(value) buffer = '' buffer << value.to_s.bytesize.chr buffer << value.to_s [8, 0x0080, buffer] end |
.encode_priority(value) ⇒ Object
1 << 11
1348 1349 1350 1351 1352 |
# File 'lib/amq/protocol/client.rb', line 1348 def self.encode_priority(value) buffer = '' buffer << [value].pack(PACK_CHAR) [4, 0x0800, buffer] end |
.encode_properties(body_size, properties) ⇒ Object
1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 |
# File 'lib/amq/protocol/client.rb', line 1427 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
1363 1364 1365 1366 1367 1368 |
# File 'lib/amq/protocol/client.rb', line 1363 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
1387 1388 1389 1390 1391 |
# File 'lib/amq/protocol/client.rb', line 1387 def self.(value) buffer = '' buffer << AMQ::Pack.pack_uint64_big_endian(value) [9, 0x0040, buffer] end |
.encode_type(value) ⇒ Object
1 << 5
1394 1395 1396 1397 1398 1399 |
# File 'lib/amq/protocol/client.rb', line 1394 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
1402 1403 1404 1405 1406 1407 |
# File 'lib/amq/protocol/client.rb', line 1402 def self.encode_user_id(value) buffer = '' buffer << value.to_s.bytesize.chr buffer << value.to_s [11, 0x0010, buffer] end |