opcua 0.16 → 0.21

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eacc56e17f6089d460714d4f7a5d62860ef4ab5949a6567fa239f981b66c6a54
4
- data.tar.gz: ff613e4dc01c4298d97ee35a63f31650f549ad8a7c3d14b791a5795e9563e4eb
3
+ metadata.gz: dede52136945d72311f619c6fe2299896aeb67eb00db4a6a2ebc0c985422c7d6
4
+ data.tar.gz: 285eb4c834021ae986c91d492a7e77fb847947be66c69284c24a187dfee816d5
5
5
  SHA512:
6
- metadata.gz: b2989056d754063f6be7a5d0a75700cb5186c87749e794c683ed4cf233629f37c97178e825e49fc55d54ad04e885698faa78a3b24e470a0805dfd4863c2a2de9
7
- data.tar.gz: 333b4e4c447d3ae0651496d960110212135c37e49a765a1b2c74d71991a56c440789af4e9079a8b06583ccd3f201038f3b1ff160054e6ac601df0ba6221a69af
6
+ metadata.gz: a75f3952786bdf049432cf6dd46a11f770f6da45d5fcbf8a95ed9528e122e1918cafbfacf8e2a7c80c40987c598601a5326834c4905ecb5e080adfc52b91ee0e
7
+ data.tar.gz: 699a713490e9059cf6ed4b610b159da174e2117210bdff60dcedf502d9586318cc7c39343ffa71dbbcdb16b7e5e821be7f25c451c0cb8f5994839db133cae2b1
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # OPC-UA Ruby Bindings (open62541)
2
2
 
3
- The development of OPC UA applications takes currently a lot of effort. This is caused by the large possibilities of the OPC UA specification. With this implemtation we want to define some conventions, which shoud make the technology more useable.
3
+ The development of OPC UA applications takes currently a lot of effort. This is caused by the large possibilities of the OPC UA specification. With this implementation we want to define some conventions, which shoud make the technology more useable.
4
4
 
5
5
  ## Table of Contents
6
6
 
@@ -33,32 +33,28 @@ Copyright (C) 2019-* Jürgen "eTM" Mangler . opcua-sm
33
33
 
34
34
  ```sh
35
35
  # Debian/Ubuntu
36
- apt install build-essential cmake-curses-gui libmbedtls-dev libxml2-dev libxslt-dev libz-dev libssl-dev libicu-dev
36
+ apt install build-essential cmake-curses-gui libmbedtls-dev libxml2-dev libxslt-dev libz-dev libssl-dev libicu-dev
37
37
  # Fedora/Redhat
38
38
  dnf install @buildsys-build @development-tools cmake libxml2-devel libxslt-devel zlib-devel libicu-devel mbedtls-devel
39
39
  ```
40
40
 
41
- Dependency: https://github.com/open62541/open62541 > 0.4 (master branch as of 2019-04-26)
41
+ Dependency: https://github.com/open62541/open62541 > 1.1 (master branch as of 2020-06-04)
42
42
 
43
43
  ```sh
44
44
  git clone https://github.com/open62541/open62541.git
45
45
  cd open62541
46
- mkdir build
47
- cd build
48
- cmake ..
49
- ccmake ..
50
- # Configuration, see picture below
46
+ mkdir build && cd build
47
+ cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DUA_ENABLE_AMALGAMATION=ON -DUA_ENABLE_ENCRYPTION=ON -DUA_ENABLE_ENCRYPTION_MBEDTLS=ON ..
51
48
  make
52
49
  sudo make install
53
50
  gem install opcua
54
51
  ```
55
52
 
56
- ![ccmake Config](config.png)
57
-
58
53
  If the installation works correctly, but examples are still complaining about missing lib62541.so, try this:
59
54
 
60
55
  ```sh
61
- sudo echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf # add to libs path
56
+ sudo echo "/usr/local/lib" >> /etc/ld.so.conf.d/local.conf # add to libs path
57
+ sudo echo "/usr/local/lib64" >> /etc/ld.so.conf.d/local.conf # add to libs path
62
58
  sudo ldconfig # update libs
63
59
  sudo ldconfig -p | grep libopen62541 # check if its there
64
60
  ```
@@ -75,7 +71,7 @@ The server has following functions:
75
71
  * Find nodes in the adress space
76
72
  * Loop for getting real life data
77
73
 
78
- Every server application uses the Demonite gem, which allows to run the server as service.
74
+ Every server application uses the Daemonite gem, which allows to run the server as service.
79
75
  ```ruby
80
76
  Daemonite.new do
81
77
  on startup do |opts|
@@ -101,7 +97,7 @@ server.add_namespace "https://yourdomain/testserver"
101
97
  ```
102
98
 
103
99
 
104
- #### Create ObjectTypes
100
+ #### Create ObjectTypes
105
101
 
106
102
  Basically all new created types are subtypes of the _BaseObjectType_. With ```server.types.add_object_type(:TestObjectType)``` a new type is defined in the information model. All nodes of the new created type are defined in the ```tap{}``` region.
107
103
 
@@ -137,7 +133,7 @@ With ```.add_object(:TestObject)``` a new object named _TestObject_ is added. Th
137
133
 
138
134
  ##### Add Method
139
135
 
140
- Methods are added with the ```.add_method(:TestMethod)``` function. Per default the method has no input and output arguments. By adding additional arguments you can define input arguments. The code for defining a method with input arguments looks like
136
+ Methods are added with the ```.add_method(:TestMethod)``` function. Per default the method has no input and output arguments. By adding additional arguments you can define input arguments. The code for defining a method with input arguments looks like
141
137
  ```ruby
142
138
  t.add_method :TestMethod, inputarg1: OPCUA::TYPES::STRING, inputarg2: OPCUA::TYPES::DATETIME do |node, inputarg1, inputarg2|
143
139
  #do some stuff here
@@ -148,7 +144,7 @@ in the ```do...end```section you write the code which should be executed by call
148
144
 
149
145
  #### Manifest Objects
150
146
 
151
- ObjectTypes can be instiantiated with the ```.manifest``` method.
147
+ ObjectTypes can be instiantiated with the ```.manifest``` method.
152
148
 
153
149
  ```ruby
154
150
  testobject =server.objects.manifest(:TestObjectType, to)
@@ -164,7 +160,7 @@ testobject.delete!
164
160
 
165
161
  #### Find Nodes in the Addressspace
166
162
 
167
- To get a specific node you should use the ```.find``` method.
163
+ To get a specific node you should use the ```.find``` method.
168
164
  ```ruby
169
165
  tv = to.find :TestVariable
170
166
  ```
@@ -195,7 +191,7 @@ You can assign vlaues without definig a datatype. The correct _DataType_ will be
195
191
  #### Loop for getting Real Life Data
196
192
  The server loop looks like follows:
197
193
  ```ruby
198
- run do
194
+ run do
199
195
  sleep server.run
200
196
  to.value = 'Testvariable1'
201
197
  p to.value
@@ -204,7 +200,7 @@ The server loop looks like follows:
204
200
  end
205
201
  ```
206
202
 
207
- The loop starts with ```sleep server.run```. This is recommended by the open62541 developer. With the ```.value``` function you can write or get the value of a node.
203
+ The loop starts with ```sleep server.run```. This is recommended by the open62541 developer. With the ```.value``` function you can write or get the value of a node.
208
204
 
209
205
  ### Client
210
206
  TBD. See examples subdirectory.
data/Rakefile CHANGED
@@ -1,24 +1,26 @@
1
1
  require 'rubygems/package_task'
2
- require 'rake/extensiontask'
3
2
  require 'fileutils'
4
3
 
5
4
  spec = eval(File.read('opcua.gemspec'))
6
5
 
7
- puts `cert/generate_certificate.sh`
6
+ task :compile do
7
+ require 'rake/extensiontask'
8
8
 
9
- spec.extensions.each do |f|
10
- Rake.application.clear
9
+ puts `cert/generate_certificate.sh`
10
+ spec.extensions.each do |f|
11
+ Rake.application.clear
11
12
 
12
- task :default => [:compile]
13
+ task :default => [:compile]
13
14
 
14
- t = Rake::ExtensionTask.new "opcua/" + File.basename(File.dirname(f)), spec
15
- Rake::Task[:default].invoke
15
+ t = Rake::ExtensionTask.new "opcua/" + File.basename(File.dirname(f)), spec
16
+ Rake::Task[:default].invoke
17
+ end
18
+ Rake.application.clear
16
19
  end
17
- Rake.application.clear
18
20
 
19
- task :default => [:gem]
21
+ task :default => [:compile]
20
22
 
21
- pkg = Gem::PackageTask.new(spec) do |pkg|
23
+ Gem::PackageTask.new(spec) do |pkg|
22
24
  pkg.need_zip = true
23
25
  pkg.need_tar = true
24
26
  FileUtils.mkdir 'pkg' rescue nil
@@ -26,10 +28,16 @@ pkg = Gem::PackageTask.new(spec) do |pkg|
26
28
  FileUtils.ln_sf "#{pkg.name}.gem", "pkg/#{spec.name}.gem"
27
29
  end
28
30
 
29
- task :push => :gem do |r|
31
+ task :push => :gem do
30
32
  `gem push pkg/opcua.gem`
31
33
  end
32
34
 
33
- task :install => :gem do |r|
35
+ task :install => :gem do
34
36
  `gem install pkg/opcua.gem`
35
37
  end
