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
1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 |
# File 'lib/amq/protocol/client.rb', line 1459 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
1374 1375 1376 1377 1378 1379 |
# File 'lib/amq/protocol/client.rb', line 1374 def self.encode_app_id(value) buffer = "" buffer << value.bytesize.chr buffer << value [12, 0x0008, buffer] end |
.encode_cluster_id(value) ⇒ Object
1 << 2
1382 1383 1384 1385 1386 1387 |
# File 'lib/amq/protocol/client.rb', line 1382 def self.encode_cluster_id(value) buffer = "" buffer << value.bytesize.chr buffer << value [13, 0x0004, buffer] end |
.encode_content_encoding(value) ⇒ Object
1 << 14
1290 1291 1292 1293 1294 1295 |
# File 'lib/amq/protocol/client.rb', line 1290 def self.encode_content_encoding(value) buffer = "" buffer << value.bytesize.chr buffer << value [1, 0x4000, buffer] end |
.encode_content_type(value) ⇒ Object
1 << 15
1282 1283 1284 1285 1286 1287 |
# File 'lib/amq/protocol/client.rb', line 1282 def self.encode_content_type(value) buffer = "" buffer << value.bytesize.chr buffer << value [0, 0x8000, buffer] end |
.encode_correlation_id(value) ⇒ Object
1 << 10
1319 1320 1321 1322 1323 1324 |
# File 'lib/amq/protocol/client.rb', line 1319 def self.encode_correlation_id(value) buffer = "" buffer << value.bytesize.chr buffer << value [5, 0x0400, buffer] end |
.encode_delivery_mode(value) ⇒ Object
1 << 12
1305 1306 1307 1308 1309 |
# File 'lib/amq/protocol/client.rb', line 1305 def self.encode_delivery_mode(value) buffer = "" buffer << [value].pack(PACK_CHAR) [3, 0x1000, buffer] end |
.encode_expiration(value) ⇒ Object
1 << 8
1335 1336 1337 1338 1339 1340 |
# File 'lib/amq/protocol/client.rb', line 1335 def self.encode_expiration(value) buffer = "" buffer << value.bytesize.chr buffer << value [7, 0x0100, buffer] end |
.encode_headers(value) ⇒ Object
1 << 13
1298 1299 1300 1301 1302 |
# File 'lib/amq/protocol/client.rb', line 1298 def self.encode_headers(value) buffer = "" buffer << AMQ::Protocol::Table.encode(value) [2, 0x2000, buffer] end |
.encode_message_id(value) ⇒ Object
1 << 7
1343 1344 1345 1346 1347 1348 |
# File 'lib/amq/protocol/client.rb', line 1343 def self.(value) buffer = "" buffer << value.bytesize.chr buffer << value [8, 0x0080, buffer] end |
.encode_priority(value) ⇒ Object
1 << 11
1312 1313 1314 1315 1316 |
# File 'lib/amq/protocol/client.rb', line 1312 def self.encode_priority(value) buffer = "" buffer << [value].pack(PACK_CHAR) [4, 0x0800, buffer] end |
.encode_properties(body_size, properties) ⇒ Object
1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 |
# File 'lib/amq/protocol/client.rb', line 1389 def self.encode_properties(body_size, properties) pieces, flags = [], 0 properties.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::Hacks.pack_64_big_endian(body_size) result += [flags].pack(PACK_UINT16) result + pieces.join(EMPTY_STRING) end |
.encode_reply_to(value) ⇒ Object
1 << 9
1327 1328 1329 1330 1331 1332 |
# File 'lib/amq/protocol/client.rb', line 1327 def self.encode_reply_to(value) buffer = "" buffer << value.bytesize.chr buffer << value [6, 0x0200, buffer] end |
.encode_timestamp(value) ⇒ Object
1 << 6
1351 1352 1353 1354 1355 |
# File 'lib/amq/protocol/client.rb', line 1351 def self.(value) buffer = "" buffer << AMQ::Hacks.pack_64_big_endian(value) [9, 0x0040, buffer] end |
.encode_type(value) ⇒ Object
1 << 5
1358 1359 1360 1361 1362 1363 |
# File 'lib/amq/protocol/client.rb', line 1358 def self.encode_type(value) buffer = "" buffer << value.bytesize.chr buffer << value [10, 0x0020, buffer] end |
.encode_user_id(value) ⇒ Object
1 << 4
1366 1367 1368 1369 1370 1371 |
# File 'lib/amq/protocol/client.rb', line 1366 def self.encode_user_id(value) buffer = "" buffer << value.bytesize.chr buffer << value [11, 0x0010, buffer] end |