r2corba 1.6.1-x64-mingw-ucrt

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 (237) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES +173 -0
  3. data/LICENSE +59 -0
  4. data/README.rdoc +62 -0
  5. data/THANKS +54 -0
  6. data/bin/r2corba +8 -0
  7. data/bin/r2corba.bat +20 -0
  8. data/bin/ridlc +11 -0
  9. data/bin/ridlc.bat +23 -0
  10. data/bin/rins +7 -0
  11. data/bin/rins.bat +19 -0
  12. data/ext/.keep +0 -0
  13. data/lib/corba/cbase/IORMap.rb +32 -0
  14. data/lib/corba/cbase/ORB.rb +239 -0
  15. data/lib/corba/cbase/Request.rb +133 -0
  16. data/lib/corba/cbase/Streams.rb +128 -0
  17. data/lib/corba/cbase/Stub.rb +18 -0
  18. data/lib/corba/cbase/Typecode.rb +440 -0
  19. data/lib/corba/cbase/Values.rb +130 -0
  20. data/lib/corba/cbase/exception.rb +67 -0
  21. data/lib/corba/cbase/poa.rb +22 -0
  22. data/lib/corba/cbase/policies.rb +77 -0
  23. data/lib/corba/cbase/post_require.rb +13 -0
  24. data/lib/corba/cbase/require.rb +36 -0
  25. data/lib/corba/cmds/base.rb +84 -0
  26. data/lib/corba/cmds/test.rb +29 -0
  27. data/lib/corba/common/Any.rb +91 -0
  28. data/lib/corba/common/IDL.rb +100 -0
  29. data/lib/corba/common/ORB.rb +367 -0
  30. data/lib/corba/common/Object.rb +211 -0
  31. data/lib/corba/common/Request.rb +19 -0
  32. data/lib/corba/common/Servant.rb +107 -0
  33. data/lib/corba/common/Struct.rb +21 -0
  34. data/lib/corba/common/Stub.rb +78 -0
  35. data/lib/corba/common/Typecode.rb +1147 -0
  36. data/lib/corba/common/Union.rb +60 -0
  37. data/lib/corba/common/Values.rb +92 -0
  38. data/lib/corba/common/const.rb +21 -0
  39. data/lib/corba/common/exception.rb +68 -0
  40. data/lib/corba/common/require.rb +34 -0
  41. data/lib/corba/common/version.rb +21 -0
  42. data/lib/corba/idl/BiDirPolicyC.rb +62 -0
  43. data/lib/corba/idl/CosNamingC.rb +460 -0
  44. data/lib/corba/idl/CosNamingS.rb +308 -0
  45. data/lib/corba/idl/IDL.rb +20 -0
  46. data/lib/corba/idl/IORTable.pidl +61 -0
  47. data/lib/corba/idl/IORTableC.rb +116 -0
  48. data/lib/corba/idl/MessagingC.rb +903 -0
  49. data/lib/corba/idl/POAC.rb +929 -0
  50. data/lib/corba/idl/TAO_Ext.pidl +45 -0
  51. data/lib/corba/idl/TAO_ExtC.rb +178 -0
  52. data/lib/corba/idl/r2c_orb.rb +571 -0
  53. data/lib/corba/idl/require.rb +19 -0
  54. data/lib/corba/jbase/Any.rb +274 -0
  55. data/lib/corba/jbase/IORMap.rb +35 -0
  56. data/lib/corba/jbase/ORB.rb +111 -0
  57. data/lib/corba/jbase/Object.rb +98 -0
  58. data/lib/corba/jbase/Request.rb +225 -0
  59. data/lib/corba/jbase/Servant.rb +247 -0
  60. data/lib/corba/jbase/ServerRequest.rb +127 -0
  61. data/lib/corba/jbase/Streams.rb +734 -0
  62. data/lib/corba/jbase/Stub.rb +37 -0
  63. data/lib/corba/jbase/Typecode.rb +520 -0
  64. data/lib/corba/jbase/Values.rb +174 -0
  65. data/lib/corba/jbase/exception.rb +106 -0
  66. data/lib/corba/jbase/poa.rb +228 -0
  67. data/lib/corba/jbase/policies.rb +299 -0
  68. data/lib/corba/jbase/post_require.rb +13 -0
  69. data/lib/corba/jbase/require.rb +92 -0
  70. data/lib/corba/naming.rb +13 -0
  71. data/lib/corba/naming_service.rb +14 -0
  72. data/lib/corba/poa.rb +14 -0
  73. data/lib/corba/policies.rb +17 -0
  74. data/lib/corba/require.rb +16 -0
  75. data/lib/corba/svcs/ins/cos_naming.rb +432 -0
  76. data/lib/corba/svcs/ins/ins.rb +525 -0
  77. data/lib/corba/svcs/ins/naming_service.rb +118 -0
  78. data/lib/corba.rb +15 -0
  79. data/lib/ridlbe/ruby/config.rb +340 -0
  80. data/lib/ridlbe/ruby/orb.pidlc +0 -0
  81. data/lib/ridlbe/ruby/require.rb +15 -0
  82. data/lib/ridlbe/ruby/walker.rb +1605 -0
  83. data/mkrf_conf_bingem.rb +149 -0
  84. data/rakelib/bin.rake +79 -0
  85. data/rakelib/bin.rb +145 -0
  86. data/rakelib/build.rake +87 -0
  87. data/rakelib/config.rake +51 -0
  88. data/rakelib/config.rb +542 -0
  89. data/rakelib/ext.rake +183 -0
  90. data/rakelib/ext.rb +277 -0
  91. data/rakelib/ext_r2tao.rb +208 -0
  92. data/rakelib/gem.rake +251 -0
  93. data/rakelib/gem.rb +145 -0
  94. data/rakelib/package.rake +25 -0
  95. data/rakelib/test.rake +22 -0
  96. data/test/BiDirectional/Test.idl +33 -0
  97. data/test/BiDirectional/client.rb +131 -0
  98. data/test/BiDirectional/run_test.rb +67 -0
  99. data/test/BiDirectional/server.rb +167 -0
  100. data/test/CORBA_Services/Naming/BindingIterator/Test.idl +26 -0
  101. data/test/CORBA_Services/Naming/BindingIterator/client.rb +120 -0
  102. data/test/CORBA_Services/Naming/BindingIterator/run_test.rb +81 -0
  103. data/test/CORBA_Services/Naming/BindingIterator/server.rb +108 -0
  104. data/test/CORBA_Services/Naming/Corbaname/Test.idl +26 -0
  105. data/test/CORBA_Services/Naming/Corbaname/client.rb +84 -0
  106. data/test/CORBA_Services/Naming/Corbaname/run_test.rb +87 -0
  107. data/test/CORBA_Services/Naming/Corbaname/server.rb +134 -0
  108. data/test/CORBA_Services/Naming/Simple/Test.idl +26 -0
  109. data/test/CORBA_Services/Naming/Simple/client.rb +83 -0
  110. data/test/CORBA_Services/Naming/Simple/run_test.rb +81 -0
  111. data/test/CORBA_Services/Naming/Simple/server.rb +108 -0
  112. data/test/Collocation/Diamond.idl +38 -0
  113. data/test/Collocation/run_test.rb +51 -0
  114. data/test/Collocation/test.rb +201 -0
  115. data/test/Connect_Timeout/Test.idl +26 -0
  116. data/test/Connect_Timeout/client.rb +109 -0
  117. data/test/Connect_Timeout/run_test.rb +51 -0
  118. data/test/DII/Test.idl +26 -0
  119. data/test/DII/client.rb +114 -0
  120. data/test/DII/run_test.rb +68 -0
  121. data/test/DII/server.rb +94 -0
  122. data/test/DSI/Test.idl +26 -0
  123. data/test/DSI/client.rb +65 -0
  124. data/test/DSI/run_test.rb +68 -0
  125. data/test/DSI/server.rb +105 -0
  126. data/test/Exceptions/Test.idl +47 -0
  127. data/test/Exceptions/client.rb +117 -0
  128. data/test/Exceptions/run_test.rb +68 -0
  129. data/test/Exceptions/server.rb +130 -0
  130. data/test/Hello/Test.idl +26 -0
  131. data/test/Hello/client.rb +77 -0
  132. data/test/Hello/run_test.rb +70 -0
  133. data/test/Hello/server.rb +94 -0
  134. data/test/IDL_Test/Test.idl +116 -0
  135. data/test/IDL_Test/Test_inc.idl +17 -0
  136. data/test/IDL_Test/client.rb +103 -0
  137. data/test/IDL_Test/run_test.rb +68 -0
  138. data/test/IDL_Test/server.rb +103 -0
  139. data/test/IORMap/Test.idl +26 -0
  140. data/test/IORMap/client.rb +72 -0
  141. data/test/IORMap/run_test.rb +68 -0
  142. data/test/IORMap/server.rb +113 -0
  143. data/test/IORTable/Test.idl +26 -0
  144. data/test/IORTable/client.rb +74 -0
  145. data/test/IORTable/run_test.rb +68 -0
  146. data/test/IORTable/server.rb +129 -0
  147. data/test/Implicit_Conversion/Test.idl +30 -0
  148. data/test/Implicit_Conversion/client.rb +112 -0
  149. data/test/Implicit_Conversion/run_test.rb +68 -0
  150. data/test/Implicit_Conversion/server.rb +98 -0
  151. data/test/Multi_Threading/Multiple_ORB/Test.idl +26 -0
  152. data/test/Multi_Threading/Multiple_ORB/client.rb +81 -0
  153. data/test/Multi_Threading/Multiple_ORB/run_test.rb +70 -0
  154. data/test/Multi_Threading/Multiple_ORB/server.rb +107 -0
  155. data/test/Multi_Threading/Simple/Test.idl +26 -0
  156. data/test/Multi_Threading/Simple/client.rb +92 -0
  157. data/test/Multi_Threading/Simple/run_test.rb +68 -0
  158. data/test/Multi_Threading/Simple/server.rb +117 -0
  159. data/test/Multi_Threading/Threads/Test.idl +27 -0
  160. data/test/Multi_Threading/Threads/client.rb +77 -0
  161. data/test/Multi_Threading/Threads/run_test.rb +75 -0
  162. data/test/Multi_Threading/Threads/server.rb +116 -0
  163. data/test/Multi_Threading/Threads/watchdog.rb +87 -0
  164. data/test/Multiple_Servant_Interfaces/Test.idl +33 -0
  165. data/test/Multiple_Servant_Interfaces/client.rb +69 -0
  166. data/test/Multiple_Servant_Interfaces/run_test.rb +68 -0
  167. data/test/Multiple_Servant_Interfaces/server.rb +101 -0
  168. data/test/Nil/Test.idl +26 -0
  169. data/test/Nil/run_test.rb +51 -0
  170. data/test/Nil/test.rb +80 -0
  171. data/test/OBV/AbstractInterface/client.rb +178 -0
  172. data/test/OBV/AbstractInterface/run_test.rb +68 -0
  173. data/test/OBV/AbstractInterface/server.rb +149 -0
  174. data/test/OBV/AbstractInterface/test.idl +52 -0
  175. data/test/OBV/Custom/OBV.idl +18 -0
  176. data/test/OBV/Custom/OBV_impl.rb +41 -0
  177. data/test/OBV/Custom/client.rb +85 -0
  178. data/test/OBV/Custom/run_test.rb +68 -0
  179. data/test/OBV/Custom/server.rb +99 -0
  180. data/test/OBV/Simple/OBV.idl +15 -0
  181. data/test/OBV/Simple/OBV_impl.rb +26 -0
  182. data/test/OBV/Simple/client.rb +85 -0
  183. data/test/OBV/Simple/run_test.rb +68 -0
  184. data/test/OBV/Simple/server.rb +99 -0
  185. data/test/OBV/Simple_Event/Event.idl +15 -0
  186. data/test/OBV/Simple_Event/Event_impl.rb +26 -0
  187. data/test/OBV/Simple_Event/client.rb +85 -0
  188. data/test/OBV/Simple_Event/run_test.rb +68 -0
  189. data/test/OBV/Simple_Event/server.rb +99 -0
  190. data/test/OBV/Supports/client.rb +115 -0
  191. data/test/OBV/Supports/run_test.rb +68 -0
  192. data/test/OBV/Supports/server.rb +102 -0
  193. data/test/OBV/Supports/supports.idl +32 -0
  194. data/test/OBV/Supports/supports_impl.rb +59 -0
  195. data/test/OBV/Tree/client.rb +115 -0
  196. data/test/OBV/Tree/run_test.rb +68 -0
  197. data/test/OBV/Tree/server.rb +116 -0
  198. data/test/OBV/Tree/test.idl +31 -0
  199. data/test/OBV/Truncatable/Extra.idl +26 -0
  200. data/test/OBV/Truncatable/Truncatable.idl +105 -0
  201. data/test/OBV/Truncatable/Truncatable_impl.rb +85 -0
  202. data/test/OBV/Truncatable/client.rb +278 -0
  203. data/test/OBV/Truncatable/run_test.rb +68 -0
  204. data/test/OBV/Truncatable/server.rb +88 -0
  205. data/test/OBV/ValueBox/client.rb +497 -0
  206. data/test/OBV/ValueBox/run_test.rb +68 -0
  207. data/test/OBV/ValueBox/server.rb +271 -0
  208. data/test/OBV/ValueBox/valuebox.idl +101 -0
  209. data/test/OBV/ValueBox/vb_basic.idl +75 -0
  210. data/test/OBV/ValueBox/vb_struct.idl +68 -0
  211. data/test/OBV/ValueBox/vb_union.idl +21 -0
  212. data/test/Object/Test.idl +26 -0
  213. data/test/Object/client.rb +111 -0
  214. data/test/Object/run_test.rb +68 -0
  215. data/test/Object/server.rb +125 -0
  216. data/test/POA/Test.idl +27 -0
  217. data/test/POA/run_test.rb +51 -0
  218. data/test/POA/test.rb +111 -0
  219. data/test/Param_Test/Test.idl +182 -0
  220. data/test/Param_Test/client.rb +276 -0
  221. data/test/Param_Test/run_test.rb +68 -0
  222. data/test/Param_Test/server.rb +295 -0
  223. data/test/Performance/Simple/Test.idl +26 -0
  224. data/test/Performance/Simple/client.rb +89 -0
  225. data/test/Performance/Simple/run_test.rb +68 -0
  226. data/test/Performance/Simple/server.rb +94 -0
  227. data/test/Policies/Test.idl +26 -0
  228. data/test/Policies/run_test.rb +51 -0
  229. data/test/Policies/test.rb +142 -0
  230. data/test/Timeout/client.rb +206 -0
  231. data/test/Timeout/run_test.rb +68 -0
  232. data/test/Timeout/server.rb +108 -0
  233. data/test/Timeout/test.idl +18 -0
  234. data/test/lib/assert.rb +41 -0
  235. data/test/lib/test.rb +546 -0
  236. data/test/test_runner.rb +191 -0
  237. metadata +318 -0
