Module: RSMP::SiteSxlSelection

Included in:
SiteProxy
Defined in:
lib/rsmp/proxy/site/sxl_selection.rb

Overview

Selects the SXL versions accepted by a supervisor-side site proxy.

Instance Method Summary collapse

Instance Method Details

#check_sxl_version(message) ⇒ Object



4
5
6
7
8
9
10
11
12
# File 'lib/rsmp/proxy/site/sxl_selection.rb', line 4

def check_sxl_version(message)
  if core_3_3?
    select_sxls message
  else
    select_legacy_sxl message
  end
rescue RSMP::Schema::UnknownSchemaError => e
  dont_acknowledge message, "Rejected #{message.type} message,", e.to_s
end

#rejected_sxl(requested, code, reason) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/rsmp/proxy/site/sxl_selection.rb', line 45

def rejected_sxl(requested, code, reason)
  {
    'name' => requested['name'],
    'version' => requested['version'],
    'rejected' => code,
    'reason' => reason
  }.compact
end

#select_legacy_sxl(message) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/rsmp/proxy/site/sxl_selection.rb', line 14

def select_legacy_sxl(message)
  primary = configured_sxls.first
  unless primary
    reason = 'Legacy Version message received, but no SXL is configured'
    dont_acknowledge message, "Rejected #{message.type} message,", reason
    raise HandshakeError, reason
  end

  sanitized_version = RSMP::Schema.sanitize_version(message.attribute('SXL'))
  RSMP::Schema.find_schema! primary['name'], sanitized_version
  @accepted_sxls = [{ 'name' => primary['name'], 'version' => message.attribute('SXL') }]
  @rejected_sxls = []
end

#select_sxl(requested) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/rsmp/proxy/site/sxl_selection.rb', line 33

def select_sxl(requested)
  configured = configured_sxls.find { |item| item['name'] == requested['name'] }
  return rejected_sxl(requested, 1, 'SXL not supported') unless configured

  if configured['version'].to_s == requested['version'].to_s
    RSMP::Schema.find_schema! requested['name'], requested['version'], lenient: true
    requested.slice('name', 'version', 'prefix')
  else
    rejected_sxl(requested, 2, "Supervisor only supports #{configured['version']}")
  end
end

#select_sxls(message) ⇒ Object



28
29
30
31
# File 'lib/rsmp/proxy/site/sxl_selection.rb', line 28

def select_sxls(message)
  selected_sxls = message.sxls.map { |requested| select_sxl(requested) }
  @accepted_sxls, @rejected_sxls = selected_sxls.partition { |item| item['rejected'].nil? }
end