opcua 0.9 → 0.10

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: 40ef6e1e7d5811b00dff5fe8daa7671275982d53a8855683e4d821994e5d0a70
4
- data.tar.gz: c98b8047328c957acf3d66398cbceecc11ea0bad80ac5335a1668be987f937a1
3
+ metadata.gz: 46817c5d71e8166b928cac3aec3f42b93403405f3a172d0526d3534f4491abf5
4
+ data.tar.gz: d0e49351d507bcb732812558b739b0f057b0fed106421a5a896f93975c17b37e
5
5
  SHA512:
6
- metadata.gz: 45c3491d321d66d85583398d897e2aab10db564cbc9b292bc391f03d747b566a976df9ce93c354d5d01c891faa987f9bd6e337dc880e4ff9886d0eaf6c4ada45
7
- data.tar.gz: bb5ba0109735859f65fc0dcb1ab5b06289927e978ca8a3f7e252861510b153272c6aaaf3bb2e1240c317fb2ad9b1cfc6fa544ab3c6e53c426d7b0ebd745bd67e
6
+ metadata.gz: b42c035a309213970fe44e4d2ab76a3d2dd7381b5793ed05799cd8c9b23bb8661f63ef5c77e09b375e6694a17b57f74d4e965ddc8fe7944fa05a0f1496a63b8e
7
+ data.tar.gz: e95626a80b28162f523b913c19e97c56d93c1550410a549c11a3d2eeb6f9ad12aea62cb1fa8b803f49dd73d16003d7330850c2990e5ae524481fb72d8ef1390e
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, 0x1a, 0x52, 0xa3, 0x4f, 0xca, 0x24, 0xed, 0xba, 0x86,
4
- 0x05, 0x6b, 0x44, 0xd2, 0xf3, 0x73, 0x1d, 0x2d, 0xe0, 0x88, 0x5e, 0x30,
3
+ 0x02, 0x02, 0x14, 0x36, 0x5c, 0xe6, 0x95, 0x91, 0x63, 0x22, 0x9c, 0xa8,
4
+ 0x68, 0xa1, 0x1e, 0x9c, 0xfe, 0x08, 0x7b, 0x23, 0x8e, 0x4e, 0xa5, 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, 0x35, 0x32, 0x37, 0x32,
9
- 0x30, 0x30, 0x34, 0x31, 0x36, 0x5a, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x35,
10
- 0x31, 0x36, 0x32, 0x30, 0x30, 0x34, 0x31, 0x36, 0x5a, 0x30, 0x15, 0x31,
8
+ 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x39, 0x30, 0x35, 0x32, 0x38, 0x32,
9
+ 0x32, 0x32, 0x36, 0x31, 0x31, 0x5a, 0x17, 0x0d, 0x32, 0x30, 0x30, 0x35,
10
+ 0x31, 0x37, 0x32, 0x32, 0x32, 0x36, 0x31, 0x31, 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, 0x95, 0xed, 0xb3, 0xf7, 0xed, 0xe0, 0xa3,
16
- 0x4e, 0xf7, 0x14, 0x26, 0x2e, 0x94, 0x05, 0x22, 0x27, 0x00, 0x5d, 0x69,
17
- 0xe3, 0x26, 0x24, 0x8a, 0x90, 0x09, 0x8d, 0x45, 0x4b, 0x68, 0xfc, 0x6c,
18
- 0x8a, 0xac, 0x7e, 0x4f, 0x4e, 0xc5, 0xf4, 0x55, 0xe5, 0x95, 0xe6, 0x6b,
19
- 0x1a, 0x05, 0xb8, 0x58, 0xdf, 0x29, 0xae, 0xc8, 0x64, 0xdf, 0xf8, 0xc0,
20
- 0xa9, 0x92, 0x0b, 0x83, 0xd0, 0xa4, 0xac, 0x46, 0x10, 0xd2, 0xbb, 0x6a,
21
- 0x2a, 0xcc, 0xec, 0xc0, 0x3d, 0x3b, 0x89, 0xa2, 0x3c, 0xe4, 0xc4, 0xc7,
22
- 0xf6, 0xa6, 0x90, 0x66, 0xe0, 0xfc, 0x1a, 0x60, 0xcd, 0xb8, 0x1b, 0x46,
23
- 0xaa, 0x52, 0x85, 0x0c, 0xdd, 0x5a, 0x9b, 0xec, 0x5a, 0xd8, 0x24, 0x04,
24
- 0xa0, 0xae, 0x39, 0x6a, 0x37, 0x85, 0x4a, 0x01, 0xdd, 0xde, 0x12, 0xfa,
25
- 0x55, 0x91, 0x84, 0xd5, 0xa3, 0xbe, 0xad, 0x8c, 0xaa, 0x00, 0xd3, 0xb1,
26
- 0x08, 0xe4, 0xd6, 0x75, 0x2a, 0x8f, 0x39, 0xe9, 0xfc, 0x17, 0x8b, 0x74,
27
- 0x46, 0x68, 0x04, 0xdb, 0x8b, 0x11, 0xf4, 0x66, 0x3d, 0xc3, 0x0c, 0x5e,
28
- 0x38, 0x91, 0x61, 0xa2, 0x5c, 0xaf, 0x95, 0x67, 0x31, 0x22, 0x3d, 0xfc,
29
- 0x56, 0xaa, 0x3b, 0xd8, 0x27, 0x34, 0x25, 0xc2, 0xc4, 0x79, 0xad, 0x01,
30
- 0xda, 0x74, 0xa9, 0x16, 0x1c, 0x01, 0x43, 0xe9, 0x2c, 0xcc, 0x62, 0x2b,
31
- 0xc0, 0x24, 0x4e, 0xfa, 0xc7, 0xbe, 0x1f, 0xed, 0xcb, 0xe2, 0x43, 0x12,
32
- 0xe3, 0x8d, 0x22, 0x0d, 0xc7, 0x94, 0xc5, 0x5a, 0x2a, 0x40, 0x4e, 0xaa,
33
- 0xba, 0xd5, 0xf6, 0x06, 0x86, 0xbf, 0x53, 0x86, 0x7e, 0x5e, 0x6f, 0x38,
34
- 0xde, 0x07, 0x07, 0x76, 0xf0, 0x32, 0x25, 0x23, 0x56, 0xb0, 0x4a, 0x16,
35
- 0x8f, 0x32, 0xaa, 0xc8, 0x1b, 0x27, 0xc9, 0xe3, 0x27, 0xdd, 0xfa, 0xa9,
36
- 0xb3, 0xac, 0xc4, 0xcc, 0x25, 0xe9, 0xb5, 0xb7, 0x37, 0x02, 0x03, 0x01,
15
+ 0x02, 0x82, 0x01, 0x01, 0x00, 0xbe, 0x04, 0x20, 0xbd, 0xb6, 0x23, 0xa9,
16
+ 0x34, 0x03, 0x67, 0x65, 0x2b, 0x2c, 0xde, 0x62, 0x3e, 0xf5, 0xbe, 0x7e,
17
+ 0x41, 0x72, 0x6b, 0x00, 0x3a, 0x53, 0x14, 0x97, 0x35, 0x40, 0x49, 0x3e,
18
+ 0xdd, 0x0c, 0xda, 0xf1, 0xcb, 0x8f, 0xbd, 0x74, 0x49, 0x71, 0xfe, 0x5f,
19
+ 0x08, 0xd4, 0x0c, 0x07, 0xf1, 0x2a, 0xdd, 0x89, 0xa7, 0xeb, 0x55, 0x23,
20
+ 0x99, 0xbe, 0xf4, 0xcf, 0xd8, 0xf2, 0x29, 0x9e, 0x38, 0xbd, 0x00, 0x4c,
21
+ 0x09, 0x1d, 0x5c, 0xa1, 0x98, 0x2c, 0xcd, 0xa5, 0x8a, 0x81, 0xcd, 0xa6,
22
+ 0x02, 0x0c, 0x0f, 0x22, 0x9f, 0x34, 0xf2, 0x29, 0xee, 0x58, 0xd1, 0xf6,
23
+ 0xd0, 0xc0, 0xbf, 0xc9, 0x56, 0x18, 0xaf, 0xb4, 0xa1, 0x36, 0xe9, 0x13,
24
+ 0x26, 0xf0, 0x9a, 0x48, 0x23, 0xac, 0x36, 0xf0, 0x54, 0x0e, 0xaa, 0xe4,
25
+ 0xcd, 0xb2, 0x49, 0xb4, 0x50, 0x5a, 0x35, 0x1e, 0xbe, 0xb3, 0xfa, 0xb6,
26
+ 0xb5, 0x4b, 0x4a, 0xa1, 0xe1, 0xb4, 0xb3, 0x21, 0xe3, 0x45, 0xb5, 0xa9,
27
+ 0xcc, 0x4e, 0xd1, 0xa5, 0xc5, 0xa1, 0x5a, 0x70, 0xd6, 0x00, 0x0f, 0x93,
28
+ 0x0b, 0x90, 0xcc, 0xfb, 0x7b, 0x85, 0x38, 0xbc, 0xdc, 0xc4, 0xdf, 0x21,
29
+ 0x06, 0xc0, 0x2b, 0x80, 0xaa, 0xc7, 0x70, 0x93, 0x50, 0x4e, 0x9d, 0xda,
30
+ 0x15, 0x19, 0x5b, 0x71, 0x80, 0xfb, 0xc4, 0xd6, 0xe5, 0xa0, 0x99, 0x5f,
31
+ 0x5d, 0x3d, 0x29, 0xc3, 0x77, 0xf6, 0xa8, 0xc8, 0x46, 0x5c, 0xb5, 0xb2,
32
+ 0x69, 0x23, 0x50, 0xad, 0x9c, 0xed, 0xa5, 0x0d, 0xd9, 0x84, 0x28, 0x3e,
33
+ 0xad, 0x8b, 0xa4, 0x1b, 0x25, 0xa4, 0xc2, 0xdb, 0x08, 0x45, 0xf4, 0x4e,
34
+ 0x6e, 0xee, 0x47, 0xe2, 0x9b, 0x27, 0xe1, 0x18, 0xe6, 0x21, 0x09, 0x88,
35
+ 0xd6, 0x02, 0x3b, 0x09, 0xd7, 0xb0, 0xb1, 0xbe, 0xa6, 0x6e, 0x9c, 0x0a,
36
+ 0xa2, 0xab, 0x38, 0x82, 0x40, 0x77, 0x79, 0xff, 0x8d, 0x02, 0x03, 0x01,
37
37
  0x00, 0x01, 0xa3, 0x60, 0x30, 0x5e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d,
