siffer 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/LICENSE +1 -1
  2. data/README +93 -0
  3. data/lib/siffer.rb +13 -16
  4. data/lib/siffer/agent.rb +39 -31
  5. data/lib/siffer/core_ext/hash.rb +15 -0
  6. data/lib/siffer/messages.rb +38 -4
  7. data/lib/siffer/messages/ack.rb +160 -35
  8. data/lib/siffer/messages/event.rb +20 -0
  9. data/lib/siffer/messages/message.rb +47 -58
  10. data/lib/siffer/messages/provide.rb +25 -0
  11. data/lib/siffer/messages/provision.rb +17 -0
  12. data/lib/siffer/messages/register.rb +42 -52
  13. data/lib/siffer/messages/request.rb +138 -0
  14. data/lib/siffer/messages/response.rb +48 -0
  15. data/lib/siffer/messages/subscribe.rb +17 -0
  16. data/lib/siffer/messages/system_control.rb +94 -0
  17. data/lib/siffer/models.rb +1 -0
  18. data/lib/siffer/models/address.rb +39 -0
  19. metadata +25 -146
  20. data/README.rdoc +0 -65
  21. data/Rakefile +0 -64
  22. data/bin/siffer +0 -71
  23. data/doc/SIF ImplementationSpecification.pdf +0 -0
  24. data/doc/rdoc/classes/Siffer.html +0 -259
  25. data/doc/rdoc/classes/Siffer/Agent.html +0 -177
  26. data/doc/rdoc/classes/Siffer/Container.html +0 -165
  27. data/doc/rdoc/classes/Siffer/Messages.html +0 -81
  28. data/doc/rdoc/classes/Siffer/Messages/Ack.html +0 -115
  29. data/doc/rdoc/classes/Siffer/Messages/Acl.html +0 -83
  30. data/doc/rdoc/classes/Siffer/Messages/Error.html +0 -157
  31. data/doc/rdoc/classes/Siffer/Messages/Message.html +0 -235
  32. data/doc/rdoc/classes/Siffer/Messages/Message/Header.html +0 -107
  33. data/doc/rdoc/classes/Siffer/Messages/Register.html +0 -154
  34. data/doc/rdoc/classes/Siffer/Messages/RequestBody.html +0 -185
  35. data/doc/rdoc/classes/Siffer/Messages/Status.html +0 -156
  36. data/doc/rdoc/classes/Siffer/Messaging.html +0 -212
  37. data/doc/rdoc/classes/Siffer/Protocol.html +0 -254
  38. data/doc/rdoc/classes/Siffer/Protocol/NonPostRequest.html +0 -54
  39. data/doc/rdoc/classes/Siffer/Protocol/UnknownPath.html +0 -54
  40. data/doc/rdoc/classes/Siffer/Registration.html +0 -251
  41. data/doc/rdoc/classes/Siffer/Request.html +0 -103
  42. data/doc/rdoc/classes/Siffer/RequestLogger.html +0 -109
  43. data/doc/rdoc/classes/Siffer/Response.html +0 -91
  44. data/doc/rdoc/classes/Siffer/Server.html +0 -156
  45. data/doc/rdoc/created.rid +0 -1
  46. data/doc/rdoc/files/LICENSE.html +0 -76
  47. data/doc/rdoc/files/README_rdoc.html +0 -131
  48. data/doc/rdoc/files/lib/siffer/agent_rb.html +0 -49
  49. data/doc/rdoc/files/lib/siffer/container_rb.html +0 -57
  50. data/doc/rdoc/files/lib/siffer/messages/ack_rb.html +0 -49
  51. data/doc/rdoc/files/lib/siffer/messages/acl_rb.html +0 -49
  52. data/doc/rdoc/files/lib/siffer/messages/error_rb.html +0 -49
  53. data/doc/rdoc/files/lib/siffer/messages/message_rb.html +0 -49
  54. data/doc/rdoc/files/lib/siffer/messages/register_rb.html +0 -49
  55. data/doc/rdoc/files/lib/siffer/messages/request_body_rb.html +0 -49
  56. data/doc/rdoc/files/lib/siffer/messages/status_rb.html +0 -49
  57. data/doc/rdoc/files/lib/siffer/messages_rb.html +0 -63
  58. data/doc/rdoc/files/lib/siffer/messaging_rb.html +0 -49
  59. data/doc/rdoc/files/lib/siffer/protocol_rb.html +0 -49
  60. data/doc/rdoc/files/lib/siffer/registration_rb.html +0 -49
  61. data/doc/rdoc/files/lib/siffer/request_logger_rb.html +0 -49
  62. data/doc/rdoc/files/lib/siffer/request_rb.html +0 -49
  63. data/doc/rdoc/files/lib/siffer/response_rb.html +0 -49
  64. data/doc/rdoc/files/lib/siffer/server_rb.html +0 -49
  65. data/doc/rdoc/files/lib/siffer_rb.html +0 -64
  66. data/doc/rdoc/fr_class_index.html +0 -25
  67. data/doc/rdoc/fr_file_index.html +0 -39
  68. data/doc/rdoc/fr_method_index.html +0 -4539
  69. data/doc/rdoc/index.html +0 -15
  70. data/doc/rdoc/rdoc-style.css +0 -319
  71. data/lib/siffer/container.rb +0 -94
  72. data/lib/siffer/messages/acl.rb +0 -25
  73. data/lib/siffer/messages/error.rb +0 -174
  74. data/lib/siffer/messages/request_body.rb +0 -66
  75. data/lib/siffer/messages/status.rb +0 -55
  76. data/lib/siffer/messaging.rb +0 -99
  77. data/lib/siffer/protocol.rb +0 -164
  78. data/lib/siffer/registration.rb +0 -87
  79. data/lib/siffer/request.rb +0 -28
  80. data/lib/siffer/request_logger.rb +0 -32
  81. data/lib/siffer/response.rb +0 -26
  82. data/lib/siffer/server.rb +0 -42
  83. data/spec/agent_spec.rb +0 -48
  84. data/spec/cli_spec.rb +0 -40
  85. data/spec/container_spec.rb +0 -103
  86. data/spec/default_agent +0 -6
  87. data/spec/default_server +0 -5
  88. data/spec/message_specs/ack_spec.rb +0 -28
  89. data/spec/message_specs/error_spec.rb +0 -24
  90. data/spec/message_specs/header_spec.rb +0 -25
  91. data/spec/message_specs/message_spec.rb +0 -57
  92. data/spec/message_specs/register_spec.rb +0 -86
  93. data/spec/message_specs/request_body_spec.rb +0 -58
  94. data/spec/message_specs/status_spec.rb +0 -25
  95. data/spec/messaging_spec.rb +0 -85
  96. data/spec/protocol_spec.rb +0 -50
  97. data/spec/registration_spec.rb +0 -33
  98. data/spec/request_logger_spec.rb +0 -28
  99. data/spec/request_spec.rb +0 -25
  100. data/spec/response_spec.rb +0 -24
  101. data/spec/server_spec.rb +0 -30
  102. data/spec/spec_helper.rb +0 -35
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 h3o(software)
1
+ Copyright (c) 2008-2009 Clint Hill - h3o(software)
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README ADDED
@@ -0,0 +1,93 @@
1
+ = Siffer - h3o(software) SIF Implementation
2
+
3
+ == Welcome to Siffer
4
+
5
+ This is the h3o(software) implementation of the SIF (School Interoperability
6
+ Framework) in Ruby. The project is Ruby based and includes all of the SIF
7
+ infrastructure (Data Model, Agents, Zone Integration Servers and even database
8
+ stores).
9
+
10
+ Siffer is a platform - not a development kit. Certainly it's open source and
11
+ you can take this code and do as you wish. However, Siffer provides out of the
12
+ box all the things you need to run a SIF environment.
13
+
14
+ Simply put you can do one of two things with Siffer:
15
+
16
+ 1) You can download it and run the admin server and setup Servers and Agents.
17
+ 2) You can download it and write the code to build your own Servers and Agents.
18
+
19
+
20
+ It's currently incomplete - Stay Tuned!
21
+
22
+ == Goal
23
+
24
+ The overriding goal of this project is to provide anyone in the education
25
+ industry a quick, easy and simple SIF implementation tool.
26
+
27
+ == Philosophy
28
+
29
+ Remove the complexity from the implementation. Make the execution and
30
+ deployment of SIF easy.
31
+
32
+ Make SIF more REST'ful. As much as possible expose the actions and data models
33
+ through the URI and URL of ZIS and Agent components.
34
+
35
+ Make SIF more useful. As much as possible remove the "XML" and "Database"
36
+ questions out of the equation.
37
+
38
+ Make it simple. Make it easy. Make it fun. Make it intuitive.
39
+ Make it do exactly what needs to be done.
40
+ You're too busy for anything else.
41
+
42
+ == Implementation Information (sifinfo.org)
43
+
44
+ This implementation is based on version 2.3 of the SIF Specification.
45
+ It can be found here: http://specification.sifinfo.org/Implementation/2.3/
46
+
47
+ More information here: http://sifinfo.org.
48
+
49
+ == Description of Contents
50
+
51
+ == Useage
52
+
53
+ % siffer start agent "default agent" -p 8001 -d
54
+ % siffer start server "default zis" -p 8002 -d
55
+
56
+ % siffer stop agent "default agent"
57
+ % siffer stop server "default zis"
58
+
59
+ Or from the admin browser !!!
60
+
61
+ % siffer start admin
62
+
63
+ open http://0.0.0.0:2828 from any browser and enjoy!
64
+
65
+ == License
66
+
67
+ Siffer is released under the MIT License
68
+
69
+ == Installation
70
+
71
+ Siffer can be installed from the siffer gem:
72
+
73
+ % [sudo] gem install siffer
74
+
75
+ == Support
76
+
77
+ Please contact the author (clint.hill@h3osoftware.com) for support
78
+ issues. If you want to contribute do the same.
79
+
80
+ === Contributors
81
+
82
+ This project is developed by spec. Build spec tests (RSpec) for all of
83
+ your features. Document everything.
84
+
85
+ Fork the project and then make a pull request.
86
+ http://github.com/clinth3o/siffer
87
+
88
+ == Contact
89
+
90
+ - Author:: Clint Hill clint.hill@h3osoftware.com
91
+ - Home Page:: http://h3osoftware.com/siffer
92
+ - GitHub:: git://github.com/clinth3o/siffer.git
93
+ - RubyForge:: http://rubyforge.org/projects/siffer/
data/lib/siffer.rb CHANGED
@@ -1,19 +1,19 @@
1
1
  require 'rubygems'
