Class: Puma::MiniSSL::Socket

Inherits:
Object
  • Object
show all
Defined in:
lib/puma/minissl.rb

Instance Method Summary collapse

Constructor Details

#initialize(socket, engine) ⇒ Socket

Returns a new instance of Socket.



4
5
6
7
8
# File 'lib/puma/minissl.rb', line 4

def initialize(socket, engine)
  @socket = socket
  @engine = engine
  @peercert = nil
end

Instance Method Details

#closeObject



83
84
85
# File 'lib/puma/minissl.rb', line 83

def close
  @socket.close
end

#engine_read_allObject



31
32
33
34
35
36
37
# File 'lib/puma/minissl.rb', line 31

def engine_read_all
  output = @engine.read
  while output and additional_output = @engine.read
    output << additional_output
  end
  output
end

#flushObject



79
80
81
# File 'lib/puma/minissl.rb', line 79

def flush
  @socket.flush
end

#peeraddrObject



87
88
89
# File 'lib/puma/minissl.rb', line 87

def peeraddr
  @socket.peeraddr
end

#peercertObject



91
92
93
94
95
96
97
98
# File 'lib/puma/minissl.rb', line 91

def peercert
  return @peercert if @peercert

  raw = @engine.peercert
  return nil unless raw

  @peercert = OpenSSL::X509::Certificate.new raw
end

#read_nonblock(size) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/puma/minissl.rb', line 39

def read_nonblock(size)
  while true
    output = engine_read_all
    return output if output

    data = @socket.read_nonblock(size)

    @engine.inject(data)
    output = engine_read_all

    return output if output

    while neg_data = @engine.extract
      @socket.write neg_data
    end
  end
end

#readpartial(size) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/puma/minissl.rb', line 14

def readpartial(size)
  while true
    output = @engine.read
    return output if output

    data = @socket.readpartial(size)
    @engine.inject(data)
    output = @engine.read

    return output if output

    while neg_data = @engine.extract
      @socket.write neg_data
    end
  end
end

#to_ioObject



10
11
12
# File 'lib/puma/minissl.rb', line 10

def to_io
  @socket
end

#write(data) ⇒ Object Also known as: syswrite



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/puma/minissl.rb', line 57

def write(data)
  need = data.bytesize

  while true
    wrote = @engine.write data
    enc = @engine.extract

    while enc
      @socket.write enc
      enc = @engine.extract
    end

    need -= wrote

    return data.bytesize if need == 0

    data = data[wrote..-1]
  end
end