UA_stackInternalTypes.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. /*
  2. * opcua_stackInternalTypes.c
  3. *
  4. * Created on: Mar 24, 2014
  5. * Author: opcua
  6. */
  7. #include "UA_stackInternalTypes.h"
  8. UA_Int32 UA_MessageType_calcSize(UA_MessageType const * ptr){
  9. if(ptr==UA_NULL){return sizeof(UA_MessageType);}
  10. return 0
  11. + 3 * sizeof(UA_Byte);
  12. }
  13. UA_Int32 UA_MessageType_encode(UA_MessageType const * src, UA_Int32* pos, UA_Byte* dst){
  14. UA_Int32 retval = UA_SUCCESS;
  15. UA_Byte tmpBuf[3];
  16. tmpBuf[0] = (UA_Byte)((((UA_Int32)*src) >> 16) );
  17. tmpBuf[1] = (UA_Byte)((((UA_Int32)*src) >> 8));
  18. tmpBuf[2] = (UA_Byte)(((UA_Int32)*src));
  19. retval |= UA_Byte_encode(&(tmpBuf[0]),pos,dst);
  20. retval |= UA_Byte_encode(&(tmpBuf[1]),pos,dst);
  21. retval |= UA_Byte_encode(&(tmpBuf[2]),pos,dst);
  22. return retval;
  23. }
  24. UA_Int32 UA_MessageType_decode(UA_Byte const * src, UA_Int32* pos, UA_MessageType* dst){
  25. UA_Int32 retval = UA_SUCCESS;
  26. UA_Byte tmpBuf[3];
  27. retval |= UA_Byte_decode(src,pos,&(tmpBuf[0]));//messageType to Byte representation
  28. retval |= UA_Byte_decode(src,pos,&(tmpBuf[1]));
  29. retval |= UA_Byte_decode(src,pos,&(tmpBuf[2]));
  30. *dst = (UA_MessageType)((UA_Int32)(tmpBuf[0]<<16) + (UA_Int32)(tmpBuf[1]<<8) + (UA_Int32)(tmpBuf[2]));
  31. return retval;
  32. }
  33. UA_TYPE_METHOD_DELETE_FREE(UA_MessageType)
  34. UA_TYPE_METHOD_DELETEMEMBERS_NOACTION(UA_MessageType)
  35. void UA_MessageType_printf(char *label, UA_MessageType* p) {
  36. UA_Byte* b = (UA_Byte*) p;
  37. printf("%s{%c%c%c}\n", label, b[2],b[1],b[0]);
  38. }
  39. UA_Int32 UA_OPCUATcpMessageHeader_calcSize(UA_OPCUATcpMessageHeader const * ptr) {
  40. if(ptr==UA_NULL){return sizeof(UA_OPCUATcpMessageHeader);}
  41. return 0
  42. + UA_MessageType_calcSize(&(ptr->messageType))
  43. + sizeof(UA_Byte) // isFinal
  44. + sizeof(UA_UInt32) // messageSize
  45. ;
  46. }
  47. UA_Int32 UA_OPCUATcpMessageHeader_encode(UA_OPCUATcpMessageHeader const * src, UA_Int32* pos, UA_Byte* dst) {
  48. UA_Int32 retval = UA_SUCCESS;
  49. retval |= UA_MessageType_encode(&(src->messageType),pos,dst);
  50. retval |= UA_Byte_encode(&(src->isFinal),pos,dst);
  51. retval |= UA_UInt32_encode(&(src->messageSize),pos,dst);
  52. return retval;
  53. }
  54. UA_Int32 UA_OPCUATcpMessageHeader_decode(UA_Byte const * src, UA_Int32* pos, UA_OPCUATcpMessageHeader* dst) {
  55. UA_Int32 retval = UA_SUCCESS;
  56. retval |= UA_MessageType_decode(src,pos,&(dst->messageType));
  57. retval |= UA_Byte_decode(src,pos,&(dst->isFinal));
  58. retval |= UA_UInt32_decode(src,pos,&(dst->messageSize));
  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_OPCUATcpHelloMessage_calcSize(UA_OPCUATcpHelloMessage const * ptr) {
  72. if(ptr==UA_NULL){return sizeof(UA_OPCUATcpHelloMessage);}
  73. return 0
  74. + sizeof(UA_UInt32) // protocolVersion
  75. + sizeof(UA_UInt32) // receiveBufferSize
  76. + sizeof(UA_UInt32) // sendBufferSize
  77. + sizeof(UA_UInt32) // maxMessageSize
  78. + sizeof(UA_UInt32) // maxChunkCount
  79. + UA_String_calcSize(&(ptr->endpointUrl))
  80. ;
  81. }
  82. UA_Int32 UA_OPCUATcpHelloMessage_encode(UA_OPCUATcpHelloMessage const * src, UA_Int32* pos, UA_Byte* dst) {
  83. UA_Int32 retval = UA_SUCCESS;
  84. retval |= UA_UInt32_encode(&(src->protocolVersion),pos,dst);
  85. retval |= UA_UInt32_encode(&(src->receiveBufferSize),pos,dst);
  86. retval |= UA_UInt32_encode(&(src->sendBufferSize),pos,dst);
  87. retval |= UA_UInt32_encode(&(src->maxMessageSize),pos,dst);
  88. retval |= UA_UInt32_encode(&(src->maxChunkCount),pos,dst);
  89. retval |= UA_String_encode(&(src->endpointUrl),pos,dst);
  90. return retval;
  91. }
  92. UA_Int32 UA_OPCUATcpHelloMessage_decode(UA_Byte const * src, UA_Int32* pos, UA_OPCUATcpHelloMessage* dst) {
  93. UA_Int32 retval = UA_SUCCESS;
  94. retval |= UA_UInt32_decode(src,pos,&(dst->protocolVersion));
  95. retval |= UA_UInt32_decode(src,pos,&(dst->receiveBufferSize));
  96. retval |= UA_UInt32_decode(src,pos,&(dst->sendBufferSize));
  97. retval |= UA_UInt32_decode(src,pos,&(dst->maxMessageSize));
  98. retval |= UA_UInt32_decode(src,pos,&(dst->maxChunkCount));
  99. retval |= UA_String_decode(src,pos,&(dst->endpointUrl));
  100. return retval;
  101. }
  102. UA_Int32 UA_OPCUATcpHelloMessage_delete(UA_OPCUATcpHelloMessage* p) {
  103. UA_Int32 retval = UA_SUCCESS;
  104. retval |= UA_OPCUATcpHelloMessage_deleteMembers(p);
  105. retval |= UA_free(p);
  106. return retval;
  107. }
  108. UA_Int32 UA_OPCUATcpHelloMessage_deleteMembers(UA_OPCUATcpHelloMessage* p) {
  109. UA_Int32 retval = UA_SUCCESS;
  110. retval |= UA_String_deleteMembers(&(p->endpointUrl));
  111. return retval;
  112. }
  113. UA_Int32 UA_OPCUATcpAcknowledgeMessage_calcSize(UA_OPCUATcpAcknowledgeMessage const * ptr) {
  114. if(ptr==UA_NULL){return sizeof(UA_OPCUATcpAcknowledgeMessage);}
  115. return 0
  116. + sizeof(UA_UInt32) // protocolVersion
  117. + sizeof(UA_UInt32) // receiveBufferSize
  118. + sizeof(UA_UInt32) // sendBufferSize
  119. + sizeof(UA_UInt32) // maxMessageSize
  120. + sizeof(UA_UInt32) // maxChunkCount
  121. ;
  122. }
  123. UA_Int32 UA_OPCUATcpAcknowledgeMessage_encode(UA_OPCUATcpAcknowledgeMessage const * src, UA_Int32* pos, UA_Byte* dst) {
  124. UA_Int32 retval = UA_SUCCESS;
  125. retval |= UA_UInt32_encode(&(src->protocolVersion),pos,dst);
  126. retval |= UA_UInt32_encode(&(src->receiveBufferSize),pos,dst);
  127. retval |= UA_UInt32_encode(&(src->sendBufferSize),pos,dst);
  128. retval |= UA_UInt32_encode(&(src->maxMessageSize),pos,dst);
  129. retval |= UA_UInt32_encode(&(src->maxChunkCount),pos,dst);
  130. return retval;
  131. }
  132. UA_Int32 UA_OPCUATcpAcknowledgeMessage_decode(UA_Byte const * src, UA_Int32* pos, UA_OPCUATcpAcknowledgeMessage* dst) {
  133. UA_Int32 retval = UA_SUCCESS;
  134. retval |= UA_UInt32_decode(src,pos,&(dst->protocolVersion));
  135. retval |= UA_UInt32_decode(src,pos,&(dst->receiveBufferSize));
  136. retval |= UA_UInt32_decode(src,pos,&(dst->sendBufferSize));
  137. retval |= UA_UInt32_decode(src,pos,&(dst->maxMessageSize));
  138. retval |= UA_UInt32_decode(src,pos,&(dst->maxChunkCount));
  139. return retval;
  140. }
  141. UA_Int32 UA_OPCUATcpAcknowledgeMessage_delete(UA_OPCUATcpAcknowledgeMessage* p) {
  142. UA_Int32 retval = UA_SUCCESS;
  143. retval |= UA_OPCUATcpAcknowledgeMessage_deleteMembers(p);
  144. retval |= UA_free(p);
  145. return retval;
  146. }
  147. UA_Int32 UA_OPCUATcpAcknowledgeMessage_deleteMembers(UA_OPCUATcpAcknowledgeMessage* p) {
  148. UA_Int32 retval = UA_SUCCESS;
  149. return retval;
  150. }
  151. UA_Int32 UA_SecureConversationMessageHeader_calcSize(UA_SecureConversationMessageHeader const * ptr) {
  152. if(ptr==UA_NULL){return sizeof(UA_SecureConversationMessageHeader);}
  153. return 0
  154. // + UA_OPCUATcpMessageHeader_calcSize(ptr->tcpMessageHeader)
  155. + sizeof(UA_UInt32) // secureChannelId
  156. ;
  157. }
  158. UA_Int32 UA_SecureConversationMessageHeader_encode(UA_SecureConversationMessageHeader const * src, UA_Int32* pos, UA_Byte* dst) {
  159. UA_Int32 retval = UA_SUCCESS;
  160. // retval |= UA_OPCUATcpMessageHeader_encode(src->tcpMessageHeader,pos,dst);
  161. retval |= UA_UInt32_encode(&(src->secureChannelId),pos,dst);
  162. return retval;
  163. }
  164. UA_Int32 UA_SecureConversationMessageHeader_decode(UA_Byte const * src, UA_Int32* pos, UA_SecureConversationMessageHeader* dst) {
  165. UA_Int32 retval = UA_SUCCESS;
  166. //retval |= UA_alloc((void**)&(dst->tcpMessageHeader),UA_OPCUATcpMessageHeader_calcSize(UA_NULL));
  167. //retval |= UA_OPCUATcpMessageHeader_decode(src,pos,dst->tcpMessageHeader);
  168. retval |= UA_UInt32_decode(src,pos,&(dst->secureChannelId));
  169. return retval;
  170. }
  171. UA_Int32 UA_SecureConversationMessageHeader_delete(UA_SecureConversationMessageHeader* p) {
  172. UA_Int32 retval = UA_SUCCESS;
  173. // retval |= UA_SecureConversationMessageHeader_deleteMembers(p);
  174. retval |= UA_free(p);
  175. return retval;
  176. }
  177. UA_Int32 UA_SecureConversationMessageHeader_deleteMembers(UA_SecureConversationMessageHeader* p) {
  178. UA_Int32 retval = UA_SUCCESS;
  179. // retval |= UA_OPCUATcpMessageHeader_delete(p->tcpMessageHeader);
  180. return retval;
  181. }
  182. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_calcSize(UA_AsymmetricAlgorithmSecurityHeader const * ptr) {
  183. if(ptr==UA_NULL){return sizeof(UA_AsymmetricAlgorithmSecurityHeader);}
  184. return 0
  185. + UA_ByteString_calcSize(&(ptr->securityPolicyUri))
  186. + UA_ByteString_calcSize(&(ptr->senderCertificate))
  187. + UA_ByteString_calcSize(&(ptr->receiverCertificateThumbprint))
  188. ;
  189. }
  190. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_encode(UA_AsymmetricAlgorithmSecurityHeader const * src, UA_Int32* pos, UA_Byte* dst) {
  191. UA_Int32 retval = UA_SUCCESS;
  192. retval |= UA_ByteString_encode(&(src->securityPolicyUri),pos,dst);
  193. retval |= UA_ByteString_encode(&(src->senderCertificate),pos,dst);
  194. retval |= UA_ByteString_encode(&(src->receiverCertificateThumbprint),pos,dst);
  195. return retval;
  196. }
  197. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_decode(UA_Byte const * src, UA_Int32* pos, UA_AsymmetricAlgorithmSecurityHeader* dst) {
  198. UA_Int32 retval = UA_SUCCESS;
  199. retval |= UA_ByteString_decode(src,pos,&(dst->securityPolicyUri));
  200. retval |= UA_ByteString_decode(src,pos,&(dst->senderCertificate));
  201. retval |= UA_ByteString_decode(src,pos,&(dst->receiverCertificateThumbprint));
  202. return retval;
  203. }
  204. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_delete(UA_AsymmetricAlgorithmSecurityHeader* p) {
  205. UA_Int32 retval = UA_SUCCESS;
  206. retval |= UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(p);
  207. retval |= UA_free(p);
  208. return retval;
  209. }
  210. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_deleteMembers(UA_AsymmetricAlgorithmSecurityHeader* p) {
  211. UA_Int32 retval = UA_SUCCESS;
  212. retval |= UA_ByteString_deleteMembers(&(p->securityPolicyUri));
  213. retval |= UA_ByteString_deleteMembers(&(p->senderCertificate));
  214. retval |= UA_ByteString_deleteMembers(&(p->receiverCertificateThumbprint));
  215. return retval;
  216. }
  217. UA_Int32 UA_AsymmetricAlgorithmSecurityHeader_init(UA_AsymmetricAlgorithmSecurityHeader* p) {
  218. UA_Int32 retval = UA_SUCCESS;
  219. if(p==UA_NULL) return UA_ERROR;
  220. retval |= UA_ByteString_init(&(p->securityPolicyUri));
  221. retval |= UA_ByteString_init(&(p->senderCertificate));
  222. retval |= UA_ByteString_init(&(p->receiverCertificateThumbprint));
  223. return retval;
  224. }
  225. UA_TYPE_METHOD_DECODE_AS(UA_SymmetricAlgorithmSecurityHeader, UA_UInt32)
  226. UA_TYPE_METHOD_ENCODE_AS(UA_SymmetricAlgorithmSecurityHeader, UA_UInt32)
  227. UA_TYPE_METHOD_DELETE_AS(UA_SymmetricAlgorithmSecurityHeader, UA_UInt32)
  228. UA_TYPE_METHOD_DELETEMEMBERS_AS(UA_SymmetricAlgorithmSecurityHeader, UA_UInt32)
  229. UA_TYPE_METHOD_CALCSIZE_AS(UA_SymmetricAlgorithmSecurityHeader, UA_UInt32)
  230. UA_Int32 UA_SequenceHeader_calcSize(UA_SequenceHeader const * ptr) {
  231. if(ptr==UA_NULL){return sizeof(UA_SequenceHeader);}
  232. return 0
  233. + sizeof(UA_UInt32) // sequenceNumber
  234. + sizeof(UA_UInt32) // requestId
  235. ;
  236. }
  237. UA_Int32 UA_SequenceHeader_encode(UA_SequenceHeader const * src, UA_Int32* pos, UA_Byte* dst) {
  238. UA_Int32 retval = UA_SUCCESS;
  239. retval |= UA_UInt32_encode(&(src->sequenceNumber),pos,dst);
  240. retval |= UA_UInt32_encode(&(src->requestId),pos,dst);
  241. return retval;
  242. }
  243. UA_Int32 UA_SequenceHeader_decode(UA_Byte const * src, UA_Int32* pos, UA_SequenceHeader* dst) {
  244. UA_Int32 retval = UA_SUCCESS;
  245. retval |= UA_UInt32_decode(src,pos,&(dst->sequenceNumber));
  246. retval |= UA_UInt32_decode(src,pos,&(dst->requestId));
  247. return retval;
  248. }
  249. UA_Int32 UA_SequenceHeader_delete(UA_SequenceHeader* p) {
  250. UA_Int32 retval = UA_SUCCESS;
  251. retval |= UA_SequenceHeader_deleteMembers(p);
  252. retval |= UA_free(p);
  253. return retval;
  254. }
  255. UA_Int32 UA_SequenceHeader_deleteMembers(UA_SequenceHeader* p) {
  256. UA_Int32 retval = UA_SUCCESS;
  257. return retval;
  258. }
  259. UA_Int32 UA_SecureConversationMessageFooter_calcSize(UA_SecureConversationMessageFooter const * ptr) {
  260. if(ptr==UA_NULL){return sizeof(UA_SecureConversationMessageFooter);}
  261. return 0
  262. + 0 //paddingSize is included in UA_Array_calcSize
  263. + UA_Array_calcSize(ptr->paddingSize, UA_BYTE, (void const**) ptr->padding)
  264. + sizeof(UA_Byte) // signature
  265. ;
  266. }
  267. UA_Int32 UA_SecureConversationMessageFooter_encode(UA_SecureConversationMessageFooter const * src, UA_Int32* pos, UA_Byte* dst) {
  268. UA_Int32 retval = UA_SUCCESS;
  269. retval |= UA_Int32_encode(&(src->paddingSize),pos,dst); // encode size
  270. retval |= UA_Array_encode((void const**) (src->padding),src->paddingSize, UA_BYTE,pos,dst);
  271. retval |= UA_Byte_encode(&(src->signature),pos,dst);
  272. return retval;
  273. }
  274. UA_Int32 UA_SecureConversationMessageFooter_decode(UA_Byte const * src, UA_Int32* pos, UA_SecureConversationMessageFooter* dst) {
  275. UA_Int32 retval = UA_SUCCESS;
  276. retval |= UA_Int32_decode(src,pos,&(dst->paddingSize)); // decode size
  277. retval |= UA_Array_new((void**)&(dst->padding),dst->paddingSize, UA_BYTE);
  278. retval |= UA_Array_decode(src,dst->paddingSize, UA_BYTE,pos,(void ** const) (dst->padding));
  279. retval |= UA_Byte_decode(src,pos,&(dst->signature));
  280. return retval;
  281. }
  282. UA_Int32 UA_SecureConversationMessageFooter_delete(UA_SecureConversationMessageFooter* p) {
  283. UA_Int32 retval = UA_SUCCESS;
  284. retval |= UA_SecureConversationMessageFooter_deleteMembers(p);
  285. retval |= UA_free(p);
  286. return retval;
  287. }
  288. UA_Int32 UA_SecureConversationMessageFooter_deleteMembers(UA_SecureConversationMessageFooter* p) {
  289. UA_Int32 retval = UA_SUCCESS;
  290. retval |= UA_Array_delete((void**)p->padding,p->paddingSize,UA_BYTE);
  291. return retval;
  292. }
  293. UA_Int32 UA_SecureConversationMessageAbortBody_calcSize(UA_SecureConversationMessageAbortBody const * ptr) {
  294. if(ptr==UA_NULL){return sizeof(UA_SecureConversationMessageAbortBody);}
  295. return 0
  296. + sizeof(UA_UInt32) // error
  297. + UA_String_calcSize(&(ptr->reason))
  298. ;
  299. }
  300. UA_Int32 UA_SecureConversationMessageAbortBody_encode(UA_SecureConversationMessageAbortBody const * src, UA_Int32* pos, UA_Byte* dst) {
  301. UA_Int32 retval = UA_SUCCESS;
  302. retval |= UA_UInt32_encode(&(src->error),pos,dst);
  303. retval |= UA_String_encode(&(src->reason),pos,dst);
  304. return retval;
  305. }
  306. UA_Int32 UA_SecureConversationMessageAbortBody_decode(UA_Byte const * src, UA_Int32* pos, UA_SecureConversationMessageAbortBody* dst) {
  307. UA_Int32 retval = UA_SUCCESS;
  308. retval |= UA_UInt32_decode(src,pos,&(dst->error));
  309. retval |= UA_String_decode(src,pos,&(dst->reason));
  310. return retval;
  311. }
  312. UA_Int32 UA_SecureConversationMessageAbortBody_delete(UA_SecureConversationMessageAbortBody* p) {
  313. UA_Int32 retval = UA_SUCCESS;
  314. retval |= UA_SecureConversationMessageAbortBody_deleteMembers(p);
  315. retval |= UA_free(p);
  316. return retval;
  317. }
  318. UA_Int32 UA_SecureConversationMessageAbortBody_deleteMembers(UA_SecureConversationMessageAbortBody* p) {
  319. UA_Int32 retval = UA_SUCCESS;
  320. retval |= UA_String_deleteMembers(&(p->reason));
  321. return retval;
  322. }