opcua 0.9 → 0.10

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