38
+
39
+ task :clean do
40
+ FileUtils.rm_rf(File.join(__dir__,'tmp'))
41
+ FileUtils.rm_rf(File.join(__dir__,'lib','opcua','client.so'))
42
+ FileUtils.rm_rf(File.join(__dir__,'lib','opcua','server.so'))
43
+ end
@@ -1,70 +1,70 @@
1
1
  unsigned char cert_der[] = {
2
2
  0x30, 0x82, 0x03, 0x18, 0x30, 0x82, 0x02, 0x00, 0xa0, 0x03, 0x02, 0x01,
3
- 0x02, 0x02, 0x14, 0x0c, 0x57, 0xd8, 0x38, 0xb3, 0xbc, 0xaf, 0xad, 0xbf,
4
- 0xcd, 0x64, 0x91, 0xbf, 0x41, 0xf8, 0x55, 0x1c, 0x74, 0x1f, 0x07, 0x30,
3
+ 0x02, 0x02, 0x14, 0x05, 0x1e, 0x58, 0x4d, 0x94, 0xf5, 0x46, 0x0f, 0xf5,
4
+ 0xd2, 0xe0, 0xb9, 0x56, 0xa7, 0x5a, 0x46, 0xe1, 0x3d, 0x3f, 0xa1, 0x30,
5
5
  0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x0b,
6
6
  0x05, 0x00, 0x30, 0x15, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04,
7
7
  0x03, 0x0c, 0x0a, 0x72, 0x75, 0x62, 0x79, 0x2d, 0x6f, 0x70, 0x63, 0x75,
8
- 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x31, 0x30, 0x30, 0x32, 0x31,
9
- 0x30, 0x34, 0x35, 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x39,
10
- 0x32, 0x31, 0x31, 0x30, 0x34, 0x35, 0x31, 0x31, 0x5a, 0x30, 0x15, 0x31,
8
+ 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x37, 0x31, 0x34, 0x31,
9
+ 0x37, 0x32, 0x39, 0x32, 0x35, 0x5a, 0x17, 0x0d, 0x32, 0x31, 0x30, 0x37,
10
+ 0x30, 0x34, 0x31, 0x37, 0x32, 0x39, 0x32, 0x35, 0x5a, 0x30, 0x15, 0x31,
11
11
  0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c, 0x0a, 0x72, 0x75,
12
12
  0x62, 0x79, 0x2d, 0x6f, 0x70, 0x63, 0x75, 0x61, 0x30, 0x82, 0x01, 0x22,
13
13
  0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01,
14
14
  0x01, 0x05, 0x00, 0x03, 0x82, 0x01, 0x0f, 0x00, 0x30, 0x82, 0x01, 0x0a,
15
- 0x02, 0x82, 0x01, 0x01, 0x00, 0xd2, 0x08, 0x20, 0xb4, 0xe6, 0xb0, 0x54,
16
- 0xae, 0x0b, 0x3e, 0xcb, 0x16, 0xaa, 0xa4, 0xa0, 0x45, 0x9b, 0xad, 0x06,
17
- 0xdf, 0xc8, 0xa1, 0xa0, 0xdf, 0x70, 0x85, 0xee, 0x67, 0xeb, 0xb9, 0x32,
18
- 0x90, 0x85, 0x43, 0x59, 0x33, 0x14, 0x48, 0x63, 0xcb, 0x1c, 0xf0, 0xa4,
19
- 0xd3, 0xd4, 0xd6, 0x86, 0x94, 0x7c, 0x16, 0xa9, 0x25, 0x26, 0x9d, 0xae,
20
- 0xd6, 0xe5, 0x51, 0xb3, 0xcb, 0xe1, 0xa2, 0x59, 0xde, 0x90, 0xef, 0x8c,
21
- 0xbc, 0x26, 0x11, 0x57, 0x8c, 0x12, 0xa1, 0xdf, 0x79, 0x1a, 0xab, 0xb3,
22
- 0x1d, 0x3a, 0xd0, 0xcf, 0x4d, 0xa2, 0x4d, 0x62, 0x9c, 0x61, 0x2c, 0x17,
23
- 0x30, 0xf7, 0xa9, 0x8b, 0x5f, 0xec, 0xc3, 0xed, 0x5b, 0x69, 0x5f, 0x55,
24
- 0x21, 0xd0, 0xa1, 0xfb, 0xef, 0x9f, 0x40, 0xc7, 0x7e, 0x2a, 0x07, 0xba,
25
- 0x18, 0x65, 0xc0, 0xb0, 0xa3, 0x32, 0x0c, 0x22, 0xf3, 0xff, 0x03, 0xa3,
26
- 0x91, 0x52, 0x1b, 0xa5, 0x80, 0x72, 0xf4, 0x95, 0x81, 0xfa, 0x25, 0xcc,
27
- 0x52, 0xcc, 0x92, 0xf2, 0xcb, 0xa0, 0x9a, 0x86, 0xf4, 0x78, 0x48, 0x0a,
28
- 0x01, 0x0f, 0x63, 0x0d, 0x44, 0xc9, 0xa7, 0x68, 0x41, 0xd9, 0x7a, 0xca,
29
- 0x0a, 0x21, 0xfd, 0x74, 0x6f, 0x14, 0x9d, 0x6a, 0x01, 0xfa, 0x98, 0x06,
30
- 0xba, 0xd3, 0x16, 0x62, 0xb6, 0x53, 0x1d, 0xe0, 0x9c, 0x6f, 0x4a, 0xea,
31
- 0x88, 0x9d, 0x12, 0x60, 0x06, 0x72, 0xb2, 0x36, 0xa1, 0xf3, 0xae, 0x60,
32
- 0x9a, 0xf8, 0x33, 0xc3, 0xbc, 0xee, 0xce, 0xf9, 0xa5, 0x7e, 0xea, 0xbd,
33
- 0x3c, 0xdd, 0xe6, 0x09, 0xa3, 0x68, 0xf8, 0xbf, 0xe8, 0x08, 0x3e, 0x94,
34
- 0xca, 0xcf, 0x84, 0xbb, 0x11, 0x40, 0x45, 0x46, 0x7d, 0xd1, 0x77, 0x33,
35
- 0x71, 0x14, 0x02, 0x4f, 0xa6, 0xaf, 0x4d, 0x73, 0xf2, 0xf5, 0x98, 0xeb,
36
- 0x5f, 0xeb, 0xf3, 0xb4, 0xb6, 0x62, 0x92, 0x15, 0x55, 0x02, 0x03, 0x01,
15
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0xce, 0x51, 0xee, 0xa9, 0xf6, 0xe0, 0x2c,
16
+ 0x30, 0x8c, 0x04, 0x3a, 0x0d, 0x74, 0x78, 0x7a, 0x93, 0x00, 0x47, 0xeb,
17
+ 0x85, 0x26, 0x38, 0x70, 0x52, 0xeb, 0xcc, 0xf4, 0x21, 0xfe, 0x68, 0x8b,
18
+ 0x1d, 0x57, 0xce, 0x9f, 0xb9, 0x18, 0x62, 0x99, 0x90, 0x4d, 0xc5, 0x00,
19
+ 0x41, 0x71, 0x9d, 0x71, 0xcf, 0xf2, 0xca, 0xd5, 0x88, 0x21, 0x40, 0xfb,
20
+ 0x38, 0x1d, 0xc4, 0xd4, 0xb5, 0xfd, 0x51, 0xdc, 0x9f, 0x8d, 0xed, 0x7b,
21
+ 0x15, 0xf4, 0xd8, 0x08, 0x07, 0x06, 0x50, 0xe4, 0x86, 0xcc, 0x72, 0x63,
22
+ 0xc1, 0x8e, 0x4c, 0xd1, 0xac, 0xc5, 0xdd, 0xac, 0xff, 0x3f, 0x0a, 0xde,
23
+ 0x7e, 0x84, 0x4e, 0xf9, 0x92, 0x35, 0x1a, 0xca, 0x94, 0x85, 0x35, 0x1c,
24
+ 0xcc, 0x9b, 0xda, 0x04, 0x07, 0xd5, 0x07, 0xf9, 0x7f, 0xb0, 0x5f, 0xdc,
25
+ 0x97, 0x1a, 0xac, 0x8b, 0xdb, 0x56, 0x2e, 0x3f, 0x4c, 0x1d, 0x3e, 0xab,
26
+ 0x0f, 0xde, 0x43, 0x18, 0xc0, 0xa8, 0x61, 0xff, 0xac, 0xe6, 0x46, 0x90,
27
+ 0x60, 0xb1, 0x6c, 0x72, 0x3d, 0x38, 0x27, 0xcb, 0xb4, 0x3c, 0x6e, 0x61,
28
+ 0x6f, 0x9e, 0x44, 0xfd, 0xe7, 0xd7, 0x07, 0x9b, 0x5a, 0x00, 0xfa, 0x17,
29
+ 0x8c, 0xa7, 0x8a, 0x31, 0x5d, 0x77, 0x18, 0xd4, 0xec, 0xa3, 0x54, 0x64,
30
+ 0xe2, 0x7b, 0x56, 0xde, 0xf2, 0x6f, 0x94, 0xc3, 0xd4, 0xa9, 0xe0, 0xed,
31
+ 0x96, 0xa2, 0x5c, 0x57, 0xa7, 0x49, 0xc4, 0x84, 0xe8, 0x8e, 0xc5, 0xb0,
32
+ 0xd1, 0x56, 0x05, 0x36, 0xe8, 0xd1, 0xd5, 0x57, 0xb7, 0xbc, 0x31, 0xc3,
33
+ 0xe6, 0x3f, 0x78, 0x09, 0x3e, 0x25, 0xdc, 0x05, 0x62, 0xd3, 0xef, 0xde,
34
+ 0xa8, 0xb9, 0x42, 0x3a, 0x16, 0x82, 0xc7, 0x83, 0x46, 0x65, 0xf2, 0xe0,
35
+ 0xbb, 0xf4, 0x25, 0x4f, 0x5d, 0xcb, 0x7c, 0x96, 0x76, 0x7c, 0x4c, 0xed,
36
+ 0xcb, 0xe3, 0xbb, 0x0c, 0xaa, 0x44, 0xbf, 0x36, 0x47, 0x02, 0x03, 0x01,
37
37
  0x00, 0x01, 0xa3, 0x60, 0x30, 0x5e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
38
- 0x0e, 0x04, 0x16, 0x04, 0x14, 0x35, 0x61, 0xa6, 0xff, 0xf7, 0x22, 0xda,
39
- 0x39, 0xf1, 0x85, 0x87, 0xdd, 0x4a, 0x43, 0xcc, 0xd3, 0x35, 0xd0, 0x5d,
40
- 0xb3, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04,
38
+ 0x0e, 0x04, 0x16, 0x04, 0x14, 0x6a, 0xa0, 0xd5, 0x2a, 0xf6, 0x52, 0x09,
39
+ 0x4c, 0x9b, 0xa8, 0xb4, 0xb7, 0xe0, 0xe7, 0x94, 0x84, 0xd0, 0xa3, 0xb4,
40
+ 0x23, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04,
41
41
  0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30, 0x1c, 0x06, 0x03, 0x55, 0x1d,
42
42
  0x11, 0x04, 0x15, 0x30, 0x13, 0x86, 0x11, 0x72, 0x75, 0x62, 0x79, 0x2d,
43
43
  0x6f, 0x70, 0x63, 0x75, 0x61, 0x3a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74,
44
44
  0x30, 0x0e, 0x06, 0x03, 0x55, 0x1d, 0x0f, 0x01, 0x01, 0xff, 0x04, 0x04,
45
45
  0x03, 0x02, 0x05, 0xa0, 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
46
46
  0xf7, 0x0d, 0x01, 0x01, 0x0b, 0x05, 0x00, 0x03, 0x82, 0x01, 0x01, 0x00,
47
- 0x87, 0xb2, 0xfb, 0xa2, 0xaa, 0x95, 0x5c, 0xc8, 0x79, 0x4f, 0x65, 0x95,
48
- 0xc7, 0x75, 0xbb, 0x9f, 0x8f, 0x08, 0x20, 0x42, 0x1a, 0xb0, 0x28, 0x58,
49
- 0xe3, 0xbf, 0x1f, 0x9f, 0xbb, 0x37, 0xb8, 0x1d, 0x45, 0x82, 0x02, 0x8c,
50
- 0xbe, 0x34, 0x15, 0xb8, 0x8d, 0xd5, 0x13, 0x88, 0xf6, 0x8a, 0xe4, 0xd6,
51
- 0xe5, 0x73, 0xaa, 0x31, 0x02, 0xcf, 0xaf, 0x98, 0xe8, 0x2c, 0xac, 0xa0,
52
- 0x9d, 0xe6, 0xb1, 0xda, 0x34, 0x05, 0x29, 0xf7, 0x6a, 0x10, 0x23, 0x69,
53
- 0xf8, 0x97, 0x3e, 0xc8, 0xe7, 0xd3, 0xbd, 0x40, 0xfa, 0x73, 0xe6, 0x9c,
54
- 0xcf, 0xd8, 0x9a, 0xd6, 0x34, 0x78, 0x9f, 0x4b, 0xaa, 0x56, 0x7f, 0xd7,
55
- 0x5c, 0xcd, 0x2e, 0x37, 0xae, 0x16, 0x9c, 0xe4, 0x08, 0xe7, 0x6a, 0x88,
56
- 0x2d, 0xfd, 0xcb, 0x3c, 0x39, 0x6e, 0xdc, 0xbc, 0x35, 0x37, 0x46, 0x3c,
57
- 0x69, 0x9c, 0x37, 0xc0, 0x3c, 0xf6, 0xce, 0x99, 0x79, 0x71, 0x88, 0x41,
58
- 0xac, 0xc3, 0xa6, 0x66, 0x58, 0xcc, 0x22, 0x19, 0x4d, 0xa8, 0xe1, 0xa0,
59
- 0xda, 0xe8, 0x56, 0x55, 0x2f, 0xc6, 0x4f, 0x05, 0x92, 0xf9, 0x12, 0x95,
60
- 0x47, 0xf9, 0xaf, 0xe1, 0xba, 0xce, 0xef, 0x3c, 0x6b, 0xc5, 0xc7, 0xcb,
61
- 0x4c, 0xa2, 0x57, 0x35, 0x64, 0x89, 0x95, 0x52, 0x52, 0x13, 0xb9, 0x9e,
62
- 0x68, 0x40, 0x76, 0x4b, 0xac, 0x11, 0x47, 0xbe, 0x37, 0xcc, 0x74, 0x9e,
63
- 0xc9, 0x2b, 0xc5, 0x2c, 0xdb, 0x4e, 0xf9, 0x0b, 0x68, 0xcb, 0xd1, 0x48,
64
- 0x46, 0x1d, 0xba, 0xf6, 0xb2, 0x59, 0xce, 0x1e, 0x5e, 0xc4, 0xfb, 0x47,
65
- 0x3a, 0xcb, 0xad, 0x1e, 0x07, 0xd8, 0x65, 0xf6, 0x1c, 0x58, 0x6b, 0x96,
66
- 0xaf, 0xd4, 0x87, 0x92, 0x45, 0xd2, 0xc6, 0x0d, 0x9b, 0xb6, 0x07, 0x03,
67
- 0xf0, 0x6f, 0x52, 0xb4, 0x98, 0x68, 0x1c, 0x63, 0x09, 0xc6, 0x9d, 0xf1,
68
- 0xe9, 0x70, 0xf4, 0x79
47
+ 0xc3, 0x70, 0xea, 0x90, 0x39, 0xc2, 0x8e, 0xe7, 0x4f, 0xd1, 0xc6, 0x99,
48
+ 0x53, 0xaf, 0x8f, 0x19, 0xec, 0xaa, 0x05, 0x9b, 0xa4, 0x69, 0x2c, 0x00,
49
+ 0x11, 0xcd, 0x66, 0xa3, 0x50, 0x0f, 0xe6, 0x2b, 0x83, 0x27, 0xfe, 0x72,
50
+ 0xde, 0x41, 0x03, 0x0b, 0x4c, 0xe4, 0xd8, 0xc3, 0x54, 0xeb, 0x3c, 0xbc,
51
+ 0xb6, 0x87, 0xba, 0x92, 0x1e, 0x49, 0xcf, 0x7f, 0x5a, 0x57, 0xa7, 0x3e,
52
+ 0x8b, 0xd0, 0x45, 0x7e, 0x3d, 0x95, 0x36, 0x73, 0x0f, 0x16, 0x75, 0x68,
53
+ 0x1c, 0xf5, 0x4d, 0x90, 0xa9, 0x7c, 0xc8, 0xc1, 0x6d, 0x89, 0xaf, 0x74,
54
+ 0x28, 0xb8, 0xe2, 0xde, 0x10, 0x6e, 0x81, 0x79, 0x65, 0xbc, 0x6c, 0xfb,
55
+ 0xe8, 0x07, 0xec, 0x1e, 0x22, 0x6a, 0x2c, 0x50, 0xae, 0xb7, 0x18, 0x4c,
56
+ 0x3a, 0xef, 0x1f, 0xe2, 0xfd, 0x11, 0xf0, 0x95, 0x10, 0x3d, 0xbd, 0x6e,
57
+ 0x17, 0x24, 0xd7, 0x46, 0x0a, 0x42, 0x6b, 0x88, 0xf5, 0x56, 0x12, 0x6e,
58
+ 0xf1, 0xff, 0xaf, 0x40, 0x08, 0x3e, 0x68, 0xa3, 0x3e, 0x38, 0xfa, 0xd6,
59
+ 0x96, 0x56, 0xd6, 0x8b, 0x67, 0x6c, 0x2a, 0x5f, 0x5a, 0xfa, 0xaa, 0x9d,
60
+ 0xd1, 0x54, 0x92, 0x0b, 0x90, 0x2c, 0x9e, 0xcc, 0x7d, 0x48, 0x5f, 0x19,
61
+ 0x59, 0x74, 0xb6, 0xae, 0x0c, 0x33, 0x33, 0x74, 0x72, 0xef, 0xa5, 0xa9,
62
+ 0xfe, 0x8b, 0xc8, 0x48, 0x26, 0x49, 0x88, 0x65, 0x07, 0x60, 0x34, 0x80,
63
+ 0x78, 0x83, 0x1f, 0x82, 0xc0, 0xcb, 0x73, 0x83, 0xe2, 0x7b, 0x6d, 0x7c,
64
+ 0x3c, 0x6d, 0x27, 0xd8, 0x8e, 0xbb, 0x2f, 0x8c, 0xe2, 0x8b, 0x02, 0xb5,
65
+ 0xe6, 0x01, 0x53, 0x74, 0xf0, 0xbe, 0xf6, 0xdd, 0x40, 0x33, 0x35, 0x97,
66
+ 0x87, 0x17, 0xe0, 0xf2, 0x33, 0xc9, 0x38, 0x6f, 0xe0, 0x5d, 0x48, 0x55,
67
+ 0xe0, 0x14, 0xe1, 0x61, 0xca, 0xdb, 0x34, 0x4b, 0xd7, 0x06, 0x6d, 0xcd,
68
+ 0x94, 0x84, 0x98, 0xa2
69
69
  };