2
+ require 'activesupport'
2
3
  require 'uuid'
3
- require 'rack'
4
4
  require 'builder'
5
- require 'net/http'
6
- require 'net/https'
7
- require 'rexml/document'
8
- require 'hpricot'
5
+ require 'sinatra/base'
6
+ require 'haml'
7
+ require 'rest_client'
8
+ require 'acdc'
9
9
 
10
10
  $: << File.expand_path(File.dirname(__FILE__))
11
11
 
12
12
  module Siffer
13
13
 
14
14
  VENDOR = "h3o(software)" unless defined?(Siffer::VENDOR)
15
- VERSION = [0,0,5] unless defined?(Siffer::VERSION)
16
- SIF_VERSION = [2,2,0] unless defined?(Siffer::SIF_VERSION)
15
+ VERSION = [0,0,7] unless defined?(Siffer::VERSION)
16
+ SIF_VERSION = [2,3] unless defined?(Siffer::SIF_VERSION)
17
17
  SIF_XMLNS = "http://www.sifinfo.org/infrastructure/2.x" unless defined?(Siffer::SIF_XMLNS)
18
18
 
19
19
  # The vendor of this SIF implementation (self describing for Agents)
@@ -31,14 +31,11 @@ module Siffer
31
31
  # The root directory that the SIF implementation is running from
