opcua_encodingLayer.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /*
  2. * opcua_encodingLayer.c
  3. *
  4. * Created on: Jan 14, 2014
  5. * Author: opcua
  6. */
  7. #include "opcua_encodingLayer.h"
  8. #include "opcua_binaryEncDec.h"
  9. #include "opcua_types.h"
  10. /**
  11. * IntegerId
  12. * Part: 4
  13. * Chapter: 7.13
  14. * Page: 118
  15. */
  16. T_IntegerId convertToTIntegerId(char* buf, int pos){
  17. return convertToUInt32(buf, pos);
  18. }
  19. /**
  20. * DiagnosticInfo
  21. * Part: 4
  22. * Chapter: 7.9
  23. * Page: 116
  24. */
  25. T_DiagnosticInfo convertToTDiagnosticInfo(char* buf, int pos){
  26. T_DiagnosticInfo tmpTDiagnosticInfo;
  27. int counter = 0;
  28. tmpTDiagnosticInfo.namespaceUri = convertToInt32(buf, counter);
  29. counter += sizeof(tmpTDiagnosticInfo.namespaceUri);
  30. tmpTDiagnosticInfo.symbolicId = convertToInt32(buf, counter);
  31. counter += sizeof(tmpTDiagnosticInfo.symbolicId);
  32. tmpTDiagnosticInfo.locale = convertToInt32(buf, counter);
  33. counter += sizeof(tmpTDiagnosticInfo.locale);
  34. tmpTDiagnosticInfo.localizesText = convertToInt32(buf, counter);
  35. counter += sizeof(tmpTDiagnosticInfo.localizesText);
  36. tmpTDiagnosticInfo.additionalInfo = convertToUAString(buf, counter);
  37. counter += sizeof(tmpTDiagnosticInfo.additionalInfo);
  38. tmpTDiagnosticInfo.innerStatusCode = convertToUAStatusCode(buf, pos);
  39. counter += sizeof(tmpTDiagnosticInfo.innerStatusCode);
  40. //If the Flag InnerDiagnosticInfo is set, then the DiagnosticInfo will be encoded
  41. if((tmpTDiagnosticInfo.innerStatusCode & DIEMT_INNER_DIAGNOSTIC_INFO) == 1){
  42. tmpTDiagnosticInfo.innerDiagnosticInfo = convertToTDiagnosticInfo(buf, counter);
  43. }
  44. return tmpTDiagnosticInfo;
  45. }
  46. /**
  47. * RequestHeader
  48. * Part: 4
  49. * Chapter: 7.26
  50. * Page: 132
  51. */
  52. T_RequestHeader encodeTRequestHeader(char* buf){
  53. T_RequestHeader tmpRequestHeader;
  54. int counter = 0 ;
  55. //ToDo: counter needs the length of the buffer,
  56. // strings have in this type just the size of the pointer not of the content
  57. tmpRequestHeader.authenticationToken = convertToUANodeId(buf, counter);
  58. if(tmpRequestHeader.authenticationToken.EncodingByte == NIEVT_STRING){
  59. counter = sizeof(tmpRequestHeader.authenticationToken.EncodingByte) +
  60. sizeof(tmpRequestHeader.authenticationToken.Namespace) +
  61. sizeof(tmpRequestHeader.authenticationToken.Identifier.String.Length) +
  62. sizeof(tmpRequestHeader.authenticationToken.Identifier.String.Data);
  63. }else{
  64. counter = sizeof(tmpRequestHeader.authenticationToken);
  65. }
  66. tmpRequestHeader.timestamp = convertToUADateTime(buf, counter);
  67. counter += sizeof(tmpRequestHeader.timestamp);
  68. tmpRequestHeader.requestHandle = convertToTIntegerId(buf, counter);
  69. counter += sizeof(tmpRequestHeader.requestHandle);
  70. tmpRequestHeader.returnDiagnostics = convertToUInt32(buf, counter);
  71. counter += sizeof(tmpRequestHeader.returnDiagnostics);
  72. tmpRequestHeader.auditEntryId = convertToUAString(buf, counter);
  73. counter += sizeof(tmpRequestHeader.auditEntryId);
  74. tmpRequestHeader.timeoutHint = convertToUInt32(buf, counter);
  75. counter += sizeof(tmpRequestHeader.timeoutHint);
  76. // AdditionalHeader will stay empty, need to be changed if there is relevant information
  77. return tmpRequestHeader;
  78. }
  79. /**
  80. * ResponseHeader
  81. * Part: 4
  82. * Chapter: 7.27
  83. * Page: 133
  84. */
  85. T_ResponseHeader encodeTResponseHeader(char* buf){
  86. T_ResponseHeader tmpResponseHeader;
  87. int counter = 0;
  88. tmpResponseHeader.timestamp = convertToUADateTime(buf, counter);
  89. counter += sizeof(tmpResponseHeader.timestamp);
  90. tmpResponseHeader.requestHandle = convertToTIntegerId(buf, counter);
  91. counter += sizeof(tmpResponseHeader.requestHandle);
  92. tmpResponseHeader.serviceResult = convertToUAStatusCode(buf, counter);
  93. counter += sizeof(tmpResponseHeader.serviceResult);
  94. tmpResponseHeader.serviceDiagnostics = convertToTDiagnosticInfo(buf, counter);
  95. return tmpResponseHeader;
  96. }