70
70
  unsigned int cert_der_len = 796;
@@ -1,103 +1,103 @@
1
1
  unsigned char cert_key_der[] = {
2
- 0x30, 0x82, 0x04, 0xa5, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
3
- 0xd2, 0x08, 0x20, 0xb4, 0xe6, 0xb0, 0x54, 0xae, 0x0b, 0x3e, 0xcb, 0x16,
4
- 0xaa, 0xa4, 0xa0, 0x45, 0x9b, 0xad, 0x06, 0xdf, 0xc8, 0xa1, 0xa0, 0xdf,
5
- 0x70, 0x85, 0xee, 0x67, 0xeb, 0xb9, 0x32, 0x90, 0x85, 0x43, 0x59, 0x33,
6
- 0x14, 0x48, 0x63, 0xcb, 0x1c, 0xf0, 0xa4, 0xd3, 0xd4, 0xd6, 0x86, 0x94,
7
- 0x7c, 0x16, 0xa9, 0x25, 0x26, 0x9d, 0xae, 0xd6, 0xe5, 0x51, 0xb3, 0xcb,
8
- 0xe1, 0xa2, 0x59, 0xde, 0x90, 0xef, 0x8c, 0xbc, 0x26, 0x11, 0x57, 0x8c,
9
- 0x12, 0xa1, 0xdf, 0x79, 0x1a, 0xab, 0xb3, 0x1d, 0x3a, 0xd0, 0xcf, 0x4d,
10
- 0xa2, 0x4d, 0x62, 0x9c, 0x61, 0x2c, 0x17, 0x30, 0xf7, 0xa9, 0x8b, 0x5f,
11
- 0xec, 0xc3, 0xed, 0x5b, 0x69, 0x5f, 0x55, 0x21, 0xd0, 0xa1, 0xfb, 0xef,
12
- 0x9f, 0x40, 0xc7, 0x7e, 0x2a, 0x07, 0xba, 0x18, 0x65, 0xc0, 0xb0, 0xa3,
13
- 0x32, 0x0c, 0x22, 0xf3, 0xff, 0x03, 0xa3, 0x91, 0x52, 0x1b, 0xa5, 0x80,
14
- 0x72, 0xf4, 0x95, 0x81, 0xfa, 0x25, 0xcc, 0x52, 0xcc, 0x92, 0xf2, 0xcb,
15
- 0xa0, 0x9a, 0x86, 0xf4, 0x78, 0x48, 0x0a, 0x01, 0x0f, 0x63, 0x0d, 0x44,
16
- 0xc9, 0xa7, 0x68, 0x41, 0xd9, 0x7a, 0xca, 0x0a, 0x21, 0xfd, 0x74, 0x6f,
17
- 0x14, 0x9d, 0x6a, 0x01, 0xfa, 0x98, 0x06, 0xba, 0xd3, 0x16, 0x62, 0xb6,
18
- 0x53, 0x1d, 0xe0, 0x9c, 0x6f, 0x4a, 0xea, 0x88, 0x9d, 0x12, 0x60, 0x06,
19
- 0x72, 0xb2, 0x36, 0xa1, 0xf3, 0xae, 0x60, 0x9a, 0xf8, 0x33, 0xc3, 0xbc,
20
- 0xee, 0xce, 0xf9, 0xa5, 0x7e, 0xea, 0xbd, 0x3c, 0xdd, 0xe6, 0x09, 0xa3,
21
- 0x68, 0xf8, 0xbf, 0xe8, 0x08, 0x3e, 0x94, 0xca, 0xcf, 0x84, 0xbb, 0x11,
22
- 0x40, 0x45, 0x46, 0x7d, 0xd1, 0x77, 0x33, 0x71, 0x14, 0x02, 0x4f, 0xa6,
23
- 0xaf, 0x4d, 0x73, 0xf2, 0xf5, 0x98, 0xeb, 0x5f, 0xeb, 0xf3, 0xb4, 0xb6,
24
- 0x62, 0x92, 0x15, 0x55, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
25
- 0x01, 0x00, 0x9f, 0x90, 0xe9, 0x38, 0x46, 0xa2, 0xe4, 0x52, 0xad, 0xdc,
26
- 0x70, 0xf2, 0xb1, 0x86, 0x0c, 0xf5, 0x95, 0x46, 0x29, 0x18, 0xcf, 0x16,
27
- 0x6c, 0x60, 0x14, 0xde, 0xcb, 0xb7, 0x4c, 0x11, 0x11, 0x67, 0x56, 0xb7,
28
- 0x4a, 0x07, 0x52, 0x7b, 0x84, 0xc5, 0x85, 0x21, 0x16, 0x38, 0x91, 0x54,
29
- 0xc2, 0x3e, 0x00, 0xe0, 0x3e, 0x75, 0x29, 0x17, 0x57, 0x03, 0x90, 0x89,
30
- 0x37, 0xed, 0xc7, 0x68, 0x4e, 0x9a, 0x96, 0xc6, 0x47, 0xc7, 0x91, 0xac,
31
- 0x4f, 0x34, 0xed, 0xda, 0xe9, 0x2a, 0xda, 0xa6, 0x63, 0x97, 0xeb, 0x5d,
32
- 0x44, 0x81, 0x98, 0xb2, 0xee, 0x1e, 0x1c, 0x7d, 0x20, 0xc9, 0x64, 0xfe,
33
- 0xfc, 0x12, 0x4e, 0x90, 0xb3, 0xbd, 0x65, 0x1a, 0xb6, 0x54, 0xd0, 0x6a,
34
- 0xa0, 0x3a, 0xf6, 0x64, 0x82, 0xab, 0x49, 0x47, 0x41, 0x8c, 0xd3, 0x91,
35
- 0x47, 0x21, 0x55, 0x1e, 0x7f, 0x57, 0x9c, 0x00, 0xa9, 0xbc, 0x97, 0x8c,
36
- 0x0e, 0xbe, 0x87, 0x80, 0xe9, 0x9f, 0x40, 0x8f, 0x21, 0xd5, 0x54, 0x93,
37
- 0x37, 0x80, 0xb0, 0x7c, 0x0a, 0xc8, 0xff, 0x41, 0xce, 0x99, 0xf5, 0x4a,
38
- 0x27, 0xc4, 0xc2, 0xa2, 0x96, 0xe9, 0x3a, 0x22, 0x56, 0x6e, 0x3b, 0x23,
39
- 0x62, 0x12, 0x3b, 0x25, 0x0f, 0xab, 0x7f, 0xe1, 0x9c, 0x53, 0xcd, 0x0a,
40
- 0x62, 0x62, 0xd0, 0xdf, 0xed, 0x2a, 0xf1, 0x3a, 0x18, 0xa9, 0x14, 0x0a,
41
- 0x48, 0x34, 0xa0, 0xf7, 0x6e, 0x20, 0xa1, 0x06, 0x10, 0x11, 0xb9, 0x04,
42
- 0x5b, 0xe3, 0xde, 0x89, 0xb5, 0xae, 0x63, 0x27, 0x71, 0xf3, 0x4b, 0xe8,
43
- 0xb1, 0xca, 0xf6, 0x77, 0x31, 0xd2, 0xc9, 0xf3, 0x49, 0x5f, 0x60, 0xeb,
44
- 0xd3, 0x06, 0x33, 0x41, 0xab, 0x21, 0x88, 0x35, 0x92, 0x44, 0x9b, 0x66,
45
- 0x2e, 0x49, 0xe6, 0xe3, 0x7b, 0xea, 0xaf, 0x30, 0x7f, 0x5f, 0xec, 0x52,
46
- 0xdf, 0x91, 0xb7, 0xc7, 0x28, 0x69, 0x02, 0x81, 0x81, 0x00, 0xee, 0x41,
47
- 0x86, 0xc3, 0xeb, 0x5b, 0x81, 0x9b, 0x32, 0xe3, 0xbc, 0xf3, 0x68, 0x8d,
48
- 0x46, 0xa1, 0xcb, 0x3f, 0x49, 0x3e, 0xef, 0x42, 0x94, 0x72, 0xd2, 0x95,
49
- 0x22, 0x77, 0xeb, 0x32, 0xfa, 0xd8, 0x25, 0x49, 0xb1, 0xc4, 0xf1, 0x65,
50
- 0xf6, 0xe8, 0x83, 0xe9, 0xba, 0x07, 0xe0, 0x38, 0xc1, 0x9e, 0x03, 0x1e,
51
- 0xab, 0x8b, 0xdb, 0x14, 0x5d, 0x52, 0x7f, 0x52, 0xf0, 0x43, 0x95, 0x63,
52
- 0xac, 0x56, 0x43, 0xc8, 0x94, 0xf1, 0x16, 0x29, 0x54, 0x20, 0x29, 0x14,
53
- 0x0a, 0x47, 0x09, 0xfa, 0x54, 0x3d, 0x14, 0xb2, 0xfa, 0x69, 0x2d, 0xe5,
54
- 0xf6, 0x87, 0x78, 0x69, 0xb4, 0x90, 0xf6, 0xd3, 0xbb, 0x79, 0x8e, 0x67,
55
- 0xaa, 0x73, 0x57, 0x98, 0x4b, 0x6c, 0xd8, 0xd0, 0xad, 0x30, 0xdd, 0x35,
56
- 0x9d, 0xf2, 0x9a, 0xff, 0xbe, 0x9e, 0x74, 0x4e, 0xc3, 0xf7, 0x1d, 0xe4,
57
- 0x7d, 0x9c, 0x02, 0x9e, 0x5c, 0xd7, 0x02, 0x81, 0x81, 0x00, 0xe1, 0xac,
58
- 0x7d, 0xf7, 0x4e, 0x9f, 0x26, 0x39, 0xab, 0x92, 0xdf, 0xa5, 0x5d, 0x9f,
59
- 0x8a, 0x1b, 0x20, 0xe7, 0x3a, 0xd8, 0x55, 0x55, 0x79, 0x32, 0x73, 0x48,
60
- 0xbb, 0xf2, 0x02, 0x80, 0x2e, 0xf4, 0x29, 0x61, 0x99, 0x03, 0x4c, 0x1f,
61
- 0x30, 0xfd, 0x66, 0xdc, 0xfd, 0xa4, 0x9c, 0x63, 0x18, 0x20, 0x6a, 0x2c,
62
- 0x63, 0x91, 0x53, 0x3d, 0x76, 0x9a, 0xec, 0xfd, 0xd1, 0xad, 0x05, 0x32,
63
- 0x7a, 0xce, 0xa5, 0x74, 0xf9, 0x35, 0xf7, 0x09, 0xfe, 0x96, 0x96, 0xb3,
64
- 0x1b, 0xd6, 0xaf, 0xf4, 0xe7, 0x42, 0xcb, 0x72, 0x3c, 0x61, 0x73, 0xc8,
65
- 0x2f, 0xe2, 0x1d, 0xb0, 0xdd, 0x3d, 0x9b, 0xa7, 0x66, 0x59, 0x11, 0x6c,
66
- 0x98, 0x6a, 0xa0, 0x0b, 0xd4, 0xb4, 0x2d, 0xde, 0xdf, 0xb4, 0x10, 0xf1,
67
- 0x70, 0x06, 0x37, 0x22, 0xc8, 0x3a, 0xcf, 0xdb, 0x81, 0x01, 0x31, 0x6b,
68
- 0xfa, 0xfe, 0xa7, 0x99, 0xcd, 0xb3, 0x02, 0x81, 0x80, 0x4a, 0xd4, 0xf9,
69
- 0xe6, 0xff, 0x3d, 0x36, 0x6f, 0xf0, 0x83, 0xe7, 0x0c, 0xec, 0x81, 0xb2,
70
- 0xf5, 0x8e, 0x48, 0xca, 0x50, 0xa2, 0x05, 0x5f, 0x6a, 0xd1, 0x09, 0x56,
71
- 0x52, 0x23, 0xe5, 0x57, 0x34, 0x1c, 0x42, 0x11, 0x3b, 0xb2, 0x36, 0x3c,
72
- 0x5e, 0xbb, 0x4f, 0xe5, 0xc6, 0x23, 0x7e, 0xb0, 0x11, 0x59, 0x19, 0x80,
73
- 0xf7, 0xe4, 0x4f, 0x79, 0x20, 0x38, 0x2d, 0x6c, 0x99, 0x4d, 0x8a, 0x88,
74
- 0xce, 0x6f, 0x6b, 0xc8, 0x9c, 0x10, 0x41, 0xda, 0xd2, 0x5f, 0x14, 0x94,
75
- 0x45, 0xcb, 0xb4, 0x7c, 0x50, 0xd2, 0xf7, 0x83, 0xff, 0x15, 0x13, 0x6d,
76
- 0x63, 0x0f, 0x46, 0xe4, 0x17, 0xc3, 0xee, 0xac, 0xab, 0x79, 0x36, 0xc6,
77
- 0x2a, 0x84, 0x10, 0xa9, 0x5f, 0xfe, 0x99, 0x4c, 0x4c, 0x54, 0xae, 0x4a,
78
- 0x75, 0xb0, 0x89, 0x32, 0xed, 0xc1, 0xca, 0x1b, 0x72, 0xba, 0x48, 0xd1,
79
- 0xca, 0xf6, 0x67, 0x96, 0xf1, 0x02, 0x81, 0x81, 0x00, 0xc3, 0xff, 0x82,
80
- 0xdb, 0xc2, 0x5d, 0xf8, 0xde, 0x07, 0x84, 0xa5, 0x56, 0xc3, 0x0c, 0x67,
81
- 0xef, 0x0d, 0xd1, 0xa5, 0xca, 0xf3, 0xba, 0x2b, 0x6b, 0xc4, 0xb2, 0x7c,
82
- 0x01, 0x41, 0x68, 0xc0, 0xde, 0xef, 0xfd, 0xc2, 0xde, 0x19, 0x43, 0xd1,
83
- 0xd1, 0x93, 0x80, 0x05, 0x8e, 0xed, 0x00, 0x27, 0x99, 0x27, 0x7d, 0x6b,
84
- 0xf0, 0x70, 0xa2, 0x26, 0x1b, 0x82, 0x0f, 0x24, 0x07, 0x28, 0x47, 0x62,
85
- 0x5f, 0x8d, 0x56, 0x1d, 0x87, 0x60, 0x0a, 0x3f, 0x21, 0xdc, 0xba, 0xac,
86
- 0x47, 0xf6, 0x44, 0x36, 0x82, 0x4d, 0x9d, 0xe6, 0x91, 0x20, 0xf4, 0xd1,
87
- 0x99, 0x89, 0xfd, 0xec, 0xf8, 0xaf, 0xf2, 0x60, 0xb2, 0xa4, 0xae, 0x73,
88
- 0x65, 0xcf, 0xa0, 0xd6, 0xd8, 0xb2, 0x2a, 0x2a, 0x92, 0x02, 0x51, 0x1e,
89
- 0xe1, 0x57, 0x0b, 0x8f, 0x69, 0x7c, 0xd3, 0x80, 0xa4, 0x5f, 0x9f, 0x0f,
90
- 0xbc, 0x12, 0x26, 0x43, 0x7f, 0x02, 0x81, 0x81, 0x00, 0x9e, 0xd1, 0x72,
91
- 0x49, 0x64, 0x87, 0x19, 0x86, 0x03, 0xca, 0xbe, 0xf1, 0x4d, 0x38, 0xec,
92
- 0xb1, 0x80, 0x5b, 0xd3, 0x3b, 0x46, 0xc8, 0xbc, 0xd0, 0x29, 0x2c, 0x00,
93
- 0xb8, 0xf2, 0x65, 0x15, 0x6a, 0x83, 0x46, 0x53, 0x33, 0xb9, 0xc9, 0x38,
94
- 0x36, 0x1c, 0x9f, 0x9f, 0x9d, 0xbe, 0x7d, 0x40, 0xa1, 0xdc, 0x01, 0x31,
95
- 0x48, 0x1f, 0x29, 0x31, 0x21, 0x86, 0x40, 0xaf, 0x30, 0x25, 0x9b, 0x29,
96
- 0x04, 0x70, 0x27, 0x5c, 0x9c, 0x72, 0x1d, 0x00, 0x6a, 0xbb, 0xf0, 0xf7,
97
- 0x64, 0x26, 0xfe, 0x27, 0x1a, 0x29, 0x49, 0xe7, 0x60, 0x97, 0x96, 0xf3,
98
- 0x66, 0x01, 0x33, 0xd5, 0x6f, 0x80, 0x83, 0xf3, 0xaf, 0xd4, 0xb3, 0xd6,
99
- 0x33, 0xd2, 0xd0, 0xfe, 0xae, 0x78, 0xc3, 0xa7, 0x5f, 0xf6, 0x20, 0xa6,
100
- 0xc7, 0xcf, 0xf2, 0xcb, 0x03, 0x3d, 0x13, 0x7f, 0x2c, 0xb6, 0x64, 0x73,
101
- 0x2b, 0xa1, 0x19, 0x27, 0xe5
2
+ 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
3
+ 0xce, 0x51, 0xee, 0xa9, 0xf6, 0xe0, 0x2c, 0x30, 0x8c, 0x04, 0x3a, 0x0d,
4
+ 0x74, 0x78, 0x7a, 0x93, 0x00, 0x47, 0xeb, 0x85, 0x26, 0x38, 0x70, 0x52,
5
+ 0xeb, 0xcc, 0xf4, 0x21, 0xfe, 0x68, 0x8b, 0x1d, 0x57, 0xce, 0x9f, 0xb9,
6
+ 0x18, 0x62, 0x99, 0x90, 0x4d, 0xc5, 0x00, 0x41, 0x71, 0x9d, 0x71, 0xcf,
7
+ 0xf2, 0xca, 0xd5, 0x88, 0x21, 0x40, 0xfb, 0x38, 0x1d, 0xc4, 0xd4, 0xb5,
8
+ 0xfd, 0x51, 0xdc, 0x9f, 0x8d, 0xed, 0x7b, 0x15, 0xf4, 0xd8, 0x08, 0x07,
9
+ 0x06, 0x50, 0xe4, 0x86, 0xcc, 0x72, 0x63, 0xc1, 0x8e, 0x4c, 0xd1, 0xac,
10
+ 0xc5, 0xdd, 0xac, 0xff, 0x3f, 0x0a, 0xde, 0x7e, 0x84, 0x4e, 0xf9, 0x92,
11
+ 0x35, 0x1a, 0xca, 0x94, 0x85, 0x35, 0x1c, 0xcc, 0x9b, 0xda, 0x04, 0x07,
12
+ 0xd5, 0x07, 0xf9, 0x7f, 0xb0, 0x5f, 0xdc, 0x97, 0x1a, 0xac, 0x8b, 0xdb,
13
+ 0x56, 0x2e, 0x3f, 0x4c, 0x1d, 0x3e, 0xab, 0x0f, 0xde, 0x43, 0x18, 0xc0,
14
+ 0xa8, 0x61, 0xff, 0xac, 0xe6, 0x46, 0x90, 0x60, 0xb1, 0x6c, 0x72, 0x3d,
15
+ 0x38, 0x27, 0xcb, 0xb4, 0x3c, 0x6e, 0x61, 0x6f, 0x9e, 0x44, 0xfd, 0xe7,
16
+ 0xd7, 0x07, 0x9b, 0x5a, 0x00, 0xfa, 0x17, 0x8c, 0xa7, 0x8a, 0x31, 0x5d,
17
+ 0x77, 0x18, 0xd4, 0xec, 0xa3, 0x54, 0x64, 0xe2, 0x7b, 0x56, 0xde, 0xf2,
18
+ 0x6f, 0x94, 0xc3, 0xd4, 0xa9, 0xe0, 0xed, 0x96, 0xa2, 0x5c, 0x57, 0xa7,
19
+ 0x49, 0xc4, 0x84, 0xe8, 0x8e, 0xc5, 0xb0, 0xd1, 0x56, 0x05, 0x36, 0xe8,
20
+ 0xd1, 0xd5, 0x57, 0xb7, 0xbc, 0x31, 0xc3, 0xe6, 0x3f, 0x78, 0x09, 0x3e,
21
+ 0x25, 0xdc, 0x05, 0x62, 0xd3, 0xef, 0xde, 0xa8, 0xb9, 0x42, 0x3a, 0x16,
22
+ 0x82, 0xc7, 0x83, 0x46, 0x65, 0xf2, 0xe0, 0xbb, 0xf4, 0x25, 0x4f, 0x5d,
23
+ 0xcb, 0x7c, 0x96, 0x76, 0x7c, 0x4c, 0xed, 0xcb, 0xe3, 0xbb, 0x0c, 0xaa,
24
+ 0x44, 0xbf, 0x36, 0x47, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
25
+ 0x01, 0x00, 0xca, 0xf3, 0x97, 0x94, 0xc3, 0x8f, 0x82, 0x88, 0x82, 0xc3,
26
+ 0x09, 0xa4, 0x00, 0xa5, 0x1e, 0xd6, 0x09, 0x99, 0xb5, 0x98, 0xf5, 0x9e,
27
+ 0xe1, 0x07, 0x00, 0x83, 0x4c, 0xc7, 0x3f, 0xad, 0xf0, 0xe2, 0x7d, 0x64,
28
+ 0x78, 0x83, 0xa7, 0xf4, 0x1d, 0xe0, 0xf0, 0x4f, 0x50, 0x50, 0x10, 0x05,
29
+ 0xf3, 0x55, 0xbe, 0x1c, 0x3e, 0x6e, 0x39, 0x5f, 0xe5, 0x7f, 0x2e, 0xf1,
30
+ 0x56, 0xd8, 0x6a, 0x86, 0xa3, 0x42, 0xa4, 0x67, 0x2e, 0x03, 0xcc, 0x24,
31
+ 0xd1, 0xc8, 0xaf, 0x32, 0xd5, 0x89, 0xb0, 0x04, 0xfa, 0x12, 0x04, 0xfb,
32
+ 0x95, 0xe9, 0xa1, 0x7d, 0xcc, 0xd6, 0x0c, 0x5a, 0x91, 0xc0, 0xdc, 0x3f,
33
+ 0x9f, 0x8a, 0x6e, 0x08, 0x9b, 0xab, 0xfb, 0x58, 0xe2, 0xaa, 0x76, 0xc8,
34
+ 0xbf, 0xdc, 0x40, 0x77, 0x26, 0xbb, 0xaf, 0x70, 0xac, 0xda, 0x4a, 0xd7,
35
+ 0xde, 0x7f, 0x74, 0xc7, 0xeb, 0x65, 0xe1, 0x02, 0xab, 0x5b, 0x1c, 0x3a,
36
+ 0xbd, 0x01, 0xb7, 0x00, 0x0a, 0x55, 0x72, 0x21, 0xb2, 0xa9, 0x4a, 0x4f,
37
+ 0xa4, 0x1d, 0x48, 0x92, 0xc0, 0x57, 0x24, 0xf9, 0xd1, 0x63, 0xb3, 0x64,
38
+ 0x09, 0xe7, 0xb6, 0x2a, 0x0d, 0x50, 0xdd, 0xdf, 0xe9, 0xeb, 0x77, 0x5a,
39
+ 0xf1, 0x91, 0x63, 0xd1, 0xfb, 0x8d, 0x03, 0x5d, 0x34, 0xcd, 0xd2, 0x6c,
40
+ 0x0b, 0xbe, 0x77, 0xc1, 0x76, 0x62, 0xef, 0x71, 0xe3, 0x5d, 0x0c, 0xb3,
41
+ 0x48, 0xdd, 0x63, 0x35, 0x48, 0xdd, 0xa0, 0x71, 0xbc, 0x7e, 0x53, 0xa7,
42
+ 0x5e, 0x58, 0x53, 0x00, 0xe1, 0x65, 0xd2, 0x19, 0x8e, 0xe7, 0x99, 0xf2,
43
+ 0xf1, 0x5d, 0xa4, 0xcd, 0x7e, 0xb4, 0x62, 0x76, 0x65, 0x99, 0x49, 0x31,
44
+ 0xcc, 0x93, 0x31, 0xe5, 0xc6, 0xc5, 0xfc, 0x17, 0x94, 0x15, 0xd6, 0x39,
45
+ 0x30, 0xef, 0x97, 0x77, 0x76, 0xb0, 0xc8, 0x2d, 0xf1, 0xe9, 0xda, 0xd1,
46
+ 0xe6, 0x85, 0xd9, 0x4f, 0x3c, 0x89, 0x02, 0x81, 0x81, 0x00, 0xf7, 0xb2,
47
+ 0x98, 0xca, 0x7a, 0x84, 0x5f, 0x3e, 0x11, 0xc2, 0x7a, 0x72, 0xf9, 0x15,
48
+ 0xd3, 0x05, 0xad, 0xb1, 0x96, 0xdc, 0xa0, 0xb6, 0x88, 0x61, 0x40, 0x54,
49
+ 0x76, 0xc9, 0x3f, 0xc1, 0x0e, 0x5d, 0xd2, 0x7d, 0xc4, 0x50, 0x44, 0x61,
50
+ 0x18, 0x93, 0x5a, 0xe1, 0xe8, 0xec, 0x8b, 0xe5, 0xd7, 0x54, 0xbc, 0xeb,
51
+ 0x23, 0x30, 0xbd, 0x9b, 0xde, 0xc6, 0x52, 0xe5, 0xc8, 0x18, 0xc5, 0x45,
52
+ 0x1b, 0x38, 0x80, 0x54, 0xa8, 0x60, 0x77, 0x8f, 0x9e, 0xaa, 0x93, 0x38,
53
+ 0xa4, 0x74, 0xe5, 0x58, 0xa5, 0x5d, 0x2d, 0xa6, 0x30, 0xfa, 0x13, 0xfd,
54
+ 0xf9, 0xf6, 0x57, 0xcc, 0x13, 0x5d, 0x25, 0xf1, 0x19, 0x7e, 0xe4, 0x7c,
55
+ 0xb7, 0xc2, 0x0c, 0x18, 0x59, 0x64, 0x50, 0xd2, 0x4e, 0x7e, 0x37, 0x83,
56
+ 0xc1, 0x92, 0x89, 0x20, 0x30, 0xd5, 0x18, 0x9a, 0xb7, 0x2b, 0x7b, 0xb4,
57
+ 0x7f, 0xc9, 0xf6, 0xd3, 0x12, 0xad, 0x02, 0x81, 0x81, 0x00, 0xd5, 0x3c,
58
+ 0x4a, 0x14, 0xbb, 0x71, 0x0f, 0xc1, 0x33, 0x01, 0x82, 0xe2, 0xb6, 0x66,
59
+ 0x99, 0x82, 0xc9, 0xfe, 0x77, 0xed, 0xda, 0x4a, 0x2b, 0xb3, 0xf6, 0xa7,
60
+ 0x7d, 0xd7, 0x17, 0xa4, 0xd3, 0x2c, 0x5a, 0x73, 0x21, 0x0a, 0x67, 0x29,
61
+ 0x65, 0x1c, 0x7a, 0xc8, 0x72, 0x4e, 0xef, 0xc1, 0xa8, 0x69, 0xe0, 0x6b,
62
+ 0xd8, 0x0d, 0x56, 0x56, 0x51, 0x05, 0xc9, 0x6f, 0x41, 0x88, 0x03, 0x68,
63
+ 0xe9, 0xef, 0xa0, 0x5e, 0xb3, 0xce, 0x1d, 0x4e, 0x27, 0xc9, 0x09, 0x47,
64
+ 0x2e, 0x71, 0x9d, 0x7f, 0xa7, 0x4c, 0xb2, 0x2a, 0xf2, 0x6c, 0xce, 0xc9,
65
+ 0x76, 0x89, 0x64, 0xc7, 0x29, 0x96, 0xd5, 0xf7, 0xe8, 0x72, 0x7c, 0x5e,
66
+ 0x45, 0x76, 0x4c, 0x80, 0x0a, 0x70, 0x02, 0xed, 0x00, 0xb9, 0xad, 0xe0,
67
+ 0xec, 0x3f, 0xe7, 0x08, 0xfc, 0x29, 0xbc, 0x2c, 0xf5, 0x15, 0xec, 0x02,
68
+ 0xf0, 0x74, 0x5f, 0x63, 0xff, 0x43, 0x02, 0x81, 0x80, 0x10, 0xa3, 0x2c,
69
+ 0x64, 0x1d, 0x4a, 0x9a, 0xe3, 0x1e, 0x6a, 0x43, 0xb3, 0x49, 0x4b, 0xcf,
70
+ 0xfa, 0xc7, 0xa9, 0xf0, 0x0a, 0x2d, 0xb9, 0x54, 0xfb, 0xc3, 0x48, 0x69,
71
+ 0x1a, 0x27, 0x70, 0x1e, 0x38, 0xeb, 0x14, 0x8b, 0x85, 0x20, 0xb2, 0xac,
72
+ 0xe5, 0xe8, 0xea, 0xd7, 0xac, 0x5b, 0xd1, 0x3a, 0x5f, 0x74, 0xb9, 0x0e,
73
+ 0x8a, 0x0d, 0x92, 0x54, 0xaa, 0x59, 0x93, 0x19, 0x97, 0xa0, 0x58, 0x7d,
74
+ 0xf5, 0x93, 0x99, 0x1c, 0x1e, 0x2e, 0xa9, 0xb4, 0xec, 0x9c, 0x2a, 0xe7,
75
+ 0xd0, 0xfa, 0x3e, 0xb4, 0x0c, 0xc8, 0x2e, 0x2b, 0x88, 0x00, 0xa3, 0xc4,
76
+ 0x90, 0x69, 0x61, 0x49, 0xc3, 0xad, 0xf2, 0xbd, 0xd5, 0xaa, 0x1f, 0x3e,
77
+ 0x70, 0x88, 0x43, 0x72, 0x6d, 0xac, 0x88, 0x13, 0xc1, 0xa2, 0x94, 0xf5,
78
+ 0x01, 0x94, 0xb8, 0x56, 0xcf, 0x59, 0x71, 0xba, 0xef, 0xee, 0xc5, 0x36,
79
+ 0xf8, 0x27, 0xde, 0x11, 0x99, 0x02, 0x81, 0x80, 0x2b, 0xca, 0x84, 0xe0,
80
+ 0x3b, 0x1a, 0x5e, 0x04, 0xec, 0x47, 0xac, 0x2c, 0x89, 0x0f, 0x0b, 0x09,
81
+ 0xac, 0x18, 0x01, 0x63, 0x2c, 0x88, 0x3c, 0xef, 0x69, 0x81, 0x3e, 0x3b,
82
+ 0xb5, 0x14, 0x59, 0x75, 0xeb, 0x61, 0x67, 0x70, 0xae, 0x7c, 0xf6, 0xd1,
83
+ 0xe1, 0x79, 0x56, 0xd8, 0x55, 0x2e, 0xad, 0x3a, 0x89, 0x27, 0x3c, 0xa8,
84
+ 0x88, 0x89, 0x93, 0x7c, 0x1f, 0xc1, 0x24, 0x71, 0x1d, 0x5a, 0x27, 0x68,
85
+ 0xd9, 0xc3, 0x79, 0x23, 0xa4, 0x2b, 0x0f, 0xca, 0x9e, 0x88, 0x2a, 0xc6,
86
+ 0x94, 0x74, 0xc9, 0xd3, 0xdb, 0x67, 0x2c, 0x80, 0x21, 0xfb, 0x87, 0xc7,
87
+ 0x71, 0x95, 0xe1, 0x39, 0xa3, 0xd9, 0x94, 0xb8, 0x26, 0x48, 0x69, 0xf5,
88
+ 0x80, 0x82, 0x6f, 0x22, 0x4f, 0xc7, 0x82, 0x75, 0x9f, 0x7a, 0xe8, 0xa9,
89
+ 0xba, 0xf5, 0xc2, 0x6b, 0x83, 0xc4, 0xab, 0xd4, 0x83, 0xb2, 0x9a, 0xd5,
90
+ 0x1b, 0x5d, 0xfa, 0xe7, 0x02, 0x81, 0x80, 0x01, 0x3b, 0xaf, 0x5b, 0xad,
91
+ 0x06, 0xa6, 0x3d, 0x6c, 0x66, 0x4f, 0x3d, 0x98, 0x15, 0xbd, 0x14, 0xee,
92
+ 0x8b, 0xb0, 0x6b, 0x06, 0x62, 0x1c, 0x34, 0xee, 0x8f, 0x10, 0x42, 0x75,
93
+ 0x78, 0x75, 0x9a, 0x07, 0x6d, 0x26, 0x29, 0xc3, 0xf0, 0x22, 0xd8, 0x17,
94
+ 0xdb, 0xb8, 0x8c, 0x2b, 0x28, 0xad, 0x9b, 0x0c, 0x93, 0x65, 0xff, 0xb9,
95
+ 0x5b, 0x06, 0x66, 0x0b, 0xe3, 0xf5, 0x4e, 0x3b, 0xb8, 0x29, 0xb9, 0xf8,
96
+ 0xdf, 0xd0, 0x07, 0x2d, 0x77, 0x6b, 0x83, 0x1c, 0x3d, 0xdb, 0xaa, 0xe3,
97
+ 0xea, 0xcf, 0x30, 0xd9, 0x8b, 0x27, 0x89, 0xf4, 0x67, 0xea, 0xd1, 0xd4,
98
+ 0x16, 0x3e, 0x56, 0x6a, 0x9a, 0x02, 0x62, 0xfb, 0xda, 0x1b, 0xff, 0x84,
99
+ 0x03, 0x1e, 0xc9, 0xf7, 0xd8, 0x18, 0xef, 0x0c, 0x97, 0x3d, 0xfa, 0xb7,
100
+ 0x3d, 0xd6, 0xdd, 0x52, 0x47, 0xb4, 0xa8, 0x6f, 0x1b, 0xec, 0xb2, 0x0d,
101
+ 0xcd, 0x40, 0x63
102
102
  };