38
- 0x0e, 0x04, 0x16, 0x04, 0x14, 0x10, 0x1c, 0x46, 0xe6, 0x89, 0x14, 0xe0,
39
- 0xe3, 0x05, 0x8b, 0x74, 0xdd, 0x57, 0x74, 0xf9, 0x4b, 0x8e, 0x40, 0xdc,
40
- 0xbd, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff, 0x04,
38
+ 0x0e, 0x04, 0x16, 0x04, 0x14, 0x98, 0x84, 0xc7, 0x8e, 0xcf, 0xaf, 0x69,
39
+ 0x53, 0x9a, 0x00, 0x65, 0xda, 0xd1, 0x9a, 0xaa, 0x60, 0xbc, 0xc9, 0x22,
40
+ 0x60, 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
- 0x15, 0x04, 0xfb, 0x2d, 0x82, 0xaa, 0xc1, 0x88, 0xd2, 0x96, 0x6d, 0x40,
48
- 0x39, 0x1b, 0x1d, 0xe4, 0xb2, 0xf9, 0xa5, 0x99, 0xf8, 0xd7, 0x3d, 0xc9,
49
- 0xb1, 0x15, 0x53, 0xaf, 0xb3, 0xd7, 0xd5, 0x6e, 0x2a, 0x04, 0x22, 0x84,
50
- 0x87, 0x66, 0x09, 0xb3, 0x7e, 0xea, 0xa2, 0x53, 0xd9, 0x5c, 0x80, 0x15,
51
- 0x0b, 0x71, 0xff, 0x3a, 0x43, 0xd0, 0x08, 0x35, 0xe5, 0x98, 0xb7, 0xe6,
52
- 0xa5, 0xc0, 0x59, 0x98, 0xde, 0xae, 0x86, 0x33, 0xf9, 0x65, 0xbe, 0x61,
53
- 0x92, 0x50, 0x28, 0x8b, 0x42, 0x2b, 0x15, 0x4f, 0x5b, 0x00, 0x00, 0x73,
54
- 0x90, 0x32, 0x35, 0x0c, 0xe5, 0x07, 0xe3, 0xb9, 0x39, 0xbf, 0x0c, 0xab,
55
- 0xac, 0x67, 0xaa, 0x2b, 0xc1, 0x75, 0x6b, 0xc0, 0x2b, 0x13, 0xc3, 0x27,
56
- 0x93, 0xc1, 0x85, 0x9d, 0x42, 0x07, 0x0c, 0xf0, 0xd9, 0x08, 0x57, 0xd6,
57
- 0x63, 0xb8, 0xff, 0x51, 0x94, 0x14, 0x2f, 0xc8, 0xc7, 0x04, 0x22, 0xde,
58
- 0x2e, 0x90, 0x73, 0x96, 0xd5, 0x96, 0xe1, 0xcc, 0x6f, 0xec, 0xa3, 0x40,
59
- 0x39, 0x83, 0x42, 0x2d, 0x66, 0x12, 0x2d, 0x68, 0xe5, 0x54, 0x8c, 0x64,
60
- 0x56, 0x7f, 0xf9, 0xb5, 0xd9, 0x0c, 0xa7, 0xc7, 0x72, 0xe9, 0xa0, 0xcf,
61
- 0x00, 0xd6, 0x0e, 0x1c, 0xfe, 0xeb, 0xb8, 0x61, 0x92, 0x99, 0xd1, 0xa7,
62
- 0xb3, 0xa8, 0xf1, 0x76, 0x8b, 0xfe, 0xa9, 0xf5, 0x40, 0xc0, 0x32, 0x01,
63
- 0x77, 0x9b, 0x81, 0xf4, 0x63, 0x30, 0x8f, 0xce, 0x08, 0x26, 0x51, 0x0e,
64
- 0xa7, 0x2a, 0xcd, 0x92, 0x35, 0xdc, 0xf7, 0x21, 0xc5, 0x7f, 0xcc, 0xd0,
65
- 0xb7, 0x19, 0xef, 0x2a, 0xed, 0x4e, 0x0e, 0xcb, 0x57, 0xbf, 0x6e, 0x17,
66
- 0x7f, 0x8e, 0x34, 0x22, 0x9d, 0x16, 0x14, 0xaa, 0x48, 0x9e, 0x1c, 0x31,
67
- 0xd0, 0x96, 0x39, 0x1c, 0x5b, 0x07, 0x45, 0xa8, 0x23, 0x66, 0xf1, 0xc5,
68
- 0x78, 0x6c, 0x3f, 0xf0
47
+ 0x4a, 0x01, 0x85, 0xc4, 0x46, 0x48, 0xfe, 0xfc, 0x89, 0x82, 0xf0, 0x35,
48
+ 0x3e, 0x5f, 0xce, 0xa8, 0x2c, 0x58, 0x38, 0xe4, 0x83, 0xa7, 0x1d, 0x26,
49
+ 0x97, 0x19, 0x95, 0xac, 0xb0, 0xa3, 0x9d, 0xc9, 0x6a, 0xc1, 0x84, 0xa4,
50
+ 0xfb, 0xf1, 0x36, 0x77, 0x19, 0x37, 0xf2, 0xbf, 0x6b, 0xa4, 0x75, 0x7f,
51
+ 0x3d, 0xf4, 0xa6, 0x97, 0xc9, 0x23, 0x72, 0x7b, 0x2d, 0xcf, 0x98, 0xa1,
52
+ 0xe4, 0xda, 0xf1, 0x80, 0x7a, 0xa7, 0x4f, 0x02, 0x93, 0x54, 0x90, 0xe3,
53
+ 0x98, 0xa6, 0x9a, 0xc5, 0xa1, 0xe5, 0x76, 0xce, 0xc9, 0x5a, 0xd3, 0xd2,
54
+ 0x7f, 0x01, 0x16, 0x60, 0x1d, 0xa4, 0xf4, 0xc3, 0x8c, 0x10, 0xdc, 0x9f,
55
+ 0xeb, 0x39, 0x36, 0xcc, 0xe2, 0x67, 0xb3, 0xd8, 0x86, 0x07, 0x18, 0xc7,
56
+ 0xfb, 0x89, 0x40, 0xe3, 0x2c, 0xd9, 0x49, 0x8c, 0x4d, 0x72, 0x94, 0xfa,
57
+ 0x3f, 0x95, 0x49, 0x0d, 0xb1, 0xcc, 0x3c, 0x8c, 0xbf, 0x65, 0xe8, 0xec,
58
+ 0x15, 0xeb, 0x27, 0xac, 0x64, 0x77, 0x0d, 0xf5, 0x29, 0xf6, 0xbf, 0x29,
59
+ 0x7e, 0x87, 0xfa, 0x2a, 0x26, 0x21, 0x48, 0xbb, 0x34, 0x45, 0xb2, 0x00,
60
+ 0x28, 0xcc, 0x7b, 0xcf, 0x12, 0x07, 0x3b, 0x19, 0xf6, 0x9e, 0x31, 0xea,
61
+ 0xbe, 0xda, 0xc7, 0xf9, 0x71, 0x89, 0x5d, 0x31, 0x58, 0xba, 0x04, 0xb6,
62
+ 0x7e, 0x93, 0x2c, 0xa3, 0x26, 0x75, 0xe0, 0xd4, 0xa1, 0x0f, 0x11, 0x4e,
63
+ 0x74, 0xeb, 0x88, 0xd3, 0x99, 0xb4, 0xb9, 0xfd, 0xd1, 0xb7, 0x45, 0x3f,
64
+ 0x9d, 0x39, 0x30, 0x99, 0x2a, 0xfa, 0xef, 0x26, 0xa9, 0x44, 0xf4, 0x00,
65
+ 0x7d, 0xfc, 0xf8, 0xbc, 0x27, 0x94, 0x6c, 0x9b, 0x8d, 0x96, 0x4b, 0x4b,
66
+ 0xd7, 0x2c, 0xa0, 0xfd, 0x17, 0x4e, 0xe6, 0x77, 0x73, 0x63, 0x43, 0xd9,
67
+ 0xca, 0xf7, 0x74, 0x9d, 0x92, 0x54, 0x85, 0x78, 0xfa, 0xdc, 0x85, 0x8b,
68
+ 0x8f, 0x84, 0x99, 0x95
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
2
  0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00,
