opcua 0.7 → 0.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9386b3d4c28890fbc2d650b385caaae4c334acfadc5a60731e9c33cd0c78bed6
4
- data.tar.gz: 05a1d8cb7504424fbba81ac9254fc49d2897bbde65170b3db6d25e1bc57010c5
3
+ metadata.gz: 3a9f25384117833c6ce8890d90e736454f6c1d033861f7d4e059eb2d642fc474
4
+ data.tar.gz: e3047ad3ee37d7b48a50891ebc292e3aa8bc240bccb8cf142e97e1e98c10ce05
5
5
  SHA512:
6
- metadata.gz: 48759b29e6c4b67bd730b57c8d1088251a5e96cfdd4f171955aca93521e0939955f88bbe76152008423457f5fb5fe0cf34e1e845822ceaee37fa4730dbaf85a4
7
- data.tar.gz: 297417d2c1efd3430087c3c15436f69805364d56484ce42ffd3eaac9f8071006a7dc36df78e2682e20d92ec232be0b9a26f9d1d5da357af1339b4cf96bec722a
6
+ metadata.gz: 566c8b06c3ebf55791dcafe681242c041104c9d32179585b3c18d38c6748c200960fc2d37dbeffe97e5be92c8bfeec25826c556aa1115bd0a89ba1c33d2c986e
7
+ data.tar.gz: 0c567af4caffdd155c300dc2847b1902c62ea4df5d3afa4f5b6a8a5c06c4dc3aa5ec718934d76c6007a4a894fff719834f09cf657945948079747ddac3933e65
data/cert/cert.h CHANGED
@@ -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, 0x39, 0x4d, 0x8d, 0x5f, 0xd4, 0xfe, 0x9d, 0x97, 0xef,
4
- 0xaa, 0x36, 0xc0, 0x7f, 0x64, 0x96, 0xfa, 0x3e, 0x4c, 0x8e, 0x33, 0x30,
3
+ 0x02, 0x02, 0x14, 0x04, 0x5b, 0x6e, 0x30, 0x28, 0x5e, 0xcf, 0xdd, 0x1a,
4
+ 0xd4, 0xc0, 0x1a, 0xcb, 0x29, 0xcc, 0x5d, 0x60, 0x89, 0x6e, 0x7a, 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, 0x30, 0x34, 0x32, 0x37, 0x31,
9
- 0x32, 0x34, 0x38, 0x34, 0x38, 0x5a, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x34,
10
- 0x31, 0x36, 0x31, 0x32, 0x34, 0x38, 0x34, 0x38, 0x5a, 0x30, 0x15, 0x31,
8
+ 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x35, 0x30, 0x37, 0x32,
9
+ 0x30, 0x31, 0x31, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x34,
10
+ 0x32, 0x36, 0x32, 0x30, 0x31, 0x31, 0x30, 0x30, 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, 0xf5, 0x91, 0xb2, 0x9b, 0x5a, 0x5a, 0x7f,
16
- 0xac, 0xc1, 0xfd, 0x5f, 0x2e, 0xc1, 0x6c, 0x2b, 0x89, 0x84, 0x04, 0x0f,
17
- 0xae, 0x4c, 0xc2, 0x26, 0x86, 0xc8, 0x45, 0xcd, 0x71, 0x1c, 0xa2, 0x30,
18
- 0x54, 0xcb, 0x40, 0xeb, 0x30, 0xdf, 0xbb, 0x6a, 0x4e, 0x95, 0x1d, 0x57,
19
- 0xeb, 0xed, 0xa0, 0x30, 0xe1, 0x8f, 0x9d, 0x0b, 0xb0, 0x55, 0x18, 0x98,
20
- 0xef, 0xd6, 0x36, 0xa5, 0xe5, 0x4c, 0x88, 0xa1, 0xb7, 0x29, 0x08, 0xec,
21
- 0xa3, 0x7b, 0xac, 0x30, 0x20, 0x9a, 0xd2, 0x5a, 0x2d, 0x2f, 0x22, 0x08,
22
- 0x1b, 0x94, 0x97, 0x4d, 0xdf, 0xc1, 0x1d, 0x20, 0xb3, 0x9b, 0x9e, 0x7b,
23
- 0x58, 0xb3, 0xf0, 0xe8, 0x29, 0x25, 0x41, 0xf5, 0x54, 0x50, 0xde, 0x83,
24
- 0xef, 0x31, 0xae, 0xae, 0xb7, 0xbd, 0x0a, 0xbb, 0x19, 0x35, 0xc2, 0x6b,
25
- 0x3b, 0xe5, 0x36, 0x24, 0xf2, 0xf9, 0xe9, 0xe6, 0xa2, 0xe7, 0xe2, 0x50,
26
- 0xfe, 0x19, 0xbd, 0x9f, 0x51, 0xbd, 0x0f, 0xfe, 0x2c, 0xf5, 0x91, 0x5a,
27
- 0x5a, 0xe1, 0x53, 0xe2, 0x44, 0x4d, 0x31, 0x5c, 0x80, 0xbd, 0xb9, 0x0d,
28
- 0x22, 0xc3, 0x1c, 0x07, 0x46, 0x69, 0xdc, 0xbf, 0x86, 0x7e, 0xb5, 0x21,
29
- 0xf4, 0xa3, 0x50, 0x30, 0x6f, 0x76, 0xb0, 0x71, 0x41, 0x9e, 0xbd, 0x78,
30
- 0xc5, 0xe9, 0xf4, 0x83, 0xc2, 0xfb, 0x64, 0x54, 0xe3, 0x51, 0x7d, 0x81,
31
- 0x53, 0x19, 0x0b, 0x8a, 0xde, 0x43, 0x4d, 0x63, 0x01, 0x91, 0x92, 0x4f,
32
- 0xc0, 0xfc, 0xf3, 0xe8, 0x9e, 0x50, 0xda, 0x9d, 0xc7, 0xcb, 0xba, 0x14,
33
- 0x9b, 0x83, 0xbb, 0xb3, 0xa6, 0xb5, 0x60, 0xcc, 0x50, 0x4b, 0xc2, 0xf8,
34
- 0x5e, 0xbc, 0x7c, 0x29, 0x3e, 0xda, 0x00, 0xe8, 0x4e, 0x81, 0x80, 0xa7,
35
- 0x23, 0xe3, 0xd1, 0x84, 0x71, 0x68, 0xde, 0x8f, 0x65, 0x7b, 0xef, 0x7a,
36
- 0xa3, 0x2c, 0x3b, 0x8f, 0x1b, 0xf9, 0x43, 0xe3, 0x77, 0x02, 0x03, 0x01,
15
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0xc9, 0xb9, 0x77, 0x55, 0x7a, 0xa6, 0x7a,
16
+ 0xb5, 0x7a, 0x37, 0x81, 0x2c, 0x48, 0x40, 0xea, 0x35, 0x9f, 0xb8, 0x3a,
17
+ 0xbe, 0xe0, 0xc6, 0x8d, 0x91, 0xfa, 0x12, 0x2f, 0x76, 0xb4, 0x00, 0x48,
18
+ 0x47, 0x2e, 0x7f, 0x02, 0x8c, 0x3b, 0x5f, 0x08, 0xb6, 0xb6, 0x16, 0x9f,
19
+ 0x2c, 0x02, 0x80, 0x5f, 0x2b, 0x88, 0x39, 0xe6, 0x0d, 0x1c, 0x90, 0x43,
20
+ 0x4b, 0xdf, 0x68, 0xd5, 0x9f, 0xc4, 0xb5, 0x14, 0xe3, 0xe2, 0x05, 0xe3,
21
+ 0x13, 0x6a, 0xbd, 0xc2, 0x89, 0x7a, 0xeb, 0x60, 0xbd, 0x3a, 0xb1, 0x03,
22
+ 0x1c, 0x8f, 0xeb, 0x6e, 0x3e, 0x1c, 0x35, 0xed, 0x37, 0x5d, 0xef, 0xd1,
23
+ 0xc8, 0x95, 0x68, 0xe1, 0x39, 0xaf, 0xf3, 0x8a, 0xb2, 0x27, 0x26, 0x39,
24
+ 0x23, 0xa7, 0xb8, 0xdd, 0x19, 0xc1, 0x9b, 0x9f, 0x86, 0xe1, 0x17, 0x35,
25
+ 0x88, 0xbd, 0xd4, 0xd5, 0x89, 0xd9, 0xfc, 0x09, 0x0c, 0x1a, 0xc3, 0xb2,
26
+ 0xcb, 0x1f, 0x58, 0x61, 0xf8, 0xca, 0xe1, 0xc6, 0x50, 0xb2, 0xb4, 0xec,
27
+ 0x6a, 0xfc, 0x7d, 0xce, 0x14, 0xe5, 0x4f, 0xd7, 0x03, 0x5c, 0x88, 0x1b,
28
+ 0x17, 0x35, 0x95, 0x22, 0x70, 0x55, 0x6e, 0x09, 0xf5, 0xd6, 0x4c, 0xc2,
29
+ 0xf0, 0x98, 0x0d, 0x43, 0x90, 0x09, 0xf2, 0xbc, 0x84, 0x5a, 0xb0, 0xe5,
30
+ 0xf6, 0xb7, 0x63, 0x66, 0xa6, 0xda, 0x06, 0xfe, 0x34, 0x8e, 0x83, 0x81,
31
+ 0x90, 0xbd, 0x32, 0xf8, 0xed, 0x80, 0x05, 0xca, 0x6c, 0x5a, 0x4b, 0x31,
32
+ 0x29, 0x0c, 0x46, 0xc9, 0xe4, 0x85, 0x1e, 0x4b, 0x3b, 0xfa, 0x99, 0xec,
33
+ 0x5a, 0x43, 0xd3, 0x96, 0x90, 0x8d, 0x7e, 0x3f, 0xe5, 0x1b, 0x31, 0x4c,
34
+ 0x62, 0x23, 0x43, 0xdd, 0xc2, 0xde, 0x9f, 0xb8, 0x05, 0xb0, 0xa5, 0xf5,
35
+ 0x3c, 0x8a, 0x24, 0xf3, 0x88, 0x34, 0x56, 0x50, 0x80, 0xb9, 0x06, 0x0d,
36
+ 0xd8, 0x82, 0x34, 0x3f, 0x2b, 0x50, 0x67, 0x97, 0x6d, 0x02, 0x03, 0x01,
37
37
  0x00, 0x01, 0xa3, 0x60, 0x30, 0x5e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