103
- unsigned int cert_key_der_len = 1193;
103
+ unsigned int cert_key_der_len = 1191;
@@ -14,7 +14,7 @@ Daemonite.new do
14
14
  t.add_object :M, mt, OPCUA::MANDATORY
15
15
  }
16
16
 
17
- tools = server.objects.instantiate(:KalimatC34, tt)
17
+ tools = server.objects.manifest(:KalimatC34, tt)
18
18
 
19
19
  run do
20
20
  sleep server.run
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/ruby
2
+ require_relative '../lib/opcua/client'
3
+
4
+ client = OPCUA::Client.new("opc.tcp://128.130.57.76:4840")
5
+ client.subscription_interval = 100 # default 500
6
+
7
+ if (node = client.get 1, 'DISPLAY_VOLTAGE') # get node from nodeid
8
+ p node
9
+ p node.value
10
+ else
11
+ p 'invalid nodeid'
12
+ end
@@ -13,6 +13,9 @@ client.default_ns = 2
13
13
  # p node.call 'abcde', Time.now
14
14
  # client.disconnect
15
15
 
16
- node = client.get 1, 62541
17
- p node.to_s
18
- p node.call 'a'
16
+ # node = client.get 1, 62541
17
+ # p node.to_s
18
+ # p node.call 'a'
19
+
20
+ node = client.get '/KalimatC34/Tools/Tool3/testRetMethod'
21
+ p node.call 'abcde'
@@ -27,6 +27,14 @@ Daemonite.new do
27
27
  p test2