3
- 0x95, 0xed, 0xb3, 0xf7, 0xed, 0xe0, 0xa3, 0x4e, 0xf7, 0x14, 0x26, 0x2e,
4
- 0x94, 0x05, 0x22, 0x27, 0x00, 0x5d, 0x69, 0xe3, 0x26, 0x24, 0x8a, 0x90,
5
- 0x09, 0x8d, 0x45, 0x4b, 0x68, 0xfc, 0x6c, 0x8a, 0xac, 0x7e, 0x4f, 0x4e,
6
- 0xc5, 0xf4, 0x55, 0xe5, 0x95, 0xe6, 0x6b, 0x1a, 0x05, 0xb8, 0x58, 0xdf,
7
- 0x29, 0xae, 0xc8, 0x64, 0xdf, 0xf8, 0xc0, 0xa9, 0x92, 0x0b, 0x83, 0xd0,
8
- 0xa4, 0xac, 0x46, 0x10, 0xd2, 0xbb, 0x6a, 0x2a, 0xcc, 0xec, 0xc0, 0x3d,
9
- 0x3b, 0x89, 0xa2, 0x3c, 0xe4, 0xc4, 0xc7, 0xf6, 0xa6, 0x90, 0x66, 0xe0,
10
- 0xfc, 0x1a, 0x60, 0xcd, 0xb8, 0x1b, 0x46, 0xaa, 0x52, 0x85, 0x0c, 0xdd,
11
- 0x5a, 0x9b, 0xec, 0x5a, 0xd8, 0x24, 0x04, 0xa0, 0xae, 0x39, 0x6a, 0x37,
12
- 0x85, 0x4a, 0x01, 0xdd, 0xde, 0x12, 0xfa, 0x55, 0x91, 0x84, 0xd5, 0xa3,
13
- 0xbe, 0xad, 0x8c, 0xaa, 0x00, 0xd3, 0xb1, 0x08, 0xe4, 0xd6, 0x75, 0x2a,
14
- 0x8f, 0x39, 0xe9, 0xfc, 0x17, 0x8b, 0x74, 0x46, 0x68, 0x04, 0xdb, 0x8b,
15
- 0x11, 0xf4, 0x66, 0x3d, 0xc3, 0x0c, 0x5e, 0x38, 0x91, 0x61, 0xa2, 0x5c,
16
- 0xaf, 0x95, 0x67, 0x31, 0x22, 0x3d, 0xfc, 0x56, 0xaa, 0x3b, 0xd8, 0x27,
17
- 0x34, 0x25, 0xc2, 0xc4, 0x79, 0xad, 0x01, 0xda, 0x74, 0xa9, 0x16, 0x1c,
18
- 0x01, 0x43, 0xe9, 0x2c, 0xcc, 0x62, 0x2b, 0xc0, 0x24, 0x4e, 0xfa, 0xc7,
19
- 0xbe, 0x1f, 0xed, 0xcb, 0xe2, 0x43, 0x12, 0xe3, 0x8d, 0x22, 0x0d, 0xc7,
20
- 0x94, 0xc5, 0x5a, 0x2a, 0x40, 0x4e, 0xaa, 0xba, 0xd5, 0xf6, 0x06, 0x86,
21
- 0xbf, 0x53, 0x86, 0x7e, 0x5e, 0x6f, 0x38, 0xde, 0x07, 0x07, 0x76, 0xf0,
22
- 0x32, 0x25, 0x23, 0x56, 0xb0, 0x4a, 0x16, 0x8f, 0x32, 0xaa, 0xc8, 0x1b,
23
- 0x27, 0xc9, 0xe3, 0x27, 0xdd, 0xfa, 0xa9, 0xb3, 0xac, 0xc4, 0xcc, 0x25,
24
- 0xe9, 0xb5, 0xb7, 0x37, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
25
- 0x00, 0x2b, 0x2c, 0xf5, 0xeb, 0xcb, 0x14, 0x2a, 0xd3, 0x5d, 0xb1, 0xee,
26
- 0xc0, 0xf1, 0x1d, 0x7d, 0x55, 0x4f, 0xf4, 0x96, 0xbe, 0xb4, 0x48, 0x47,
27
- 0xa2, 0xed, 0x2d, 0x42, 0xac, 0x51, 0xc2, 0x87, 0x9b, 0x73, 0xcb, 0x38,
28
- 0x19, 0x8e, 0x46, 0x2b, 0xca, 0x5e, 0xdd, 0xa9, 0x30, 0x28, 0x3f, 0x8b,
29
- 0x50, 0x50, 0xd7, 0xa5, 0x9b, 0xef, 0x27, 0xda, 0x8b, 0xba, 0xa4, 0x18,
30
- 0x44, 0xa8, 0x77, 0x78, 0x01, 0xf6, 0x3d, 0xc4, 0x78, 0x28, 0xe5, 0x71,
31
- 0x02, 0xf1, 0x37, 0x54, 0x82, 0x46, 0xbb, 0x28, 0x7e, 0xae, 0x3e, 0xdd,
32
- 0x71, 0xa3, 0x08, 0x11, 0xa2, 0x8c, 0x87, 0x46, 0x55, 0x5c, 0x48, 0x36,
33
- 0x89, 0x34, 0x43, 0xbc, 0xcf, 0xf8, 0x78, 0x7e, 0xe0, 0xaa, 0xeb, 0x9b,
34
- 0xdb, 0xfb, 0x45, 0x71, 0xbe, 0x2b, 0xea, 0xb9, 0x2e, 0x95, 0x26, 0x74,
35
- 0xc3, 0x9f, 0xf0, 0xa8, 0x96, 0x78, 0x80, 0x7d, 0xf5, 0x89, 0xe1, 0xa6,
36
- 0x00, 0x78, 0x70, 0x1b, 0x3e, 0xcf, 0xc6, 0x57, 0x86, 0x44, 0x4c, 0x41,
37
- 0x47, 0x0d, 0x85, 0x05, 0x00, 0xa7, 0x53, 0x20, 0xe7, 0xee, 0x1d, 0xb4,
38
- 0x69, 0x8f, 0x2e, 0xbc, 0x3c, 0x74, 0x69, 0xd1, 0x6c, 0xe6, 0x32, 0x2a,
39
- 0x96, 0x72, 0x85, 0x80, 0xee, 0x45, 0xe5, 0x54, 0xe1, 0x62, 0x82, 0xdb,
40
- 0x7e, 0x8b, 0xae, 0x7a, 0x2e, 0x73, 0x7d, 0xdc, 0x9f, 0x71, 0xc8, 0xd6,
41
- 0xf5, 0x17, 0xd0, 0xc7, 0x8f, 0xf8, 0x9d, 0xda, 0x93, 0x43, 0xd4, 0x6b,
42
- 0x70, 0x89, 0x30, 0x79, 0x88, 0xde, 0xd1, 0xf9, 0x17, 0xe5, 0xf9, 0x0b,
43
- 0x2e, 0x02, 0xd9, 0xdf, 0xfb, 0x03, 0x6d, 0xe1, 0x04, 0x3a, 0xd5, 0x4d,
44
- 0xab, 0x3d, 0xc1, 0xff, 0x0b, 0x66, 0x02, 0x0d, 0x61, 0x54, 0xfe, 0x9d,
45
- 0x44, 0x2f, 0xee, 0x98, 0xdf, 0xc5, 0x0b, 0x40, 0xf4, 0x53, 0xd1, 0x26,
46
- 0xd4, 0xd3, 0x61, 0xad, 0x69, 0x02, 0x81, 0x81, 0x00, 0xc5, 0x84, 0x21,
47
- 0xb3, 0x4e, 0xe6, 0x52, 0x40, 0x2f, 0x9f, 0x89, 0x1c, 0xbd, 0x77, 0x77,
48
- 0x82, 0x4a, 0xa5, 0x0b, 0x2e, 0x91, 0x4d, 0xf8, 0x28, 0x87, 0x3e, 0xad,
49
- 0xa7, 0x25, 0xb4, 0x62, 0x7d, 0xf5, 0xab, 0xb3, 0x93, 0xbd, 0xcd, 0xb1,
50
- 0x52, 0x39, 0x6d, 0x99, 0x2b, 0xe7, 0xe2, 0x0d, 0xdc, 0x0c, 0xfd, 0x2a,
51
- 0xe9, 0x9b, 0x92, 0x12, 0x8a, 0xa0, 0x94, 0x4b, 0x11, 0x93, 0x7d, 0xc3,
52
- 0x08, 0x9a, 0x8a, 0x35, 0xa4, 0x7a, 0x98, 0x39, 0x37, 0x27, 0x3e, 0x24,
53
- 0x65, 0x53, 0x62, 0x44, 0x39, 0x31, 0x49, 0x6c, 0x38, 0xc3, 0x5c, 0x12,
54
- 0x2c, 0x1a, 0xf9, 0xe3, 0x94, 0x47, 0x60, 0x82, 0x7d, 0x5a, 0xc7, 0xdd,
55
- 0x02, 0xfc, 0x2c, 0xc0, 0xb5, 0x18, 0xf5, 0xd3, 0x6d, 0xde, 0x56, 0x84,
56
- 0x30, 0xca, 0x98, 0xf0, 0xc9, 0x14, 0xff, 0xa0, 0x99, 0xff, 0xc8, 0x8f,
57
- 0xef, 0x95, 0xe5, 0x2c, 0xcb, 0x02, 0x81, 0x81, 0x00, 0xc2, 0x52, 0x65,
58
- 0x3b, 0xc7, 0x79, 0x51, 0xc8, 0xa4, 0x81, 0x30, 0xb2, 0xed, 0x21, 0xf4,
59
- 0x0a, 0xf7, 0x15, 0x28, 0x55, 0x46, 0xe1, 0x44, 0xfd, 0xf1, 0xc7, 0xa9,
60
- 0x1f, 0xff, 0x42, 0xc8, 0xd6, 0x7c, 0xa3, 0x59, 0xb1, 0x8d, 0x81, 0x8d,
61
- 0x38, 0x8d, 0xc5, 0x6c, 0x1a, 0xe2, 0x73, 0xa7, 0xed, 0xc1, 0x96, 0x1b,
62
- 0x70, 0x96, 0x60, 0x77, 0xbc, 0xfe, 0x05, 0x31, 0x08, 0x70, 0x03, 0xca,
63
- 0x06, 0x88, 0x00, 0xe2, 0xdb, 0x9e, 0x55, 0x87, 0x25, 0x74, 0x50, 0x3f,
64
- 0x18, 0xf8, 0xe6, 0x25, 0xf1, 0x61, 0x20, 0xac, 0x26, 0x86, 0xa5, 0x2b,
65
- 0x8f, 0x6b, 0xa3, 0x9e, 0x5f, 0x32, 0xf9, 0x6f, 0xfd, 0xa0, 0xc4, 0x09,
66
- 0x6b, 0x0e, 0x19, 0xf5, 0xb0, 0xc8, 0x51, 0x45, 0xd6, 0x7d, 0x63, 0xa1,
67
- 0x52, 0x82, 0x28, 0x2f, 0xd3, 0x4a, 0x57, 0xf0, 0x14, 0x6a, 0x75, 0x8f,
68
- 0x3d, 0x6b, 0x2d, 0xdd, 0xc5, 0x02, 0x81, 0x80, 0x4f, 0x80, 0x56, 0xbc,
69
- 0x40, 0xb6, 0xce, 0x46, 0x8d, 0xa4, 0xae, 0x60, 0xc6, 0x16, 0x6f, 0x21,
70
- 0x1f, 0x80, 0x7d, 0x16, 0xba, 0x5f, 0xe2, 0xd2, 0x15, 0x55, 0xf2, 0x39,
71
- 0xc4, 0x20, 0x6e, 0x40, 0x7b, 0x01, 0x28, 0xa0, 0x00, 0x16, 0xea, 0x17,
72
- 0xc9, 0x8b, 0xc6, 0xca, 0x78, 0x64, 0x71, 0xe5, 0xaf, 0xc8, 0xbb, 0x5c,
73
- 0x1a, 0x45, 0x5a, 0x77, 0x38, 0x19, 0x58, 0x79, 0xf3, 0x9e, 0xfc, 0x40,
74
- 0xdb, 0x4b, 0x64, 0x3a, 0x17, 0x2a, 0x6c, 0x65, 0x39, 0xc3, 0x76, 0x8c,
75
- 0xde, 0x5a, 0x40, 0x51, 0xb0, 0xf7, 0xf7, 0xba, 0x85, 0x4f, 0xea, 0xf4,
76
- 0x9b, 0xcb, 0x17, 0x82, 0x58, 0x94, 0x8d, 0x11, 0x7d, 0xd7, 0xd2, 0xaa,
77
- 0xdf, 0xeb, 0xf7, 0x89, 0x2d, 0x49, 0xcd, 0x57, 0x7c, 0xd5, 0xe0, 0x11,
78
- 0x6f, 0x8a, 0xcd, 0xe8, 0x72, 0x2e, 0x4e, 0x6b, 0x8e, 0x1c, 0x21, 0x6b,
79
- 0x73, 0x2f, 0x32, 0xaf, 0x02, 0x81, 0x80, 0x36, 0x19, 0x04, 0x2f, 0xd9,
80
- 0x3f, 0x90, 0x22, 0x20, 0x92, 0x0a, 0xc1, 0xb5, 0x3c, 0x9f, 0x99, 0x31,
81
- 0xe2, 0x45, 0x01, 0x40, 0xa3, 0x54, 0x36, 0xb2, 0x49, 0xd8, 0x6e, 0x9c,
82
- 0xfc, 0xb5, 0xb6, 0xe8, 0xa9, 0xfd, 0x3d, 0x6d, 0xdc, 0xa4, 0x39, 0x1b,
83
- 0x56, 0xdb, 0xda, 0xbc, 0x32, 0x60, 0x8c, 0xd3, 0x38, 0xfb, 0xd8, 0xa3,
84
- 0x34, 0xa6, 0x01, 0x0a, 0x62, 0xdd, 0x9c, 0xb0, 0xba, 0x8d, 0x52, 0xb6,
85
- 0x28, 0x30, 0xff, 0xdd, 0x1b, 0x88, 0x6d, 0x47, 0xed, 0x53, 0x33, 0x9b,
86
- 0x8f, 0x4e, 0xfe, 0xdd, 0x00, 0x60, 0x8c, 0xb5, 0x2d, 0x64, 0x6c, 0x20,
87
- 0x16, 0x43, 0xef, 0xd2, 0xdc, 0x18, 0x6e, 0x6e, 0x84, 0x44, 0xee, 0xf5,
88
- 0xd5, 0x0a, 0x4e, 0x35, 0xe6, 0x52, 0x5f, 0xfd, 0x36, 0x70, 0x61, 0xec,
89
- 0xf4, 0x4d, 0x24, 0x30, 0x6d, 0x3c, 0xdc, 0x22, 0x2b, 0x2a, 0x3e, 0x7a,
90
- 0x09, 0x21, 0xd5, 0x02, 0x81, 0x81, 0x00, 0xc4, 0xdf, 0x9b, 0x71, 0x98,
91
- 0xc3, 0x8a, 0x20, 0x47, 0x1d, 0xc3, 0xbd, 0x0e, 0x4e, 0x83, 0x45, 0xde,
92
- 0x95, 0x80, 0x66, 0x94, 0x68, 0x02, 0xc6, 0x25, 0x07, 0x42, 0x6a, 0x9c,
93
- 0x45, 0xe9, 0xa6, 0xe4, 0x21, 0x9d, 0x4e, 0x36, 0x41, 0x74, 0x18, 0x85,
94
- 0x87, 0xee, 0x8e, 0x7c, 0x74, 0xbb, 0x2d, 0x33, 0x59, 0xfc, 0xd8, 0xe8,
95
- 0x2c, 0x65, 0x15, 0xc5, 0xbd, 0xba, 0xf9, 0x0f, 0xe9, 0x46, 0x20, 0x7f,
96
- 0x22, 0xfa, 0xaa, 0x31, 0x39, 0x70, 0x23, 0xa8, 0xc5, 0x17, 0xf5, 0x2c,
97
- 0x71, 0x8a, 0x48, 0xc9, 0x47, 0x11, 0x2a, 0x38, 0x40, 0x03, 0xa1, 0x13,
98
- 0x2e, 0x0e, 0xd7, 0xa0, 0x95, 0x7e, 0x23, 0x23, 0x6e, 0x08, 0x71, 0x55,
99
- 0x13, 0xed, 0x64, 0x8d, 0xc8, 0x88, 0xf5, 0x5a, 0xd4, 0xad, 0xe2, 0xd5,
100
- 0xf0, 0x0f, 0x65, 0x9e, 0xb6, 0x5e, 0xd0, 0xc0, 0xd0, 0xd7, 0x6f, 0x7d,
101
- 0x62, 0xe3, 0x23
3
+ 0xbe, 0x04, 0x20, 0xbd, 0xb6, 0x23, 0xa9, 0x34, 0x03, 0x67, 0x65, 0x2b,
4
+ 0x2c, 0xde, 0x62, 0x3e, 0xf5, 0xbe, 0x7e, 0x41, 0x72, 0x6b, 0x00, 0x3a,
5
+ 0x53, 0x14, 0x97, 0x35, 0x40, 0x49, 0x3e, 0xdd, 0x0c, 0xda, 0xf1, 0xcb,
6
+ 0x8f, 0xbd, 0x74, 0x49, 0x71, 0xfe, 0x5f, 0x08, 0xd4, 0x0c, 0x07, 0xf1,
7
+ 0x2a, 0xdd, 0x89, 0xa7, 0xeb, 0x55, 0x23, 0x99, 0xbe, 0xf4, 0xcf, 0xd8,
8
+ 0xf2, 0x29, 0x9e, 0x38, 0xbd, 0x00, 0x4c, 0x09, 0x1d, 0x5c, 0xa1, 0x98,
9
+ 0x2c, 0xcd, 0xa5, 0x8a, 0x81, 0xcd, 0xa6, 0x02, 0x0c, 0x0f, 0x22, 0x9f,
10
+ 0x34, 0xf2, 0x29, 0xee, 0x58, 0xd1, 0xf6, 0xd0, 0xc0, 0xbf, 0xc9, 0x56,
11
+ 0x18, 0xaf, 0xb4, 0xa1, 0x36, 0xe9, 0x13, 0x26, 0xf0, 0x9a, 0x48, 0x23,
12
+ 0xac, 0x36, 0xf0, 0x54, 0x0e, 0xaa, 0xe4, 0xcd, 0xb2, 0x49, 0xb4, 0x50,
13
+ 0x5a, 0x35, 0x1e, 0xbe, 0xb3, 0xfa, 0xb6, 0xb5, 0x4b, 0x4a, 0xa1, 0xe1,
14
+ 0xb4, 0xb3, 0x21, 0xe3, 0x45, 0xb5, 0xa9, 0xcc, 0x4e, 0xd1, 0xa5, 0xc5,
15
+ 0xa1, 0x5a, 0x70, 0xd6, 0x00, 0x0f, 0x93, 0x0b, 0x90, 0xcc, 0xfb, 0x7b,
16
+ 0x85, 0x38, 0xbc, 0xdc, 0xc4, 0xdf, 0x21, 0x06, 0xc0, 0x2b, 0x80, 0xaa,
17
+ 0xc7, 0x70, 0x93, 0x50, 0x4e, 0x9d, 0xda, 0x15, 0x19, 0x5b, 0x71, 0x80,
18
+ 0xfb, 0xc4, 0xd6, 0xe5, 0xa0, 0x99, 0x5f, 0x5d, 0x3d, 0x29, 0xc3, 0x77,
19
+ 0xf6, 0xa8, 0xc8, 0x46, 0x5c, 0xb5, 0xb2, 0x69, 0x23, 0x50, 0xad, 0x9c,
20
+ 0xed, 0xa5, 0x0d, 0xd9, 0x84, 0x28, 0x3e, 0xad, 0x8b, 0xa4, 0x1b, 0x25,
21
+ 0xa4, 0xc2, 0xdb, 0x08, 0x45, 0xf4, 0x4e, 0x6e, 0xee, 0x47, 0xe2, 0x9b,
22
+ 0x27, 0xe1, 0x18, 0xe6, 0x21, 0x09, 0x88, 0xd6, 0x02, 0x3b, 0x09, 0xd7,
23
+ 0xb0, 0xb1, 0xbe, 0xa6, 0x6e, 0x9c, 0x0a, 0xa2, 0xab, 0x38, 0x82, 0x40,
24
+ 0x77, 0x79, 0xff, 0x8d, 0x02, 0x03, 0x01, 0x00, 0x01, 0x02, 0x82, 0x01,
25
+ 0x00, 0x06, 0x12, 0x3f, 0xb1, 0x90, 0x16, 0x47, 0x9b, 0xbf, 0xd8, 0x17,
26
+ 0xe5, 0x6f, 0x43, 0x93, 0xc4, 0x0b, 0x3a, 0x10, 0xf2, 0xaa, 0x63, 0x3c,
27
+ 0xd8, 0xa0, 0x3a, 0xf2, 0x31, 0xe3, 0x61, 0xf3, 0xbe, 0x40, 0x60, 0xe6,
28
+ 0x84, 0xe8, 0x8c, 0xd7, 0x20, 0x59, 0xa2, 0x15, 0x0b, 0x45, 0x2b, 0x35,
29
+ 0x3d, 0xc1, 0x6e, 0xde, 0xad, 0x1c, 0xd9, 0xd5, 0x8f, 0x5e, 0x08, 0x98,
30
+ 0x73, 0x88, 0x19, 0x48, 0x52, 0xeb, 0xc7, 0x0c, 0xa6, 0xe5, 0xe7, 0x45,
31
+ 0xca, 0x84, 0xf3, 0xf5, 0x2c, 0x1d, 0xc5, 0xa2, 0x5e, 0x42, 0x60, 0x61,
32
+ 0x6c, 0xd0, 0xd6, 0x43, 0xfc, 0xb7, 0x9d, 0xcd, 0xd3, 0x11, 0xb5, 0x8f,
33
+ 0x0b, 0x4f, 0x32, 0x9e, 0x04, 0xe0, 0xaa, 0x45, 0xd0, 0x62, 0xb3, 0xab,
34
+ 0x46, 0x68, 0x84, 0x40, 0xdd, 0x8e, 0xb2, 0x6b, 0x29, 0x1f, 0x5f, 0x37,
35
+ 0x81, 0xb1, 0xc0, 0x2c, 0xc1, 0x4f, 0x22, 0xdd, 0x9f, 0x93, 0x17, 0x34,
36
+ 0x9b, 0x98, 0xfe, 0xe6, 0x52, 0xfc, 0xb9, 0xd5, 0x43, 0x06, 0xd7, 0x56,
37
+ 0xee, 0xf3, 0x2c, 0xd0, 0x88, 0xda, 0xa2, 0x9e, 0xa8, 0x9b, 0x84, 0x02,
38
+ 0x92, 0x60, 0x4d, 0xe4, 0xee, 0xb8, 0xe9, 0xe7, 0xed, 0x26, 0xfb, 0x4a,
39
+ 0x0c, 0x76, 0xab, 0xc4, 0x91, 0xc0, 0xf7, 0xf5, 0xbe, 0x5e, 0x6b, 0xce,
40
+ 0xd9, 0x76, 0xa4, 0x8a, 0x35, 0x19, 0xe6, 0xc7, 0xb8, 0xb9, 0x04, 0xa3,
41
+ 0xd3, 0x69, 0x75, 0x79, 0x25, 0x4f, 0xd3, 0x9e, 0x24, 0x26, 0x79, 0x31,
42
+ 0x47, 0xc6, 0x6f, 0x30, 0x74, 0xf8, 0x25, 0x6c, 0xbc, 0xd6, 0xa9, 0x54,
43
+ 0x54, 0xa5, 0xf4, 0xe2, 0x4e, 0xcd, 0xfd, 0x2a, 0x07, 0x9f, 0x93, 0xca,
44
+ 0xb0, 0x54, 0x03, 0xb0, 0xec, 0x19, 0x2a, 0xa1, 0xfc, 0x64, 0x0f, 0xdc,
45
+ 0x93, 0xe5, 0xb1, 0x43, 0xc2, 0x16, 0xd0, 0x1d, 0x1f, 0x78, 0x37, 0xbe,
46
+ 0xb4, 0x9c, 0x6c, 0xd0, 0x89, 0x02, 0x81, 0x81, 0x00, 0xfb, 0x65, 0xd5,
47
+ 0x31, 0x80, 0x4e, 0x76, 0xc9, 0xdd, 0x8e, 0xf9, 0x22, 0x8a, 0x02, 0xf4,
48
+ 0xe7, 0x4c, 0x03, 0x25, 0x13, 0xee, 0x46, 0x2e, 0x34, 0x40, 0xca, 0x1b,
49
+ 0x5d, 0x60, 0x31, 0x14, 0xb3, 0x3c, 0xc0, 0x91, 0xba, 0xf6, 0xa1, 0xa4,
50
+ 0x1d, 0x01, 0x15, 0x5c, 0x53, 0xab, 0x68, 0x27, 0x28, 0xf6, 0xe4, 0x35,
51
+ 0xd4, 0xe5, 0x50, 0x52, 0xab, 0x89, 0xea, 0xb8, 0x06, 0xc6, 0x38, 0xbc,
52
+ 0xe1, 0xce, 0x2e, 0xdb, 0xf2, 0x16, 0xd4, 0xdf, 0x31, 0x1d, 0x8a, 0xce,
53
+ 0x2c, 0xeb, 0x01, 0x54, 0xbd, 0x62, 0xc7, 0xac, 0xf0, 0x92, 0xce, 0xbc,
54
+ 0x0c, 0x17, 0xda, 0xf5, 0x8f, 0xc9, 0xf7, 0x8c, 0x8f, 0x72, 0xdb, 0x07,
55
+ 0x0b, 0x8b, 0x10, 0x5d, 0x2b, 0x1d, 0x16, 0x70, 0x00, 0x80, 0xb0, 0xa6,
56
+ 0xa9, 0x86, 0x60, 0xd9, 0xbf, 0x74, 0x70, 0x0c, 0x28, 0xb5, 0xb1, 0x37,
57
+ 0x35, 0xcd, 0x02, 0xa9, 0xaf, 0x02, 0x81, 0x81, 0x00, 0xc1, 0x7e, 0xa1,
58
+ 0xcd, 0x1a, 0xe7, 0x51, 0x9f, 0x83, 0x6f, 0x8e, 0x15, 0x18, 0x62, 0x66,
59
+ 0xbf, 0x44, 0x7f, 0xac, 0xde, 0x4a, 0x16, 0x80, 0x13, 0x70, 0xb3, 0x27,
60
+ 0xb6, 0x1f, 0x20, 0xef, 0x3d, 0x1c, 0x75, 0x80, 0x7f, 0x05, 0xe0, 0xc7,
61
+ 0xcd, 0x03, 0xb3, 0x16, 0x09, 0x68, 0x90, 0x14, 0x70, 0xe1, 0xe4, 0xdc,
62
+ 0xa5, 0xca, 0xe6, 0xd7, 0xa5, 0xe7, 0x43, 0x1d, 0xbd, 0x8e, 0x7e, 0x00,
63
+ 0xf4, 0xde, 0xc5, 0x66, 0xf9, 0xee, 0x3b, 0x0d, 0x70, 0xac, 0x5d, 0x02,
64
+ 0x48, 0xad, 0xeb, 0xfd, 0x10, 0x51, 0xfc, 0x75, 0x19, 0x39, 0x9b, 0x8b,
65
+ 0xd8, 0xf7, 0x14, 0x5d, 0x51, 0x53, 0xa5, 0xb5, 0xcb, 0xb9, 0x9a, 0x0f,
66
+ 0x23, 0x35, 0xa1, 0x6d, 0xc2, 0x18, 0x66, 0x1e, 0x93, 0xba, 0x3c, 0x4f,
67
+ 0xa6, 0x2f, 0x8d, 0x99, 0x6d, 0xa1, 0xa2, 0x96, 0x9c, 0x83, 0xed, 0xa1,
68
+ 0x10, 0xa3, 0xef, 0x45, 0x83, 0x02, 0x81, 0x80, 0x77, 0xb0, 0x99, 0xfa,
69
+ 0x01, 0x5e, 0x5a, 0x0b, 0xed, 0xe2, 0x3e, 0x17, 0x05, 0xa2, 0x36, 0xbb,
70
+ 0x50, 0x63, 0x46, 0xe9, 0xe0, 0x4d, 0xa5, 0x7d, 0xd7, 0x42, 0xe2, 0x18,
71
+ 0x68, 0xcd, 0xb5, 0x4f, 0x48, 0xa3, 0x5e, 0x3e, 0xa7, 0x61, 0x79, 0xe3,
72
+ 0x1d, 0x3a, 0xf0, 0x44, 0x1d, 0x9d, 0x6e, 0xd7, 0x80, 0x04, 0x52, 0xe4,
73
+ 0xd3, 0x70, 0x94, 0x8b, 0x7b, 0x14, 0x37, 0x1d, 0x72, 0x8e, 0x5c, 0xcf,
74
+ 0x1c, 0xfd, 0x0e, 0x56, 0x8a, 0x2c, 0x3b, 0x3f, 0x05, 0x13, 0xaa, 0xe9,
75
+ 0x93, 0xd1, 0x84, 0x68, 0xce, 0x78, 0xc6, 0x8b, 0x9b, 0x39, 0xb6, 0x2a,
76
+ 0x03, 0xc9, 0x89, 0x94, 0x35, 0xd2, 0x18, 0x27, 0xcb, 0xc5, 0x1f, 0xeb,
77
+ 0x8c, 0xff, 0xf3, 0x7b, 0xad, 0x53, 0x9b, 0x6b, 0x81, 0xd9, 0x98, 0xdf,
78
+ 0xa9, 0x4c, 0xbf, 0x1e, 0xf9, 0xee, 0xc6, 0xbb, 0x33, 0x15, 0xf6, 0x75,
79
+ 0x34, 0xf0, 0x09, 0x9d, 0x02, 0x81, 0x80, 0x58, 0xb1, 0x0a, 0xc9, 0x51,
80
+ 0x03, 0xa6, 0xce, 0x4f, 0x18, 0xdb, 0x2f, 0xa0, 0x35, 0xba, 0x93, 0x01,
81
+ 0x7a, 0xe4, 0x6a, 0x1f, 0xdb, 0xa0, 0x69, 0x48, 0xc7, 0x55, 0xf4, 0x8c,
82
+ 0xe0, 0x33, 0xc8, 0xf7, 0x3a, 0x84, 0xe3, 0xb4, 0x76, 0x0c, 0x1f, 0x55,
83
+ 0x0a, 0xc9, 0x97, 0x16, 0x6e, 0xb4, 0x6f, 0xe9, 0x9b, 0x55, 0xe8, 0x48,
84
+ 0xd0, 0xf7, 0x17, 0xfc, 0xa1, 0x2f, 0x08, 0xac, 0x3f, 0xe5, 0x80, 0x58,
85
+ 0x7c, 0x73, 0x6f, 0x2c, 0x5b, 0xb5, 0x15, 0x68, 0x6c, 0x59, 0x97, 0xa6,
86
+ 0xe0, 0xfc, 0xe6, 0x76, 0x2e, 0x1a, 0x1e, 0xad, 0xe1, 0x36, 0x81, 0x05,
87
+ 0x00, 0x38, 0xa6, 0x06, 0x89, 0x76, 0x83, 0x23, 0x58, 0x12, 0x88, 0x39,
88
+ 0x14, 0xfd, 0x92, 0x72, 0x4c, 0x9c, 0xc7, 0x6a, 0x1e, 0x2b, 0x04, 0x29,
89
+ 0xd7, 0xe5, 0xf3, 0xf2, 0x9a, 0xec, 0x1e, 0x61, 0xfa, 0x92, 0x51, 0x66,
90
+ 0x53, 0x4e, 0xb1, 0x02, 0x81, 0x81, 0x00, 0xb5, 0xf9, 0x07, 0x67, 0xb1,
91
+ 0x2e, 0x3b, 0xfc, 0x83, 0x55, 0x2d, 0x8d, 0x0b, 0xd5, 0x22, 0xe0, 0x09,
92
+ 0x9f, 0xa8, 0x60, 0x38, 0xff, 0x08, 0x45, 0x01, 0xe0, 0x1c, 0xee, 0x16,
93
+ 0x63, 0x8c, 0x58, 0x2e, 0xfc, 0xd5, 0x8d, 0x6c, 0x81, 0x28, 0x7a, 0xbb,
94
+ 0x13, 0x75, 0x91, 0x47, 0x3e, 0x45, 0x7f, 0x6a, 0x99, 0x6f, 0x18, 0x16,
95
+ 0x7a, 0xce, 0xdd, 0xb1, 0x43, 0x9d, 0xca, 0xab, 0x65, 0x86, 0x0c, 0x8e,
96
+ 0x69, 0xa4, 0xa8, 0xb4, 0x30, 0x12, 0xe5, 0x66, 0xa1, 0xda, 0x27, 0x27,
97
+ 0x36, 0xa8, 0x64, 0x0a, 0xd7, 0xf7, 0xc0, 0x6a, 0x5e, 0x6b, 0x0b, 0x6c,
98
+ 0x06, 0xbd, 0x83, 0x72, 0x72, 0x5b, 0x1e, 0x74, 0x3f, 0x46, 0x8b, 0x5f,
99
+ 0xa2, 0xb3, 0x95, 0x11, 0xc9, 0x12, 0x1a, 0x03, 0xd3, 0x97, 0xd5, 0x04,
100
+ 0xd4, 0xd3, 0xa8, 0x21, 0x9d, 0x09, 0x34, 0x98, 0x98, 0x04, 0x79, 0x96,
101
+ 0xd7, 0xbe, 0x9d
102
102
  };