32
32
  def self.root() @root ||= Dir.pwd end
33
33
  def self.root=(value) @root = value end
34
-
35
- end
36
34
 
37
- Siffer.autoload :Messages, "siffer/messages"
38
- Siffer.autoload :Protocol, "siffer/protocol"
39
- Siffer.autoload :Messaging, "siffer/messaging"
40
- Siffer.autoload :Registration, "siffer/registration"
41
-
42
- %w(server agent response request container request_logger).each do |component|
43
- require "siffer/#{component}"
35
+ autoload :Messages, "siffer/messages"
36
+ autoload :Models, "siffer/models"
37
+
44
38
  end
39
+
40
+ require "siffer/agent"
41
+ require "siffer/core_ext/hash"
data/lib/siffer/agent.rb CHANGED
@@ -1,43 +1,51 @@
1
1
  module Siffer
2
-
3
- class Agent
4
-
5
- include Siffer::Protocol
6
-
7
- attr_reader :name, :host, :port, :admin, :server
2
+
3
+ class Agent < Sinatra::Base
4
+
5
+ enable :static
6
+
7
+ set :root, File.join(File.dirname(__FILE__),"agent")
8
+ set :port, 2828
9
+ set :haml, {:format => :html5 }
10
+ set :agent_name, "Not Named"
11
+ set :zis_url, "Not Set"
8
12
 