28
28
  puts '-' * 10
29
29
  end
30
+ t.add_method :testRetMethod, test1: OPCUA::TYPES::STRING, return: OPCUA::TYPES::STRING do |node, test1|
31
+ ns, nid = node.id
32
+ puts '-' * 10
33
+ p nid
34
+ p test1
35
+ puts '-' * 10
36
+ "hello world"
37
+ end
30
38
  t.add_object(:Measurements, opts['server'].types.folder).tap{ |u|
31
39
  u.add_object :M, mt, OPCUA::OPTIONAL
32
40
  }
@@ -0,0 +1,85 @@
1
+ #!/usr/bin/ruby
2
+ require_relative '../lib/opcua/server'
3
+
4
+ Daemonite.new do
5
+ on startup do |opts|
6
+ srv = opts['server'] = OPCUA::Server.new
7
+ srv.import_UA # FIX
8
+ srv.import_nodeset File::read('nodeset1.xml')
9
+ srv.import_nodeset File::read('nodeset1.xml')
10
+ srv.import_nodeset File::read('nodeset1.xml')
11
+ DI = srv.imports['http://xxxxx/DI']
12
+ AID = srv.imports['http://xxxxx/AutoID']
13
+
14
+ srv.objects
15
+
16
+ # ab 106 im nodesets.rb
17
+ x = srv.data_types.add(qualifiedname,referencetype=UA::HasSubtype,nodeid=rand())
18
+ x.displayname['en-US'] = 'rrr'
19
+ x.displayname['de'] = 'rrr'
20
+ x.displayname.delete('de')
21
+
22
+ srv.data_types.bla.blurg.add(wieheissts')
23
+ srv.data_types.bla.blurg.push(wieheissts')
24
+ srv.data_types.bla.blurg.<<('wieheissts')
25
+ x = srv.data_types.bla.find name: 'bla', type: SUBXXXX
26
+ [x] = srv.data_types.bla.find_all name: 'bla', type: SUBXXXX
27
+ [x] = srv.data_types.bla.select name: 'bla', type: SUBXXXX
28
+ srv.data_types.bla.parent
29
+
30
+ # srv.event_types
31
+ # srv.interfaces_types
32
+
33
+ srv.reference_types.add(qualifiedname,symmetric,referencetype,nodeid)
34
+ srv.reference_types.add_symmetric(qualifiedname,referencetype,nodeid)
35
+
36
+ srv.variable_types
37
+ srv.object_types
38
+
39
+ p server.add_namespace "https://centurio.work/kelch"
40
+ p server.active_namespace
41
+ server.active_namespace = 0
42
+ p server.active_namespace
43
+ p server.namespaces
44
+
45
+
46
+ tools = opts['server'].objects.manifest(:KalimatC34, pt).find(:Tools)
47
+
48
+ t1 = tools.manifest(:Tool1,tt)
49
+ t2 = tools.manifest(:Tool2,tt)
50
+ t3 = tools.manifest(:Tool3,tt)
51
+
52
+ opts[:tn] = t1.find(:ToolNumber)
53
+ opts[:tn].description = 'test test'
54
+ opts[:tn].value = [0,1]
55
+ p opts[:tn].description
56
+ p opts[:tn].to_s
57
+ p opts[:tn].name
58
+
59
+ measurments_t1 = t1.find(:Measurements)
60
+ measurments_t1.manifest(:M1,mt)
61
+ m2 = measurments_t1.manifest(:M2,mt)
62
+ rescue => e
63
+ puts e.message
64
+ end
65
+
66
+
67
+ counter = 0
68
+ run do |opts|
69
+ GC.start
70
+ sleep opts['server'].run
71
+ # if counter % 100 == 0
72
+ # opts[:tn].value = [counter, counter]
73
+ # # opts[:tn].value = 1
74
+ # p opts[:tn].value
75
+ # end
76
+ # counter += 1
77
+ rescue => e
78
+ puts e.message
79
+ end
80
+
81
+ on exit do
82
+ # we could disconnect here, but OPCUA::Server does not have an explicit disconnect
83
+ puts 'bye.'
84
+ end
85
+ end.loop!
@@ -320,7 +320,7 @@ static VALUE client_init(VALUE self,VALUE url,VALUE user,VALUE pass) { //{{{
320
320
  }
321
321
  char *pstr = (char *)StringValuePtr(vpstr);
322
322
 
323
- retval = UA_Client_connect_username(pss->master, nstr, ustr, pstr);
323
+ retval = UA_Client_connectUsername(pss->master, nstr, ustr, pstr);
324
324
  }
325
325
  if (retval != UA_STATUSCODE_GOOD) {
326
326
  pss->started = false;
@@ -631,7 +631,7 @@ void Init_client(void) {
631
631
  cMethodNode = rb_define_class_under(cClient, "cMethodNode", cNode);
632
632
  cVarNode = rb_define_class_under(cClient, "cVarNode", cNode);
633
633
 
634
- Init_types();
634
+ Init_types(mOPCUA);
635
635
 
636
636
  rb_define_alloc_func(cClient, client_alloc);
637
637
  rb_define_method(cClient, "initialize", client_init, 3);
@@ -46,6 +46,34 @@ bool server_node_get_reference(UA_Server *server, UA_NodeId parent, UA_NodeId *r
46
46
  return false;
47
47
  }
48
48
 
49
+ bool server_node_get_reference_by_name(UA_Server *server, UA_NodeId parent, UA_QualifiedName name, UA_NodeId *result, bool inverse) {
50
+ UA_BrowseDescription bDes;
51
+ UA_BrowseDescription_init(&bDes);
52
+ bDes.nodeId = parent;
53
+ bDes.resultMask = UA_BROWSERESULTMASK_ALL;
54
+ bDes.browseDirection = inverse ? 1 : 0;
55
+ UA_BrowseResult bRes = UA_Server_browse(server, 999, &bDes);
56
+
57
+ for (int i=0; i < bRes.referencesSize; i++) {
58
+ UA_ReferenceDescription *ref = &(bRes.references[i]);
59
+
60
+ UA_QualifiedName qn; UA_QualifiedName_init(&qn);
61
+ UA_Server_readBrowseName(server, ref->nodeId.nodeId, &qn);
62
+
63
+ if (UA_QualifiedName_equal(&qn,&name)) {
64
+ UA_NodeId_copy(&ref->nodeId.nodeId,result);
65
+
66
+ UA_BrowseResult_deleteMembers(&bRes);
67
+ UA_BrowseResult_clear(&bRes);
68
+ return true;
69
+ }
70
+ }
71
+
72
+ UA_BrowseResult_deleteMembers(&bRes);
73
+ UA_BrowseResult_clear(&bRes);
74
+ return false;
75
+ }
76
+
49
77
  bool client_node_get_reference_by_name(UA_Client *client, UA_NodeId parent, UA_QualifiedName name, UA_NodeId *result, bool inverse) {
50
78
  UA_BrowseRequest bReq;
51
79
  UA_BrowseRequest_init(&bReq);
@@ -6,6 +6,7 @@
6
6
 
7
7
  RUBY_EXTERN UA_BrowsePathResult node_browse_path(UA_Server *server, UA_NodeId relative, UA_NodeId ref, UA_QualifiedName mqn, bool inverse);
8
8
  RUBY_EXTERN bool server_node_get_reference(UA_Server *server, UA_NodeId parent, UA_NodeId *result, bool inverse);
9
+ RUBY_EXTERN bool server_node_get_reference_by_name(UA_Server *server, UA_NodeId parent, UA_QualifiedName name, UA_NodeId *result, bool inverse);
9
10
  RUBY_EXTERN bool client_node_get_reference_by_name(UA_Client *client, UA_NodeId parent, UA_QualifiedName name, UA_NodeId *result, bool inverse);
10
11
  RUBY_EXTERN bool client_node_get_reference_by_type(UA_Client *client, UA_NodeId parent, UA_NodeId type, UA_NodeId *result, bool inverse);
11
12
  RUBY_EXTERN bool client_node_list_references(UA_Client *client, UA_NodeId parent, bool inverse);
@@ -1,6 +1,6 @@
1
1
  #include "values.h"
2
2
 
3
- VALUE mOPCUA;
3
+ VALUE mTYPES;
4
4
 
5
5
  /* -- */
6
6
  static void variant_set_one_dimension(UA_Variant *variant,UA_UInt32 len) { //{{{
@@ -154,8 +154,16 @@ bool value_to_variant(VALUE value, UA_Variant *variant, UA_UInt32 proposal) { //
154
154
  case T_SYMBOL:
155
155
  {
156
156
  VALUE str = rb_obj_as_string(value);
157
- UA_String tmp = UA_STRING(StringValuePtr(str));
158
- UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_STRING]);
157
+ if (proposal == UA_TYPES_BYTESTRING) {
158
+ UA_ByteString tmp = UA_BYTESTRING(StringValuePtr(str));
159
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_BYTESTRING]);
160
+ } else if (proposal == UA_TYPES_NODEID) {
161
+ UA_NodeId tmp = UA_NODEID(StringValuePtr(str));
162
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_NODEID]);
163
+ } else {
164
+ UA_String tmp = UA_STRING(StringValuePtr(str));
165
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_STRING]);
166
+ }
159
167
  done = true;