38
- 0x0e, 0x04, 0x16, 0x04, 0x14, 0xb7, 0x8d, 0xf0, 0x48, 0x40, 0x1d, 0x7b,
39
- 0x71, 0x7f, 0xa3, 0x98, 0x32, 0x5d, 0x2b, 0x20, 0xb9, 0x09, 0xd5, 0x2b,
40
- 0xa7, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04,
38
+ 0x0e, 0x04, 0x16, 0x04, 0x14, 0xa0, 0xaf, 0xcb, 0x66, 0xa8, 0x50, 0xa5,
39
+ 0x30, 0x07, 0xa3, 0xd0, 0xae, 0xac, 0x94, 0x36, 0x95, 0x94, 0x0d, 0xa5,
40
+ 0x0a, 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
- 0x48, 0x4b, 0x50, 0xfa, 0xbd, 0x8e, 0x7a, 0x66, 0x27, 0x84, 0xca, 0xb9,
48
- 0x46, 0xaf, 0xee, 0x87, 0x5c, 0xe3, 0x8b, 0xd8, 0x01, 0x0e, 0x62, 0xe9,
49
- 0xdf, 0x7d, 0xc3, 0xe4, 0x17, 0xcb, 0x70, 0xcc, 0xc9, 0x45, 0x00, 0x0c,
50
- 0xbe, 0xd8, 0xf3, 0x4e, 0xfd, 0xc8, 0x65, 0x6a, 0x1c, 0x0d, 0x9a, 0x19,
51
- 0x4b, 0xcb, 0x3a, 0xa3, 0x2c, 0xd5, 0xf6, 0x3c, 0xa9, 0x4e, 0x8c, 0x22,
52
- 0x49, 0xcf, 0x20, 0x54, 0x99, 0xe4, 0xfb, 0x60, 0x56, 0x17, 0xe5, 0x2a,
53
- 0x75, 0x2a, 0xb1, 0xcd, 0x24, 0x10, 0xce, 0x3f, 0xc2, 0x5f, 0xcc, 0x79,
54
- 0x30, 0x74, 0xb5, 0x23, 0xe7, 0x56, 0xad, 0x4f, 0x20, 0x91, 0xcb, 0x65,
55
- 0x87, 0x5d, 0x08, 0x6b, 0x19, 0xae, 0x68, 0x49, 0xaf, 0x1d, 0xe0, 0xff,
56
- 0x9c, 0xd5, 0xd4, 0x50, 0x61, 0x41, 0x7b, 0xa1, 0x93, 0xfe, 0x83, 0xe1,
57
- 0xba, 0x5e, 0xdb, 0x84, 0x81, 0xfa, 0x8a, 0xf6, 0x0a, 0x4a, 0xa6, 0xfb,
58
- 0x10, 0x7e, 0xff, 0x0b, 0x22, 0x18, 0x62, 0x3d, 0x88, 0xed, 0xe3, 0x7e,
59
- 0x92, 0xc7, 0x2d, 0x72, 0x6b, 0xf1, 0xc3, 0xa7, 0xed, 0x29, 0xa6, 0x39,
60
- 0xd9, 0xc8, 0xed, 0xa9, 0x05, 0x6e, 0xcc, 0x63, 0x96, 0xa4, 0x3a, 0x05,
61
- 0x38, 0x46, 0xc9, 0x72, 0x54, 0xb5, 0x5a, 0x05, 0x54, 0xe6, 0x97, 0x3d,
62
- 0xc8, 0xdd, 0xba, 0x9c, 0xfd, 0x0c, 0xbc, 0x0c, 0x44, 0x4b, 0x7f, 0xd1,
63
- 0x84, 0xcc, 0xb0, 0x65, 0x4b, 0xdb, 0x4b, 0x25, 0x6d, 0xca, 0x08, 0x90,
64
- 0x07, 0xde, 0x6a, 0x7d, 0x93, 0x79, 0xb0, 0x4d, 0xd6, 0xed, 0x30, 0x07,
65
- 0x14, 0xfd, 0x80, 0x7f, 0x54, 0xda, 0xbf, 0x11, 0x79, 0xd2, 0xa2, 0xea,
66
- 0x0a, 0xb6, 0x34, 0x1f, 0xb3, 0x22, 0xe9, 0x2b, 0x53, 0x5e, 0x11, 0x2e,
67
- 0x7e, 0x50, 0x4b, 0x09, 0x22, 0x53, 0x0b, 0xfb, 0x93, 0x8d, 0xec, 0x18,
68
- 0x45, 0x0e, 0x49, 0xb0
47
+ 0xba, 0x6e, 0x59, 0x6a, 0x83, 0x42, 0x04, 0x58, 0x26, 0x55, 0x37, 0x1c,
48
+ 0x3e, 0x51, 0x7c, 0x9c, 0x9c, 0xf2, 0x6c, 0xfd, 0x08, 0xcf, 0x39, 0x39,
49
+ 0x95, 0xec, 0x4e, 0x74, 0x53, 0x33, 0xb6, 0xe7, 0x47, 0x58, 0xe0, 0x63,
50
+ 0x93, 0xf1, 0x4b, 0xa9, 0xf9, 0x85, 0x62, 0xaa, 0x03, 0x8c, 0xd9, 0x90,
51
+ 0x0a, 0xc5, 0x62, 0x42, 0xc9, 0xfe, 0xd7, 0x1f, 0x6d, 0x77, 0xd0, 0x8c,
52
+ 0xa6, 0x56, 0x60, 0xa9, 0x90, 0x4c, 0xb2, 0x74, 0x3e, 0x79, 0xd0, 0x20,
53
+ 0x01, 0x7c, 0x98, 0x6d, 0xf8, 0xd1, 0xde, 0xde, 0xcf, 0x0d, 0xfe, 0x00,
54
+ 0x2f, 0x43, 0x32, 0x48, 0x73, 0xf1, 0x01, 0xfa, 0x96, 0x97, 0x91, 0x20,
55
+ 0xd4, 0xc5, 0x9d, 0x84, 0x64, 0xf9, 0xf3, 0x20, 0x55, 0x49, 0xfa, 0x96,
56
+ 0x43, 0xb4, 0x04, 0x90, 0x06, 0x87, 0xec, 0x38, 0xfc, 0xe0, 0x92, 0x70,
57
+ 0xd9, 0x73, 0xc7, 0x3a, 0x7d, 0x12, 0x34, 0xc1, 0xcf, 0x36, 0xfd, 0x26,
58
+ 0xb8, 0x95, 0xff, 0xe0, 0xa9, 0x5e, 0x8c, 0xbe, 0x2d, 0xc1, 0xec, 0x46,
59
+ 0x42, 0xd6, 0xf5, 0x86, 0x12, 0xa9, 0x68, 0x96, 0xe3, 0x6d, 0xf8, 0x89,
60
+ 0x52, 0x6c, 0xfc, 0x8e, 0x2c, 0xbc, 0xbc, 0x96, 0xb6, 0xce, 0x5a, 0x4f,
61
+ 0xbf, 0x22, 0xf8, 0x2f, 0x51, 0x87, 0x03, 0x7e, 0x88, 0x9e, 0x23, 0xac,
62
+ 0xa2, 0xe4, 0x8c, 0x97, 0xd3, 0xf2, 0xd3, 0x07, 0xf1, 0xaf, 0x8d, 0xc4,
63
+ 0x57, 0x1b, 0x2b, 0x89, 0x7e, 0xfe, 0x84, 0x70, 0x25, 0xe9, 0xae, 0xd0,
64
+ 0x1a, 0x8e, 0xc9, 0x92, 0xd2, 0x5e, 0x80, 0x25, 0xfd, 0xa6, 0x48, 0x5c,
65
+ 0x6e, 0x1c, 0x6f, 0xca, 0xdd, 0x16, 0x95, 0x50, 0x19, 0x42, 0x7b, 0x2c,
66
+ 0xcb, 0x36, 0x3a, 0xae, 0xfe, 0x36, 0xc0, 0x5f, 0x44, 0x8d, 0x61, 0xf1,
67
+ 0x7a, 0x31, 0xc6, 0x9d, 0xe0, 0xa4, 0x2a, 0xee, 0x14, 0x32, 0x7c, 0xb0,
68
+ 0x1e, 0x2d, 0x9b, 0x8b
69
69
  };
70
70
  unsigned int cert_der_len = 796;
