Class: MysqlPR::Packet
- Inherits:
-
Object
- Object
- MysqlPR::Packet
- Defined in:
- lib/mysql-pr/packet.rb
Overview
Binary packet parsing for MySQL protocol
Class Method Summary collapse
-
.lcb(num) ⇒ Object
convert Numeric to LengthCodedBinary.
-
.lcs(str) ⇒ Object
convert String to LengthCodedString.
Instance Method Summary collapse
- #eof? ⇒ Boolean
-
#initialize(data) ⇒ Packet
constructor
A new instance of Packet.
- #lcb ⇒ Object
- #lcs ⇒ Object
- #read(len) ⇒ Object
- #string ⇒ Object
- #to_s ⇒ Object
- #ulong ⇒ Object
- #ushort ⇒ Object
- #utiny ⇒ Object
Constructor Details
#initialize(data) ⇒ Packet
Returns a new instance of Packet.
22 23 24 |
# File 'lib/mysql-pr/packet.rb', line 22 def initialize(data) @data = data end |
Class Method Details
.lcb(num) ⇒ Object
convert Numeric to LengthCodedBinary
7 8 9 10 11 12 13 14 |
# File 'lib/mysql-pr/packet.rb', line 7 def self.lcb(num) return "\xfb".b if num.nil? return [num].pack("C") if num < 251 return [252, num].pack("Cv") if num < 65_536 return [253, num & 0xffff, num >> 16].pack("CvC") if num < 16_777_216 [254, num & 0xffffffff, num >> 32].pack("CVV") end |
.lcs(str) ⇒ Object
convert String to LengthCodedString
17 18 19 20 |
# File 'lib/mysql-pr/packet.rb', line 17 def self.lcs(str) str = Charset.to_binary str lcb(str.length) + str end |
Instance Method Details
#eof? ⇒ Boolean
76 77 78 |
# File 'lib/mysql-pr/packet.rb', line 76 def eof? @data.getbyte(0) == 0xfe && @data.length == 5 end |
#lcb ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/mysql-pr/packet.rb', line 26 def lcb return nil if @data.empty? case v = utiny when 0xfb nil when 0xfc ushort when 0xfd c = utiny v = ushort (v << 8) + c when 0xfe v1 = ulong v2 = ulong (v2 << 32) + v1 else v end end |
#lcs ⇒ Object
47 48 49 50 51 52 |
# File 'lib/mysql-pr/packet.rb', line 47 def lcs len = lcb return nil unless len @data.slice!(0, len) end |
#read(len) ⇒ Object
54 55 56 |
# File 'lib/mysql-pr/packet.rb', line 54 def read(len) @data.slice!(0, len) end |
#string ⇒ Object
58 59 60 61 62 |
# File 'lib/mysql-pr/packet.rb', line 58 def string str = @data.unpack1("Z*") @data.slice!(0, str.length + 1) str end |
#to_s ⇒ Object
80 81 82 |
# File 'lib/mysql-pr/packet.rb', line 80 def to_s @data end |
#ulong ⇒ Object
72 73 74 |
# File 'lib/mysql-pr/packet.rb', line 72 def ulong @data.slice!(0, 4).unpack1("V") end |
#ushort ⇒ Object
68 69 70 |
# File 'lib/mysql-pr/packet.rb', line 68 def ushort @data.slice!(0, 2).unpack1("v") end |
#utiny ⇒ Object
64 65 66 |
# File 'lib/mysql-pr/packet.rb', line 64 def utiny @data.slice!(0, 1).unpack1("C") end |