opcua 0.7 → 0.8

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: 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