data/cert/cert_key.h CHANGED
@@ -1,103 +1,103 @@
1
1
  unsigned char cert_key_der[] = {
2
- 0x30, 0x82, 0x04, 0xa4, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
3
- 0xf5, 0x91, 0xb2, 0x9b, 0x5a, 0x5a, 0x7f, 0xac, 0xc1, 0xfd, 0x5f, 0x2e,
4
- 0xc1, 0x6c, 0x2b, 0x89, 0x84, 0x04, 0x0f, 0xae, 0x4c, 0xc2, 0x26, 0x86,
5
- 0xc8, 0x45, 0xcd, 0x71, 0x1c, 0xa2, 0x30, 0x54, 0xcb, 0x40, 0xeb, 0x30,
6
- 0xdf, 0xbb, 0x6a, 0x4e, 0x95, 0x1d, 0x57, 0xeb, 0xed, 0xa0, 0x30, 0xe1,
7
- 0x8f, 0x9d, 0x0b, 0xb0, 0x55, 0x18, 0x98, 0xef, 0xd6, 0x36, 0xa5, 0xe5,
8
- 0x4c, 0x88, 0xa1, 0xb7, 0x29, 0x08, 0xec, 0xa3, 0x7b, 0xac, 0x30, 0x20,
9
- 0x9a, 0xd2, 0x5a, 0x2d, 0x2f, 0x22, 0x08, 0x1b, 0x94, 0x97, 0x4d, 0xdf,
10
- 0xc1, 0x1d, 0x20, 0xb3, 0x9b, 0x9e, 0x7b, 0x58, 0xb3, 0xf0, 0xe8, 0x29,
11
- 0x25, 0x41, 0xf5, 0x54, 0x50, 0xde, 0x83, 0xef, 0x31, 0xae, 0xae, 0xb7,
12
- 0xbd, 0x0a, 0xbb, 0x19, 0x35, 0xc2, 0x6b, 0x3b, 0xe5, 0x36, 0x24, 0xf2,
13
- 0xf9, 0xe9, 0xe6, 0xa2, 0xe7, 0xe2, 0x50, 0xfe, 0x19, 0xbd, 0x9f, 0x51,
14
- 0xbd, 0x0f, 0xfe, 0x2c, 0xf5, 0x91, 0x5a, 0x5a, 0xe1, 0x53, 0xe2, 0x44,
15
- 0x4d, 0x31, 0x5c, 0x80, 0xbd, 0xb9, 0x0d, 0x22, 0xc3, 0x1c, 0x07, 0x46,
16
- 0x69, 0xdc, 0xbf, 0x86, 0x7e, 0xb5, 0x21, 0xf4, 0xa3, 0x50, 0x30, 0x6f,
17
- 0x76, 0xb0, 0x71, 0x41, 0x9e, 0xbd, 0x78, 0xc5, 0xe9, 0xf4, 0x83, 0xc2,
18
- 0xfb, 0x64, 0x54, 0xe3, 0x51, 0x7d, 0x81, 0x53, 0x19, 0x0b, 0x8a, 0xde,
19
- 0x43, 0x4d, 0x63, 0x01, 0x91, 0x92, 0x4f, 0xc0, 0xfc, 0xf3, 0xe8, 0x9e,
20
- 0x50, 0xda, 0x9d, 0xc7, 0xcb, 0xba, 0x14, 0x9b, 0x83, 0xbb, 0xb3, 0xa6,
21
- 0xb5, 0x60, 0xcc, 0x50, 0x4b, 0xc2, 0xf8, 0x5e, 0xbc, 0x7c, 0x29, 0x3e,
22
- 0xda, 0x00, 0xe8, 0x4e, 0x81, 0x80, 0xa7, 0x23, 0xe3, 0xd1, 0x84, 0x71,
23
- 0x68, 0xde, 0x8f, 0x65, 0x7b, 0xef, 0x7a, 0xa3, 0x2c, 0x3b, 0x8f, 0x1b,
24
- 0xf9, 0x43, 0xe3, 0x77, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
25
- 0x01, 0x00, 0xb8, 0x94, 0x26, 0xd7, 0xb6, 0x76, 0x47, 0x79, 0x26, 0xe6,
26
- 0xb7, 0x60, 0x81, 0x6a, 0x38, 0xdf, 0x48, 0x27, 0x75, 0x51, 0xe1, 0xc8,
27
- 0x1d, 0x05, 0x3a, 0x0b, 0x9d, 0x7b, 0xe3, 0xb5, 0xd4, 0xf6, 0x27, 0x40,
28
- 0x48, 0x87, 0x97, 0xe3, 0x5a, 0xe8, 0x6e, 0x14, 0x7c, 0x3d, 0x8d, 0x82,
29
- 0xd6, 0xba, 0xf4, 0x23, 0x6a, 0xe1, 0xc3, 0x54, 0x95, 0xbf, 0xd0, 0x17,
30
- 0x8b, 0x62, 0x6a, 0xc0, 0x58, 0x2d, 0x3f, 0xde, 0xc1, 0x5f, 0xb0, 0x59,
31
- 0xa0, 0x63, 0x21, 0x7b, 0xf2, 0xe3, 0xfb, 0x85, 0x6c, 0xea, 0xae, 0x29,
32
- 0x7c, 0x13, 0x2f, 0x28, 0x21, 0xa8, 0x5e, 0xd4, 0x24, 0x8a, 0x6b, 0xd6,
33
- 0x2b, 0xea, 0xa1, 0x62, 0x8e, 0x70, 0x2d, 0xc8, 0xd3, 0x0a, 0x3b, 0x21,
34
- 0xbd, 0x99, 0xc5, 0xb2, 0x07, 0x27, 0xcf, 0xcc, 0xae, 0xa5, 0x7a, 0x87,
35
- 0xd4, 0x05, 0xfd, 0xea, 0xdd, 0xbc, 0x9c, 0xe6, 0xf3, 0x50, 0x52, 0x3f,
36
- 0x8a, 0x67, 0xbe, 0x7e, 0xf9, 0xb5, 0xdb, 0x6d, 0x78, 0xf1, 0x57, 0x79,
37
- 0x8f, 0x7c, 0xe6, 0x5a, 0xba, 0xfc, 0x9b, 0x7a, 0x1b, 0x2c, 0x19, 0x14,
38
- 0xdb, 0x11, 0x69, 0x21, 0x96, 0xd8, 0x98, 0x5e, 0x38, 0x57, 0xe4, 0x54,
39
- 0xa0, 0x52, 0xd6, 0x08, 0x2c, 0x84, 0x01, 0x9d, 0x16, 0xac, 0x42, 0xe6,
40
- 0xaa, 0x18, 0x89, 0xa1, 0xc4, 0xfb, 0x4d, 0x66, 0xc8, 0x1e, 0x01, 0x69,
41
- 0xb0, 0xc1, 0x49, 0xfd, 0x73, 0x30, 0x22, 0xbf, 0x83, 0xe5, 0x4e, 0x17,
42
- 0x5a, 0x8a, 0x7b, 0x81, 0xc8, 0x60, 0x7a, 0x1e, 0x4a, 0xaf, 0x64, 0xd2,
43
- 0x63, 0xd8, 0xf6, 0xe9, 0x23, 0xaf, 0x5f, 0x02, 0x5e, 0xb5, 0xf9, 0xf8,
44
- 0x1d, 0xfb, 0x8f, 0x60, 0xa8, 0xcc, 0x24, 0x78, 0xd0, 0xc7, 0x25, 0x62,
45
- 0xc2, 0x66, 0x0d, 0xca, 0x0d, 0xab, 0xd1, 0x5c, 0x1e, 0xa9, 0x72, 0x4f,
46
- 0xe9, 0x34, 0xb4, 0xde, 0x78, 0xe1, 0x02, 0x81, 0x81, 0x00, 0xfd, 0x59,
47
- 0xbb, 0x02, 0xdc, 0x43, 0x51, 0xb9, 0x36, 0x08, 0x05, 0xc4, 0xf0, 0xca,
48
- 0x49, 0x74, 0xfc, 0x5c, 0xd6, 0x25, 0x0c, 0x7d, 0x9d, 0x7e, 0x9e, 0x1f,
49
- 0x2b, 0x2b, 0xad, 0xf8, 0x48, 0xd8, 0x4f, 0x9d, 0xf2, 0x42, 0x11, 0x80,
50
- 0xe9, 0x9d, 0xa0, 0x8c, 0x86, 0x1f, 0xad, 0xb5, 0x1d, 0x18, 0x25, 0xfb,
51
- 0xc0, 0x04, 0x18, 0xc3, 0xbf, 0x14, 0x2e, 0xe9, 0x2b, 0x0b, 0xbb, 0x93,
52
- 0x41, 0xde, 0x4a, 0xc2, 0x46, 0xf7, 0x99, 0x6e, 0xcc, 0x4c, 0x55, 0x57,
53
- 0x64, 0xb7, 0x74, 0xe9, 0xbe, 0x3b, 0xbb, 0xab, 0x2d, 0xb9, 0xf1, 0x7a,
54
- 0x1f, 0x37, 0x4a, 0xc9, 0xab, 0x8b, 0xdb, 0x40, 0x90, 0x9c, 0x9a, 0x45,
55
- 0x11, 0x6a, 0x70, 0xf8, 0x10, 0xbb, 0xf5, 0x4d, 0xd9, 0x91, 0x6a, 0x64,
56
- 0x21, 0x36, 0xf4, 0x5d, 0x81, 0x33, 0xb3, 0xed, 0x86, 0x69, 0xfd, 0x9c,
57
- 0x5d, 0xc5, 0x47, 0x05, 0x09, 0x85, 0x02, 0x81, 0x81, 0x00, 0xf8, 0x23,
58
- 0x22, 0x87, 0x7f, 0xbf, 0xa3, 0x82, 0x55, 0xd0, 0x5c, 0x23, 0x45, 0xd0,
59
- 0x6d, 0x04, 0xab, 0x07, 0x9d, 0x2a, 0x69, 0xaa, 0xbd, 0x80, 0x13, 0x9a,
60
- 0xb3, 0x1e, 0xc4, 0x06, 0x8e, 0x33, 0x5f, 0xe2, 0xa6, 0xf7, 0x54, 0xe6,
61
- 0x2e, 0x65, 0x9f, 0xde, 0x6e, 0xd2, 0x4a, 0xfe, 0xf5, 0xea, 0x8a, 0x5a,
62
- 0x9b, 0x61, 0x52, 0x49, 0x5e, 0x0d, 0x11, 0xe5, 0x9b, 0xdf, 0x2b, 0x5f,
63
- 0x89, 0x5d, 0x20, 0x7b, 0xa8, 0x7e, 0x2e, 0xda, 0x88, 0xfb, 0x1e, 0xa8,
64
- 0xac, 0x38, 0x66, 0x02, 0xda, 0xeb, 0xa6, 0xf6, 0x53, 0xa2, 0x26, 0x96,
65
- 0x6e, 0x7a, 0xf5, 0xc0, 0xb5, 0xea, 0x87, 0x7d, 0xd2, 0xb5, 0x83, 0x13,
66
- 0x26, 0xc7, 0x19, 0x60, 0x06, 0x4c, 0x87, 0x39, 0xa8, 0x0c, 0xf6, 0xf9,
67
- 0x8f, 0x55, 0xe4, 0xd1, 0xbc, 0x32, 0xbe, 0x17, 0x9d, 0x57, 0xf6, 0xac,
68
- 0xda, 0x4c, 0x2a, 0xbc, 0x2b, 0xcb, 0x02, 0x81, 0x81, 0x00, 0x97, 0x78,
69
- 0xe1, 0x8d, 0xc9, 0x41, 0x5a, 0x88, 0x20, 0x9c, 0xd5, 0x4e, 0x35, 0x24,
70
- 0xcc, 0x9c, 0x6c, 0x11, 0xd9, 0x5a, 0xd7, 0x47, 0xf7, 0x34, 0xef, 0xb6,
71
- 0xf4, 0xe9, 0xad, 0x9e, 0xe7, 0x76, 0xa4, 0xcb, 0x6b, 0x3f, 0x43, 0x15,
72
- 0xcf, 0x17, 0x16, 0x19, 0x4e, 0x4b, 0x7c, 0x60, 0xef, 0x9f, 0x33, 0x7e,
73
- 0x7c, 0x04, 0x37, 0x06, 0x39, 0xa5, 0x08, 0x93, 0x11, 0xd0, 0x76, 0xfa,
74
- 0x89, 0x04, 0x2d, 0xb0, 0x50, 0x1b, 0xd3, 0x19, 0x62, 0x7e, 0x34, 0xfc,
75
- 0x06, 0x54, 0x85, 0x4b, 0x07, 0x18, 0xd1, 0x90, 0x7b, 0xcb, 0x53, 0x6b,
76
- 0xcf, 0x64, 0x10, 0x8b, 0xd8, 0xcb, 0xca, 0x6f, 0xa4, 0xc6, 0x6c, 0x99,
77
- 0xe4, 0xda, 0xbd, 0xe6, 0x22, 0xa3, 0x2d, 0xfb, 0xb8, 0x9b, 0xef, 0x7f,
78
- 0x24, 0x38, 0xa6, 0x0b, 0x8d, 0xa6, 0xea, 0xe9, 0x95, 0x56, 0xa3, 0x71,
79
- 0xac, 0xc2, 0xb9, 0x3e, 0x72, 0xbd, 0x02, 0x81, 0x80, 0x4a, 0x11, 0xda,
80
- 0xdd, 0xcd, 0xb1, 0x7b, 0xf2, 0x8d, 0x01, 0x2c, 0x6f, 0xcf, 0x08, 0x3f,
81
- 0x72, 0xb4, 0x47, 0x0a, 0x90, 0x3d, 0x88, 0x9d, 0x16, 0x9d, 0x43, 0x81,
82
- 0x92, 0x7e, 0x7b, 0x62, 0x79, 0x4d, 0x77, 0x0f, 0xd6, 0x26, 0xbe, 0xab,
83
- 0x3c, 0xe4, 0xb2, 0xf6, 0x2b, 0xc9, 0xfd, 0x3f, 0x95, 0x2a, 0x85, 0x8f,
84
- 0x7a, 0x46, 0xa0, 0xe5, 0xf5, 0x4a, 0xd1, 0x5a, 0x6d, 0x0c, 0xba, 0x70,
85
- 0xfb, 0x9e, 0x95, 0xab, 0x1f, 0x37, 0x87, 0x3e, 0x7a, 0x8f, 0x95, 0x54,
86
- 0x0b, 0x65, 0xd0, 0x16, 0x5f, 0x5f, 0xb0, 0x8a, 0x18, 0x8e, 0x22, 0x3b,
87
- 0x8a, 0x72, 0xcf, 0x7a, 0xbe, 0x2e, 0x81, 0xcd, 0xa3, 0x27, 0x24, 0x51,
88
- 0x5f, 0xff, 0x60, 0x1d, 0xa1, 0x3c, 0x80, 0x66, 0x7c, 0xb0, 0x40, 0xa0,
89
- 0x9b, 0xc8, 0x39, 0x1f, 0x4f, 0x9a, 0x54, 0xdc, 0x40, 0x04, 0xbf, 0x66,
90
- 0x4e, 0x74, 0x37, 0x45, 0x6f, 0x02, 0x81, 0x80, 0x1d, 0x1c, 0x46, 0xd1,
91
- 0x0f, 0xfa, 0xf6, 0x94, 0xf2, 0xeb, 0x4e, 0x70, 0x6b, 0x2c, 0x10, 0xb1,
92
- 0xc9, 0x01, 0x8f, 0x0b, 0xf1, 0xe7, 0xee, 0xff, 0x86, 0x4f, 0x99, 0x49,
93
- 0x45, 0x8f, 0x2a, 0x48, 0x8b, 0xa8, 0x58, 0x24, 0x6b, 0x94, 0x89, 0x47,
94
- 0x5b, 0x41, 0x47, 0x5d, 0xd4, 0x36, 0x66, 0x39, 0x72, 0xf6, 0x62, 0xc4,
95
- 0x80, 0x04, 0x63, 0xa1, 0x6c, 0x7b, 0xd6, 0x81, 0x13, 0x28, 0x9d, 0x49,
96
- 0x4d, 0xa7, 0xc1, 0x00, 0x08, 0xbe, 0x3e, 0xbe, 0x90, 0x11, 0xae, 0x6f,
97
- 0xbf, 0x56, 0x32, 0x43, 0x95, 0x8c, 0x5a, 0xe0, 0x60, 0xe6, 0x06, 0x47,
98
- 0x84, 0xc4, 0x8c, 0xc4, 0xe2, 0xc6, 0x39, 0x0a, 0x63, 0x6a, 0x94, 0x36,
99
- 0xf7, 0xe4, 0x78, 0x18, 0x14, 0xfb, 0xfb, 0xe1, 0x66, 0xa0, 0xe3, 0x1d,
100
- 0x14, 0x62, 0xe4, 0x5d, 0x29, 0xb9, 0x41, 0x63, 0x5e, 0xe7, 0x88, 0xe4,
101
- 0xe6, 0xa7, 0x16, 0x8e
2
+ 0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
3
+ 0xc9, 0xb9, 0x77, 0x55, 0x7a, 0xa6, 0x7a, 0xb5, 0x7a, 0x37, 0x81, 0x2c,
4
+ 0x48, 0x40, 0xea, 0x35, 0x9f, 0xb8, 0x3a, 0xbe, 0xe0, 0xc6, 0x8d, 0x91,
5
+ 0xfa, 0x12, 0x2f, 0x76, 0xb4, 0x00, 0x48, 0x47, 0x2e, 0x7f, 0x02, 0x8c,
6
+ 0x3b, 0x5f, 0x08, 0xb6, 0xb6, 0x16, 0x9f, 0x2c, 0x02, 0x80, 0x5f, 0x2b,
7
+ 0x88, 0x39, 0xe6, 0x0d, 0x1c, 0x90, 0x43, 0x4b, 0xdf, 0x68, 0xd5, 0x9f,
8
+ 0xc4, 0xb5, 0x14, 0xe3, 0xe2, 0x05, 0xe3, 0x13, 0x6a, 0xbd, 0xc2, 0x89,
9
+ 0x7a, 0xeb, 0x60, 0xbd, 0x3a, 0xb1, 0x03, 0x1c, 0x8f, 0xeb, 0x6e, 0x3e,
10
+ 0x1c, 0x35, 0xed, 0x37, 0x5d, 0xef, 0xd1, 0xc8, 0x95, 0x68, 0xe1, 0x39,
11
+ 0xaf, 0xf3, 0x8a, 0xb2, 0x27, 0x26, 0x39, 0x23, 0xa7, 0xb8, 0xdd, 0x19,
12
+ 0xc1, 0x9b, 0x9f, 0x86, 0xe1, 0x17, 0x35, 0x88, 0xbd, 0xd4, 0xd5, 0x89,
13
+ 0xd9, 0xfc, 0x09, 0x0c, 0x1a, 0xc3, 0xb2, 0xcb, 0x1f, 0x58, 0x61, 0xf8,
14
+ 0xca, 0xe1, 0xc6, 0x50, 0xb2, 0xb4, 0xec, 0x6a, 0xfc, 0x7d, 0xce, 0x14,
15
+ 0xe5, 0x4f, 0xd7, 0x03, 0x5c, 0x88, 0x1b, 0x17, 0x35, 0x95, 0x22, 0x70,
16
+ 0x55, 0x6e, 0x09, 0xf5, 0xd6, 0x4c, 0xc2, 0xf0, 0x98, 0x0d, 0x43, 0x90,
17
+ 0x09, 0xf2, 0xbc, 0x84, 0x5a, 0xb0, 0xe5, 0xf6, 0xb7, 0x63, 0x66, 0xa6,
18
+ 0xda, 0x06, 0xfe, 0x34, 0x8e, 0x83, 0x81, 0x90, 0xbd, 0x32, 0xf8, 0xed,
19
+ 0x80, 0x05, 0xca, 0x6c, 0x5a, 0x4b, 0x31, 0x29, 0x0c, 0x46, 0xc9, 0xe4,
20
+ 0x85, 0x1e, 0x4b, 0x3b, 0xfa, 0x99, 0xec, 0x5a, 0x43, 0xd3, 0x96, 0x90,
21
+ 0x8d, 0x7e, 0x3f, 0xe5, 0x1b, 0x31, 0x4c, 0x62, 0x23, 0x43, 0xdd, 0xc2,
22
+ 0xde, 0x9f, 0xb8, 0x05, 0xb0, 0xa5, 0xf5, 0x3c, 0x8a, 0x24, 0xf3, 0x88,
23
+ 0x34, 0x56, 0x50, 0x80, 0xb9, 0x06, 0x0d, 0xd8, 0x82, 0x34, 0x3f, 0x2b,
24
+ 0x50, 0x67, 0x97, 0x6d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
25
+ 0x00, 0x16, 0x8e, 0x46, 0x69, 0xa8, 0x6d, 0x35, 0x0b, 0x55, 0xbf, 0x1f,
26
+ 0x12, 0x74, 0x81, 0xcd, 0xae, 0x71, 0x4d, 0x88, 0x44, 0x0f, 0x9e, 0x23,
27
+ 0xf6, 0x4e, 0x9f, 0xf9, 0xee, 0xab, 0xf1, 0xdc, 0x23, 0x19, 0x6f, 0xda,
28
+ 0x39, 0x13, 0xea, 0x6c, 0x6f, 0x01, 0xad, 0x45, 0xdf, 0x05, 0xe8, 0x94,
29
+ 0xbb, 0xa9, 0x5f, 0xcf, 0xf9, 0x67, 0x58, 0x3a, 0x2e, 0x21, 0xac, 0xf7,
30
+ 0x36, 0x06, 0x28, 0xb9, 0x4d, 0x41, 0xd8, 0xa6, 0xab, 0x65, 0x24, 0x12,
31
+ 0xbc, 0x8c, 0xa2, 0x05, 0x0f, 0x23, 0xa0, 0xe7, 0x58, 0x2a, 0x3f, 0x88,
32
+ 0xf4, 0x28, 0xf3, 0x5e, 0xb2, 0xf2, 0x2d, 0xfe, 0xa7, 0x0f, 0x0d, 0xcb,
33
+ 0x21, 0x48, 0x2b, 0x53, 0x36, 0xd8, 0x69, 0xcd, 0xb9, 0xce, 0xe7, 0x3c,
34
+ 0xd1, 0xc4, 0x74, 0x42, 0x42, 0x32, 0xa9, 0x05, 0xb3, 0x64, 0x86, 0x87,
35
+ 0xda, 0x02, 0x25, 0xcc, 0x5d, 0x2e, 0x20, 0xf3, 0xbc, 0xcf, 0x91, 0x7e,
36
+ 0xc0, 0x5a, 0x3d, 0x20, 0x6d, 0x40, 0xa2, 0x66, 0xe5, 0x94, 0xbf, 0x14,
37
+ 0x25, 0x27, 0x11, 0x66, 0x6e, 0xb9, 0x68, 0x10, 0x1d, 0x8b, 0x52, 0x13,
38
+ 0x0b, 0x96, 0x68, 0x1d, 0x58, 0x44, 0xcb, 0xd3, 0xfd, 0x02, 0xd2, 0xc2,
39
+ 0xa5, 0xe3, 0xa7, 0x7c, 0x51, 0xf1, 0x74, 0x2e, 0x0b, 0xef, 0xd8, 0x58,
40
+ 0xdd, 0x07, 0xc6, 0xe3, 0xb9, 0xbb, 0x18, 0x6b, 0x23, 0xee, 0xe2, 0xb1,
41
+ 0xe3, 0xc8, 0xa4, 0x18, 0xd9, 0x15, 0x9c, 0x03, 0xec, 0x9e, 0xd9, 0x4d,
42
+ 0xd7, 0x12, 0xdf, 0xf5, 0x61, 0x6e, 0x19, 0x0c, 0x1d, 0xfa, 0xf5, 0xce,
43
+ 0x7c, 0x1d, 0x4e, 0x7a, 0x68, 0x14, 0x5b, 0x3b, 0xe1, 0x71, 0xe6, 0x2f,
44
+ 0x02, 0x51, 0xe2, 0x38, 0xf9, 0xc3, 0x3b, 0xd3, 0xc1, 0xe4, 0x1b, 0x93,
45
+ 0x93, 0xc6, 0xc9, 0x40, 0x3b, 0x73, 0x20, 0xc2, 0x1d, 0xbe, 0x16, 0x18,
46
+ 0x6d, 0x7c, 0x47, 0x1d, 0x81, 0x02, 0x81, 0x81, 0x00, 0xfb, 0x21, 0xf6,
47
+ 0x94, 0xfb, 0x71, 0x4b, 0x49, 0xfd, 0x19, 0xb2, 0x18, 0x42, 0x88, 0x58,
48
+ 0x38, 0xa2, 0xdd, 0x43, 0x52, 0xc3, 0x59, 0xcb, 0x1f, 0x2a, 0x60, 0x17,
49
+ 0xf5, 0x4a, 0xa6, 0x79, 0x95, 0x02, 0x08, 0xc2, 0xc4, 0xfe, 0xa3, 0xeb,
50
+ 0x5a, 0xe0, 0xfa, 0x3c, 0xf8, 0xfe, 0xf0, 0x80, 0x01, 0xbe, 0x1f, 0x52,
51
+ 0xf0, 0x13, 0x14, 0xeb, 0xf5, 0xa5, 0x52, 0xa2, 0x3a, 0x61, 0x8c, 0x8d,
52
+ 0x21, 0x15, 0x2e, 0xc9, 0x20, 0xdd, 0xf7, 0xd7, 0xfb, 0x14, 0xbf, 0xe5,
53
+ 0x3e, 0x92, 0x9b, 0xc9, 0xe9, 0x0a, 0xfd, 0x79, 0x7b, 0xb6, 0x9a, 0xf0,
54
+ 0xea, 0x32, 0x79, 0x9d, 0xd6, 0x63, 0xa2, 0x63, 0xc1, 0xb5, 0xa5, 0x08,
55
+ 0xfe, 0xf7, 0x22, 0x69, 0xf8, 0xb5, 0x81, 0xf9, 0xea, 0x38, 0x6e, 0xfe,
56
+ 0xa4, 0x22, 0x48, 0x44, 0x56, 0x9f, 0xdf, 0x33, 0xc9, 0xde, 0xb0, 0xc2,
57
+ 0xa2, 0xfe, 0x85, 0x15, 0x47, 0x02, 0x81, 0x81, 0x00, 0xcd, 0xa2, 0x5b,
58
+ 0x1d, 0xa0, 0x93, 0x52, 0x6b, 0x48, 0x9f, 0x6f, 0xb4, 0x22, 0xe1, 0x07,
59
+ 0x0a, 0x42, 0xc7, 0x10, 0xe4, 0x07, 0x0e, 0xad, 0xad, 0x4d, 0xbc, 0x5d,
60
+ 0x49, 0x86, 0x2d, 0xb8, 0x9c, 0x00, 0xd6, 0xb2, 0xb9, 0xe4, 0xe0, 0xc4,
61
+ 0xe6, 0xaf, 0xc5, 0x13, 0x56, 0x55, 0xf2, 0xb8, 0xad, 0x80, 0x61, 0xf4,
62
+ 0xc8, 0xa4, 0x27, 0x54, 0x2e, 0x2e, 0xfc, 0x1c, 0xf3, 0x12, 0xc1, 0x39,
63
+ 0x44, 0x39, 0x60, 0x74, 0x89, 0x95, 0x4c, 0xdd, 0xe8, 0x8f, 0x5a, 0xda,
64
+ 0x03, 0xd3, 0x85, 0x92, 0x0b, 0x44, 0xc3, 0xc7, 0x06, 0x8c, 0x87, 0xb0,
65
+ 0x33, 0xea, 0xdb, 0x8f, 0x62, 0x0b, 0x49, 0x08, 0x0b, 0x43, 0xfd, 0xd2,
66
+ 0x3b, 0x7d, 0x21, 0x41, 0xe4, 0xde, 0x70, 0x50, 0x5c, 0xaa, 0x1d, 0x18,
67
+ 0x20, 0xa2, 0x5e, 0x4a, 0x9a, 0x54, 0x88, 0x7c, 0x34, 0xa3, 0xf0, 0x41,
68
+ 0x28, 0x93, 0x1f, 0x17, 0xab, 0x02, 0x81, 0x81, 0x00, 0xf0, 0x86, 0xa1,
69
+ 0xf6, 0x25, 0x31, 0x68, 0x8b, 0xcf, 0xd7, 0x39, 0x85, 0x14, 0xcc, 0x23,
70
+ 0xba, 0xf2, 0xf9, 0xfa, 0xce, 0x1c, 0xfe, 0x36, 0x96, 0x7d, 0xee, 0x95,
71
+ 0x63, 0xc1, 0x00, 0xdb, 0x38, 0x05, 0x3f, 0xc0, 0xd4, 0x0e, 0x93, 0x8f,
72
+ 0x0a, 0x76, 0xaa, 0x15, 0x95, 0xe2, 0x0f, 0x14, 0x7b, 0x16, 0xce, 0x47,
73
+ 0x90, 0x5a, 0xa6, 0x52, 0x2c, 0xef, 0x0f, 0xcb, 0x03, 0x21, 0x85, 0x0d,
74
+ 0x72, 0x9f, 0x28, 0x35, 0x48, 0xbe, 0x6f, 0xef, 0xb3, 0xb2, 0x36, 0xec,
75
+ 0xe8, 0xd6, 0x60, 0x51, 0xad, 0x5b, 0x72, 0x54, 0x55, 0x52, 0x1a, 0xea,
76
+ 0x1d, 0x55, 0x04, 0xb8, 0x50, 0xab, 0x12, 0xd0, 0x7a, 0xaa, 0x70, 0x0b,
77
+ 0xc2, 0xaf, 0x8e, 0x8d, 0x72, 0xc0, 0xdd, 0x61, 0x30, 0x9c, 0xa6, 0x6a,
78
+ 0x4b, 0x67, 0xee, 0x51, 0x4d, 0xaa, 0x47, 0x8c, 0x01, 0x8f, 0xc1, 0x3a,
79
+ 0x5a, 0x04, 0x6e, 0x10, 0x67, 0x02, 0x81, 0x80, 0x72, 0x1e, 0x11, 0xd6,
80
+ 0xc5, 0x50, 0x3c, 0xc3, 0x11, 0x10, 0x7a, 0x1b, 0x4b, 0xe7, 0xf9, 0xd2,
81
+ 0x35, 0xf0, 0xe7, 0x6c, 0xc4, 0x85, 0xde, 0xd8, 0x78, 0x75, 0x7a, 0x87,
82
+ 0xdd, 0x10, 0xee, 0x8c, 0x94, 0xe2, 0x91, 0x59, 0x1c, 0xad, 0xa8, 0x58,
83
+ 0x25, 0x5f, 0x87, 0x35, 0xb8, 0x88, 0xf4, 0xf8, 0x44, 0x71, 0x18, 0x39,
84
+ 0x68, 0xef, 0xf2, 0x85, 0x96, 0xc9, 0x8e, 0xff, 0x4e, 0x7f, 0x30, 0xda,
85
+ 0xad, 0xc4, 0xdb, 0xa7, 0xa6, 0xd5, 0x7b, 0xa9, 0x1e, 0x35, 0x5b, 0x1c,
86
+ 0x18, 0x7c, 0xdd, 0xe9, 0xa7, 0x05, 0xc7, 0x23, 0xd9, 0x45, 0x4c, 0x01,
87
+ 0xe3, 0xea, 0x69, 0x0e, 0x0e, 0x19, 0x3f, 0x7f, 0x91, 0x02, 0x01, 0x73,
88
+ 0xc6, 0x23, 0x78, 0xc0, 0x1c, 0xb9, 0xd3, 0xbf, 0x39, 0x20, 0xe0, 0x4c,
89
+ 0xec, 0x0e, 0xcb, 0xf4, 0x0d, 0xc9, 0x98, 0xb4, 0x55, 0xee, 0x75, 0x1a,
90
+ 0xa1, 0x5a, 0xf5, 0xf5, 0x02, 0x81, 0x80, 0x1b, 0x6a, 0x42, 0xc0, 0x15,
91
+ 0x9e, 0xf5, 0x94, 0x40, 0x0c, 0xfd, 0x07, 0x2f, 0x3c, 0xf3, 0x42, 0xd3,
92
+ 0x1a, 0x9d, 0x6d, 0x34, 0xf7, 0xd4, 0x09, 0xf6, 0x44, 0x86, 0xd3, 0x76,
93
+ 0xf8, 0xec, 0x0e, 0xf7, 0x78, 0x5a, 0x4c, 0xa2, 0xd2, 0xfa, 0xfd, 0x39,
94
+ 0xbf, 0x5c, 0xd8, 0x3a, 0x29, 0xdb, 0x8c, 0x0f, 0x20, 0x8c, 0xeb, 0xfe,
95
+ 0xc8, 0xd6, 0x16, 0x89, 0xfa, 0xae, 0xe0, 0x8f, 0x99, 0x41, 0x6b, 0x9e,
96
+ 0xb7, 0xc5, 0x64, 0x8c, 0x85, 0x17, 0x33, 0xa2, 0xab, 0x90, 0x67, 0xf9,
97
+ 0xf7, 0xaa, 0x28, 0xd4, 0x7d, 0x73, 0xc1, 0x95, 0x5d, 0x9a, 0xb5, 0xef,
98
+ 0xb6, 0xfb, 0xc6, 0xd5, 0x82, 0x68, 0xe4, 0xdb, 0x1e, 0x2d, 0x5b, 0x93,
99
+ 0x79, 0xd9, 0xb7, 0xe1, 0xde, 0x5b, 0x06, 0x7c, 0x5e, 0x82, 0x71, 0x88,
100
+ 0x54, 0xa3, 0x4d, 0x5b, 0x26, 0xaf, 0xd5, 0x0a, 0xf3, 0xb8, 0x64, 0xc6,
101
+ 0xe9, 0xd1, 0xb9
102
102
  };