@@ -0,0 +1,432 @@
1
+ #--------------------------------------------------------------------
2
+ # cos_naming.rb - Implementation of CosNaming servants
3
+ # for full featured naming service
4
+ #
5
+ # Author: Martin Corino
6
+ #
7
+ # This program is free software; you can redistribute it and/or
8
+ # modify it under the terms of the R2CORBA LICENSE which is
9
+ # included with this program.
10
+ #
11
+ # Copyright (c) Remedy IT Expertise BV
12
+ #--------------------------------------------------------------------
13
+
14
+ require 'corba/naming_service'
15
+ if defined?(JRUBY_VERSION) or R2CORBA::TAO::RUBY_THREAD_SUPPORT
16
+ require 'monitor'
17
+ end
18
+
19
+ module CosNaming
20
+ # add some useful methods to CosNaming::NameComponent
21
+ class NameComponent
22
+ # create key value for registering in context map
23
+ def to_key
24
+ "#{self.r_id}|#{self.kind}"
25
+ end
26
+
27
+ # convert NameComponent to stringified format according to spec
28
+ def to_string
29
+ s = ''
30
+ s = self.r_id.gsub(/([\/\.\\])/, '\\\1') unless self.r_id.to_s.empty?
31
+ s << '.' if s.empty? or !self.kind.to_s.empty?
32
+ s << self.kind.gsub(/([\/\.\\])/, '\\\1') unless self.kind.to_s.empty?
33
+ s
34
+ end
35
+
36
+ # convert stringified name back to NameComponent
37
+ def self.from_string(snc)
38
+ raise CosNaming::NamingContext::InvalidName.new if snc.empty?
39
+ esc_ = false
40
+ id_ = ''
41
+ off_ = 0
42
+ snc.size.times do |i|
43
+ case snc[i, 1]
44
+ when '\\'
45
+ esc_ = !esc_
46
+ when '.'
47
+ unless esc_
48
+ raise CosNaming::NamingContext::InvalidName.new if off_ > 0
49
+ id_ = snc[0, i].gsub(/\\(\.|\\)/, '\1')
50
+ off_ = i + 1
51
+ end
52
+ esc_ = false
53
+ else
54
+ esc_ = false
55
+ end
56
+ end
57
+ kind_ = snc[off_, snc.size].gsub(/\\(\.|\\)/, '\1')
58
+ self.new(id_, kind_)
59
+ end
60
+ end
61
+ end
62
+
63
+ module R2CORBA
64
+ module INS
65
+
66
+ ##
67
+ # Binding iterator servant class
68
+ #
69
+ class BindingIterator < POA::CosNaming::BindingIterator
70
+ def initialize(reglist, iterator_id)
71
+ @rl = reglist
72
+ @id = iterator_id
73
+ end
74
+
75
+ attr_accessor :oid
76
+
77
+ def next_one
78
+ reg = @rl.shift
79
+ [!reg.nil?, reg ? CosNaming::Binding.new(reg[:name], reg[:type]) : nil]
80
+ end
81
+
82
+ def next_n(how_many)
83
+ raise CORBA::BAD_PARAM.new if how_many < 1
84
+ bindings = []
85
+ while how_many > 0 and !@rl.empty?
86
+ reg = @rl.shift
87
+ bindings << CosNaming::Binding.new(reg[:name], reg[:type])
88
+ how_many -= 1
89
+ end
90
+ [!bindings.empty?, bindings]
91
+ end
92
+
93
+ def destroy
94
+ poa = self._default_POA
95
+ poa.deactivate_object(self.oid)
96
+ @rl.clear
97
+ INS::NamingContext.clear_iterator(@id)
98
+ end
99
+ end
100
+
101
+ ##
102
+ # Naming context servant class
103
+ #
104
+ class NamingContext < POA::CosNaming::NamingContextExt
105
+
106
+ # Map type to store bindings.
107
+ # Use synchronized version for multithreading capable implementations.
108
+ #
109
+ if defined?(JRUBY_VERSION) or R2CORBA::TAO::RUBY_THREAD_SUPPORT
110
+ MAP_TYPE = Class.new(Monitor) do
111
+ def initialize
112
+ super
113
+ @map_ = {}
114
+ end
115
+
116
+ def size()
117
+ rc = 0
118
+ synchronize do
119
+ rc = @map_.size
120
+ end
121
+ return rc
122
+ end
123
+
124
+ def has_key?(key)
125
+ rc = false
126
+ synchronize do
127
+ rc = @map_.has_key?(key)
128
+ end
129
+ return rc
130
+ end
131
+
132
+ def [](key)
133
+ rc = nil
134
+ synchronize do
135
+ rc = @map_[key]
136
+ end
137
+ return rc
138
+ end
139
+
140
+ def []=(key, value)
141
+ synchronize do
142
+ @map_[key] = value
143
+ end
144
+ value
145
+ end
146
+
147
+ def delete(key)
148
+ rc = nil
149
+ synchronize do
150
+ rc = @map_.delete(key)
151
+ end
152
+ return rc
153
+ end
154
+
155
+ def values
156
+ rc = nil
157
+ synchronize do
158
+ rc = @map_.values
159
+ end
160
+ return rc
161
+ end
162
+
163
+ def each(&block)
164
+ synchronize do
165
+ @map_.each &block
166
+ end
167
+ end
168
+ end
169
+ else
170
+ MAP_TYPE = Class.new(::Hash) do
171
+ def synchronize(&block)
172
+ yield
173
+ end
174
+ end
175
+ end
176
+
177
+ @@iterators = MAP_TYPE.new
178
+ @@iterator_max = 100
179
+
180
+ def self.set_iterator_max(max)
181
+ @@iterator_max = max.to_i
182
+ end
183
+
184
+ def self.clear_iterator(id)
185
+ @@iterators.delete(id)
186
+ end
187
+
188
+ def self.alloc_iterator(reglist)
189
+ @@iterators.synchronize do
190
+ unless @@iterators.size < @@iterator_max
191
+ oldest_id, oldest_it = @iterators.min
192
+ oldest_it.destroy
193
+ end
194
+ itid = Time.now
195
+ return (@@iterators[itid] = INS::BindingIterator.new(reglist, itid))
196
+ end
197
+ end
198
+
199
+ def initialize(orb)
200
+ @orb = orb
201
+ @map = MAP_TYPE.new
202
+ end
203
+
204
+ attr_accessor :oid
205
+
206
+ # CosNaming::NamingContext methods
207
+ #
208
+ def bind(n, obj)
209
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
210
+ if n.size > 1
211
+ nc = find_context(n)
212
+ nc.bind(n, obj)
213
+ else
214
+ register_object(n.first, n, CosNaming::Nobject, obj)
215
+ end
216
+ end
217
+
218
+ def rebind(n, obj)
219
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
220
+ if n.size > 1
221
+ nc = find_context(n)
222
+ nc.rebind(n, obj)
223
+ else
224
+ reregister_object(n.first, n, CosNaming::Nobject, obj)
225
+ end
226
+ end
227
+
228
+ def bind_context(n, nc_new)
229
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
230
+ if n.size > 1
231
+ nc = find_context(n)
232
+ nc.bind_context(n, nc_new)
233
+ else
234
+ register_object(n.first, n, CosNaming::Ncontext, nc_new)
235
+ end
236
+ end
237
+
238
+ def rebind_context(n, nc_new)
239
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
240
+ if n.size > 1
241
+ nc = find_context(n)
242
+ nc.rebind_context(n, nc_new)
243
+ else
244
+ reregister_object(n.first, n, CosNaming::Ncontext, nc_new)
245
+ end
246
+ end
247
+
248
+ def resolve(n)
249
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
250
+ find_object(n)
251
+ end
252
+
253
+ def unbind(n)
254
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
255
+ if n.size > 1
256
+ nc = find_context(n)
257
+ nc.unbind(n)
258
+ else
259
+ @map.synchronize do
260
+ raise CosNaming::NamingContext::NotFound.new(CosNaming::NamingContext::Missing_node,
261
+ n) if !@map.has_key?(n.first.r_id)
262
+ @map.delete(n.last.r_id)
263
+ end
264
+ end
265
+ end
266
+
267
+ def new_context()
268
+ poa = self._default_POA
269
+ naming_srv = NamingContext.new(@orb)
270
+ naming_srv.oid = poa.activate_object(naming_srv)
271
+ ::CosNaming::NamingContextExt::_narrow(poa.id_to_reference(naming_srv.oid))
272
+ end
273
+
274
+ def bind_new_context(n)
275
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
276
+ nc = self.new_context()
277
+ self.bind_context(n, nc)
278
+ nc
279
+ end
280
+
281
+ def destroy()
282
+ raise CosNaming::NamingContext::NotEmpty.new if @map.size > 0
283
+ return if self.oid.nil? ## no oid for root context
284
+ poa = self._default_POA
285
+ poa.deactivate_object(self.oid)
286
+ @orb = nil
287
+ end
288
+
289
+ def list(how_many)
290
+ reglist = @map.values
291
+ bindings = []
292
+ while how_many > 0 and !reglist.empty?
293
+ reg = reglist.shift
294
+ bindings << CosNaming::Binding.new(reg[:name], reg[:type])
295
+ how_many -= 1
296
+ end
297
+ bi_obj = nil
298
+ if !reglist.empty?
299
+ bi = INS::NamingContext.alloc_iterator(reglist)
300
+ poa = self._default_POA
301
+ bi.oid = poa.activate_object(bi)
302
+ bi_obj = poa.id_to_reference(bi.oid)
303
+ end
304
+ [bindings, CosNaming::BindingIterator._narrow(bi_obj)]
305
+ end
306
+
307
+ # CosNaming::NamingContextExt methods
308
+ #
309
+ def to_string(n)
310
+ raise CosNaming::NamingContext::InvalidName.new if n.size < 1
311
+ n.collect { |nc| nc.to_string }.join('/')
312
+ end
313
+
314
+ def to_name(sn)
315
+ raise CosNaming::NamingContext::InvalidName.new if sn.to_s.empty?
316
+ snc_arr = []
317
+ off_ = 0
318
+ esc_ = false
319
+ sn.size.times do |i|
320
+ case sn[i, 1]
321
+ when '\\'
322
+ esc_ = !esc_
323
+ when '/'
324
+ unless esc_
325
+ snc_arr << sn[off_, i - off_]
326
+ off_ = i + 1
327
+ end
328
+ esc_ = false
329
+ else
330
+ esc_ = false
331
+ end
332
+ end
333
+ snc_arr << sn[off_, sn.size]
334
+ [snc_arr.collect { |snc| CosNaming::NameComponent.from_string(snc) }]
335
+ end
336
+
337
+ def to_url(addr, sn)
338
+ raise CosNaming::NamingContext::InvalidName.new if addr.to_s.empty? or sn.to_s.empty?
339
+ url = 'corbaname:' + addr + '#'
340
+ sn.scan(/./) do |ch|
341
+ if /[a-zA-Z0-9;\/:\?@=+\$,\-_\.!~*\'\(\)]/ =~ ch
342
+ url << ch
343
+ else
344
+ url << '%' << ch.unpack('H2').first
345
+ end
346
+ end
347
+ url
348
+ end
349
+
350
+ def resolve_str(sn)
351
+ self.resolve(self.to_name(sn).first)
352
+ end
353
+
354
+ # Helper methods
355
+ #
356
+ protected
357
+
358
+ # register the object reference for a certain NameComponent id
359
+ # no reregistering or duplicates allowed
360
+ #
361
+ def register_object(name, full_name, type, obj)
362
+ key_ = name.to_key
363
+ @map.synchronize do
364
+ raise CosNaming::NamingContext::AlreadyBound.new if @map.has_key?(key_)
365
+ @map[key_] = {
366
+ :name => full_name,
367
+ :type => type,
368
+ :object => obj
369
+ }
370
+ end
371
+ end
372
+
373
+ # reregister the object reference for a certain NameComponent id
374
+ #
375
+ def reregister_object(name, full_name, type, obj)
376
+ key_ = name.to_key
377
+ @map.synchronize do
378
+ if @map.has_key?(key_) and @map[key_][:type] != type
379
+ why = (type == CosNaming::Nobject ? CosNaming::NamingContext::Not_object : CosNaming::NamingContext::Not_context)
380
+ raise CosNaming::NamingContext::NotFound.new(why, [])
381
+ end
382
+ @map[key_] = {
383
+ :name => full_name,
384
+ :type => type,
385
+ :object => obj
386
+ }
387
+ end
388
+ end
389
+
390
+ # walk all segments of the given CosNaming::Name to find the object
391
+ # bound by this full name
392
+ # NOTE that #find_context is used when the Name contains > 1 level
393
+ # which will automatically shift the segments of Name 1 level while
394
+ # resolving the context levels
395
+ #
396
+ def find_object(n)
397
+ if n.size > 1
398
+ nc = find_context(n)
399
+ nc.resolve(n)
400
+ else
401
+ key_ = n.first.to_key
402
+ @map.synchronize do
403
+ raise CosNaming::NamingContext::NotFound.new(CosNaming::NamingContext::Missing_node,
404
+ n) if !@map.has_key?(key_)
405
+ @map[key_][:object]
406
+ end
407
+ end
408
+ end
409
+
410
+ # check if there exists a naming context in the current context
411
+ # with the id from the first segment of the given CosNaming::Name
412
+ # return the object reference to the naming context if found
413
+ # NOTE that #shift is used to get AND remove the first Name segment
414
+ # if the naming context is found so that after this call the
415
+ # first segment of the Name is shifted one level
416
+ #
417
+ def find_context(n)
418
+ key_ = n.first.to_key
419
+ @map.synchronize do
420
+ raise CosNaming::NamingContext::NotFound.new(CosNaming::NamingContext::Missing_node,
421
+ n) if !@map.has_key?(key_)
422
+ raise CosNaming::NamingContext::NotFound.new(CosNaming::NamingContext::Not_context,
423
+ n) if @map[key_][:type] != CosNaming::Ncontext
424
+ n.shift
425
+ @map[key_][:object]
426
+ end
427
+ end
428
+
429
+ end # of NamingContext servant
430
+
431
+ end
432
+ end