123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- /*
- * opcua_encodingLayer.c
- *
- * Created on: Jan 14, 2014
- * Author: opcua
- */
- #include "opcua_encodingLayer.h"
- #include "opcua_binaryEncDec.h"
- #include "opcua_types.h"
- /**
- * IntegerId
- * Part: 4
- * Chapter: 7.13
- * Page: 118
- */
- T_IntegerId convertToTIntegerId(char* buf, int pos){
- return convertToUInt32(buf, pos);
- }
- /**
- * DiagnosticInfo
- * Part: 4
- * Chapter: 7.9
- * Page: 116
- */
- T_DiagnosticInfo convertToTDiagnosticInfo(char* buf, int pos){
- T_DiagnosticInfo tmpTDiagnosticInfo;
- int counter = 0;
- tmpTDiagnosticInfo.namespaceUri = convertToInt32(buf, counter);
- counter += sizeof(tmpTDiagnosticInfo.namespaceUri);
- tmpTDiagnosticInfo.symbolicId = convertToInt32(buf, counter);
- counter += sizeof(tmpTDiagnosticInfo.symbolicId);
- tmpTDiagnosticInfo.locale = convertToInt32(buf, counter);
- counter += sizeof(tmpTDiagnosticInfo.locale);
- tmpTDiagnosticInfo.localizesText = convertToInt32(buf, counter);
- counter += sizeof(tmpTDiagnosticInfo.localizesText);
- tmpTDiagnosticInfo.additionalInfo = convertToUAString(buf, counter);
- counter += sizeof(tmpTDiagnosticInfo.additionalInfo);
- tmpTDiagnosticInfo.innerStatusCode = convertToUAStatusCode(buf, pos);
- counter += sizeof(tmpTDiagnosticInfo.innerStatusCode);
- //If the Flag InnerDiagnosticInfo is set, then the DiagnosticInfo will be encoded
- if((tmpTDiagnosticInfo.innerStatusCode & DIEMT_INNER_DIAGNOSTIC_INFO) == 1){
- tmpTDiagnosticInfo.innerDiagnosticInfo = convertToTDiagnosticInfo(buf, counter);
- }
- return tmpTDiagnosticInfo;
- }
- /**
- * RequestHeader
- * Part: 4
- * Chapter: 7.26
- * Page: 132
- */
- T_RequestHeader encodeTRequestHeader(char* buf){
- T_RequestHeader tmpRequestHeader;
- int counter = 0 ;
- //ToDo: counter needs the length of the buffer,
- // strings have in this type just the size of the pointer not of the content
- tmpRequestHeader.authenticationToken = convertToUANodeId(buf, counter);
- if(tmpRequestHeader.authenticationToken.EncodingByte == NIEVT_STRING){
- counter = sizeof(tmpRequestHeader.authenticationToken.EncodingByte) +
- sizeof(tmpRequestHeader.authenticationToken.Namespace) +
- sizeof(tmpRequestHeader.authenticationToken.Identifier.String.Length) +
- sizeof(tmpRequestHeader.authenticationToken.Identifier.String.Data);
- }else{
- counter = sizeof(tmpRequestHeader.authenticationToken);
- }
- tmpRequestHeader.timestamp = convertToUADateTime(buf, counter);
- counter += sizeof(tmpRequestHeader.timestamp);
- tmpRequestHeader.requestHandle = convertToTIntegerId(buf, counter);
- counter += sizeof(tmpRequestHeader.requestHandle);
- tmpRequestHeader.returnDiagnostics = convertToUInt32(buf, counter);
- counter += sizeof(tmpRequestHeader.returnDiagnostics);
- tmpRequestHeader.auditEntryId = convertToUAString(buf, counter);
- counter += sizeof(tmpRequestHeader.auditEntryId);
- tmpRequestHeader.timeoutHint = convertToUInt32(buf, counter);
- counter += sizeof(tmpRequestHeader.timeoutHint);
- // AdditionalHeader will stay empty, need to be changed if there is relevant information
- return tmpRequestHeader;
- }
- /**
- * ResponseHeader
- * Part: 4
- * Chapter: 7.27
- * Page: 133
- */
- T_ResponseHeader encodeTResponseHeader(char* buf){
- T_ResponseHeader tmpResponseHeader;
- int counter = 0;
- tmpResponseHeader.timestamp = convertToUADateTime(buf, counter);
- counter += sizeof(tmpResponseHeader.timestamp);
- tmpResponseHeader.requestHandle = convertToTIntegerId(buf, counter);
- counter += sizeof(tmpResponseHeader.requestHandle);
- tmpResponseHeader.serviceResult = convertToUAStatusCode(buf, counter);
- counter += sizeof(tmpResponseHeader.serviceResult);
- tmpResponseHeader.serviceDiagnostics = convertToTDiagnosticInfo(buf, counter);
- return tmpResponseHeader;
- }
|