123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982 |
- #include "ua_types_generated.h"
- #include "ua_types_encoding_xml.h"
- #include "ua_xml.h"
- #include "ua_namespace_xml.h"
- #include <fcntl.h>
- UA_Int32 UA_TypedArray_init(UA_TypedArray *p) {
- p->size = -1;
- p->vt = &UA_.types[UA_INVALIDTYPE];
- p->elements = UA_NULL;
- return UA_SUCCESS;
- }
- UA_Int32 UA_TypedArray_new(UA_TypedArray **p) {
- UA_alloc((void ** )p, sizeof(UA_TypedArray));
- UA_TypedArray_init(*p);
- return UA_SUCCESS;
- }
- UA_Int32 UA_TypedArray_setType(UA_TypedArray *p, UA_Int32 type) {
- UA_Int32 retval = UA_ERR_INVALID_VALUE;
- if(type >= UA_BOOLEAN && type <= UA_INVALIDTYPE) {
- p->vt = &UA_.types[type];
- retval = UA_SUCCESS;
- }
- return retval;
- }
- UA_Int32 UA_NodeSetAlias_init(UA_NodeSetAlias *p) {
- UA_String_init(&(p->alias));
- UA_String_init(&(p->value));
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSetAlias_new(UA_NodeSetAlias **p) {
- UA_alloc((void ** )p, sizeof(UA_NodeSetAlias));
- UA_NodeSetAlias_init(*p);
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSetAliases_init(UA_NodeSetAliases *p) {
- p->size = -1;
- p->aliases = UA_NULL;
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSetAliases_new(UA_NodeSetAliases **p) {
- UA_alloc((void ** )p, sizeof(UA_NodeSetAliases));
- UA_NodeSetAliases_init(*p);
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSetAliases_println(cstring label, UA_NodeSetAliases *p) {
- UA_Int32 i;
- for(i = 0;i < p->size;i++) {
- UA_NodeSetAlias *a = p->aliases[i];
- printf("%s{addr=%p", label, (void *)a);
- if(a)
- printf(",alias='%.*s', value='%.*s'", a->alias.length, a->alias.data, a->value.length, a->value.data);
- printf("}\n");
- }
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSet_init(UA_NodeSet *p, UA_UInt32 nsid) {
- Namespace_new(&(p->ns), nsid);
- p->aliases.size = -1;
- p->aliases.aliases = UA_NULL;
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSet_new(UA_NodeSet **p, UA_UInt32 nsid) {
- UA_alloc((void ** )p, sizeof(UA_NodeSet));
- UA_NodeSet_init(*p, nsid);
- return UA_SUCCESS;
- }
- UA_Int32 _UA_NodeId_copycstring(cstring src, UA_NodeId* dst, UA_NodeSetAliases* aliases) {
- UA_Int32 retval = UA_SUCCESS;
- if (src != UA_NULL && dst != UA_NULL ) {
- if (src[0] == 'i' && src[1] == '=') {
- dst->identifier.numeric = atoi(&src[2]);
- } else if (src[0] == 'n' && src[1] == 's' && src[2] == '=') {
- dst->namespace = atoi(&src[3]);
- src = strchr(&src[3],';');
- if (src != UA_NULL)
- retval = _UA_NodeId_copycstring(src+1,dst,aliases);
- else
- retval = UA_ERR_INVALID_VALUE;
- } else if (aliases != UA_NULL ) {
- UA_Int32 i;
- for (i = 0; i < aliases->size && dst->identifier.numeric == 0; ++i) {
- if (0 == strncmp((char const*) src, (char const*) aliases->aliases[i]->alias.data,
- aliases->aliases[i]->alias.length)) {
- _UA_NodeId_copycstring((cstring)aliases->aliases[i]->alias.data,dst,UA_NULL);
- }
- }
- } else {
- retval = UA_ERR_NOT_IMPLEMENTED;
- }
- } else {
- retval = UA_ERR_INVALID_VALUE;
- }
- DBG_VERBOSE(printf("UA_NodeId_copycstring src=%s,id=%d\n", src, dst->identifier.numeric));
- return retval;
- }
- UA_Int32 UA_NodeId_copycstring(cstring src, UA_NodeId* dst, UA_NodeSetAliases* aliases) {
- dst->encodingByte = UA_NODEIDTYPE_FOURBYTE;
- dst->namespace = 0;
- dst->identifier.numeric = 0;
- return _UA_NodeId_copycstring(src,dst,aliases);
- }
- UA_Int32 UA_ReferenceNode_println(cstring label, UA_ReferenceNode *a) {
- printf("%s{referenceType=%d, target=%d, isInverse=%d}\n",
- label,
- a->referenceTypeId.identifier.numeric,
- a->targetId.nodeId.identifier.numeric,
- a->isInverse);
- return UA_SUCCESS;
- }
- UA_Int32 UA_ExpandedNodeId_copycstring(cstring src, UA_ExpandedNodeId *dst, UA_NodeSetAliases *aliases) {
- dst->nodeId.encodingByte = UA_NODEIDTYPE_FOURBYTE;
- dst->nodeId.namespace = 0;
- dst->nodeId.identifier.numeric = 0;
- UA_NodeId_copycstring(src, &(dst->nodeId), aliases);
- DBG_VERBOSE(printf("UA_ExpandedNodeId_copycstring src=%s,id=%d\n", src, dst->nodeId.identifier.numeric));
- return UA_SUCCESS;
- }
- void XML_Stack_init(XML_Stack* p, UA_UInt32 nsid, cstring name) {
- unsigned int i, j;
- p->depth = 0;
- for(i = 0;i < XML_STACK_MAX_DEPTH;i++) {
- p->parent[i].name = UA_NULL;
- p->parent[i].len = 0;
- p->parent[i].activeChild = -1;
- p->parent[i].textAttrib = UA_NULL;
- p->parent[i].textAttribIdx = -1;
-
-
- for (j = 0; j < XML_STACK_MAX_CHILDREN; j++) {
- p->parent[i].children[j].name = UA_NULL;
- p->parent[i].children[j].length = -1;
- p->parent[i].children[j].elementHandler = UA_NULL;
- p->parent[i].children[j].type = UA_INVALIDTYPE;
- p->parent[i].children[j].obj = UA_NULL;
- }
- }
-
- p->parent[0].name = name;
- }
- char path_buffer[1024];
- char *XML_Stack_path(XML_Stack *s) {
- UA_Int32 i;
- char *p = &path_buffer[0];
- for(i = 0;i <= s->depth;i++) {
- strcpy(p, s->parent[i].name);
- p += strlen(s->parent[i].name);
- *p = '/';
- p++;
- }
- *p = 0;
- return &path_buffer[0];
- }
- void XML_Stack_print(XML_Stack *s) {
- printf("%s", XML_Stack_path(s));
- }
- void XML_Stack_handleTextAsElementOf(XML_Stack *p, cstring textAttrib, unsigned int textAttribIdx) {
- p->parent[p->depth].textAttrib = textAttrib;
- p->parent[p->depth].textAttribIdx = textAttribIdx;
- }
- void XML_Stack_addChildHandler(XML_Stack *p, cstring name, UA_Int32 length, XML_decoder handler, UA_Int32 type,
- void *dst) {
- unsigned int len = p->parent[p->depth].len;
- p->parent[p->depth].children[len].name = name;
- p->parent[p->depth].children[len].length = length;
- p->parent[p->depth].children[len].elementHandler = handler;
- p->parent[p->depth].children[len].type = type;
- p->parent[p->depth].children[len].obj = dst;
- p->parent[p->depth].len++;
- }
- UA_Int32 UA_Text_decodeXmlFromStack(XML_Stack *s, XML_Attr *attr, UA_Byte **dst, _Bool isStart) {
- DBG_VERBOSE(printf("UA_String entered with dst=%p,isStart=%d\n", (void * )dst, isStart));
- UA_UInt32 i;
- if(isStart) {
- if(dst == UA_NULL) {
- UA_alloc((void **)&dst, sizeof(void *));
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = (void *)dst;
- }
-
- for(i = 0;attr[i];i += 2) {
- if(0 == strncmp("Data", attr[i], strlen("Data"))) {
- char *tmp;
- UA_alloc((void **)&tmp, strlen(attr[i+1])+1);
- strncpy(tmp, attr[i+1], strlen(attr[i+1]));
- tmp[strlen(attr[i+1])] = 0;
- *dst = (UA_Byte *)tmp;
- } else
- printf("UA_Text_decodeXml - Unknown attribute - name=%s, value=%s\n", attr[i], attr[i+1]);
- }
- }
- return UA_SUCCESS;
- }
- UA_Int32 UA_TypedArray_decodeXmlFromStack(XML_Stack* s, XML_Attr* attr, UA_TypedArray* dst, _Bool isStart) {
- UA_Int32 type = s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].type;
-
- if (isStart) {
- if (dst == UA_NULL) {
- UA_TypedArray_new(&dst);
- UA_TypedArray_setType(dst, type);
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = dst;
- }
-
-
-
-
- DBG(UA_Int32 length = 0;
- cstring names = s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].name;
- if (0 == strncmp("ListOf",names,strlen("ListOf"))) {
- names = &names[strlen("ListOf")];
- length = strlen(names);
- } else if ( 0 == strncmp("References",names,strlen("References"))){
- length = strlen(names) - 1;
- } else if ( 0 == strncmp("Aliases",names,strlen("Aliases"))){
- length = strlen(names) - 2;
- }
- printf("UA_TypedArray_decodeXML - add handler for {%.*s}\n", length, names));
-
-
- } else {
-
- if (dst->size < 0 || dst->size == 0) {
- dst->size = 1;
- UA_alloc((void** )&(dst->elements), dst->size * sizeof(void*));
- DBG(printf("UA_TypedArray_decodeXML - allocate elements:dst=%p, aliases=%p, size=%d\n", (void* )dst, (void* )(dst->elements),dst->size));
- } else {
- dst->size++;
- dst->elements = realloc(dst->elements, dst->size * sizeof(void*));
- DBG(printf("UA_TypedArray_decodeXML - reallocate elements:dst=%p, aliases=%p, size=%d\n", (void* )dst,(void* )(dst->elements), dst->size));
- }
-
- DBG_VERBOSE(printf("UA_TypedArray_decodeXML - assign element[%d], src=%p\n", dst->size - 1, (void* )attr));
-
- DBG_VERBOSE(printf("UA_TypedArray_decodeXML - clear %p\n",(void* ) (s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj)));
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = UA_NULL;
- }
- return UA_SUCCESS;
- }
- _Bool UA_NodeId_isBuiltinType(UA_NodeId* nodeid) {
- return (nodeid->namespace == 0 &&
- nodeid->identifier.numeric >= UA_BOOLEAN_NS0 &&
- nodeid->identifier.numeric <= UA_DIAGNOSTICINFO_NS0
- );
- }
- #ifdef DEBUG
- void print_node(UA_Node const * node) {
- if (node != UA_NULL) {
- UA_NodeId_printf("node.nodeId=", &(node->nodeId));
- printf("\t.browseName='%.*s'\n", node->browseName.name.length, node->browseName.name.data);
- printf("\t.displayName='%.*s'\n", node->displayName.text.length, node->displayName.text.data);
- printf("\t.description='%.*s%s'\n", node->description.text.length > 40 ? 40 : node->description.text.length,
- node->description.text.data, node->description.text.length > 40 ? "..." : "");
- printf("\t.nodeClass=%d\n", node->nodeClass);
- printf("\t.writeMask=%d\n", node->writeMask);
- printf("\t.userWriteMask=%d\n", node->userWriteMask);
- printf("\t.references.size=%d\n", node->referencesSize);
- UA_Int32 i;
- for(i = 0;i < node->referencesSize;i++) {
- printf("\t\t.element[%d]", i);
- UA_ReferenceNode_println("=", &node->references[i]);
- }
- switch(node->nodeClass) {
- case UA_NODECLASS_VARIABLE:
- {
- UA_VariableNode const *p = (UA_VariableNode const *)node;
- printf("\t----- UA_VariableNode ----- \n");
- UA_NodeId_printf("\t.dataType=", &(p->dataType));
- printf("\t.valueRank=%d\n", p->valueRank);
- printf("\t.accessLevel=%d\n", p->accessLevel);
- printf("\t.userAccessLevel=%d\n", p->userAccessLevel);
- printf("\t.arrayDimensionsSize=%d\n", p->arrayDimensionsSize);
- printf("\t.minimumSamplingInterval=%f\n", p->minimumSamplingInterval);
- printf("\t.historizing=%d\n", p->historizing);
- printf("\t----- UA_Variant ----- \n");
- printf("\t.value.type.name=%s\n", p->value.vt->name);
- printf("\t.value.array.length=%d\n", p->value.arrayLength);
- UA_Int32 i;
- UA_Byte *data = (UA_Byte *)p->value.data;
- for(i = 0;i < p->value.arrayLength || (p->value.arrayLength == -1 && i == 0);++i) {
- UA_Byte *currentData = data + (i*p->value.vt->memSize);
- printf("\t.value.array.element[%d]=%p", i, currentData);
- switch(p->value.vt->typeId.identifier.numeric) {
- case UA_LOCALIZEDTEXT_NS0:
- {
- if(p->value.data != UA_NULL) {
- UA_LocalizedText *ltp = (UA_LocalizedText *)currentData;
- printf(",locale={%d,{%.*s}},text={%d,{%.*s}}", ltp->locale.length,
- ltp->locale.length, ltp->locale.data, ltp->text.length,
- ltp->text.length, ltp->text.data);
- }
- }
- break;
- case UA_EXTENSIONOBJECT_NS0:
- {
- if(p->value.data != UA_NULL) {
- UA_ExtensionObject *eo = (UA_ExtensionObject *)currentData;
- if(eo == UA_NULL)
- printf(",(null)");
- else
- printf(",enc=%d,typeId={i=%d}", eo->encoding, eo->typeId.identifier.numeric);
- }
- }
- break;
- default:
- break;
- }
- printf("\n");
- }
- }
- break;
-
- default:
- break;
- }
- }
- }
- #endif
- UA_Int32 UA_NodeSetAlias_decodeXmlFromStack(XML_Stack *s, XML_Attr *attr, UA_NodeSetAlias *dst, _Bool isStart) {
- DBG_VERBOSE(printf("UA_NodeSetAlias entered with dst=%p,isStart=%d\n", (void * )dst, isStart));
- if(isStart) {
-
- if(dst == UA_NULL) {
- UA_NodeSetAlias_new(&dst);
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = (void *)dst;
- }
-
- s->parent[s->depth].len = 0;
- XML_Stack_addChildHandler(s, "Alias", strlen("Alias"), (XML_decoder)UA_String_decodeXmlFromStack, UA_STRING,
- &(dst->alias));
- XML_Stack_addChildHandler(s, "Value", strlen("Value"), (XML_decoder)UA_String_decodeXmlFromStack, UA_STRING,
- &(dst->value));
- XML_Stack_handleTextAsElementOf(s, "Data", 1);
-
- UA_Int32 i;
- for(i = 0;attr[i];i += 2) {
- if(0 == strncmp("Alias", attr[i], strlen("Alias")))
- UA_String_copycstring(attr[i + 1], &(dst->alias));
- else if(0 == strncmp("Value", attr[i], strlen("Value")))
- UA_String_copycstring(attr[i + 1], &(dst->value));
- else {
- DBG_ERR(XML_Stack_print(s)); DBG_ERR(printf("%s - unknown attribute\n", attr[i]));
- }
- }
- }
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSetAliases_decodeXmlFromStack(XML_Stack *s, XML_Attr *attr, UA_NodeSetAliases *dst, _Bool isStart) {
- DBG_VERBOSE(printf("UA_NodeSetALiases entered with dst=%p,isStart=%d\n", (void * )dst, isStart));
- if(isStart) {
- if(dst == UA_NULL) {
- UA_NodeSetAliases_new(&dst);
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = (void *)dst;
- }
- s->parent[s->depth].len = 0;
- XML_Stack_addChildHandler(s, "Alias", strlen(
- "Alias"), (XML_decoder)UA_NodeSetAlias_decodeXmlFromStack, UA_INVALIDTYPE,
- UA_NULL);
- } else {
-
- if(dst->size < 0 || dst->size == 0) {
- dst->size = 1;
- UA_alloc((void ** )&(dst->aliases), dst->size * sizeof(UA_NodeSetAlias *));
- DBG_VERBOSE(
- printf("allocate aliases:dst=%p, aliases=%p, size=%d\n", (void * )dst, (void * )(dst->aliases),
- dst->size));
- } else {
- dst->size++;
- dst->aliases = realloc(dst->aliases, dst->size * sizeof(UA_NodeSetAlias *));
- DBG_VERBOSE(
- printf("reallocate aliases:dst=%p, aliases=%p, size=%d\n", (void * )dst, (void * )(dst->aliases),
- dst->size));
- }
-
- DBG_VERBOSE(printf("assign alias:dst=%p, src=%p\n", (void * )dst->aliases[dst->size - 1], (void * )attr));
- dst->aliases[dst->size - 1] = (UA_NodeSetAlias *)attr;
- DBG_VERBOSE(printf("UA_NodeSetAliases clears %p\n",
- (void * )(s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj)));
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = UA_NULL;
- }
- return UA_SUCCESS;
- }
- UA_Int32 UA_NodeSet_decodeXmlFromStack(XML_Stack *s, XML_Attr *attr, UA_NodeSet *dst, _Bool isStart) {
- DBG_VERBOSE(printf("UA_NodeSet entered with dst=%p,isStart=%d\n", (void * )dst, isStart));
- if(isStart) {
- if(dst == UA_NULL) {
- UA_NodeSet_new(&dst, 99);
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = (void *)dst;
- }
- s->parent[s->depth].len = 0;
- XML_Stack_addChildHandler(s, "Aliases", strlen(
- "Aliases"), (XML_decoder)UA_NodeSetAliases_decodeXmlFromStack, UA_INVALIDTYPE,
- &(dst->aliases));
- XML_Stack_addChildHandler(s, "UADataType", strlen(
- "UADataType"), (XML_decoder)UA_DataTypeNode_decodeXmlFromStack, UA_DATATYPENODE,
- UA_NULL);
- XML_Stack_addChildHandler(s, "UAVariableType", strlen(
- "UAVariableType"), (XML_decoder)UA_VariableTypeNode_decodeXmlFromStack,
- UA_VARIABLETYPENODE, UA_NULL);
- XML_Stack_addChildHandler(s, "UAVariable", strlen(
- "UAVariable"), (XML_decoder)UA_VariableNode_decodeXmlFromStack, UA_VARIABLENODE,
- UA_NULL);
- XML_Stack_addChildHandler(s, "UAObjectType", strlen(
- "UAObjectType"), (XML_decoder)UA_ObjectTypeNode_decodeXmlFromStack,
- UA_OBJECTTYPENODE, UA_NULL);
- XML_Stack_addChildHandler(s, "UAObject", strlen(
- "UAObject"), (XML_decoder)UA_ObjectNode_decodeXmlFromStack, UA_OBJECTNODE,
- UA_NULL);
- } else {
- if(s->parent[s->depth - 1].activeChild == 0 && attr != UA_NULL) {
- UA_NodeSetAliases *aliases = (UA_NodeSetAliases *)attr;
- DBG(printf("UA_NodeSet_decodeXml - finished aliases: aliases=%p, size=%d\n", (void *)aliases,
- (aliases == UA_NULL) ? -1 : aliases->size));
- s->aliases = aliases;
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = UA_NULL;
- } else {
- UA_Node* node = (UA_Node*) attr;
- DBG(printf("UA_NodeSet_decodeXML - finished node: node=%p\n", (void* )node));
- Namespace_insert(dst->ns, &node, 0);
- DBG(printf("UA_NodeSet_decodeXml - Inserting "));
- s->parent[s->depth - 1].children[s->parent[s->depth - 1].activeChild].obj = UA_NULL;
- }
- }
- return UA_SUCCESS;
- }
- void XML_Stack_startElement(void *data, const char *el, const char **attr) {
- XML_Stack *s = (XML_Stack *)data;
- int i;
- XML_Parent *cp = &s->parent[s->depth];
- for(i = 0;i < cp->len;i++) {
- if(0 == strncmp(cp->children[i].name, el, cp->children[i].length)) {
- DBG_VERBOSE(XML_Stack_print(s));
- DBG_VERBOSE(printf("%s - processing\n", el));
- cp->activeChild = i;
- s->depth++;
- s->parent[s->depth].name = el;
- s->parent[s->depth].len = 0;
- s->parent[s->depth].textAttribIdx = -1;
- s->parent[s->depth].activeChild = -1;
-
- cp->children[i].elementHandler(data, attr, cp->children[i].obj, TRUE);
- return;
- }
- }
- DBG_VERBOSE(XML_Stack_print(s));
- DBG_VERBOSE(printf("%s - rejected\n", el));
- s->depth++;
- s->parent[s->depth].name = el;
- s->parent[s->depth].len = 0;
- }
- UA_Int32 XML_isSpace(cstring s, int len) {
- int i;
- for(i = 0;i < len;i++) {
- if(!isspace(s[i]))
- return UA_FALSE;
- }
- return UA_TRUE;
- }
- void XML_Stack_handleText(void * data, const char *txt, int len) {
-
- if (len > 0 && !XML_isSpace(txt, len)) {
-
- UA_ByteString src = { len+1, (UA_Byte*) txt };
- UA_ByteString *dst;
- UA_ByteString_new(&dst);
- UA_ByteString_copy(&src,dst);
- dst->data[len] = 0;
-
-
-
-
-
-
- }
- }
- char* theGatherBuffer;
- void textGatherListTotalLength(void* payload) {
- UA_ByteString* b = (UA_ByteString*) payload;
- #ifdef DEBUG
- UA_ByteString_printf("\t",b);
- #endif
- UA_memcpy(theGatherBuffer,b->data,b->length-1);
- theGatherBuffer += (b->length-1);
- }
- void XML_Stack_endElement(void *data, const char *el) {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
|