9
- def initialize(options = {})
10
- raise "Zone Integration Server URL required" unless options.include? "server"
11
- @server = options["server"]
12
- raise "Administration URL required" unless options.include? "admin"
13
- @admin = options["admin"]
14
- @name = options["name"] || "Default Agent"
15
- @host = options["host"] || "localhost"
16
- @port = options["port"] || 8300
17
- @registered = false
13
+ before do
14
+ @agent_name = options.agent_name
15
+ @zis_url = options.zis_url
16
+ #redirect '/' unless registered? or request.path == "/register" or request.path == "/"
18
17
  end
19
18
 
20
- def call(env)
21
- with_each_request(env) do
22
- #process_event
23
- #process_request
24
- #process_response
19
+ helpers do
20
+ def registered?
21
+ @zis_url != "Not Set"
25
22
  end
26
23
  end
27
-
28
- def wake_up
29
- self_register unless registered?
30
- end
31
24
 
32
- def self_register
33
- registration = Siffer::Messages::Register.new(name, name)
34
- response = Response.from(server,registration)
35
- # OOOOH BAAAAD ====> Check the ACL please ! Make a parser !
36
- @registered = response.ok?
25
+ get "/" do
26
+ haml :index
37
27
  end
38
28
 
39
- def registered?
40
- @registered
29
+ post "/register" do
30
+ url = params[:zis_url]
31
+ msg = SystemControl.get_zone_status(@agent_name)
32
+ # msg = Register.new(
33
+ # :header => @agent_name,
34
+ # :version => Siffer.sif_version,
35
+ # :mode => "Pull",
36
+ # :max_buffer_size => 1024,
37
+ # :name => @agent_name,
38
+ # :application => Application.new(
39
+ # :vendor => "h3o(software)",
40
+ # :version => Siffer.version,
41
+ # :product => "Siffer"
42
+ # )
43
+ # )
44
+ puts msg
45
+ raw = RestClient.post(url, msg, :content_type => 'application/xml')
46
+ puts raw
47
+ return_msg = Message.parse(raw)
48
+ return_msg
41
49
  end
42
50
 
43
51
  end
@@ -0,0 +1,15 @@
1
+ class Hash
2
+
3
+ # Recursively changes key names to underscored symbols
4
+ def recursively_underscore
5
+ keys.each do |key|
6
+ if self[key].is_a?(Hash)
7
+ self[key.underscore.to_sym] = delete(key).recursively_underscore
8
+ else
9
+ self[key.underscore.to_sym] = delete(key)
10
+ end
11
+ end
12
+ self
13
+ end
14
+
15
+ end
@@ -1,7 +1,41 @@
1
- require 'siffer/messages/error'
2
- require 'siffer/messages/status'
3
- require 'siffer/messages/acl'
4
- require 'siffer/messages/request_body'
1
+ module Siffer
2
+ module Messages
3
+
4
+ class SifBody < AcDc::Body
5
+ def tag_name
6
+ "SIF_#{super}"
7
+ end
8
+
9
+ class << self
10
+ def acdc(xml)
11
+ super(xml.gsub(/SIF_/,''))
12
+ end
13
+ end
14
+ end
15
+
16
+ class SifElement < AcDc::Element
17
+ def initialize(values=nil, options={})
18
+ @required = options[:required] || false
19
+ super(value,options)
20
+ end
21
+ def required?
22
+ @required
23
+ end
24
+ def tag_name
25
+ "SIF_#{super}"
26
+ end
27
+ end
28
+
29
+ end
30
+ end
31
+
5
32
  require 'siffer/messages/message'
6
33
  require 'siffer/messages/ack'
34
+ require 'siffer/messages/event'
35
+ require 'siffer/messages/provide'
36
+ require 'siffer/messages/provision'
7
37
  require 'siffer/messages/register'
38
+ require 'siffer/messages/request'
39
+ require 'siffer/messages/response'
40
+ require 'siffer/messages/subscribe'
41
+ require 'siffer/messages/system_control'
@@ -1,43 +1,168 @@
1
1
  module Siffer
2
2
  module Messages
3
3
 
