Class: MysqlPR::Packet

Inherits:
Object
  • Object
show all
Defined in:
lib/mysql-pr/packet.rb

Overview

Binary packet parsing for MySQL protocol

Class Method Summary collapse

Instance Method Summary collapse

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

Returns:

  • (Boolean)


76
77
78
# File 'lib/mysql-pr/packet.rb', line 76

def eof?
  @data.getbyte(0) == 0xfe && @data.length == 5
end

#lcbObject



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

#lcsObject



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

#stringObject



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_sObject



80
81
82
# File 'lib/mysql-pr/packet.rb', line 80

def to_s
  @data
end

#ulongObject



72
73
74
# File 'lib/mysql-pr/packet.rb', line 72

def ulong
  @data.slice!(0, 4).unpack1("V")
end

#ushortObject



68
69
70
# File 'lib/mysql-pr/packet.rb', line 68

def ushort
  @data.slice!(0, 2).unpack1("v")
end

#utinyObject



64
65
66
# File 'lib/mysql-pr/packet.rb', line 64

def utiny
  @data.slice!(0, 1).unpack1("C")
end