103
- unsigned int cert_key_der_len = 1192;
103
+ unsigned int cert_key_der_len = 1191;
data/example/server.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/ruby
2
- #require_relative '../lib/opcua/server'
3
- require 'opcua/server'
2
+ require_relative '../lib/opcua/server'
3
+ #require 'opcua/server'
4
4
 
5
5
  Daemonite.new do
6
6
 
@@ -17,27 +17,27 @@ Daemonite.new do
17
17
  t.add_variable :DuploNumber
18
18
  t.add_variable :testValue1
19
19
  t.add_object(:Measurements, server.types.folder).tap{ |u|
20
- u.add_object :M, mt, OPCUA::OPTIONALPLACEHOLDER
20
+ u.add_object :M, mt, OPCUA::OPTIONAL
21
21
  }
22
22
  }
23
23
  pt = server.types.add_object_type(:PresetterType).tap{ |t|
24
24
  t.add_variable :ManufacturerName
25
25
  t.add_object(:Tools, server.types.folder).tap{ |u|
26
- u.add_object :Tool, tt, OPCUA::OPTIONALPLACEHOLDER
26
+ u.add_object :Tool, tt, OPCUA::OPTIONAL
27
27
  }
28
28
  }
29
29
 
30
- tools = server.objects.instantiate(:KalimatC34, pt).find(:Tools)
30
+ tools = server.objects.manifest(:KalimatC34, pt).find(:Tools)
31
31
 