103
103
  unsigned int cert_key_der_len = 1191;
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/ruby
2
+ require_relative '../lib/opcua/client'
3
+ #require 'opcua/client'
4
+
5
+ ### username & pass in url (e.g. siemens)
6
+ # client = OPCUA::Client.new("opc.tcp://OpcUaClient:SUNRISE@localhost:4840")
7
+
8
+ client = OPCUA::Client.new("opc.tcp://localhost:4840")
9
+ client.debug = false
10
+ client.default_ns = 2
11
+
12
+ node = client.get '/KalimatC34/Tools/Tool3/testMethod'
13
+ node.call 'abcde', Time.now
14
+ client.disconnect
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/ruby
2
- #require_relative '../lib/opcua/client'
3
- require 'opcua/client'
2
+ require_relative '../lib/opcua/client'
3
+ #require 'opcua/client'
4
4
 
5
5
  ### username & pass in url (e.g. siemens)
6
6
  # client = OPCUA::Client.new("opc.tcp://OpcUaClient:SUNRISE@localhost:4840")
@@ -8,12 +8,12 @@ require 'opcua/client'
8
8
  client = OPCUA::Client.new("opc.tcp://localhost:4840")
9
9
  client.subscription_interval = 100 # default 500
10
10
 
11
- node = client.get 2, 874565491 # get node from nodeid
11
+ node = client.get 2, '/KalimatC34/Tools/Tool1/ToolNumber' # get node from nodeid
12
12
  node.on_change do |value,timestamp|