4
- # Acknowledge Message
5
- # Used by Server and Agent to "acknowledge" receipt of a message. Allows
6
- # Erorr and Status messages to be injected into the body.
4
+ # Element containing Status information
5
+ #@see Ack
6
+ class Status < SifBody
7
+ element :code
8
+ element :desc
9
+ element :data
10
+ end
11
+
12
+ # Element containing Error information
13
+ #@see Ack
14
+ class Error < SifBody
15
+ element :category
16
+ element :code
17
+ element :desc
18
+ element :extended_desc
19
+ end
20
+
21
+ # Message used as an acknowledgement for infrastructure messages.
22
+ # Ack must contain either a SIF_Status or a SIF_Error
23
+ #@see Status
24
+ #@see Error
7
25
  class Ack < Message
8
-
9
- attr_reader :original_msg
10
-
11
- #
12
- def initialize(source, original, options = {})
13
- raise ArgumentError, "Original message is required" unless original
14
- super(source, options)
15
- @original_msg = original
16
- @error = options[:error] || nil
17
- @status = options[:status] || nil
18
- end
19
-
20
- def content
21
- body do |ack|
22
- ack.SIF_Ack() { |xml|
23
- put_header_into xml
24
- if @original_msg.source_id.nil? or @original_msg.source_id == ""
25
- xml.SIF_OriginalSourceId
26
- else
27
- xml.SIF_OriginalSourceId(@original_msg.source_id)
28
- end
29
- if @original_msg.msg_id.nil? or @original_msg.msg_id == ""
30
- xml.SIF_OriginalMsgId
31
- else
32
- xml.SIF_OriginalMsgId(@original_msg.msg_id)
33
- end
34
- xml << @error.read unless @error.nil?
35
- xml << @status.read unless @status.nil?
36
- }
37
- end
38
- end
39
-
26
+ element :original_source_id
27
+ element :original_msg_id
28
+ element :status
29
+ element :error
40
30
  end
41
31
 