160
168
  break;
161
169
  }
@@ -171,16 +179,19 @@ bool value_to_variant(VALUE value, UA_Variant *variant, UA_UInt32 proposal) { //
171
179
  return done;
172
180
  } //}}}
173
181
 
174
- void Init_types() {/*{{{*/
182
+ void Init_types(VALUE mOPCUA) {/*{{{*/
175
183
  mTYPES = rb_define_module_under(mOPCUA,"TYPES");
176
184
  rb_define_const(mTYPES, "DATETIME", INT2NUM(UA_TYPES_DATETIME ));
177
185
  rb_define_const(mTYPES, "BOOLEAN", INT2NUM(UA_TYPES_BOOLEAN ));
186
+ rb_define_const(mTYPES, "FLOAT", INT2NUM(UA_TYPES_FLOAT ));
178
187
  rb_define_const(mTYPES, "DOUBLE", INT2NUM(UA_TYPES_DOUBLE ));
179
188
  rb_define_const(mTYPES, "INT32", INT2NUM(UA_TYPES_INT32 ));
180
189
  rb_define_const(mTYPES, "INT16", INT2NUM(UA_TYPES_INT16 ));
181
190
  rb_define_const(mTYPES, "UINT32", INT2NUM(UA_TYPES_UINT32 ));
182
191
  rb_define_const(mTYPES, "UINT16", INT2NUM(UA_TYPES_UINT16 ));
183
192
  rb_define_const(mTYPES, "STRING", INT2NUM(UA_TYPES_STRING ));
193
+ rb_define_const(mTYPES, "BYTESTRING", INT2NUM(UA_TYPES_BYTESTRING ));
194
+ rb_define_const(mTYPES, "NODEID", INT2NUM(UA_TYPES_NODEID ));
184
195
  }/*}}}*/
185
196
 
186
197
  static VALUE UA_TYPES_DATETIME_to_value(UA_DateTime data) { //{{{
@@ -189,6 +200,9 @@ static VALUE UA_TYPES_DATETIME_to_value(UA_DateTime data) { //{{{
189
200
  static VALUE UA_TYPES_BOOLEAN_to_value(UA_Boolean data) { //{{{
190
201
  return data ? Qtrue : Qfalse;
191
202
  } //}}}
203
+ static VALUE UA_TYPES_FLOAT_to_value(UA_Float data) { //{{{
204
+ return DBL2NUM((double)data);
205
+ } //}}}
192
206
  static VALUE UA_TYPES_DOUBLE_to_value(UA_Double data) { //{{{
193
207
  return DBL2NUM(data);
194
208
  } //}}}
@@ -213,6 +227,9 @@ static VALUE UA_TYPES_UINT16_to_value(UA_UInt16 data) { //{{{
213
227
  static VALUE UA_TYPES_STRING_to_value(UA_String data) { //{{{
214
228
  return rb_str_export_locale(rb_str_new((char *)(data.data),data.length));
215
229
  } //}}}
230
+ static VALUE UA_TYPES_BYTESTRING_to_value(UA_ByteString data) { //{{{
231
+ return rb_str_export_locale(rb_str_new((char *)(data.data),data.length));
232
+ } //}}}
216
233
 
217
234
  VALUE extract_value(UA_Variant value) { //{{{
218
235
  VALUE ret = rb_ary_new2(2);
@@ -228,6 +245,9 @@ VALUE extract_value(UA_Variant value) { //{{{
228
245
  } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_BOOLEAN])) {
229
246
  rb_ary_store(ret,0,UA_TYPES_BOOLEAN_to_value(*(UA_Boolean *)value.data));
230
247
  rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Boolean")));
248
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_FLOAT])) {
249
+ rb_ary_store(ret,0,UA_TYPES_FLOAT_to_value(*(UA_Float *)value.data));
250
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Float")));
231
251
  } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DOUBLE])) {
232
252
  rb_ary_store(ret,0,UA_TYPES_DOUBLE_to_value(*(UA_Double *)value.data));
233
253
  rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Double")));
@@ -252,6 +272,11 @@ VALUE extract_value(UA_Variant value) { //{{{
252
272
  } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_STRING])) {
253
273
  rb_ary_store(ret,0,UA_TYPES_STRING_to_value(*(UA_String *)value.data));
254
274
  rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.String")));
275
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_BYTESTRING])) {
276
+ rb_ary_store(ret,0,UA_TYPES_BYTESTRING_to_value(*(UA_ByteString *)value.data));
277
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.String")));
278
+ } else {
279
+ //printf("Unknown Datatype\n");
255
280
  }