32
- t1 = tools.instantiate(:Tool1,tt)
33
- t2 = tools.instantiate(:Tool2,tt)
34
- t3 = tools.instantiate(:Tool3,tt)
32
+ t1 = tools.manifest(:Tool1,tt)
33
+ t2 = tools.manifest(:Tool2,tt)
34
+ t3 = tools.manifest(:Tool3,tt)
35
35
 
36
36
  tn = t1.find(:ToolNumber)
37
37
 
38
38
  measurments_t1 = t1.find(:Measurements)
39
- measurments_t1.instantiate(:M1,mt)
40
- measurments_t1.instantiate(:M2,mt)
39
+ measurments_t1.manifest(:M1,mt)
40
+ measurments_t1.manifest(:M2,mt)
41
41
 
42
42
  p tn.id
43
43
 
@@ -6,38 +6,6 @@ VALUE mOPCUA = Qnil;
6
6
  VALUE cClient = Qnil;
7
7
  VALUE cNode = Qnil;
8
8
 
9
- void UA_Log_None_log(void *_, UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args) { }
10
- void UA_Log_None_clear(void *logContext) { }
11
- const UA_Logger UA_Log_None_ = {UA_Log_None_log, NULL, UA_Log_None_clear};
12
- const UA_Logger *UA_Log_None = &UA_Log_None_;
13
-
14
- /* -- */
15
- static VALUE extract_value(UA_Variant value) { //{{{
16
- VALUE ret = rb_ary_new2(2);
17
- rb_ary_store(ret,0,Qnil);
18
- rb_ary_store(ret,1,Qnil);
19
- if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
20
- UA_DateTime raw = *(UA_DateTime *) value.data;
21
- rb_ary_store(ret,0,rb_time_new(UA_DateTime_toUnixTime(raw),0));
22
- rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Double")));
23
- } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_BOOLEAN])) {
24
- UA_Boolean raw = *(UA_Boolean *) value.data;
25
- rb_ary_store(ret,0,raw ? Qtrue : Qfalse);
26
- rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Boolean")));
27
- } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DOUBLE])) {
28
- UA_Double raw = *(UA_Double *) value.data;
29
- rb_ary_store(ret,0,DBL2NUM(raw));
30
- rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Double")));
31
- } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_STRING])) {
32
- UA_String raw = *(UA_String *) value.data;
33
- rb_ary_store(ret,0,rb_str_export_locale(rb_str_new((char *)(raw.data),raw.length)));
34
- rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.String")));
35
- }
36
-
37
- return ret;
38
- } //}}}
39
- /* ++ */
40
-
41
9
  /* -- */