32
+ STATUS_CODE = {
33
+ 0 => "Success (ZIS ONLY). SIF_Status/SIF_Data may contain additional data.",
34
+ 1 => "Immediate SIF_Ack (AGENT ONLY). Message is persisted or processing is complete. Discard the referenced message.",
35
+ 2 => "Intermediate SIF_Ack (AGENT ONLY). Only valid in response to SIF_Event delivery. Invokes Selective Message Blocking. The event referenced must still be persisted, and no other events must be delivered, until the agent sends a \"Final\" SIF_Ack at a later time.",
36
+ 3 => "Final SIF_Ack (AGENT ONLY). Sent (a SIF_Ack with this value is never returned by an agent in response to a delivered message) by an agent to the ZIS to end Selective Message Blocking. Discard the referenced event and allow for delivery of other events.",
37
+ 7 => "Already have a message with this SIF_MsgId from you.",
38
+ 8 => "Receiver is sleeping.",
39
+ 9 => "No messages available. This is returned when an agent is trying to pull messages from a ZIS and there are no messages available."
40
+ }
41
+
42
+ ERROR_CATEGORY = {
43
+ 0 => "Unknown (This should NEVER be used if possible)",
44
+ 1 => "XML Validation",
45
+ 2 => "Encryption",
46
+ 3 => "Authentication",
47
+ 4 => "Access and Permissions",
48
+ 5 => "Registration",
49
+ 6 => "Provision",
50
+ 7 => "Subscription",
51
+ 8 => "Request and Response",
52
+ 9 => "Event Reporting and Processing",
53
+ 10 => "Transport",
54
+ 11 => "System (OS, Database, Vendor localized, etc.)",
55
+ 12 => "Generic Message Handling",
56
+ 13 => "SMB Handling"
57
+ }
58
+
59
+ XML_VALIDATION_ERROR = {
60
+ 1 => "Generic error",
61
+ 2 => "Message is not well-formed",
62
+ 3 => "Generic validation error",
63
+ 4 => "Invalid value for element/attribute",
64
+ 6 => "Missing mandatory element/attribute"
65
+ }
66
+
67
+ ENCRYPTION_ERROR = { 1 => "Generic Error" }
68
+
69
+ AUTHENTICATION_ERROR = {
70
+ 1 => "Generic error",
71
+ 2 => "Generic authentication error (with signature)",
72
+ 3 => "Missing sender's certificate",
73
+ 4 => "Invalid certificate",
74
+ 5 => "Sender's certificate is not trusted",
75
+ 6 => "Expired certificate",
76
+ 7 => "Invalid signature",
77
+ 8 => "Invalid encryption algorithm (only accepts MD4)",
78
+ 9 => "Missing public key of the receiver (when decrypting message)",
79
+ 10 => "Missing receiver's private key (when decrypting message)"
80
+ }
81
+
82
+ ACCESS_AND_PERMISSION_ERROR = {
83
+ 1 => "Generic error",
84
+ 2 => "No permission to register",
85
+ 3 => "No permission to provide this object",
86
+ 4 => "No permission to subscribe to this SIF_Event",
87
+ 5 => "No permission to request this object",
88
+ 6 => "No permission to respond to this object request",
89
+ 7 => "No permission to publish SIF_Event",
90
+ 8 => "No permission to administer policies",
91
+ 9 => "SIF_SourceId is not registered",
92
+ 10 => "No permission to publish SIF_Event Add",
93
+ 11 => "No permission to publish SIF_Event Change",
94
+ 12 => "No permission to publish SIF_Event Delete"
95
+ }
96
+
97
+ REGISTRATION_ERROR = {
98
+ 1 => "Generic error",
99
+ 2 => "The SIF_SourceId is invalid",
100
+ 3 => "Requested transport protocol is unsupported",
101
+ 4 => "Requested SIF_Version(s) not supported.",
102
+ 6 => "Requested SIF_MaxBufferSize is too small",
103
+ 7 => "ZIS requires a secure transport",
104
+ 9 => "Agent is registered for push mode (returned when a push-mode agent sends a SIF_GetMessage).",
105
+ 10 => "ZIS does not support the requested Accept-Encoding value."
106
+ }
107
+
108
+ PROVISION_ERROR = {
109
+ 1 => "Generic error",
110
+ 3 => "Invalid object",
111
+ 4 => "Object already has a provider (SIF_Provide message)"
112
+ }
113
+
114
+ SUBSCRIPTION_ERROR = {
115
+ 1 => "Generic error",
116
+ 3 => "Invalid object"
117
+ }
118
+
119
+ REQUEST_AND_RESPONSE_ERROR = {
120
+ 1 => "Generic error",
121
+ 3 => "Invalid object",
122
+ 4 => "No provider",
123
+ 7 => "Responder does not support requested SIF_Version",
124
+ 8 => "Responder does not support requested SIF_MaxBufferSize",
125
+ 9 => "Unsupported query in request",
126
+ 10 => "Invalid SIF_RequestMsgId specified in SIF_Response",
127
+ 11 => "SIF_Response is larger than requested SIF_MaxBufferSize",
128
+ 12 => "SIF_PacketNumber is invalid in SIF_Response",
129
+ 13 => "SIF_Response does not match any SIF_Version from SIF_Request",
130
+ 14 => "SIF_DestinationId does not match SIF_SourceId from SIF_Request",
131
+ 15 => "No support for SIF_ExtendedQuery",
132
+ 16 => "SIF_RequestMsgId deleted from cache due to timeout",
133
+ 17 => "SIF_RequestMsgId deleted from cache by administrator",
134
+ 18 => "SIF_Request cancelled by requesting agent"
135
+ }
136
+
137
+ EVENT_REPORTING_AND_PROCESSING_ERROR = {
138
+ 1 => "Generic error",
139
+ 3 => "Invalid event"
140
+ }
141
+
142
+ TRANSPORT_ERROR = {
143
+ 1 => "Generic error",
144
+ 2 => "Requested protocol is not supported",
145
+ 3 => "Secure channel requested and no secure path exists",
146
+ 4 => "Unable to establish connection"
147
+ }
148
+
149
+ SYSTEM_ERROR = { 1 => "Generic error" }
150
+
151
+ GENERIC_MESSAGE_HANDLING_ERROR = {
152
+ 1 => "Generic error",
153
+ 2 => "Message not supported",
154
+ 3 => "Version not supported",
155
+ 4 => "Context not supported",
156
+ 5 => "Protocol error",
157
+ 6 => "No such message (as identified by SIF_OriginalMsgId)",
158
+ 7 => "Multiple contexts not supported"
159
+ }
160
+
161
+ SMB_ERROR = {
162
+ 1 => "Generic error",
163
+ 2 => "SMB can only be invoked during a SIF_Event acknowledgement",
164
+ 3 => "Final SIF_Ack expected from Push-Mode Agent",
165
+ 4 => "Incorrect SIF_MsgId in final SIF_Ack"
166
+ }
42
167
  end
43
168
  end