13
13
  p value
14
14
  end
15
15
 
16
16
  while true
17
17
  client.check_subscription
18
- sleep client.publishing_interval / 1000
18
+ sleep client.subscription_interval / 1000
19
19
  end
@@ -0,0 +1 @@
1
+ 24202
data/example/server.rb CHANGED
@@ -3,62 +3,60 @@ require_relative '../lib/opcua/server'
3
3
  #require 'opcua/server'
4
4
 
5
5
  Daemonite.new do
6
- on startup do
7
- @opts['server'] = OPCUA::Server.new
8
- @opts['server'].add_namespace "https://centurio.work/kelch"
6
+ on startup do |opts|
7
+ opts['server'] = OPCUA::Server.new
8
+ opts['server'].add_namespace "https://centurio.work/kelch"
9
9
 
10
- mt = @opts['server'].types.add_object_type(:MeasurementType).tap{ |t|
10
+ mt = opts['server'].types.add_object_type(:MeasurementType).tap{ |t|
11
11
  t.add_variable :SollWertX
12
12
  t.add_variable :SollWertY
13
13
  t.add_variable :SollWertZ
14
14
  }
15
- tt = @opts['server'].types.add_object_type(:ToolType).tap{ |t|
15
+ tt = opts['server'].types.add_object_type(:ToolType).tap{ |t|
16
16
  t.add_variable :SollWertX
17
17
  t.add_variable :SollWertY
18
18
  t.add_variable :SollWertZ
19
19
  t.add_variable :ToolNumber
20
20
  t.add_variable :DuploNumber
21
21
  t.add_variable :testValue1
22
- t.add_method :testMethod, test1: OPCUA::TYPES::STRING, test2: OPCUA::TYPES::DATETIME do |node, test1, test2, test4|
22
+ t.add_method :testMethod, test1: OPCUA::TYPES::STRING, test2: OPCUA::TYPES::DATETIME do |node, test1, test2|
23
23
  ns, nid = node.id
24
+ puts '-' * 10
24
25
  p nid
25
26
  p test1
26
27
  p test2
27
- p test4
28
- puts 'me'
29
- # do something
28
+ puts '-' * 10
30
29
  end
31
- t.add_object(:Measurements, @opts['server'].types.folder).tap{ |u|
30
+ t.add_object(:Measurements, opts['server'].types.folder).tap{ |u|
32
31
  u.add_object :M, mt, OPCUA::OPTIONAL
33
32
  }
34
33
  }
35
- pt = @opts['server'].types.add_object_type(:PresetterType).tap{ |t|
34
+ pt = opts['server'].types.add_object_type(:PresetterType).tap{ |t|
36
35
  t.add_variable :ManufacturerName
37
- t.add_object(:Tools, @opts['server'].types.folder).tap{ |u|
36
+ t.add_object(:Tools, opts['server'].types.folder).tap{ |u|
38
37
  u.add_object :Tool, tt, OPCUA::OPTIONAL
39
38
  }
40
39
  }
41
40
 
42
- tools = @opts['server'].objects.manifest(:KalimatC34, pt).find(:Tools)
41
+ tools = opts['server'].objects.manifest(:KalimatC34, pt).find(:Tools)
43
42
 
44
43
  t1 = tools.manifest(:Tool1,tt)
45
44
  t2 = tools.manifest(:Tool2,tt)
46
45
  t3 = tools.manifest(:Tool3,tt)
47
46
 
48
- @opts[:tn] = t1.find(:ToolNumber)
47
+ opts[:tn] = t1.find(:ToolNumber)
49
48
 
50
49
  measurments_t1 = t1.find(:Measurements)
51
50
  measurments_t1.manifest(:M1,mt)
52
51
  measurments_t1.manifest(:M2,mt)
53
-
54
52
  rescue => e
55
53
  puts e.message
56
54
  end
57
55
 
58
- run do
56
+ run do |opts|
59
57
  GC.start
60
- sleep @opts['server'].run
61
- @opts[:tn].value = Time.now
58
+ sleep opts['server'].run
59
+ opts[:tn].value = Time.now
62
60
  rescue => e
63
61
  puts e.message
64
62
  end
@@ -4,6 +4,8 @@
4
4
 
5
5
  VALUE mOPCUA = Qnil;
6
6
  VALUE cClient = Qnil;
7
+ VALUE cVarNode = Qnil;
8
+ VALUE cMethodNode = Qnil;
7
9
  VALUE cNode = Qnil;
8
10
 
9
11
  #include "../values.h"
@@ -15,7 +17,7 @@ static void node_free(node_struct *ns) { //{{{
15
17
  free(ns);
16
18
  }
17
19
  } //}}}
18
- static VALUE node_alloc(VALUE klass, client_struct *client, UA_NodeId nodeid) { //{{{
20
+ static node_struct * node_alloc(client_struct *client, UA_NodeId nodeid) { //{{{
19
21
  node_struct *ns;
20
22
  ns = (node_struct *)malloc(sizeof(node_struct));
21
23
  if (ns == NULL)
@@ -25,9 +27,13 @@ static VALUE node_alloc(VALUE klass, client_struct *client, UA_NodeId nodeid) {
25
27
  ns->id = nodeid;
26
28
  ns->on_change = Qnil;
27
29
 
28
- return Data_Wrap_Struct(klass, NULL, node_free, ns);
30
+ return ns;
31
+ } //}}}
32
+ static VALUE node_wrap(VALUE klass, node_struct *ns) { //{{{
33
+ return Data_Wrap_Struct(klass, NULL, node_free, ns);
29
34
  } //}}}
30
35
  /* ++ */
36
+
31
37
  static VALUE node_value(VALUE self) { //{{{
32
38
  node_struct *ns;
33
39
  Data_Get_Struct(self, node_struct, ns);
@@ -88,6 +94,7 @@ static VALUE client_alloc(VALUE self) { //{{{
88
94
  pss->subs = rb_ary_new();
89
95
  pss->subs_changed = false;
90
96
  pss->subscription_interval = 500;
97
+ pss->default_ns = 2;
91
98
 
92
99
  UA_CreateSubscriptionRequest_init(&pss->subscription_request);
93
100
  pss->subscription_request.requestedPublishingInterval = pss->subscription_interval;
@@ -97,10 +104,10 @@ static VALUE client_alloc(VALUE self) { //{{{
97
104
  pss->subscription_request.publishingEnabled = true;
98
105
  pss->subscription_request.priority = 0;
99
106
 
100
- return Data_Wrap_Struct(self, NULL, client_free, pss);
107
+ return Data_Wrap_Struct(self, NULL, client_free, pss);
101
108
  } //}}}
109
+ /* ++ */
102
110
 
103
- /* ++ */ //}}}
104
111
  static VALUE client_init(VALUE self,VALUE url,VALUE user,VALUE pass) { //{{{
105
112
  client_struct *pss;
106
113
  UA_StatusCode retval;
@@ -209,23 +216,54 @@ static VALUE client_init(VALUE self,VALUE url,VALUE user,VALUE pass) { //{{{
209
216
 
210
217
  return self;
211
218
  } //}}}
212
- static VALUE client_get(VALUE self,VALUE ns,VALUE id) { //{{{
219
+ static VALUE client_get(int argc, VALUE* argv, VALUE self) { //{{{
220
+ if (argc > 2 || argc < 1) { // there should only be 1 or 2 arguments
221
+ rb_raise(rb_eArgError, "wrong number of arguments");
222
+ }
223
+
213
224
  client_struct *pss;
214
225
  Data_Get_Struct(self, client_struct, pss);
215
226
  if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");
216
227
 
228
+ VALUE ns = UINT2NUM(pss->default_ns);
229
+ VALUE id;
230
+
231
+ if (argc == 1) {
232
+ id = argv[0];
233
+ } else {
234
+ ns = argv[0];
235
+ id = argv[1];
236
+ }
237
+
217
238
  if (NIL_P(ns) || TYPE(ns) != T_FIXNUM)
218
239
  rb_raise(rb_eTypeError, "ns is not a valid (numeric) namespace id");
240
+
241
+ node_struct *res;
219
242
  if (TYPE(id) == T_FIXNUM) {
220
- return node_alloc(cNode, pss, UA_NODEID_NUMERIC(NUM2INT(ns), NUM2INT(id)));
243
+ res = node_alloc(pss, UA_NODEID_NUMERIC(NUM2INT(ns), NUM2INT(id)));
221
244
  } else {
222
245
  VALUE str = rb_obj_as_string(id);
223
246
  if (NIL_P(str) || TYPE(str) != T_STRING)
224
247
  rb_raise(rb_eTypeError, "cannot convert url to string");
225
248
  char *nstr = (char *)StringValuePtr(str);
226
249
 
227
- return node_alloc(cNode, pss, UA_NODEID_STRING(NUM2INT(ns), nstr));
250
+ res = node_alloc(pss, UA_NODEID_STRING(NUM2INT(ns), nstr));
228
251
  }
252
+
253
+ UA_NodeClass nc;UA_NodeClass_init(&nc);
254
+ UA_Client_readNodeClassAttribute(pss->master, res->id, &nc);
255
+
256
+ VALUE node;
257
+ if (nc == UA_NODECLASS_VARIABLE) {
258
+ node = node_wrap(cVarNode,res);
259
+ } else if (nc == UA_NODECLASS_METHOD) {
260
+ node = node_wrap(cMethodNode,res);
261
+ } else {
262
+ node = node_wrap(cNode,res);
263
+ }
264
+ UA_NodeClass_clear(&nc);
265
+
266
+ return node;
229
267
  } //}}}
230
268
  static VALUE client_subscription_interval(VALUE self) { //{{{
231
269
  client_struct *pss;
@@ -245,6 +283,24 @@ static VALUE client_subscription_interval_set(VALUE self, VALUE val) { //{{{
245
283
  pss->subscription_request.requestedPublishingInterval = NUM2UINT(val);
246
284
  return self;
247
285
  } //}}}
286
+ static VALUE client_default_ns(VALUE self) { //{{{
287
+ client_struct *pss;
288
+ Data_Get_Struct(self, client_struct, pss);
289
+ if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");
290
+
291
+ return UINT2NUM(pss->default_ns);
292
+ } //}}}
293
+ static VALUE client_default_ns_set(VALUE self, VALUE val) { //{{{
294
+ client_struct *pss;
295
+ Data_Get_Struct(self, client_struct, pss);
296
+ if (!pss->started) rb_raise(rb_eRuntimeError, "Client disconnected.");
297
+
298
+ if (NIL_P(val) || TYPE(val) != T_FIXNUM)
299
+ rb_raise(rb_eTypeError, "subscription interval is not an integer");
300
+
301
+ pss->default_ns = NUM2UINT(val);
302
+ return self;
303
+ } //}}}
248
304
  static VALUE client_debug(VALUE self) { //{{{
249
305
  client_struct *pss;
250
306
  Data_Get_Struct(self, client_struct, pss);
@@ -267,6 +323,74 @@ static VALUE client_debug_set(VALUE self, VALUE val) { //{{{
267
323
  return self;
268
324
  } //}}}
269
325
 
326
+ static VALUE node_id(VALUE self) { //{{{
327
+ node_struct *ns;
328
+
329
+ Data_Get_Struct(self, node_struct, ns);
330
+
331
+ VALUE ret = rb_ary_new();
332
+
333
+ rb_ary_push(ret,UINT2NUM(ns->id.namespaceIndex));
334
+ if (ns->id.identifierType == UA_NODEIDTYPE_NUMERIC) {
335
+ VALUE id = UINT2NUM((UA_UInt32)(ns->id.identifier.numeric));
336
+ rb_ary_push(ret,id);
337
+ } else if (ns->id.identifierType == UA_NODEIDTYPE_STRING) {
338
+ rb_ary_push(ret,rb_str_new((const char *)ns->id.identifier.string.data,ns->id.identifier.string.length));
339
+ } else if (ns->id.identifierType == UA_NODEIDTYPE_BYTESTRING) {
340
+ rb_ary_push(ret,rb_str_new((const char *)ns->id.identifier.byteString.data,ns->id.identifier.byteString.length));
341
+ }
342
+ return ret;
343
+ } //}}}
344
+ static VALUE node_to_s(VALUE self) { //{{{
345
+ node_struct *ns;
346
+ VALUE ret;
347
+
348
+ Data_Get_Struct(self, node_struct, ns);
349
+
350
+ if (ns->id.identifierType == UA_NODEIDTYPE_NUMERIC) {
351
+ ret = rb_sprintf("ns=%d;n=%d", ns->id.namespaceIndex, ns->id.identifier.numeric);
352
+ } else if(ns->id.identifierType == UA_NODEIDTYPE_STRING) {
353
+ ret = rb_sprintf("ns=%d;s=%.*s", ns->id.namespaceIndex, (int)ns->id.identifier.string.length, ns->id.identifier.string.data);
354
+ } else {
355
+ ret = rb_sprintf("ns=%d;unsupported",ns->id.namespaceIndex);
356
+ }
357
+ return ret;
358
+ } //}}}
359
+
360
+ static VALUE node_call(int argc, VALUE* argv, VALUE self) {
361
+ node_struct *ns;
362
+
363
+ VALUE splat;
364
+ rb_scan_args(argc, argv, "*", &splat);
365
+
366
+ Data_Get_Struct(self, node_struct, ns);
367
+
368
+ UA_Variant inputArguments[RARRAY_LEN(splat)];
369
+ for (long i=0; i<RARRAY_LEN(splat); i++) {
370
+ value_to_variant(RARRAY_AREF(splat, i),&inputArguments[i]);
371
+ }
372
+
373
+ VALUE path = rb_str_new((const char *)ns->id.identifier.string.data,ns->id.identifier.string.length);
374
+ VALUE pat = rb_str_new2("\\/[a-z0-9A-Z]+\\/?$");
375
+ VALUE obj = rb_funcall(path,rb_intern("sub"),2,rb_reg_new_str(pat, 0),rb_str_new2(""));
376
+
377
+ UA_StatusCode retval = UA_Client_call(
378
+ ns->master->master,
379
+ UA_NODEID_STRING(ns->id.namespaceIndex,StringValuePtr(obj)),
380
+ ns->id,
381
+ RARRAY_LEN(splat),
382
+ (UA_Variant *)&inputArguments,
383
+ 0,
384
+ NULL
385
+ );
386
+
387
+ if(retval == UA_STATUSCODE_GOOD) {
388
+ return Qtrue;
389
+ } else {
390
+ return Qfalse;
391
+ }
392
+ }
393
+
270
394
  static void client_run_handler(UA_Client *client, UA_UInt32 subId, void *subContext, UA_UInt32 monId, void *monContext, UA_DataValue *value) { //{{{
271
395
  VALUE val = (VALUE)monContext;
272
396
 
@@ -340,21 +464,34 @@ static VALUE client_disconnect(VALUE self) { //{{{
340
464
  void Init_client(void) {
341
465
  mOPCUA = rb_define_module("OPCUA");
342
466
 
343
- cClient = rb_define_class_under(mOPCUA, "Client", rb_cObject);
344
- cNode = rb_define_class_under(mOPCUA, "cNode", rb_cObject);
467
+ cClient = rb_define_class_under(mOPCUA, "Client", rb_cObject);
468
+ cNode = rb_define_class_under(mOPCUA, "cNode", rb_cObject);
469
+ cMethodNode = rb_define_class_under(mOPCUA, "cMethodNode", rb_cObject);
470
+ cVarNode = rb_define_class_under(mOPCUA, "cVarNode", rb_cObject);
345
471
 
346
472
  Init_types();
347
473
 
348
474
  rb_define_alloc_func(cClient, client_alloc);
349
475
  rb_define_method(cClient, "initialize", client_init, 3);
350
476
  rb_define_method(cClient, "disconnect", client_disconnect, 0);
351
- rb_define_method(cClient, "get", client_get, 2);
477
+ rb_define_method(cClient, "get", client_get, -1);
352
478
  rb_define_method(cClient, "check_subscription", client_run, 0);
353
479
  rb_define_method(cClient, "subscription_interval", client_subscription_interval, 0);
354
480
  rb_define_method(cClient, "subscription_interval=", client_subscription_interval_set, 1);
481
+ rb_define_method(cClient, "default_ns", client_default_ns, 0);
482
+ rb_define_method(cClient, "default_ns=", client_default_ns_set, 1);
355
483
  rb_define_method(cClient, "debug", client_debug, 0);
356
484
  rb_define_method(cClient, "debug=", client_debug_set, 1);
357
485
 
358
- rb_define_method(cNode, "value", node_value, 0);
359
- rb_define_method(cNode, "on_change", node_on_change, 0);
486
+ rb_define_method(cNode, "to_s", node_to_s, 0);
487
+ rb_define_method(cNode, "id", node_id, 0);
488
+
489
+ rb_define_method(cMethodNode, "to_s", node_to_s, 0);
490
+ rb_define_method(cMethodNode, "id", node_id, 0);
491
+ rb_define_method(cMethodNode, "call", node_call, -1);
492
+
493
+ rb_define_method(cVarNode, "to_s", node_to_s, 0);
494
+ rb_define_method(cVarNode, "id", node_id, 0);
495
+ rb_define_method(cVarNode, "value", node_value, 0);
496
+ rb_define_method(cVarNode, "on_change", node_on_change, 0);
360
497
  }
@@ -15,6 +15,7 @@ typedef struct client_struct {
15
15
  bool debug;
16
16
  VALUE subs;
17
17
  bool subs_changed;
18
+ UA_UInt16 default_ns;
18
19
  } client_struct;
19
20
 
20
21
  typedef struct node_struct {
@@ -5,67 +5,13 @@ VALUE cServer = Qnil;
5
5
  VALUE cObjectsNode = Qnil;
6
6
  VALUE cTypesTopNode = Qnil;
7
7
  VALUE cTypesSubNode = Qnil;
8
- VALUE cLeafNode = Qnil;
8
+ VALUE cVarNode = Qnil;
9
+ VALUE cMethodNode = Qnil;
9
10
 
10
11
  #include "../values.h"
11
12
 
12
13
  int nodecounter = 2000;
13
14
 
14
- /* -- */
15
- static void set_node_to_value(node_struct *ns, VALUE value) { //{{{
16
- UA_Variant variant;
17
- if (rb_obj_is_kind_of(value,rb_cTime)) {
18
- UA_DateTime tmp = UA_DateTime_fromUnixTime(rb_time_timeval(value).tv_sec);
19
- UA_Variant_setScalar(&variant, &tmp, &UA_TYPES[UA_TYPES_DATETIME]);
20
- UA_Server_writeValue(ns->master->master, ns->id, variant);
21
- } else {
22
- switch (TYPE(value)) {
23
- case T_FALSE:
24
- {
25
- UA_Boolean tmp = false;
26
- UA_Variant_setScalar(&variant, &tmp, &UA_TYPES[UA_TYPES_BOOLEAN]);
27
- UA_Server_writeValue(ns->master->master, ns->id, variant);
28
- break;
29
- }
30
- case T_TRUE:
31
- {
32
- UA_Boolean tmp = true;
33
- UA_Variant_setScalar(&variant, &tmp, &UA_TYPES[UA_TYPES_BOOLEAN]);
34
- UA_Server_writeValue(ns->master->master, ns->id, variant);
35
- break;
36
- }
37
- case T_FLOAT:
38
- case T_FIXNUM:
39
- {
40
- UA_Double tmp = NUM2DBL(value);
41
- UA_Variant_setScalar(&variant, &tmp, &UA_TYPES[UA_TYPES_DOUBLE]);
42
- UA_Server_writeValue(ns->master->master, ns->id, variant);
43
- break;
44
- }
45
- case T_STRING:
46
- case T_SYMBOL:
47
- {
48
- VALUE str = rb_obj_as_string(value);
49
- if (NIL_P(str) || TYPE(str) != T_STRING)
50
- rb_raise(rb_eTypeError, "cannot convert obj to string");
51
- UA_String tmp = UA_STRING(StringValuePtr(str));
52
- UA_Variant_setScalar(&variant, &tmp, &UA_TYPES[UA_TYPES_STRING]);
53
- UA_Server_writeValue(ns->master->master, ns->id, variant);
54
- break;
55
- }
56
- case T_ARRAY:
57
- {
58
- // UA_UInt32 arrayDims = 0;
59
- // attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
60
- // attr.arrayDimensions = &arrayDims;
61
- // attr.arrayDimensionsSize = 1;
62
- // UA_Variant_setArray(&attr.value, UA_Array_new(10, &UA_TYPES[type]), 10, &UA_TYPES[type]);
63
- }
64
- }
65
- }
66
- } //}}}
67
- /* ++ */
68
-
69
15
  /* -- */
70
16
  static void node_free(node_struct *ns) { //{{{
71
17
  if (ns != NULL) {
@@ -123,6 +69,24 @@ static VALUE node_add_object_type(VALUE self, VALUE name) { //{{{
123
69
  return node_wrap(cTypesSubNode,node_alloc(ns->master,n));
124
70
  } //}}}
125
71
 
72
+ static VALUE node_id(VALUE self) { //{{{
73
+ node_struct *ns;
74
+
75
+ Data_Get_Struct(self, node_struct, ns);
76
+
77
+ VALUE ret = rb_ary_new();
78
+
79
+ rb_ary_push(ret,UINT2NUM(ns->id.namespaceIndex));
80
+ if (ns->id.identifierType == UA_NODEIDTYPE_NUMERIC) {
81
+ VALUE id = UINT2NUM((UA_UInt32)(ns->id.identifier.numeric));
82
+ rb_ary_push(ret,id);
83
+ } else if (ns->id.identifierType == UA_NODEIDTYPE_STRING) {
84
+ rb_ary_push(ret,rb_str_new((const char *)ns->id.identifier.string.data,ns->id.identifier.string.length));
85
+ } else if (ns->id.identifierType == UA_NODEIDTYPE_BYTESTRING) {
86
+ rb_ary_push(ret,rb_str_new((const char *)ns->id.identifier.byteString.data,ns->id.identifier.byteString.length));
87
+ }
88
+ return ret;
89
+ } //}}}
126
90
  static VALUE node_to_s(VALUE self) { //{{{
127
91
  node_struct *ns;
128
92
  VALUE ret;
@@ -138,7 +102,8 @@ static VALUE node_to_s(VALUE self) { //{{{
138
102
  }
139
103
  return ret;
140
104
  } //}}}
141
- static UA_StatusCode node_add_method_callback(
105
+
106
+ static UA_StatusCode node_add_method_callback( //{{{
142
107
  UA_Server *server,
143
108
  const UA_NodeId *sessionId, void *sessionContext,
144
109
  const UA_NodeId *methodId, void *methodContext,
@@ -165,7 +130,7 @@ static UA_StatusCode node_add_method_callback(
165
130
  rb_proc_call(me->method,args);
166
131
 
167
132
  return UA_STATUSCODE_GOOD;
168
- }
133
+ } //}}}
169
134
  static UA_NodeId node_add_method_ua(UA_NodeId n, UA_LocalizedText dn, UA_QualifiedName qn, node_struct *parent,size_t inputArgumentsSize,const UA_Argument *inputArguments, VALUE blk) { //{{{
170
135
  UA_MethodAttributes mnAttr = UA_MethodAttributes_default;
171
136
  mnAttr.displayName = dn;
@@ -314,7 +279,7 @@ static VALUE node_add_variable_wrap(int argc, VALUE* argv, VALUE self, UA_Byte a
314
279
  rb_raise(rb_eTypeError, "cannot convert obj to string");
315
280
  char *nstr = (char *)StringValuePtr(str);
316
281
 
317
- return node_wrap(cLeafNode,node_alloc(parent->master,node_add_variable_ua_simple(type,nstr,parent,argv[1],accesslevelmask,numeric)));
282
+ return node_wrap(cVarNode,node_alloc(parent->master,node_add_variable_ua_simple(type,nstr,parent,argv[1],accesslevelmask,numeric)));
318
283
  } //}}}
319
284
  static VALUE node_add_variable(int argc, VALUE* argv, VALUE self) { //{{{
320
285
  return node_add_variable_wrap(argc,argv,self,UA_ACCESSLEVELMASK_READ,true);
@@ -585,14 +550,33 @@ static VALUE node_find(VALUE self, VALUE qname) { //{{{
585
550
  UA_NodeId ret;UA_NodeId_init(&ret);
586
551
  UA_NodeId_copy(&bpr.targets[0].targetId.nodeId,&ret);
587
552
  UA_BrowsePathResult_clear(&bpr);
588
- return node_wrap(CLASS_OF(self),node_alloc(ns->master,ret));
553
+
554
+ UA_NodeClass nc;UA_NodeClass_init(&nc);
555
+ UA_Server_readNodeClass(ns->master->master, ret, &nc);
556
+
557
+ VALUE node;
558
+
559
+ if (nc == UA_NODECLASS_VARIABLE) {
560
+ node = node_wrap(cVarNode,node_alloc(ns->master,ret));
561
+ } else if (nc == UA_NODECLASS_METHOD) {
562
+ node = node_wrap(cMethodNode,node_alloc(ns->master,ret));
563
+ } else {
564
+ node = node_wrap(cObjectsNode,node_alloc(ns->master,ret));
565
+ }
566
+ UA_NodeClass_clear(&nc);
567
+
568
+ return node;
589
569
  }
590
570
  } //}}}
591
571
 
592
572
  static VALUE node_value_set(VALUE self, VALUE value) { //{{{
593
573
  node_struct *ns;
594
574
  Data_Get_Struct(self, node_struct, ns);
595
- set_node_to_value(ns,value);
575
+
576
+ UA_Variant variant;
577
+ if (value_to_variant(value,&variant)) {
578
+ UA_Server_writeValue(ns->master->master, ns->id, variant);
579
+ }
596
580
  return self;
597
581
  } //}}}
598
582
  static VALUE node_value(VALUE self) { //{{{
@@ -613,24 +597,6 @@ static VALUE node_value(VALUE self) { //{{{
613
597
  UA_Variant_clear(&value);
614
598
  return ret;
615
599
  } //}}}
616
- static VALUE node_id(VALUE self) { //{{{
617
- node_struct *ns;
618
-
619
- Data_Get_Struct(self, node_struct, ns);
620
-
621
- VALUE ret = rb_ary_new();
622
-
623
- rb_ary_push(ret,UINT2NUM(ns->id.namespaceIndex));
624
- if (ns->id.identifierType == UA_NODEIDTYPE_NUMERIC) {
625
- VALUE id = UINT2NUM((UA_UInt32)(ns->id.identifier.numeric));
626
- rb_ary_push(ret,id);
627
- } else if (ns->id.identifierType == UA_NODEIDTYPE_STRING) {
628
- rb_ary_push(ret,rb_str_new((const char *)ns->id.identifier.string.data,ns->id.identifier.string.length));
629
- } else if (ns->id.identifierType == UA_NODEIDTYPE_BYTESTRING) {
630
- rb_ary_push(ret,rb_str_new((const char *)ns->id.identifier.byteString.data,ns->id.identifier.byteString.length));
631
- }
632
- return ret;
633
- } //}}}
634
600
 
635
601
  /* -- */
636
602
  static void server_free(server_struct *pss) { //{{{
@@ -734,7 +700,8 @@ void Init_server(void) {
734
700
  cObjectsNode = rb_define_class_under(mOPCUA, "cObjectsNode", rb_cObject);
735
701
  cTypesTopNode = rb_define_class_under(mOPCUA, "cTypesTopNode", rb_cObject);
736
702
  cTypesSubNode = rb_define_class_under(mOPCUA, "cTypesSubNode", rb_cObject);
737
- cLeafNode = rb_define_class_under(mOPCUA, "cLeafNode", rb_cObject);
703
+ cVarNode = rb_define_class_under(mOPCUA, "cVarNode", rb_cObject);
704
+ cMethodNode = rb_define_class_under(mOPCUA, "cMethodNode", rb_cObject);
738
705
 
739
706
  rb_define_alloc_func(cServer, server_alloc);
740
707
  rb_define_method(cServer, "initialize", server_init, 0);
@@ -759,11 +726,12 @@ void Init_server(void) {
759
726
  rb_define_method(cObjectsNode, "find", node_find, 1);
760
727
  rb_define_method(cObjectsNode, "to_s", node_to_s, 0);
761
728
  rb_define_method(cObjectsNode, "id", node_id, 0);
762
- rb_define_method(cObjectsNode, "value", node_value, 0);
763
- rb_define_method(cObjectsNode, "value=", node_value_set, 1);
764
729
 
765
- rb_define_method(cLeafNode, "to_s", node_to_s, 0);
766
- rb_define_method(cLeafNode, "id", node_id, 0);
767
- rb_define_method(cLeafNode, "value", node_value, 0);
768
- rb_define_method(cLeafNode, "value=", node_value_set, 1);
730
+ rb_define_method(cVarNode, "to_s", node_to_s, 0);
731
+ rb_define_method(cVarNode, "id", node_id, 0);
732
+ rb_define_method(cVarNode, "value", node_value, 0);
733
+ rb_define_method(cVarNode, "value=", node_value_set, 1);
734
+
735
+ rb_define_method(cMethodNode, "to_s", node_to_s, 0);
736
+ rb_define_method(cMethodNode, "id", node_id, 0);
769
737
  }
data/ext/opcua/values.h CHANGED
@@ -1,6 +1,62 @@
1
1
  /* -- */
2
2
  VALUE mTYPES = Qnil;
3
3
 
4
+ /* -- */
5
+ static bool value_to_variant(VALUE value, UA_Variant *variant) { //{{{
6
+ bool done = false;
7
+ if (rb_obj_is_kind_of(value,rb_cTime)) {
8
+ UA_DateTime tmp = UA_DateTime_fromUnixTime(rb_time_timeval(value).tv_sec);
9
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_DATETIME]);
10
+ done = true;
11
+ } else {
12
+ switch (TYPE(value)) {
13
+ case T_FALSE:
14
+ {
15
+ UA_Boolean tmp = false;
16
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_BOOLEAN]);
17
+ done = true;
18
+ break;
19
+ }
20
+ case T_TRUE:
21
+ {
22
+ UA_Boolean tmp = true;
23
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_BOOLEAN]);
24
+ done = true;
25
+ break;
26
+ }
27
+ case T_FLOAT:
28
+ case T_FIXNUM:
29
+ {
30
+ UA_Double tmp = NUM2DBL(value);
31
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_DOUBLE]);
32
+ done = true;
33
+ break;
34
+ }
35
+ case T_STRING:
36
+ case T_SYMBOL:
37
+ {
38
+ VALUE str = rb_obj_as_string(value);
39
+ if (NIL_P(str) || TYPE(str) != T_STRING)
40
+ rb_raise(rb_eTypeError, "cannot convert obj to string");
41
+ UA_String tmp = UA_STRING(StringValuePtr(str));
42
+ UA_Variant_setScalarCopy(variant, &tmp, &UA_TYPES[UA_TYPES_STRING]);
43
+ done = true;
44
+ break;
45
+ }
46
+ case T_ARRAY:
47
+ {
48
+ // UA_UInt32 arrayDims = 0;
49
+ // attr.valueRank = UA_VALUERANK_ONE_DIMENSION;
50
+ // attr.arrayDimensions = &arrayDims;
51
+ // attr.arrayDimensionsSize = 1;
52
+ // UA_Variant_setArray(&attr.value, UA_Array_new(10, &UA_TYPES[type]), 10, &UA_TYPES[type]);
53
+ }
54
+ }
55
+ }
56
+ return done;
57
+ } //}}}
58
+ /* ++ */
59
+
4
60
  static void Init_types() {/*{{{*/
5
61
  mTYPES = rb_define_module_under(mOPCUA,"TYPES");
6
62
  rb_define_const(mTYPES, "DATETIME", INT2NUM(UA_TYPES_DATETIME ));
data/opcua.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "opcua"
3
- s.version = "0.9"
3
+ s.version = "0.10"
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."
@@ -13,14 +13,14 @@ Gem::Specification.new do |s|
13
13
  s.extra_rdoc_files = ['README.md']
14
14
  s.bindir = 'tools'
15
15
 
16
- s.required_ruby_version = '>=2.3.0'
16
+ s.required_ruby_version = '>=2.5.0'
17
17
 
18
18
  s.authors = ['Juergen eTM Mangler','Florian Pauker']
19
19
 
20
20
  s.email = 'juergen.mangler@gmail.com'
21
21
  s.homepage = 'https://github.com/etm/opcua-smart'
22
22
 
23
- s.add_runtime_dependency 'daemonite', '~> 0', '>= 0.5'
23
+ s.add_runtime_dependency 'daemonite', '~> 0', '>= 0.5.4'
24
24
  s.add_development_dependency 'rake', '~> 12'
25
25
  s.add_development_dependency 'rake-compiler', '~> 1.0'
26
26
  end
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.9'
4
+ version: '0.10'
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-05-27 00:00:00.000000000 Z
12
+ date: 2019-05-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: daemonite
@@ -20,7 +20,7 @@ dependencies:
20
20
  version: '0'
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: '0.5'
23
+ version: 0.5.4
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -30,7 +30,7 @@ dependencies:
30
30
  version: '0'
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: 0.5.4
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: rake
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -73,8 +73,10 @@ files:
73
73
  - Rakefile
74
74
  - cert/cert.h
75
75
  - cert/cert_key.h
76
- - example/client.rb
76
+ - example/client_method.rb
77
+ - example/client_subscription.rb
77
78
  - example/kelch.KMT
79
+ - example/server.pid
78
80
  - example/server.rb
79
81
  - example/test.rb
80
82
  - ext/opcua/client/client.c
@@ -101,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
103
  requirements:
102
104
  - - ">="
103
105
  - !ruby/object:Gem::Version
104
- version: 2.3.0
106
+ version: 2.5.0
105
107
  required_rubygems_version: !ruby/object:Gem::Requirement
106
108
  requirements:
107
109
  - - ">="