42
10
  static void node_free(node_struct *ns) { //{{{
43
11
  if (ns != NULL) {
@@ -1,6 +1,8 @@
1
1
  #include <ruby.h>
2
2
  #include <stdio.h>
3
3
  #include <open62541.h>
4
+ #include "../log_none.h"
5
+ #include "../values.h"
4
6
 
5
7
  typedef struct client_struct {
6
8
  UA_ClientConfig *config;
@@ -0,0 +1,4 @@
1
+ void UA_Log_None_log(void *_, UA_LogLevel level, UA_LogCategory category, const char *msg, va_list args) { }
2
+ void UA_Log_None_clear(void *logContext) { }
3
+ const UA_Logger UA_Log_None_ = {UA_Log_None_log, NULL, UA_Log_None_clear};
4
+ const UA_Logger *UA_Log_None = &UA_Log_None_;
@@ -11,7 +11,7 @@ VALUE cLeafNode = Qnil;
11
11
  static void node_free(node_struct *ns) { //{{{
12
12
  if (ns != NULL) { free(ns); }
13
13
  } //}}}
14
- static VALUE node_alloc(VALUE klass, server_struct *server, UA_NodeId nodeid) { //{{{
14
+ static node_struct * node_alloc(server_struct *server, UA_NodeId nodeid) { //{{{
15
15
  node_struct *ns;
16
16
  ns = (node_struct *)malloc(sizeof(node_struct));
17
17
  if (ns == NULL)
@@ -20,13 +20,17 @@ static VALUE node_alloc(VALUE klass, server_struct *server, UA_NodeId nodeid) {
20
20
  ns->server = server;
21
21
  ns->id = nodeid;
22
22
 
23
+ return ns;
24
+ } //}}}
25
+ static VALUE node_wrap(VALUE klass, node_struct *ns) { //{{{
23
26
  return Data_Wrap_Struct(klass, NULL, node_free, ns);
24
27
  } //}}}
25
28
  /* ++ */
29
+
26
30
  static VALUE node_type_folder(VALUE self) { //{{{
27
31
  node_struct *ns;
28
32
  Data_Get_Struct(self, node_struct, ns);
29
- return node_alloc(cTypesTopNode, ns->server, UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE));
33
+ return node_wrap(cTypesTopNode, node_alloc(ns->server, UA_NODEID_NUMERIC(0, UA_NS0ID_FOLDERTYPE)));
30
34
  } //}}}
31
35
  static VALUE node_add_object_type(VALUE self, VALUE name) { //{{{
32
36
  node_struct *ns;
@@ -51,10 +55,62 @@ static VALUE node_add_object_type(VALUE self, VALUE name) { //{{{
51
55
  NULL,
52
56
  NULL);
53
57
 
54
- return node_alloc(cTypesSubNode,ns->server,n);
58
+ return node_wrap(cTypesSubNode,node_alloc(ns->server,n));
55
59
  } //}}}
56
- static VALUE node_add_variable(int argc, VALUE* argv, VALUE self) { //{{{
60
+
61
+ static VALUE node_to_s(VALUE self) { //{{{
57
62
  node_struct *ns;
63
+ VALUE ret;
64
+
65
+ Data_Get_Struct(self, node_struct, ns);
66
+
67
+ if (ns->id.identifierType == UA_NODEIDTYPE_NUMERIC) {
68
+ ret = rb_sprintf("ns=%d;n=%d", ns->id.namespaceIndex, ns->id.identifier.numeric);
69
+ } else if(ns->id.identifierType == UA_NODEIDTYPE_STRING) {
70
+ ret = rb_sprintf("ns=%d;s=%.*s", ns->id.namespaceIndex, (int)ns->id.identifier.string.length, ns->id.identifier.string.data);
71
+ } else {
72
+ ret = rb_sprintf("ns=%d;unsupported",ns->id.namespaceIndex);
73
+ }
74
+ return ret;
75
+ } //}}}
76
+
77
+ static UA_NodeId node_add_variable_ua(UA_Int32 type, UA_NodeId n, UA_LocalizedText dn, UA_QualifiedName qn, node_struct *parent, VALUE ref) { //{{{
78
+ UA_VariableAttributes mnAttr = UA_VariableAttributes_default;
79
+ mnAttr.displayName = dn;
80
+
81
+ UA_Server_addVariableNode(parent->server->server,
82
+ n,
83
+ parent->id,
84
+ UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
85
+ qn,
86
+ UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
87
+ mnAttr,
88
+ NULL,
89
+ NULL);
90
+
91
+ if (ref != Qnil) {
92
+ UA_Server_addReference(parent->server->server,
93
+ n,
94
+ UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
95
+ UA_EXPANDEDNODEID_NUMERIC(0, type),
96
+ true);
97
+ }
98
+
99
+ return n;
100
+
101
+ } //}}}
102
+ static UA_NodeId node_add_variable_ua_simple(UA_Int32 type, char* nstr, node_struct *parent, VALUE ref) { //{{{
103
+ return node_add_variable_ua(
104
+ type,
105
+ UA_NODEID_STRING(parent->server->default_ns,nstr),
106
+ UA_LOCALIZEDTEXT("en-US", nstr),
107
+ UA_QUALIFIEDNAME(parent->server->default_ns, nstr),
108
+ parent,
109
+ ref
110
+ );
111
+ } //}}}
112
+ static VALUE node_add_variable(int argc, VALUE* argv, VALUE self) { //{{{
113
+ node_struct *parent;
58
114
 
59
115
  if (argc > 2 || argc == 0) { // there should only be 1 or 2 arguments
60
116
  rb_raise(rb_eArgError, "wrong number of arguments");
@@ -67,45 +123,58 @@ static VALUE node_add_variable(int argc, VALUE* argv, VALUE self) { //{{{
67
123
  type = UA_NS0ID_MODELLINGRULE_MANDATORY;
68
124
  }
69
125
 
70
- Data_Get_Struct(self, node_struct, ns);
126
+ Data_Get_Struct(self, node_struct, parent);
71
127
 
72
128
  VALUE str = rb_obj_as_string(argv[0]);
73
129
  if (NIL_P(str) || TYPE(str) != T_STRING)
74
130
  rb_raise(rb_eTypeError, "cannot convert obj to string");
75
131
  char *nstr = (char *)StringValuePtr(str);
76
132
 
77
- UA_VariableAttributes mnAttr = UA_VariableAttributes_default;
78
- mnAttr.displayName = UA_LOCALIZEDTEXT("en-US", nstr);
133
+ return node_wrap(cLeafNode,node_alloc(parent->server,node_add_variable_ua_simple(type,nstr,parent,argv[1])));
134
+ } //}}}
135
+ static VALUE node_add_variable_without(VALUE self, VALUE name) { //{{{
136
+ VALUE argv[] = { name, Qnil };
137
+ return node_add_variable(2,argv,self);
138
+ } //}}}
79
139
 
80
- UA_NodeId n = UA_NODEID_STRING(ns->server->default_ns, nstr);
140
+ static UA_NodeId node_add_object_ua(UA_Int32 type, UA_NodeId n, UA_LocalizedText dn, UA_QualifiedName qn, node_struct *parent, node_struct *datatype, VALUE ref) { //{{{
141
+ UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
142
+ oAttr.displayName = dn;
81
143
 
82
- UA_Server_addVariableNode(ns->server->server,
83
- n,
84
- ns->id,
85
- UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
86
- UA_QUALIFIEDNAME(ns->server->default_ns, nstr),
87
- UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE),
88
- mnAttr,
89
- NULL,
90
- NULL);
144
+ UA_Server_addObjectNode(parent->server->server,
145
+ n,
146
+ parent->id,
147
+ UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
148
+ qn,
149
+ datatype->id,
150
+ oAttr,
151
+ NULL,
152
+ NULL);
91
153
 
92
- if (argv[1] != Qnil) {
93
- UA_Server_addReference(ns->server->server,
154
+ if (ref != Qnil) {
155
+ UA_Server_addReference(parent->server->server,
94
156
  n,
95
157
  UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
96
158
  UA_EXPANDEDNODEID_NUMERIC(0, type),
97
159
  true);
98
160
  }
99
161
 
100
- return node_alloc(cLeafNode,ns->server,n);
162
+ return n;
101
163
  } //}}}
102
- static VALUE node_add_variable_without(VALUE self, VALUE name) { //{{{
103
- VALUE argv[] = { name, Qnil };
104
- return node_add_variable(2,argv,self);
164
+ static UA_NodeId node_add_object_ua_simple(UA_Int32 type, char* nstr, node_struct *parent, node_struct *datatype, VALUE ref) { //{{{
165
+ return node_add_object_ua(
166
+ type,
167
+ UA_NODEID_STRING(parent->server->default_ns,nstr),
168
+ UA_LOCALIZEDTEXT("en-US", nstr),
169
+ UA_QUALIFIEDNAME(parent->server->default_ns, nstr),
170
+ parent,
171
+ datatype,
172
+ ref
173
+ );
105
174
  } //}}}
106
175
  static VALUE node_add_object(int argc, VALUE* argv, VALUE self) { //{{{
107
- node_struct *ns;
108
- node_struct *ts;
176
+ node_struct *parent;
177
+ node_struct *datatype;
109
178
 
110
179
  if (argc > 3 || argc < 2) { // there should only be 2 or 3 arguments
111
180
  rb_raise(rb_eArgError, "wrong number of arguments");
@@ -122,42 +191,183 @@ static VALUE node_add_object(int argc, VALUE* argv, VALUE self) { //{{{
122
191
  rb_raise(rb_eArgError, "argument 2 has to be a type.");
123
192
  }
124
193
 
125
- Data_Get_Struct(self, node_struct, ns);
126
- Data_Get_Struct(argv[1], node_struct, ts);
194
+ Data_Get_Struct(self, node_struct, parent);
195
+ Data_Get_Struct(argv[1], node_struct, datatype);
127
196
 
128
197
  VALUE str = rb_obj_as_string(argv[0]);
129
198
  if (NIL_P(str) || TYPE(str) != T_STRING)
130
199
  rb_raise(rb_eTypeError, "cannot convert obj to string");
131
200
  char *nstr = (char *)StringValuePtr(str);
132
201
 
133
- UA_NodeId n = UA_NODEID_STRING(ns->server->default_ns, nstr);
202
+ return node_wrap(CLASS_OF(self),node_alloc(parent->server,node_add_object_ua_simple(type,nstr,parent,datatype,argv[2])));
203
+ } //}}}
204
+ static VALUE node_add_object_without(VALUE self, VALUE name, VALUE parent) { //{{{
205
+ VALUE argv[] = { name, parent, Qnil };
206
+ return node_add_object(3,argv,self);
207
+ } //}}}
208
+
209
+ static UA_BrowsePathResult node_browse_path(UA_Server *server, UA_NodeId relative, UA_NodeId ref, UA_QualifiedName mqn) { //{{{
210
+ UA_RelativePathElement rpe;
211
+ UA_RelativePathElement_init(&rpe);
212
+ rpe.referenceTypeId = ref;
213
+ rpe.isInverse = false;
214
+ rpe.includeSubtypes = false;
215
+ rpe.targetName = mqn;
216
+
217
+ UA_BrowsePath bp;
218
+ UA_BrowsePath_init(&bp);
219
+ bp.startingNode = relative;
220
+ bp.relativePath.elementsSize = 1;
221
+ bp.relativePath.elements = &rpe;
222
+
223
+ return UA_Server_translateBrowsePathToNodeIds(server, &bp);
224
+ } //}}}
225
+
226
+ static bool node_get_reference(UA_Server *server, UA_NodeId parent, UA_NodeId *result) { //{{{
227
+ UA_BrowseDescription bDes;
228
+ UA_BrowseDescription_init(&bDes);
229
+ bDes.nodeId = parent;
230
+ bDes.resultMask = UA_BROWSERESULTMASK_ALL;
231
+ UA_BrowseResult bRes = UA_Server_browse(server, 1, &bDes);
232
+
233
+ if (bRes.referencesSize > 0) {
234
+ UA_ReferenceDescription *ref = &(bRes.references[0]);
235
+
236
+ *result = ref->nodeId.nodeId;
237
+ UA_BrowseResult_clear(&bRes);
238
+ return true;
239
+ }
240
+ return false;
241
+ } //}}}
242
+
243
+ static UA_StatusCode node_manifest_iter(UA_NodeId child_id, UA_Boolean is_inverse, UA_NodeId reference_type_id, void *handle) { //{{{
244
+ if (is_inverse) return UA_STATUSCODE_GOOD;
245
+
246
+ node_struct **tandle = (node_struct **)handle;
247
+ node_struct *parent = tandle[0];
248
+ node_struct *newnode = tandle[1];
249
+
250
+ if (child_id.namespaceIndex == parent->server->default_ns) {
251
+ UA_NodeClass nc; UA_NodeClass_init(&nc);
252
+
253
+ UA_LocalizedText dn; UA_LocalizedText_init(&dn);
254
+ UA_QualifiedName qn; UA_QualifiedName_init(&qn);
255
+ UA_QualifiedName pqn; UA_QualifiedName_init(&pqn);
256
+ UA_QualifiedName nqn; UA_QualifiedName_init(&nqn);
257
+
258
+ UA_Server_readNodeClass(parent->server->server, child_id, &nc);
259
+ UA_Server_readBrowseName(parent->server->server, child_id, &qn);
260
+ UA_Server_readDisplayName(parent->server->server, child_id, &dn);
261
+ UA_Server_readBrowseName(parent->server->server, parent->id, &pqn);
262
+ UA_Server_readBrowseName(parent->server->server, newnode->id, &nqn);
263
+
264
+ // printf("%d ---> NodeId %d, %-16.*s, %-16.*s, ref: %d, nc: %d\n",
265
+ // reference_type_id.identifier.numeric,
266
+ // child_id.namespaceIndex,
267
+ // (int)pqn.name.length,
268
+ // pqn.name.data,
269
+ // (int)qn.name.length,
270
+ // qn.name.data,
271
+ // reference_type_id.identifier.numeric,
272
+ // nc
273
+ // );
274
+
275
+ if (child_id.namespaceIndex == parent->server->default_ns) {
276
+ UA_QualifiedName mqn;UA_QualifiedName_init(&mqn);
277
+ UA_Server_readBrowseName(parent->server->server, UA_NODEID_NUMERIC(0, UA_NS0ID_MODELLINGRULE_MANDATORY), &mqn);
278
+
279
+ UA_BrowsePathResult mandatory = node_browse_path(parent->server->server, child_id, UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE), mqn);
280
+
281
+ if (mandatory.statusCode == UA_STATUSCODE_GOOD && (nc == UA_NODECLASS_OBJECT || nc == UA_NODECLASS_VARIABLE)) {
282
+ char * buffer = strnautocat(NULL,"",0);
283
+ if (newnode->id.identifier.string.data[0] != '/') {
284
+ buffer = strnautocat(buffer,"/",1);
285
+ }
286
+ buffer = strnautocat(buffer,(char *)newnode->id.identifier.string.data,newnode->id.identifier.string.length);
287
+ buffer = strnautocat(buffer,"/",1);
288
+ buffer = strnautocat(buffer,(char *)qn.name.data,qn.name.length);
289
+ if(nc == UA_NODECLASS_OBJECT) {
290
+ UA_NodeId typeid;
291
+ node_get_reference(parent->server->server, child_id, &typeid);
292
+
293
+ node_struct *thetype = node_alloc(parent->server,typeid);
294
+ node_struct *downnode = node_alloc(parent->server,node_add_object_ua(UA_NS0ID_MODELLINGRULE_MANDATORY,UA_NODEID_STRING(parent->server->default_ns,buffer),dn,qn,newnode,thetype,Qtrue));
295
+
296
+ node_struct *newparent = node_alloc(parent->server,child_id);
297
+ node_struct *downhandle[2] = { newparent, downnode };
298
+
299
+ // printf("---->\n");
300
+ UA_Server_forEachChildNodeCall(parent->server->server, child_id, node_manifest_iter, (void *)downhandle);
301
+ // printf("<----\n");
302
+
303
+ free(thetype);
304
+ free(downnode);
305
+ free(newparent);
306
+ }
307
+ if(nc == UA_NODECLASS_VARIABLE) {
308
+ node_add_variable_ua(UA_NS0ID_MODELLINGRULE_MANDATORY,UA_NODEID_STRING(parent->server->default_ns,buffer),dn,qn,newnode,Qtrue);
309
+ }
310
+ }
311
+ UA_BrowsePathResult_clear(&mandatory);
312
+ UA_QualifiedName_clear(&mqn);
313
+ }
314
+
315
+ UA_NodeClass_clear(&nc);
316
+ UA_QualifiedName_clear(&qn);
317
+ UA_QualifiedName_clear(&pqn);
318
+ UA_LocalizedText_clear(&dn);
319
+ }
320
+ return UA_STATUSCODE_GOOD;
321
+ } //}}}
322
+ static VALUE node_manifest(VALUE self, VALUE name, VALUE parent) { //{{{
323
+ node_struct *ns;
324
+ node_struct *ts;
325
+
326
+ if (!(rb_obj_is_kind_of(parent,cTypesTopNode) || rb_obj_is_kind_of(parent,cTypesSubNode))) {
327
+ rb_raise(rb_eArgError, "argument 2 has to be a type.");
328
+ }
329
+
330
+ Data_Get_Struct(self, node_struct, ns);
331
+ Data_Get_Struct(parent, node_struct, ts);
332
+
333
+ VALUE str = rb_obj_as_string(name);
334
+ if (NIL_P(str) || TYPE(str) != T_STRING)
335
+ rb_raise(rb_eTypeError, "cannot convert obj to string");
336
+ char *nstr = (char *)StringValuePtr(str);
337
+
338
+ char *nidstr = strnautocat(NULL,"",1);
339
+ if (ns->id.identifierType == UA_NODEIDTYPE_STRING) {
340
+ nidstr = strnautocat(nidstr,ns->id.identifier.string.data,ns->id.identifier.string.length);
341
+ nidstr = strnautocat(nidstr,"/",1);
342
+ }
343
+ nidstr = strnautocat(nidstr,nstr,strlen(nstr));
344
+
345
+ UA_NodeId n = UA_NODEID_STRING(ns->server->default_ns, nidstr);
134
346
 
135
347
  UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
136
348
  oAttr.displayName = UA_LOCALIZEDTEXT("en-US", nstr);
137
- UA_Server_addObjectNode(ns->server->server,
349
+
350
+ UA_Server_addNode_begin(ns->server->server,
351
+ UA_NODECLASS_OBJECT,
138
352
  n,
139
353
  ns->id,
140
354
  UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT),
141
355
  UA_QUALIFIEDNAME(ns->server->default_ns, nstr),
142
356
  ts->id,
143
- oAttr,
357
+ (const UA_NodeAttributes*)&oAttr,
358
+ &UA_TYPES[UA_TYPES_OBJECTATTRIBUTES],
144
359
  NULL,
145
360
  NULL);
146
361
 
147
- if (argv[2] != Qnil) {
148
- UA_Server_addReference(ns->server->server,
149
- n,
150
- UA_NODEID_NUMERIC(0, UA_NS0ID_HASMODELLINGRULE),
151
- UA_EXPANDEDNODEID_NUMERIC(0, type),
152
- true);
153
- }
362
+ node_struct *ret = node_alloc(ns->server,n);
363
+ node_struct *handle[2] = { ts, ret };
364
+ UA_Server_forEachChildNodeCall(ns->server->server, ts->id, node_manifest_iter, (void *)handle);
154
365
 
155
- return node_alloc(CLASS_OF(self),ns->server,n);
156
- } //}}}
157
- static VALUE node_add_object_without(VALUE self, VALUE name, VALUE parent) { //{{{
158
- VALUE argv[] = { name, parent, Qnil };
159
- return node_add_object(3,argv,self);
366
+ UA_Server_addNode_finish(ns->server->server,n);
367
+
368
+ return Data_Wrap_Struct(CLASS_OF(self), NULL, node_free, ret);
160
369
  } //}}}
370
+
161
371
  static VALUE node_find(VALUE self, VALUE qname) { //{{{
162
372
  node_struct *ns;
163
373
 
@@ -168,28 +378,15 @@ static VALUE node_find(VALUE self, VALUE qname) { //{{{
168
378
  rb_raise(rb_eTypeError, "cannot convert obj to string");
169
379
  char *nstr = (char *)StringValuePtr(str);
170
380
 
171
- /* Find the NodeId of the status child variable */
172
- UA_RelativePathElement rpe;
173
- UA_RelativePathElement_init(&rpe);
174
- rpe.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);
175
- rpe.isInverse = false;
176
- rpe.includeSubtypes = false;
177
- rpe.targetName = UA_QUALIFIEDNAME(ns->server->default_ns, nstr);
178
-
179
- UA_BrowsePath bp;
180
- UA_BrowsePath_init(&bp);
181
- bp.startingNode = ns->id;
182
- bp.relativePath.elementsSize = 1;
183
- bp.relativePath.elements = &rpe;
184
-
185
- UA_BrowsePathResult bpr = UA_Server_translateBrowsePathToNodeIds(ns->server->server, &bp);
381
+ UA_BrowsePathResult bpr = node_browse_path(ns->server->server, ns->id, UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT), UA_QUALIFIEDNAME(ns->server->default_ns, nstr));
186
382
 
187
383
  if(bpr.statusCode != UA_STATUSCODE_GOOD || bpr.targetsSize < 1) {
188
384
  return Qnil;
189
385
  } else {
190
- UA_NodeId ret = bpr.targets[0].targetId.nodeId;
386
+ UA_NodeId ret;UA_NodeId_init(&ret);
387
+ UA_NodeId_copy(&bpr.targets[0].targetId.nodeId,&ret);
191
388
  UA_BrowsePathResult_clear(&bpr);
192
- return node_alloc(CLASS_OF(self),ns->server,ret);
389
+ return node_wrap(CLASS_OF(self),node_alloc(ns->server,ret));
193
390
  }
194
391
  } //}}}
195
392
 
@@ -238,6 +435,15 @@ static VALUE node_value_set(VALUE self, VALUE value) { //{{{
238
435
  UA_Server_writeValue(ns->server->server, ns->id, variant);
239
436
  break;
240
437
  }
438
+ case T_ARRAY:
439
+ {
440
+ // UA_UInt32 arrayDims = 0;
441
+ // attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
442
+ // attr.arrayDimensions = &arrayDims;
443
+ // attr.arrayDimensionsSize = 1;
444
+ // UA_Variant_setArray(&attr.value, UA_Array_new(10, &UA_TYPES[type]), 10, &UA_TYPES[type]);
445
+ }
446
+
241
447
  }
242
448
  }
243
449
  return self;
@@ -251,21 +457,10 @@ static VALUE node_value(VALUE self) { //{{{
251
457
  UA_Variant_init(&value);
252
458
  UA_StatusCode retval = UA_Server_readValue(ns->server->server, ns->id, &value);
253
459
 
460
+
254
461
  VALUE ret = Qnil;
255
462
  if (retval == UA_STATUSCODE_GOOD) {
256
- if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
257
- UA_DateTime raw = *(UA_DateTime *) value.data;
258
- ret = rb_time_new(UA_DateTime_toUnixTime(raw),0);
259
- } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_BOOLEAN])) {
260
- UA_Boolean raw = *(UA_Boolean *) value.data;
261
- ret = raw ? Qtrue : Qfalse;
262
- } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DOUBLE])) {
263
- UA_Double raw = *(UA_Double *) value.data;
264
- ret = DBL2NUM(raw);
265
- } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_STRING])) {
266
- UA_String raw = *(UA_String *) value.data;
267
- ret = rb_str_new((char *)(raw.data),raw.length);
268
- }
463
+ ret = extract_value(value);
269
464
  }
