ua_transport.c 14 KB

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