Bladeren bron

PubSub: JSON encoding prints empty field-names if none are defined

Julius Pfrommer 6 jaren geleden
bovenliggende
commit
f62318a632
1 gewijzigde bestanden met toevoegingen van 11 en 6 verwijderingen
  1. 11 6
      src/pubsub/ua_pubsub_networkmessage_json.c

+ 11 - 6
src/pubsub/ua_pubsub_networkmessage_json.c

@@ -82,16 +82,18 @@ UA_DataSetMessage_encodeJson_internal(const UA_DataSetMessage* src, UA_UInt16 da
     rv |= writeJsonKey(ctx, UA_DECODEKEY_PAYLOAD);
     rv |= writeJsonObjStart(ctx);
 
-    /* TODO: currently no difference between delta and key frames. Own dataSetMessageType for json?*/
+    /* TODO: currently no difference between delta and key frames. Own
+     * dataSetMessageType for json?. If the field names are not defined, write
+     * out empty field names. */
     if(src->header.dataSetMessageType == UA_DATASETMESSAGE_DATAKEYFRAME) {
-        if(src->data.keyFrameData.fieldNames == NULL){
-            return UA_STATUSCODE_BADENCODINGERROR;
-        }
 
         if(src->header.fieldEncoding == UA_FIELDENCODING_VARIANT) {
             /* KEYFRAME VARIANT */
             for (UA_UInt16 i = 0; i < src->data.keyFrameData.fieldCount; i++) {
-                rv |= writeJsonKey_UA_String(ctx, &src->data.keyFrameData.fieldNames[i]);
+                if(src->data.keyFrameData.fieldNames)
+                    rv |= writeJsonKey_UA_String(ctx, &src->data.keyFrameData.fieldNames[i]);
+                else
+                    rv |= writeJsonKey(ctx, "");
                 rv |= encodeJsonInternal(&(src->data.keyFrameData.dataSetFields[i].value),
                         &UA_TYPES[UA_TYPES_VARIANT], ctx);
                 if(rv != UA_STATUSCODE_GOOD)
@@ -102,7 +104,10 @@ UA_DataSetMessage_encodeJson_internal(const UA_DataSetMessage* src, UA_UInt16 da
         } else if(src->header.fieldEncoding == UA_FIELDENCODING_DATAVALUE) {
             /* KEYFRAME DATAVALUE */
             for (UA_UInt16 i = 0; i < src->data.keyFrameData.fieldCount; i++) {
-                rv |= writeJsonKey_UA_String(ctx, &src->data.keyFrameData.fieldNames[i]);
+                if(src->data.keyFrameData.fieldNames)
+                    rv |= writeJsonKey_UA_String(ctx, &src->data.keyFrameData.fieldNames[i]);
+                else
+                    rv |= writeJsonKey(ctx, "");
                 rv |= encodeJsonInternal(&(src->data.keyFrameData.dataSetFields[i]), &UA_TYPES[UA_TYPES_DATAVALUE], ctx);
                 if(rv != UA_STATUSCODE_GOOD)
                     return rv;