siffer 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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