270
465
 
271
466
  UA_Variant_clear(&value);
@@ -289,6 +484,7 @@ static VALUE node_id(VALUE self) { //{{{
289
484
  }
290
485
  return ret;
291
486
  } //}}}
487
+
292
488
  /* -- */
293
489
  static void server_free(server_struct *pss) { //{{{
294
490
  if (pss != NULL) {
@@ -310,7 +506,8 @@ static VALUE server_alloc(VALUE self) { //{{{
310
506
 
311
507
  return Data_Wrap_Struct(self, NULL, server_free, pss);
312
508
  } //}}}
313
- /* ++ */ //}}}
509
+ /* ++ */
510
+
314
511
  static VALUE server_init(VALUE self) { //{{{
315
512
  server_struct *pss;
316
513
 
@@ -348,12 +545,12 @@ static VALUE server_add_namespace(VALUE self, VALUE name) { //{{{
348
545
  static VALUE server_types(VALUE self) { //{{{
349
546
  server_struct *pss;
350
547
  Data_Get_Struct(self, server_struct, pss);
351
- return node_alloc(cTypesTopNode, pss, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE));
548
+ return node_wrap(cTypesTopNode, node_alloc(pss, UA_NODEID_NUMERIC(0, UA_NS0ID_BASEOBJECTTYPE)));
352
549
  } //}}}
353
550
  static VALUE server_objects(VALUE self) { //{{{
354
551
  server_struct *pss;
355
552
  Data_Get_Struct(self, server_struct, pss);
356
- return node_alloc(cObjectsNode, pss, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER));
553
+ return node_wrap(cObjectsNode, node_alloc(pss, UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER)));
357
554
  } //}}}
358
555
 
359
556
  void Init_server(void) {
@@ -363,11 +560,11 @@ void Init_server(void) {
363
560
  rb_define_const(mOPCUA, "OPTIONAL", INT2NUM(UA_NS0ID_MODELLINGRULE_OPTIONAL));
364
561
  rb_define_const(mOPCUA, "OPTIONALPLACEHOLDER", INT2NUM(UA_NS0ID_MODELLINGRULE_OPTIONALPLACEHOLDER));
365
562
 
366
- cServer = rb_define_class_under(mOPCUA, "Server", rb_cObject);
563
+ cServer = rb_define_class_under(mOPCUA, "Server", rb_cObject);
367
564
  cObjectsNode = rb_define_class_under(mOPCUA, "cObjectsNode", rb_cObject);
368
- cTypesTopNode = rb_define_class_under(mOPCUA, "cTypesTopNode", rb_cObject);
369
- cTypesSubNode = rb_define_class_under(mOPCUA, "cTypesSubNode", rb_cObject);
370
- cLeafNode = rb_define_class_under(mOPCUA, "cLeafNode", rb_cObject);
565
+ cTypesTopNode = rb_define_class_under(mOPCUA, "cTypesTopNode", rb_cObject);
566
+ cTypesSubNode = rb_define_class_under(mOPCUA, "cTypesSubNode", rb_cObject);
567
+ cLeafNode = rb_define_class_under(mOPCUA, "cLeafNode", rb_cObject);
371
568
 
372
569
  rb_define_alloc_func(cServer, server_alloc);
373
570
  rb_define_method(cServer, "initialize", server_init, 0);
@@ -384,9 +581,11 @@ void Init_server(void) {
384
581
  rb_define_method(cTypesSubNode, "id", node_id, 0);
385
582
 
386
583
  rb_define_method(cObjectsNode, "instantiate", node_add_object_without, 2);
584
+ rb_define_method(cObjectsNode, "manifest", node_manifest, 2);
387
585
  rb_define_method(cObjectsNode, "add_variable", node_add_variable_without, 1);
388
586
  rb_define_method(cObjectsNode, "find", node_find, 1);
389
587
  rb_define_method(cObjectsNode, "value", node_value, 0);
390
588
  rb_define_method(cObjectsNode, "value=", node_value_set, 1);
589
+ rb_define_method(cObjectsNode, "to_s", node_to_s, 0);
391
590
  rb_define_method(cObjectsNode, "id", node_id, 0);
392
591
  }
@@ -1,6 +1,10 @@
1
1
  #include <ruby.h>
2
2
  #include <stdio.h>
3
3
  #include <open62541.h>
4
+ #include <malloc.h>
5
+ #include "../log_none.h"
6
+ #include "../values.h"
7
+ #include "../strnautocat.h"
4
8
 
5
9
  typedef struct server_struct {
6
10
  UA_ServerConfig *config;
@@ -0,0 +1,15 @@
1
+ char *strnautocat(char *str, char *s2, size_t num) {
2
+ int len = 0;
3
+ char *s;
4
+ if (str == NULL) {
5
+ str = (char *)malloc(sizeof(*str));
6
+ str[0] = '\0';
7
+ } else {
8
+ len = strlen(str);
9
+ }
10
+ len += num + 1 * sizeof(*s2);
11
+ s = realloc(str, len);
12
+ strncat(s, s2, num);
13
+ return s;
14
+ }
15
+
@@ -0,0 +1,43 @@
1
+ /* -- */
2
+ static VALUE extract_value(UA_Variant value) { //{{{
3
+ VALUE ret = rb_ary_new2(2);
4
+ rb_ary_store(ret,0,Qnil);
5
+ rb_ary_store(ret,1,Qnil);
6
+ // printf("type: %s\n",value.type->typeName);
7
+ if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DATETIME])) {
8
+ UA_DateTime raw = *(UA_DateTime *) value.data;
9
+ rb_ary_store(ret,0,rb_time_new(UA_DateTime_toUnixTime(raw),0));
10
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Double")));
11
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_BOOLEAN])) {
12
+ UA_Boolean raw = *(UA_Boolean *) value.data;
13
+ rb_ary_store(ret,0,raw ? Qtrue : Qfalse);
14
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Boolean")));
15
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_DOUBLE])) {
16
+ UA_Double raw = *(UA_Double *) value.data;
17
+ rb_ary_store(ret,0,DBL2NUM(raw));
18
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Double")));
19
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_INT32])) {
20
+ UA_Int32 raw = *(UA_Int32 *) value.data;
21
+ rb_ary_store(ret,0,INT2NUM(raw));
22
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Int32")));
23
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_INT16])) {
24
+ UA_Int16 raw = *(UA_Int16 *) value.data;
25
+ rb_ary_store(ret,0,INT2NUM(raw));
26
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.Int16")));
27
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_UINT32])) {
28
+ UA_UInt32 raw = *(UA_UInt32 *) value.data;
29
+ rb_ary_store(ret,0,UINT2NUM(raw));
30
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.UInt32")));
31
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_UINT16])) {
32
+ UA_UInt16 raw = *(UA_UInt16 *) value.data;
33
+ rb_ary_store(ret,0,UINT2NUM(raw));
34
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.UInt16")));
35
+ } else if (UA_Variant_hasScalarType(&value, &UA_TYPES[UA_TYPES_STRING])) {
36
+ UA_String raw = *(UA_String *) value.data;
37
+ rb_ary_store(ret,0,rb_str_export_locale(rb_str_new((char *)(raw.data),raw.length)));
38
+ rb_ary_store(ret,1,ID2SYM(rb_intern("VariantType.String")));
39
+ }
40
+
41
+ return ret;
42
+ } //}}}
43
+ /* ++ */
data/opcua.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "opcua"
3
- s.version = "0.7"
3
+ s.version = "0.8"
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.7'
4
+ version: '0.8'
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-04-27 00:00:00.000000000 Z
12
+ date: 2019-05-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemonite
@@ -80,9 +80,12 @@ files:
80
80
  - ext/opcua/client/client.c
81
81
  - ext/opcua/client/client.h
82
82
  - ext/opcua/client/extconf.rb
83
+ - ext/opcua/log_none.h
83
84
  - ext/opcua/server/extconf.rb
84
85
  - ext/opcua/server/server.c
85
86
  - ext/opcua/server/server.h
87
+ - ext/opcua/strnautocat.h
88
+ - ext/opcua/values.h
86
89
  - lib/opcua/client.rb
87
90
  - lib/opcua/server.rb
88
91
  - opcua.gemspec
@@ -106,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
109
  version: '0'
107
110
  requirements: []
108
111
  rubyforge_project:
109
- rubygems_version: 2.7.6
112
+ rubygems_version: 2.7.6.2
110
113
  signing_key:
111
114
  specification_version: 4
112
115
  summary: Preliminary release of opcua (open62541) ruby bindings. C performance, Ruby