ua_transport.c 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. #include <stdio.h>
  2. #include "ua_transport.h"
  3. #include "ua_namespace_0.h" // for the vtable UA_
  4. UA_TYPE_DEFAULT(UA_MessageType)
  5. UA_Int32 UA_MessageType_calcSize(UA_MessageType const *ptr) {
  6. if(ptr == UA_NULL) return sizeof(UA_MessageType); return 0
  7. + 3 * sizeof(UA_Byte);
  8. }
  9. UA_Int32 UA_MessageType_encodeBinary(UA_MessageType const *src, UA_ByteString *dst, UA_UInt32 *offset) {
  10. UA_Int32 retval = UA_SUCCESS;
  11. UA_Byte tmpBuf[3];
  12. tmpBuf[0] = (UA_Byte)((((UA_Int32)*src) >> 16) );
  13. tmpBuf[1] = (UA_Byte)((((UA_Int32)*src) >> 8));
  14. tmpBuf[2] = (UA_Byte)(((UA_Int32)*src));
  15. retval |= UA_Byte_encodeBinary(&(tmpBuf[0]), dst, offset);
  16. retval |= UA_Byte_encodeBinary(&(tmpBuf[1]), dst, offset);
  17. retval |= UA_Byte_encodeBinary(&(tmpBuf[2]), dst, offset);
  18. return retval;
  19. }
  20. UA_Int32 UA_MessageType_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset, UA_MessageType *dst) {
  21. UA_Int32 retval = UA_SUCCESS;
  22. UA_Byte tmpBuf[3];
  23. retval |= UA_Byte_decodeBinary(src, offset, &(tmpBuf[0])); //messageType to Byte representation
  24. retval |= UA_Byte_decodeBinary(src, offset, &(tmpBuf[1]));
  25. retval |= UA_Byte_decodeBinary(src, offset, &(tmpBuf[2]));
  26. *dst = (UA_MessageType)((UA_Int32)(tmpBuf[0]<<16) + (UA_Int32)(tmpBuf[1]<<8) + (UA_Int32)(tmpBuf[2]));
  27. return retval;
  28. }
  29. void UA_MessageType_printf(char *label, UA_MessageType *p) {
  30. UA_Byte *b = (UA_Byte *)p;
  31. printf("%s{%c%c%c}\n", label, b[2], b[1], b[0]);
  32. }
  33. UA_Int32 UA_OPCUATcpMessageHeader_calcSizeBinary(UA_OPCUATcpMessageHeader const *ptr) {
  34. if(ptr == UA_NULL) return sizeof(UA_OPCUATcpMessageHeader);
  35. return 0
  36. + 3 // messageType
  37. + sizeof(UA_Byte) // isFinal
  38. + sizeof(UA_UInt32) // messageSize
  39. ;
  40. }
  41. UA_Int32 UA_OPCUATcpMessageHeader_encodeBinary(UA_OPCUATcpMessageHeader const *src, UA_ByteString *dst,
  42. UA_UInt32 *offset) {
  43. UA_Int32 retval = UA_SUCCESS;
  44. retval |= UA_MessageType_encodeBinary(&src->messageType, dst, offset);
  45. retval |= UA_Byte_encodeBinary(&src->isFinal, dst, offset);
  46. retval |= UA_UInt32_encodeBinary(&src->messageSize, dst, offset);
  47. return retval;
  48. }
  49. UA_Int32 UA_OPCUATcpMessageHeader_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  50. UA_OPCUATcpMessageHeader *dst) {
  51. UA_Int32 retval = UA_SUCCESS;
  52. UA_OPCUATcpMessageHeader_init(dst);
  53. CHECKED_DECODE(UA_MessageType_decodeBinary(src, offset,
  54. &dst->messageType), UA_OPCUATcpMessageHeader_deleteMembers(dst));
  55. CHECKED_DECODE(UA_Byte_decodeBinary(src, offset,
  56. &dst->isFinal), UA_OPCUATcpMessageHeader_deleteMembers(dst));
  57. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  58. &dst->messageSize), UA_OPCUATcpMessageHeader_deleteMembers(dst));
  59. return retval;
  60. }
  61. UA_Int32 UA_OPCUATcpMessageHeader_delete(UA_OPCUATcpMessageHeader *p) {
  62. UA_Int32 retval = UA_SUCCESS;
  63. retval |= UA_OPCUATcpMessageHeader_deleteMembers(p);
  64. retval |= UA_free(p);
  65. return retval;
  66. }
  67. UA_Int32 UA_OPCUATcpMessageHeader_deleteMembers(UA_OPCUATcpMessageHeader *p) {
  68. UA_Int32 retval = UA_SUCCESS;
  69. return retval;
  70. }
  71. UA_Int32 UA_OPCUATcpMessageHeader_init(UA_OPCUATcpMessageHeader *p) {
  72. UA_Int32 retval = UA_SUCCESS;
  73. retval |= UA_Byte_init(&p->isFinal);
  74. retval |= UA_UInt32_init(&p->messageSize);
  75. return retval;
  76. }
  77. UA_TYPE_NEW_DEFAULT(UA_OPCUATcpMessageHeader)
  78. UA_Int32 UA_OPCUATcpMessageHeader_copy(const UA_OPCUATcpMessageHeader *src, UA_OPCUATcpMessageHeader *dst) {
  79. UA_Int32 retval = UA_SUCCESS;
  80. if(src == UA_NULL || dst == UA_NULL)
  81. return UA_ERROR;
  82. memcpy(dst, src, sizeof(UA_OPCUATcpMessageHeader));
  83. return retval;
  84. }
  85. UA_Int32 UA_OPCUATcpHelloMessage_calcSizeBinary(UA_OPCUATcpHelloMessage const *ptr) {
  86. if(ptr == UA_NULL) return sizeof(UA_OPCUATcpHelloMessage);
  87. return 0
  88. + sizeof(UA_UInt32) // protocolVersion
  89. + sizeof(UA_UInt32) // receiveBufferSize
  90. + sizeof(UA_UInt32) // sendBufferSize
  91. + sizeof(UA_UInt32) // maxMessageSize
  92. + sizeof(UA_UInt32) // maxChunkCount
  93. + UA_String_calcSizeBinary(&ptr->endpointUrl)
  94. ;
  95. }
  96. UA_Int32 UA_OPCUATcpHelloMessage_encodeBinary(UA_OPCUATcpHelloMessage const *src, UA_ByteString *dst,
  97. UA_UInt32 *offset) {
  98. UA_Int32 retval = UA_SUCCESS;
  99. retval |= UA_UInt32_encodeBinary(&src->protocolVersion, dst, offset);
  100. retval |= UA_UInt32_encodeBinary(&src->receiveBufferSize, dst, offset);
  101. retval |= UA_UInt32_encodeBinary(&src->sendBufferSize, dst, offset);
  102. retval |= UA_UInt32_encodeBinary(&src->maxMessageSize, dst, offset);
  103. retval |= UA_UInt32_encodeBinary(&src->maxChunkCount, dst, offset);
  104. retval |= UA_String_encodeBinary(&src->endpointUrl, dst, offset);
  105. return retval;
  106. }
  107. UA_Int32 UA_OPCUATcpHelloMessage_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  108. UA_OPCUATcpHelloMessage *dst) {
  109. UA_Int32 retval = UA_SUCCESS;
  110. UA_OPCUATcpHelloMessage_init(dst);
  111. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  112. &dst->protocolVersion), UA_OPCUATcpHelloMessage_deleteMembers(dst));
  113. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  114. &dst->receiveBufferSize), UA_OPCUATcpHelloMessage_deleteMembers(dst));
  115. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  116. &dst->sendBufferSize), UA_OPCUATcpHelloMessage_deleteMembers(dst));
  117. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  118. &dst->maxMessageSize), UA_OPCUATcpHelloMessage_deleteMembers(dst));
  119. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  120. &dst->maxChunkCount), UA_OPCUATcpHelloMessage_deleteMembers(dst));
  121. CHECKED_DECODE(UA_String_decodeBinary(src, offset,
  122. &dst->endpointUrl), UA_OPCUATcpHelloMessage_deleteMembers(dst));
  123. return retval;
  124. }
  125. UA_Int32 UA_OPCUATcpHelloMessage_delete(UA_OPCUATcpHelloMessage *p) {
  126. UA_Int32 retval = UA_SUCCESS;
  127. retval |= UA_OPCUATcpHelloMessage_deleteMembers(p);
  128. retval |= UA_free(p);
  129. return retval;
  130. }
  131. UA_Int32 UA_OPCUATcpHelloMessage_deleteMembers(UA_OPCUATcpHelloMessage *p) {
  132. UA_Int32 retval = UA_SUCCESS;
  133. retval |= UA_String_deleteMembers(&p->endpointUrl);
  134. return retval;
  135. }
  136. UA_Int32 UA_OPCUATcpHelloMessage_init(UA_OPCUATcpHelloMessage *p) {
  137. UA_Int32 retval = UA_SUCCESS;
  138. retval |= UA_UInt32_init(&p->protocolVersion);
  139. retval |= UA_UInt32_init(&p->receiveBufferSize);
  140. retval |= UA_UInt32_init(&p->sendBufferSize);
  141. retval |= UA_UInt32_init(&p->maxMessageSize);
  142. retval |= UA_UInt32_init(&p->maxChunkCount);
  143. retval |= UA_String_init(&p->endpointUrl);
  144. return retval;
  145. }
  146. UA_TYPE_NEW_DEFAULT(UA_OPCUATcpHelloMessage)
  147. UA_Int32 UA_OPCUATcpHelloMessage_copy(const UA_OPCUATcpHelloMessage *src, UA_OPCUATcpHelloMessage *dst) {
  148. UA_Int32 retval = UA_SUCCESS;
  149. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  150. memcpy(dst, src, sizeof(UA_OPCUATcpHelloMessage));
  151. retval |= UA_String_copy(&src->endpointUrl, &dst->endpointUrl);
  152. return retval;
  153. }
  154. UA_Int32 UA_OPCUATcpAcknowledgeMessage_calcSizeBinary(UA_OPCUATcpAcknowledgeMessage const *ptr) {
  155. if(ptr == UA_NULL) return sizeof(UA_OPCUATcpAcknowledgeMessage);
  156. return 0
  157. + sizeof(UA_UInt32) // protocolVersion
  158. + sizeof(UA_UInt32) // receiveBufferSize
  159. + sizeof(UA_UInt32) // sendBufferSize
  160. + sizeof(UA_UInt32) // maxMessageSize
  161. + sizeof(UA_UInt32) // maxChunkCount
  162. ;
  163. }
  164. UA_Int32 UA_OPCUATcpAcknowledgeMessage_encodeBinary(UA_OPCUATcpAcknowledgeMessage const *src,
  165. UA_ByteString *dst,
  166. UA_UInt32 *offset) {
  167. UA_Int32 retval = UA_SUCCESS;
  168. retval |= UA_UInt32_encodeBinary(&src->protocolVersion, dst, offset);
  169. retval |= UA_UInt32_encodeBinary(&src->receiveBufferSize, dst, offset);
  170. retval |= UA_UInt32_encodeBinary(&src->sendBufferSize, dst, offset);
  171. retval |= UA_UInt32_encodeBinary(&src->maxMessageSize, dst, offset);
  172. retval |= UA_UInt32_encodeBinary(&src->maxChunkCount, dst, offset);
  173. return retval;
  174. }
  175. UA_Int32 UA_OPCUATcpAcknowledgeMessage_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  176. UA_OPCUATcpAcknowledgeMessage *dst) {
  177. UA_Int32 retval = UA_SUCCESS;
  178. UA_OPCUATcpAcknowledgeMessage_init(dst);
  179. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  180. &dst->protocolVersion),
  181. UA_OPCUATcpAcknowledgeMessage_deleteMembers(dst));
  182. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  183. &dst->receiveBufferSize),
  184. UA_OPCUATcpAcknowledgeMessage_deleteMembers(dst));
  185. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  186. &dst->sendBufferSize),
  187. UA_OPCUATcpAcknowledgeMessage_deleteMembers(dst));
  188. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  189. &dst->maxMessageSize),
  190. UA_OPCUATcpAcknowledgeMessage_deleteMembers(dst));
  191. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  192. &dst->maxChunkCount),
  193. UA_OPCUATcpAcknowledgeMessage_deleteMembers(dst));
  194. return retval;
  195. }
  196. UA_Int32 UA_OPCUATcpAcknowledgeMessage_delete(UA_OPCUATcpAcknowledgeMessage *p) {
  197. UA_Int32 retval = UA_SUCCESS;
  198. retval |= UA_OPCUATcpAcknowledgeMessage_deleteMembers(p);
  199. retval |= UA_free(p);
  200. return retval;
  201. }
  202. UA_Int32 UA_OPCUATcpAcknowledgeMessage_deleteMembers(UA_OPCUATcpAcknowledgeMessage *p) {
  203. UA_Int32 retval = UA_SUCCESS;
  204. return retval;
  205. }
  206. UA_Int32 UA_OPCUATcpAcknowledgeMessage_init(UA_OPCUATcpAcknowledgeMessage *p) {
  207. UA_Int32 retval = UA_SUCCESS;
  208. retval |= UA_UInt32_init(&p->protocolVersion);
  209. retval |= UA_UInt32_init(&p->receiveBufferSize);
  210. retval |= UA_UInt32_init(&p->sendBufferSize);
  211. retval |= UA_UInt32_init(&p->maxMessageSize);
  212. retval |= UA_UInt32_init(&p->maxChunkCount);
  213. return retval;
  214. }
  215. UA_TYPE_NEW_DEFAULT(UA_OPCUATcpAcknowledgeMessage)
  216. UA_Int32 UA_OPCUATcpAcknowledgeMessage_copy(const UA_OPCUATcpAcknowledgeMessage *src,
  217. UA_OPCUATcpAcknowledgeMessage *dst) {
  218. UA_Int32 retval = UA_SUCCESS;
  219. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  220. memcpy(dst, src, sizeof(UA_OPCUATcpAcknowledgeMessage));
  221. return retval;
  222. }
  223. UA_Int32 UA_SecureConversationMessageHeader_calcSizeBinary(UA_SecureConversationMessageHeader const *ptr) {
  224. if(ptr == UA_NULL) return sizeof(UA_SecureConversationMessageHeader);
  225. return 0
  226. + sizeof(UA_OPCUATcpMessageHeader) // messageHeader CHECK: delete this or use in binary_secure.c
  227. + sizeof(UA_UInt32) // secureChannelId
  228. ;
  229. }
  230. UA_Int32 UA_SecureConversationMessageHeader_encodeBinary(UA_SecureConversationMessageHeader const *src,
  231. UA_ByteString *dst,
  232. UA_UInt32 *offset) {
  233. UA_Int32 retval = UA_SUCCESS;
  234. retval |= UA_OPCUATcpMessageHeader_encodeBinary(&src->messageHeader, dst, offset);
  235. retval |= UA_UInt32_encodeBinary(&src->secureChannelId, dst, offset);
  236. return retval;
  237. }
  238. UA_Int32 UA_SecureConversationMessageHeader_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  239. UA_SecureConversationMessageHeader *dst) {
  240. UA_Int32 retval = UA_SUCCESS;
  241. UA_SecureConversationMessageHeader_init(dst);
  242. CHECKED_DECODE(UA_OPCUATcpMessageHeader_decodeBinary(src, offset,
  243. &dst->messageHeader),
  244. UA_SecureConversationMessageHeader_deleteMembers(dst));
  245. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  246. &dst->secureChannelId),
  247. UA_SecureConversationMessageHeader_deleteMembers(dst));
  248. return retval;
  249. }
  250. UA_Int32 UA_SecureConversationMessageHeader_delete(UA_SecureConversationMessageHeader *p) {
  251. UA_Int32 retval = UA_SUCCESS;
  252. retval |= UA_SecureConversationMessageHeader_deleteMembers(p);
  253. retval |= UA_free(p);
  254. return retval;
  255. }
  256. UA_Int32 UA_SecureConversationMessageHeader_deleteMembers(UA_SecureConversationMessageHeader *p) {
  257. UA_Int32 retval = UA_SUCCESS;
  258. return retval;
  259. }
  260. UA_Int32 UA_SecureConversationMessageHeader_init(UA_SecureConversationMessageHeader *p) {
  261. UA_Int32 retval = UA_SUCCESS;
  262. retval |= UA_OPCUATcpMessageHeader_init(&p->messageHeader);
  263. retval |= UA_UInt32_init(&p->secureChannelId);
  264. return retval;
  265. }
  266. UA_TYPE_NEW_DEFAULT(UA_SecureConversationMessageHeader)
  267. UA_Int32 UA_SecureConversationMessageHeader_copy(const UA_SecureConversationMessageHeader *src,
  268. UA_SecureConversationMessageHeader *dst) {
  269. UA_Int32 retval = UA_SUCCESS;
  270. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  271. memcpy(dst, src, sizeof(UA_SecureConversationMessageHeader));
  272. return retval;
  273. }
  274. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_calcSizeBinary(UA_AsymmetricAlgorithmSecurityHeader const *ptr)
  275. {
  276. if(ptr == UA_NULL) return sizeof(UA_AsymmetricAlgorithmSecurityHeader);
  277. return 0
  278. + UA_ByteString_calcSizeBinary(&ptr->securityPolicyUri)
  279. + UA_ByteString_calcSizeBinary(&ptr->senderCertificate)
  280. + UA_ByteString_calcSizeBinary(&ptr->receiverCertificateThumbprint)
  281. ;
  282. }
  283. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_encodeBinary(UA_AsymmetricAlgorithmSecurityHeader const *src,
  284. UA_ByteString *dst,
  285. UA_UInt32 *offset)
  286. {
  287. UA_Int32 retval = UA_SUCCESS;
  288. retval |= UA_ByteString_encodeBinary(&src->securityPolicyUri, dst, offset);
  289. retval |= UA_ByteString_encodeBinary(&src->senderCertificate, dst, offset);
  290. retval |= UA_ByteString_encodeBinary(&src->receiverCertificateThumbprint, dst, offset);
  291. return retval;
  292. }
  293. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  294. UA_AsymmetricAlgorithmSecurityHeader *dst) {
  295. UA_Int32 retval = UA_SUCCESS;
  296. UA_AsymmetricAlgorithmSecurityHeader_init(dst);
  297. CHECKED_DECODE(UA_ByteString_decodeBinary(src, offset,
  298. &dst->securityPolicyUri),
  299. UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(dst));
  300. CHECKED_DECODE(UA_ByteString_decodeBinary(src, offset,
  301. &dst->senderCertificate),
  302. UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(dst));
  303. CHECKED_DECODE(UA_ByteString_decodeBinary(src, offset,
  304. &dst->receiverCertificateThumbprint),
  305. UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(dst));
  306. return retval;
  307. }
  308. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_delete(UA_AsymmetricAlgorithmSecurityHeader *p) {
  309. UA_Int32 retval = UA_SUCCESS;
  310. retval |= UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(p);
  311. retval |= UA_free(p);
  312. return retval;
  313. }
  314. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(UA_AsymmetricAlgorithmSecurityHeader *p) {
  315. UA_Int32 retval = UA_SUCCESS;
  316. retval |= UA_ByteString_deleteMembers(&p->securityPolicyUri);
  317. retval |= UA_ByteString_deleteMembers(&p->senderCertificate);
  318. retval |= UA_ByteString_deleteMembers(&p->receiverCertificateThumbprint);
  319. return retval;
  320. }
  321. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_init(UA_AsymmetricAlgorithmSecurityHeader *p) {
  322. UA_Int32 retval = UA_SUCCESS;
  323. retval |= UA_ByteString_init(&p->securityPolicyUri);
  324. retval |= UA_ByteString_init(&p->senderCertificate);
  325. retval |= UA_ByteString_init(&p->receiverCertificateThumbprint);
  326. return retval;
  327. }
  328. UA_TYPE_NEW_DEFAULT(UA_AsymmetricAlgorithmSecurityHeader)
  329. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_copy(const UA_AsymmetricAlgorithmSecurityHeader *src,
  330. UA_AsymmetricAlgorithmSecurityHeader *dst) {
  331. UA_Int32 retval = UA_SUCCESS;
  332. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  333. memcpy(dst, src, sizeof(UA_AsymmetricAlgorithmSecurityHeader));
  334. retval |= UA_ByteString_copy(&src->securityPolicyUri, &dst->securityPolicyUri);
  335. retval |= UA_ByteString_copy(&src->senderCertificate, &dst->senderCertificate);
  336. retval |= UA_ByteString_copy(&src->receiverCertificateThumbprint, &dst->receiverCertificateThumbprint);
  337. return retval;
  338. }
  339. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_calcSizeBinary(UA_SymmetricAlgorithmSecurityHeader const *ptr) {
  340. if(ptr == UA_NULL) return sizeof(UA_SymmetricAlgorithmSecurityHeader);
  341. return 0
  342. + sizeof(UA_UInt32) // tokenId
  343. ;
  344. }
  345. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_encodeBinary(UA_SymmetricAlgorithmSecurityHeader const *src,
  346. UA_ByteString *dst,
  347. UA_UInt32 *offset)
  348. {
  349. UA_Int32 retval = UA_SUCCESS;
  350. retval |= UA_UInt32_encodeBinary(&src->tokenId, dst, offset);
  351. return retval;
  352. }
  353. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  354. UA_SymmetricAlgorithmSecurityHeader *dst) {
  355. UA_Int32 retval = UA_SUCCESS;
  356. UA_SymmetricAlgorithmSecurityHeader_init(dst);
  357. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  358. &dst->tokenId),
  359. UA_SymmetricAlgorithmSecurityHeader_deleteMembers(dst));
  360. return retval;
  361. }
  362. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_delete(UA_SymmetricAlgorithmSecurityHeader *p) {
  363. UA_Int32 retval = UA_SUCCESS;
  364. retval |= UA_SymmetricAlgorithmSecurityHeader_deleteMembers(p);
  365. retval |= UA_free(p);
  366. return retval;
  367. }
  368. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_deleteMembers(UA_SymmetricAlgorithmSecurityHeader *p) {
  369. UA_Int32 retval = UA_SUCCESS;
  370. return retval;
  371. }
  372. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_init(UA_SymmetricAlgorithmSecurityHeader *p) {
  373. UA_Int32 retval = UA_SUCCESS;
  374. retval |= UA_UInt32_init(&p->tokenId);
  375. return retval;
  376. }
  377. UA_TYPE_NEW_DEFAULT(UA_SymmetricAlgorithmSecurityHeader)
  378. UA_Int32 UA_SymmetricAlgorithmSecurityHeader_copy(const UA_SymmetricAlgorithmSecurityHeader *src,
  379. UA_SymmetricAlgorithmSecurityHeader *dst) {
  380. UA_Int32 retval = UA_SUCCESS;
  381. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  382. memcpy(dst, src, sizeof(UA_SymmetricAlgorithmSecurityHeader));
  383. return retval;
  384. }
  385. UA_Int32 UA_SequenceHeader_calcSizeBinary(UA_SequenceHeader const *ptr) {
  386. if(ptr == UA_NULL) return sizeof(UA_SequenceHeader);
  387. return 0
  388. + sizeof(UA_UInt32) // sequenceNumber
  389. + sizeof(UA_UInt32) // requestId
  390. ;
  391. }
  392. UA_Int32 UA_SequenceHeader_encodeBinary(UA_SequenceHeader const *src, UA_ByteString *dst,
  393. UA_UInt32 *offset) {
  394. UA_Int32 retval = UA_SUCCESS;
  395. retval |= UA_UInt32_encodeBinary(&src->sequenceNumber, dst, offset);
  396. retval |= UA_UInt32_encodeBinary(&src->requestId, dst, offset);
  397. return retval;
  398. }
  399. UA_Int32 UA_SequenceHeader_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  400. UA_SequenceHeader *dst) {
  401. UA_Int32 retval = UA_SUCCESS;
  402. UA_SequenceHeader_init(dst);
  403. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  404. &dst->sequenceNumber), UA_SequenceHeader_deleteMembers(dst));
  405. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset, &dst->requestId), UA_SequenceHeader_deleteMembers(dst));
  406. return retval;
  407. }
  408. UA_Int32 UA_SequenceHeader_delete(UA_SequenceHeader *p) {
  409. UA_Int32 retval = UA_SUCCESS;
  410. retval |= UA_SequenceHeader_deleteMembers(p);
  411. retval |= UA_free(p);
  412. return retval;
  413. }
  414. UA_Int32 UA_SequenceHeader_deleteMembers(UA_SequenceHeader *p) {
  415. UA_Int32 retval = UA_SUCCESS;
  416. return retval;
  417. }
  418. UA_Int32 UA_SequenceHeader_init(UA_SequenceHeader *p) {
  419. UA_Int32 retval = UA_SUCCESS;
  420. retval |= UA_UInt32_init(&p->sequenceNumber);
  421. retval |= UA_UInt32_init(&p->requestId);
  422. return retval;
  423. }
  424. UA_TYPE_NEW_DEFAULT(UA_SequenceHeader)
  425. UA_Int32 UA_SequenceHeader_copy(const UA_SequenceHeader *src, UA_SequenceHeader *dst) {
  426. UA_Int32 retval = UA_SUCCESS;
  427. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  428. memcpy(dst, src, sizeof(UA_SequenceHeader));
  429. return retval;
  430. }
  431. UA_Int32 UA_SecureConversationMessageFooter_calcSizeBinary(UA_SecureConversationMessageFooter const *ptr) {
  432. if(ptr == UA_NULL) return sizeof(UA_SecureConversationMessageFooter);
  433. return 0 + UA_Array_calcSizeBinary(ptr->paddingSize, &UA_.types[UA_BYTE], ptr->padding)
  434. + sizeof(UA_Byte) // signature
  435. ;
  436. }
  437. UA_Int32 UA_SecureConversationMessageFooter_encodeBinary(UA_SecureConversationMessageFooter const *src,
  438. UA_ByteString *dst,
  439. UA_UInt32 *offset) {
  440. UA_Int32 retval = UA_SUCCESS;
  441. retval |= UA_Array_encodeBinary(src->padding, src->paddingSize, &UA_.types[UA_BYTE], dst, offset);
  442. retval |= UA_Byte_encodeBinary(&src->signature, dst, offset);
  443. return retval;
  444. }
  445. UA_Int32 UA_SecureConversationMessageFooter_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  446. UA_SecureConversationMessageFooter *dst) {
  447. UA_Int32 retval = UA_SUCCESS;
  448. UA_SecureConversationMessageFooter_init(dst);
  449. CHECKED_DECODE(UA_Int32_decodeBinary(src, offset,
  450. &dst->paddingSize),
  451. UA_SecureConversationMessageFooter_deleteMembers(dst));
  452. CHECKED_DECODE(UA_Array_decodeBinary(src, offset, dst->paddingSize, &UA_.types[UA_BYTE],
  453. (void **)&dst->padding),
  454. UA_SecureConversationMessageFooter_deleteMembers(dst));
  455. CHECKED_DECODE(UA_Byte_decodeBinary(src, offset,
  456. &dst->signature),
  457. UA_SecureConversationMessageFooter_deleteMembers(dst));
  458. return retval;
  459. }
  460. UA_Int32 UA_SecureConversationMessageFooter_delete(UA_SecureConversationMessageFooter *p) {
  461. UA_Int32 retval = UA_SUCCESS;
  462. retval |= UA_SecureConversationMessageFooter_deleteMembers(p);
  463. retval |= UA_free(p);
  464. return retval;
  465. }
  466. UA_Int32 UA_SecureConversationMessageFooter_deleteMembers(UA_SecureConversationMessageFooter *p) {
  467. UA_Int32 retval = UA_SUCCESS;
  468. retval |= UA_Array_delete((void *)p->padding, p->paddingSize, &UA_.types[UA_BYTE]);
  469. return retval;
  470. }
  471. UA_Int32 UA_SecureConversationMessageFooter_init(UA_SecureConversationMessageFooter *p) {
  472. UA_Int32 retval = UA_SUCCESS;
  473. p->paddingSize = 0;
  474. p->padding = UA_NULL;
  475. retval |= UA_Byte_init(&p->signature);
  476. return retval;
  477. }
  478. UA_TYPE_NEW_DEFAULT(UA_SecureConversationMessageFooter)
  479. UA_Int32 UA_SecureConversationMessageFooter_copy(const UA_SecureConversationMessageFooter *src,
  480. UA_SecureConversationMessageFooter *dst) {
  481. UA_Int32 retval = UA_SUCCESS;
  482. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  483. memcpy(dst, src, sizeof(UA_SecureConversationMessageFooter));
  484. retval |= UA_Array_copy(src->padding, src->paddingSize, &UA_.types[UA_BYTE], (void **)&dst->padding);
  485. return retval;
  486. }
  487. UA_Int32 UA_SecureConversationMessageAbortBody_calcSizeBinary(
  488. UA_SecureConversationMessageAbortBody const *ptr) {
  489. if(ptr == UA_NULL) return sizeof(UA_SecureConversationMessageAbortBody);
  490. return 0
  491. + sizeof(UA_UInt32) // error
  492. + UA_String_calcSizeBinary(&ptr->reason)
  493. ;
  494. }
  495. UA_Int32 UA_SecureConversationMessageAbortBody_encodeBinary(
  496. UA_SecureConversationMessageAbortBody const *src,
  497. UA_ByteString *dst,
  498. UA_UInt32 *
  499. offset) {
  500. UA_Int32 retval = UA_SUCCESS;
  501. retval |= UA_UInt32_encodeBinary(&src->error, dst, offset);
  502. retval |= UA_String_encodeBinary(&src->reason, dst, offset);
  503. return retval;
  504. }
  505. UA_Int32 UA_SecureConversationMessageAbortBody_decodeBinary(UA_ByteString const *src, UA_UInt32 *offset,
  506. UA_SecureConversationMessageAbortBody *dst) {
  507. UA_Int32 retval = UA_SUCCESS;
  508. UA_SecureConversationMessageAbortBody_init(dst);
  509. CHECKED_DECODE(UA_UInt32_decodeBinary(src, offset,
  510. &dst->error),
  511. UA_SecureConversationMessageAbortBody_deleteMembers(dst));
  512. CHECKED_DECODE(UA_String_decodeBinary(src, offset,
  513. &dst->reason),
  514. UA_SecureConversationMessageAbortBody_deleteMembers(dst));
  515. return retval;
  516. }
  517. UA_Int32 UA_SecureConversationMessageAbortBody_delete(UA_SecureConversationMessageAbortBody *p) {
  518. UA_Int32 retval = UA_SUCCESS;
  519. retval |= UA_SecureConversationMessageAbortBody_deleteMembers(p);
  520. retval |= UA_free(p);
  521. return retval;
  522. }
  523. UA_Int32 UA_SecureConversationMessageAbortBody_deleteMembers(UA_SecureConversationMessageAbortBody *p) {
  524. UA_Int32 retval = UA_SUCCESS;
  525. retval |= UA_String_deleteMembers(&p->reason);
  526. return retval;
  527. }
  528. UA_Int32 UA_SecureConversationMessageAbortBody_init(UA_SecureConversationMessageAbortBody *p) {
  529. UA_Int32 retval = UA_SUCCESS;
  530. retval |= UA_UInt32_init(&p->error);
  531. retval |= UA_String_init(&p->reason);
  532. return retval;
  533. }
  534. UA_TYPE_NEW_DEFAULT(UA_SecureConversationMessageAbortBody)
  535. UA_Int32 UA_SecureConversationMessageAbortBody_copy(const UA_SecureConversationMessageAbortBody *src,
  536. UA_SecureConversationMessageAbortBody *dst) {
  537. UA_Int32 retval = UA_SUCCESS;
  538. if(src == UA_NULL || dst == UA_NULL) return UA_ERROR;
  539. memcpy(dst, src, sizeof(UA_SecureConversationMessageAbortBody));
  540. retval |= UA_String_copy(&src->reason, &dst->reason);
  541. return retval;
  542. }