256
281
  } else if (value.arrayDimensionsSize == 1 || (value.arrayDimensionsSize == 0 && value.arrayLength > 0)) {
257
282
  if (UA_Variant_hasArrayType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
@@ -268,6 +293,13 @@ VALUE extract_value(UA_Variant value) { //{{{
268
293
  for (int i=0; i < value.arrayLength; i++) {
269
294
  rb_ary_push(res,UA_TYPES_BOOLEAN_to_value(((UA_Boolean *)value.data)[i]));
270
295
  }
296
+ } else if (UA_Variant_hasArrayType(&value, &UA_TYPES[UA_TYPES_FLOAT])) {
297
+ VALUE res = rb_ary_new();
298
+ rb_ary_store(ret,0,res);
299
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Float")));
300
+ for (int i=0; i < value.arrayLength; i++) {
301
+ rb_ary_push(res,UA_TYPES_FLOAT_to_value(((UA_Float *)value.data)[i]));
302
+ }
271
303
  } else if (UA_Variant_hasArrayType(&value, &UA_TYPES[UA_TYPES_DOUBLE])) {
272
304
  VALUE res = rb_ary_new();
273
305
  rb_ary_store(ret,0,res);
@@ -4,9 +4,8 @@
4
4
  #include <open62541.h>
5
5
  #include <ruby.h>
6
6
 
7
- VALUE mTYPES;
8
7
  RUBY_EXTERN bool value_to_variant(VALUE value, UA_Variant *variant, UA_UInt32 proposal);
9
- RUBY_EXTERN void Init_types();
8
+ RUBY_EXTERN void Init_types(VALUE mOPCUA);
10
9
  RUBY_EXTERN VALUE extract_value(UA_Variant value);
11
10
 
12
11
  #endif
@@ -224,11 +224,15 @@ static UA_StatusCode node_add_method_callback( //{{{
224
224
  rb_ary_push(args,rb_ary_entry(ret,0));
225
225
  }
226
226
 
227
- rb_proc_call(me->method,args);
227
+ VALUE ret = rb_proc_call(me->method,args);
228
+
229
+ if (outputSize == 1) {
230
+ value_to_variant(ret,output,-1);
231
+ }
228
232
 
229
233
  return UA_STATUSCODE_GOOD;
230
234
  } //}}}
231
- static UA_NodeId node_add_method_ua(UA_NodeId n, UA_LocalizedText dn, UA_QualifiedName qn, node_struct *parent,size_t inputArgumentsSize,const UA_Argument *inputArguments, VALUE blk) { //{{{
235
+ static UA_NodeId node_add_method_ua(UA_NodeId n, UA_LocalizedText dn, UA_QualifiedName qn, node_struct *parent,size_t inputArgumentsSize,const UA_Argument *inputArguments,size_t outputArgumentsSize,const UA_Argument *outputArguments, VALUE blk) { //{{{
232
236
  UA_MethodAttributes mnAttr = UA_MethodAttributes_default;
233
237
  mnAttr.displayName = dn;
234
238
  mnAttr.executable = true;
@@ -248,8 +252,8 @@ static UA_NodeId node_add_method_ua(UA_NodeId n, UA_LocalizedText dn, UA_Qualifi
248
252
  &node_add_method_callback,
249
253
  inputArgumentsSize,
250
254
  inputArguments,
251
- 0,
252
- NULL,
255
+ outputArgumentsSize,
256
+ outputArguments,
253
257
  (void *)me,
254
258
  NULL);
255
259
 
@@ -264,6 +268,8 @@ static UA_NodeId node_add_method_ua(UA_NodeId n, UA_LocalizedText dn, UA_Qualifi
264
268
  } //}}}
265
269
  static UA_NodeId node_add_method_ua_simple(char* nstr, node_struct *parent, VALUE opts, VALUE blk) { //{{{
266
270
  UA_Argument inputArguments[RHASH_SIZE(opts)];
271
+ UA_Argument outputArguments[1];
272
+ int counter = 0;
267
273
 
268
274
  VALUE ary = rb_funcall(opts, rb_intern("to_a"), 0);
269
275
  for (long i=0; i<RARRAY_LEN(ary); i++) {
@@ -272,11 +278,20 @@ static UA_NodeId node_add_method_ua_simple(char* nstr, node_struct *parent, VALU
272
278
  if (NIL_P(str) || TYPE(str) != T_STRING)
273
279
  rb_raise(rb_eTypeError, "cannot convert obj to string");
274
280
  char *nstr = (char *)StringValuePtr(str);
275
- UA_Argument_init(&inputArguments[i]);
276
- inputArguments[i].description = UA_LOCALIZEDTEXT("en-US", nstr);
277
- inputArguments[i].name = UA_STRING(nstr);
278
- inputArguments[i].dataType = UA_TYPES[NUM2INT(RARRAY_AREF(item, 1))].typeId;
279
- inputArguments[i].valueRank = UA_VALUERANK_SCALAR;
281
+ if (rb_str_cmp(str,rb_str_new2("return"))) {
282
+ UA_Argument_init(&inputArguments[counter]);
283
+ inputArguments[counter].description = UA_LOCALIZEDTEXT("en-US", nstr);
284
+ inputArguments[counter].name = UA_STRING(nstr);
285
+ inputArguments[counter].dataType = UA_TYPES[NUM2INT(RARRAY_AREF(item, 1))].typeId;
286
+ inputArguments[counter].valueRank = UA_VALUERANK_SCALAR;
287
+ counter++;
288
+ } else {
289
+ UA_Argument_init(&outputArguments[0]);
290
+ outputArguments[0].description = UA_LOCALIZEDTEXT("en-US", nstr);
291
+ outputArguments[0].name = UA_STRING(nstr);
292
+ outputArguments[0].dataType = UA_TYPES[NUM2INT(RARRAY_AREF(item, 1))].typeId;
293
+ outputArguments[0].valueRank = UA_VALUERANK_SCALAR;
294
+ }
280
295
  }
281
296
  int nodeid = nodecounter++;
282
297
 
@@ -288,8 +303,10 @@ static UA_NodeId node_add_method_ua_simple(char* nstr, node_struct *parent, VALU
288
303
  UA_LOCALIZEDTEXT("en-US", nstr),
289
304
  UA_QUALIFIEDNAME(parent->master->default_ns, nstr),
290
305
  parent,
291
- RHASH_SIZE(opts),
306
+ counter,
292
307
  inputArguments,
308
+ RHASH_SIZE(opts)-counter,
309
+ outputArguments,
293
310
  blk
294
311
  );
295
312
  } //}}}
@@ -556,16 +573,38 @@ static UA_StatusCode node_manifest_iter(UA_NodeId child_id, UA_Boolean is_invers
556
573
  UA_BrowsePathResult_clear(&property);
557
574
  }
558
575
  if(nc == UA_NODECLASS_METHOD) {
559
- UA_NodeId ttt;
576
+ UA_NodeId ia;
577
+ UA_NodeId oa;
560
578
  VALUE blk = rb_hash_aref(parent->master->methods,INT2NUM(child_id.identifier.numeric));
561
- if (server_node_get_reference(parent->master->master, child_id, &ttt, false)) {
579
+
580
+ bool iacheck = server_node_get_reference_by_name(parent->master->master, child_id, UA_QUALIFIEDNAME(0,"InputArguments"), &ia, false);
581
+ bool oacheck = server_node_get_reference_by_name(parent->master->master, child_id, UA_QUALIFIEDNAME(0,"OutputArguments"), &oa, false);
582
+ if (iacheck && oacheck) {
583
+ UA_Variant arv1; UA_Variant_init(&arv1);
584
+ UA_Variant arv2; UA_Variant_init(&arv2);
585
+ UA_Server_readValue(parent->master->master, ia, &arv1);
586
+ UA_Server_readValue(parent->master->master, oa, &arv2);
587
+
588
+ // todo differentiate between input and output reference
589
+ node_add_method_ua(UA_NODEID_STRING(parent->master->default_ns,buffer),dn,qn,newnode,arv1.arrayLength,(UA_Argument *)arv1.data,arv2.arrayLength,(UA_Argument *)arv2.data,blk);
590
+ UA_Variant_clear(&arv1);
591
+ UA_Variant_clear(&arv2);
592
+ } else if (iacheck) {
593
+ UA_Variant arv; UA_Variant_init(&arv);
594
+ UA_Server_readValue(parent->master->master, ia, &arv);
595
+
596
+ // todo differentiate between input and output reference
597
+ node_add_method_ua(UA_NODEID_STRING(parent->master->default_ns,buffer),dn,qn,newnode,arv.arrayLength,(UA_Argument *)arv.data,0,NULL,blk);
598
+ UA_Variant_clear(&arv);
599
+ } else if (oacheck) {
562
600
  UA_Variant arv; UA_Variant_init(&arv);
563
- UA_Server_readValue(parent->master->master, ttt, &arv);
601
+ UA_Server_readValue(parent->master->master, oa, &arv);
564
602
 
565
- node_add_method_ua(UA_NODEID_STRING(parent->master->default_ns,buffer),dn,qn,newnode,arv.arrayLength,(UA_Argument *)arv.data,blk);
603
+ // todo differentiate between input and output reference
604
+ node_add_method_ua(UA_NODEID_STRING(parent->master->default_ns,buffer),dn,qn,newnode,0,NULL,arv.arrayLength,(UA_Argument *)arv.data,blk);
566
605
  UA_Variant_clear(&arv);
567
606
  } else {
568
- node_add_method_ua(UA_NODEID_STRING(parent->master->default_ns,buffer),dn,qn,newnode,0,NULL,blk);
607
+ node_add_method_ua(UA_NODEID_STRING(parent->master->default_ns,buffer),dn,qn,newnode,0,NULL,0,NULL,blk);
569
608
  }
570
609
  }
571
610
  }
@@ -939,7 +978,7 @@ void Init_server(void) {
939
978
  rb_define_const(mOPCUA, "BASEDATAVARIABLETYPE", INT2NUM(UA_NS0ID_BASEDATAVARIABLETYPE));
940
979
  rb_define_const(mOPCUA, "PROPERTYTYPE", INT2NUM(UA_NS0ID_PROPERTYTYPE));
941
980
 
942
- Init_types();
981
+ Init_types(mOPCUA);
943
982
 
944
983
  cServer = rb_define_class_under(mOPCUA, "Server", rb_cObject);
945
984
  cNode = rb_define_class_under(cServer, "Node", rb_cObject);
@@ -974,7 +1013,7 @@ void Init_server(void) {
974
1013
  rb_define_method(cNode, "exists?", node_exists, 0);
975
1014
 
976
1015
  rb_define_method(cTypeTopNode, "add_object_type", node_add_object_type, 1);
977
- rb_define_method(cTypeTopNode, "add_reference_type", node_add_reference_type, 1);
1016
+ rb_define_method(cTypeTopNode, "add_reference_type", node_add_reference_type, 2);
978
1017
  rb_define_method(cTypeTopNode, "folder", node_type_folder, 0);
979
1018
 
980
1019
  rb_define_method(cTypeSubNode, "add_object_type", node_add_object_type, 1);
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "opcua"
3
- s.version = "0.16"
3
+ s.version = "0.21"
4
4
  s.platform = Gem::Platform::RUBY
5
5
  s.license = "LGPL-3.0"
6
6
  s.summary = "Preliminary release of opcua (open62541) ruby bindings. C performance, Ruby elegance, simplicity, and productivity."
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opcua
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.16'
4
+ version: '0.21'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juergen eTM Mangler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: tools
11
11
  cert_chain: []
12
- date: 2019-10-02 00:00:00.000000000 Z
12
+ date: 2020-07-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemonite
@@ -74,6 +74,7 @@ files:
74
74
  - cert/cert.h
75
75
  - cert/cert_key.h
76
76
  - example/bug5.rb
77
+ - example/client_get_float.rb
77
78
  - example/client_get_sync.rb
78
79
  - example/client_get_value.rb
79
80
  - example/client_method.rb
@@ -83,6 +84,7 @@ files:
83
84
  - example/server.rb
84
85
  - example/server_deep.rb
85
86
  - example/server_values.rb
87
+ - example/server_xml.rb
86
88
  - example/test.rb
87
89
  - ext/opcua/client/client.c
88
90
  - ext/opcua/client/client.h
@@ -136,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
138
  - !ruby/object:Gem::Version
137
139
  version: '0'
138
140
  requirements: []
139
- rubygems_version: 3.0.3
141
+ rubygems_version: 3.1.2
140
142
  signing_key:
141
143
  specification_version: 4
142
144
  summary: Preliminary release of opcua (open62541) ruby bindings. C performance, Ruby