axis2_status_t AXIS2_CALL axis2_libxml2_writer_wrapper_write_empty_element_with_namespace_prefix( axiom_xml_writer_t * writer, const axutil_env_t * env, axis2_char_t * localname, axis2_char_t * namespace_uri, axis2_char_t * prefix) { axis2_libxml2_writer_wrapper_impl_t *writer_impl = NULL; int status = 0; AXIS2_ENV_CHECK(env, AXIS2_FAILURE); AXIS2_PARAM_CHECK(env->error, localname, AXIS2_FAILURE); AXIS2_PARAM_CHECK(env->error, namespace_uri, AXIS2_FAILURE); AXIS2_PARAM_CHECK(env->error, prefix, AXIS2_FAILURE); writer_impl = AXIS2_INTF_TO_IMPL(writer); status = xmlTextWriterStartElementNS(writer_impl->xml_writer, BAD_CAST prefix, BAD_CAST localname, BAD_CAST NULL); if(status < 0) { AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_START_ELEMENT_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE); return AXIS2_FAILURE; } status = xmlTextWriterEndElement(writer_impl->xml_writer); if(status < 0) { AXIS2_HANDLE_ERROR(env, AXIS2_ERROR_WRITING_EMPTY_ELEMENT_WITH_NAMESPACE_PREFIX, AXIS2_FAILURE); return AXIS2_FAILURE; } return AXIS2_SUCCESS; }
std::string XMLSchema::xml() const { xmlBuffer *b = xmlBufferCreate(); xmlTextWriterPtr w = xmlNewTextWriterMemory(b, 0); xmlTextWriterSetIndent(w, 1); xmlTextWriterStartDocument(w, NULL, "utf-8", NULL); xmlTextWriterStartElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"PointCloudSchema", NULL); xmlTextWriterWriteAttributeNS(w, (const xmlChar*) "xmlns", (const xmlChar*)"pc", NULL, (const xmlChar*)"http://pointcloud.org/schemas/PC/"); xmlTextWriterWriteAttributeNS(w, (const xmlChar*)"xmlns", (const xmlChar*)"xsi", NULL, (const xmlChar*)"http://www.w3.org/2001/XMLSchema-instance"); writeXml(w); xmlTextWriterEndElement(w); xmlTextWriterEndDocument(w); std::string output((const char *)b->content, b->use); xmlFreeTextWriter(w); xmlBufferFree(b); return output; }
celix_status_t endpointDescriptorWriter_writeDocument(endpoint_descriptor_writer_pt writer, array_list_pt endpoints, char **document) { celix_status_t status = CELIX_SUCCESS; int rc; rc = xmlTextWriterStartDocument(writer->writer, NULL, "UTF-8", NULL); if (rc < 0) { status = CELIX_BUNDLE_EXCEPTION; } else { rc = xmlTextWriterStartElementNS(writer->writer, NULL, ENDPOINT_DESCRIPTIONS, XMLNS); if (rc < 0) { status = CELIX_BUNDLE_EXCEPTION; } else { unsigned int i; for (i = 0; i < arrayList_size(endpoints); i++) { endpoint_description_pt endpoint = arrayList_get(endpoints, i); status = endpointDescriptorWriter_writeEndpoint(writer, endpoint); } if (status == CELIX_SUCCESS) { rc = xmlTextWriterEndElement(writer->writer); if (rc < 0) { status = CELIX_BUNDLE_EXCEPTION; } else { rc = xmlTextWriterEndDocument(writer->writer); if (rc < 0) { status = CELIX_BUNDLE_EXCEPTION; } else { *document = (char *) writer->buffer->content; } } } } } return status; }
bool c_XMLWriter::t_writeelementns(CStrRef prefix, CStrRef name, CStrRef uri, CStrRef content /* = null_string */) { INSTANCE_METHOD_INJECTION_BUILTIN(XMLWriter, XMLWriter::writeelementns); if (xmlValidateName((xmlChar*)name.data(), 0)) { raise_warning("invalid element name: %s", name.data()); return false; } int ret = -1; if (m_ptr) { if (content.isNull()) { ret = xmlTextWriterStartElementNS(m_ptr, (xmlChar*)prefix.data(), (xmlChar*)name.data(), (xmlChar*)uri.data()); if (ret == -1) return false; ret = xmlTextWriterEndElement(m_ptr); if (ret == -1) return false; } else { ret = xmlTextWriterWriteElementNS(m_ptr, (xmlChar*)prefix.data(), (xmlChar*)name.data(), (xmlChar*)uri.data(), (xmlChar*)content.data()); } } return ret != -1; }
void cpe_lang_export(const struct cpe_lang_model *spec, xmlTextWriterPtr writer) { __attribute__nonnull__(spec); __attribute__nonnull__(writer); xmlTextWriterStartElementNS(writer, NULL, TAG_PLATFORM_SPEC_STR, BAD_CAST XMLNS_CPE2L); OSCAP_FOREACH(cpe_platform, p, cpe_lang_model_get_platforms(spec), // dump its contents to XML tree cpe_platform_export(p, writer);)
static void writeElement(Serialization *serialization, DFNode *element, int depth) { const TagDecl *tagDecl = DFNameMapNameForTag(serialization->doc->map,element->tag); assert(tagDecl != NULL); const NamespaceDecl *nsDecl = DFNameMapNamespaceForID(serialization->doc->map,tagDecl->namespaceID); assert(nsDecl != NULL); const xmlChar *prefix = (const xmlChar *)nsDecl->prefix; const xmlChar *localName = (const xmlChar *)tagDecl->localName; if (serialization->indent && (element->parent != element->doc->docNode)) xmlTextWriterWriteRawLen(serialization->writer,INDENT,1+depth); if (serialization->html || (tagDecl->namespaceID == serialization->defaultNS)) xmlTextWriterStartElement(serialization->writer,localName); else xmlTextWriterStartElementNS(serialization->writer,prefix,localName,NULL); if ((element->parent == serialization->doc->docNode) && !serialization->html) writeNamespaceDeclarations(serialization,element); writeAttributes(serialization,element); // Check if all children are text nodes. If this is true; we should treat them as if they are a single text // node, and not do any indentation. int allChildrenText = 1; for (DFNode *child = element->first; child != NULL; child = child->next) { if (child->tag != DOM_TEXT) allChildrenText = 0; } if (allChildrenText) { int oldIndent = serialization->indent; serialization->indent = 0; for (DFNode *child = element->first; child != NULL; child = child->next) writeNode(serialization,child,depth+2); serialization->indent = oldIndent; } else { for (DFNode *child = element->first; child != NULL; child = child->next) writeNode(serialization,child,depth+2); } if (serialization->indent && (element->first != NULL) && !allChildrenText) { if ((element->first != element->last) || (element->first->tag != DOM_TEXT)) xmlTextWriterWriteRawLen(serialization->writer,INDENT,1+depth); } if (serialization->html && (element->first == NULL) && HTML_requiresCloseTag(element->tag)) { xmlTextWriterWriteString(serialization->writer,(xmlChar *)""); } xmlTextWriterEndElement(serialization->writer); }
static int cpe_ext_deprecation_export(const struct cpe_ext_deprecation *deprecation, xmlTextWriterPtr writer) { __attribute__nonnull__(writer); __attribute__nonnull__(deprecation); xmlTextWriterStartElementNS(writer, NULL, BAD_CAST TAG_CPE_EXT_DEPRECATION_STR, BAD_CAST XMLNS_CPE2D3_EXTENSION); if (deprecation->date != NULL) { xmlTextWriterWriteAttribute(writer, BAD_CAST ATTR_DATE_STR, BAD_CAST deprecation->date); } OSCAP_FOREACH(cpe_ext_deprecatedby, d, oscap_iterator_new(deprecation->deprecatedbys), cpe_ext_deprecatedby_export(d, writer););
bool c_XMLWriter::t_startelementns(const String& prefix, const String& name, const String& uri) { if (xmlValidateName((xmlChar*)name.data(), 0)) { raise_warning("invalid element name: %s", name.data()); return false; } int ret = -1; if (m_ptr) { ret = xmlTextWriterStartElementNS(m_ptr, (xmlChar*)prefix.data(), (xmlChar*)name.data(), (xmlChar*)uri.data()); } return ret != -1; }
/** * Writes a Persona to XML under element name "{http://api.ifyouwannabecool.com/persona}persona". * * @param writer The XML writer. * @param _persona The Persona to write. * @param writeNamespaces Whether to write the namespace prefixes. * @return 1 if successful, 0 otherwise. */ static int xmlTextWriterWritePersonaPersonaElementNS(xmlTextWriterPtr writer, struct ifyouwannabecool_persona_persona *_persona, int writeNamespaces) { int totalBytes = 0; int status; status = xmlTextWriterStartElementNS(writer, BAD_CAST "persona", BAD_CAST "persona", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write start element {http://api.ifyouwannabecool.com/persona}persona. status: %i\n", status); #endif return status; } totalBytes += status; if (writeNamespaces) { #if DEBUG_ENUNCIATE > 1 printf("writing namespaces for start element {http://api.ifyouwannabecool.com/persona}persona...\n"); #endif status = xmlTextWriterWriteAttribute(writer, BAD_CAST "xmlns:persona", BAD_CAST "http://api.ifyouwannabecool.com/persona"); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write namespace attribute xmlns:persona. status: %i\n", status); #endif return status; } totalBytes += status; } #if DEBUG_ENUNCIATE > 1 printf("writing type {http://api.ifyouwannabecool.com/persona}persona for root element {http://api.ifyouwannabecool.com/persona}persona...\n"); #endif status = xmlTextWriterWritePersonaPersonaType(writer, _persona); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write type for start element {http://api.ifyouwannabecool.com/persona}persona. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to end element {http://api.ifyouwannabecool.com/persona}persona. status: %i\n", status); #endif return status; } totalBytes += status; return totalBytes; }
/** * Writes a SocialGroup to XML under element name "{http://api.ifyouwannabecool.com/link}socialGroup". * * @param writer The XML writer. * @param _socialGroup The SocialGroup to write. * @param writeNamespaces Whether to write the namespace prefixes. * @return 1 if successful, 0 otherwise. */ static int xmlTextWriterWriteLinkSocialGroupElementNS(xmlTextWriterPtr writer, struct ifyouwannabecool_link_socialGroup *_socialGroup, int writeNamespaces) { int totalBytes = 0; int status; status = xmlTextWriterStartElementNS(writer, BAD_CAST "link", BAD_CAST "socialGroup", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write start element {http://api.ifyouwannabecool.com/link}socialGroup. status: %i\n", status); #endif return status; } totalBytes += status; if (writeNamespaces) { #if DEBUG_ENUNCIATE > 1 printf("writing namespaces for start element {http://api.ifyouwannabecool.com/link}socialGroup...\n"); #endif status = xmlTextWriterWriteAttribute(writer, BAD_CAST "xmlns:link", BAD_CAST "http://api.ifyouwannabecool.com/link"); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write namespace attribute xmlns:link. status: %i\n", status); #endif return status; } totalBytes += status; } #if DEBUG_ENUNCIATE > 1 printf("writing type {http://api.ifyouwannabecool.com/link}socialGroup for root element {http://api.ifyouwannabecool.com/link}socialGroup...\n"); #endif status = xmlTextWriterWriteLinkSocialGroupType(writer, _socialGroup); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write type for start element {http://api.ifyouwannabecool.com/link}socialGroup. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to end element {http://api.ifyouwannabecool.com/link}socialGroup. status: %i\n", status); #endif return status; } totalBytes += status; return totalBytes; }
bool cvss_impact_export(const struct cvss_impact *imp, xmlTextWriterPtr writer) { assert(writer != NULL); assert(imp != NULL); bool ret = true; xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "cvss", NS_VULN_URI); if (imp->base_metrics) ret = ret && cvss_metrics_export(imp->base_metrics, writer); if (imp->temporal_metrics) ret = ret && cvss_metrics_export(imp->temporal_metrics, writer); if (imp->environmental_metrics) ret = ret && cvss_metrics_export(imp->environmental_metrics, writer); xmlTextWriterEndElement(writer); return ret; }
bool c_XMLWriter::t_startelementns(CStrRef prefix, CStrRef name, CStrRef uri) { INSTANCE_METHOD_INJECTION_BUILTIN(XMLWriter, XMLWriter::startelementns); if (xmlValidateName((xmlChar*)name.data(), 0)) { raise_warning("invalid element name: %s", name.data()); return false; } int ret = -1; if (m_ptr) { ret = xmlTextWriterStartElementNS(m_ptr, (xmlChar*)prefix.data(), (xmlChar*)name.data(), (xmlChar*)uri.data()); } return ret != -1; }
/** * xml_writer_write_start_element_with_ns: * @writer: A #XmlWriter * @name: element name * @prefix: namespace prefix or NULL * @ns: namespace uri or NULL * * Start an xml element with namespace support. */ void xml_writer_write_start_element_with_ns (XmlWriter *writer, const gchar *name, const gchar *prefix, const gchar *ns) { XmlWriterPrivate *priv; g_return_if_fail (XML_IS_WRITER (writer)); priv = writer->priv; if (priv->writer) xmlTextWriterStartElementNS (priv->writer, CHAR_TO_XML (prefix), CHAR_TO_XML (name), CHAR_TO_XML (ns)); }
bool c_XMLWriter::t_startelementns(const CVarRef prefix, const String& name, const String& uri) { if (xmlValidateName((xmlChar*)name.data(), 0)) { raise_warning("invalid element name: %s", name.data()); return false; } int ret = -1; if (m_ptr) { // To be consistent with Zend PHP, we need to make a distinction between // null strings and empty strings for the prefix. We use CVarRef above // because null strings are coerced to empty strings automatically. xmlChar * prefixData = prefix.isNull() ? nullptr : (xmlChar *)prefix.toString().data(); ret = xmlTextWriterStartElementNS(m_ptr, prefixData, (xmlChar*)name.data(), (xmlChar*)uri.data()); } return ret != -1; }
cpXmlCmdOutput::cpXmlCmdOutput( const char* ResultDocumentFileName ) : encoding( (const xmlChar*) "ISO-8859-1" ) , cpXmlCmdNamespace( (const xmlChar*) "http://www.XmlCommandLine.org/cpXmlCmd/1.0" ) { /* Create a new XmlWriter for uri, with no compression. */ writer = xmlNewTextWriterFilename( ResultDocumentFileName, 0 ); if ( writer == NULL ) throw ::std::runtime_error( "Error creating the xml writer" ); /* Start the document with the xml default for the version, * encoding ISO 8859-1 and the default for the standalone * declaration. */ if ( xmlTextWriterStartDocument( writer, NULL, (const char*)encoding, NULL ) < 0 ) throw ::std::runtime_error( "Error starting the output document" ); // Start root element if ( xmlTextWriterStartElementNS( writer, NULL, (xmlChar *) "cpXmlCmdLog", cpXmlCmdNamespace ) < 0 ) throw ::std::runtime_error( "Error writing to the output document" ); }
static int cpe_ext_deprecatedby_export(const struct cpe_ext_deprecatedby *deprecatedby, xmlTextWriterPtr writer) { __attribute__nonnull__(writer); __attribute__nonnull__(deprecatedby); xmlTextWriterStartElementNS(writer, NULL, BAD_CAST TAG_CPE_EXT_DEPRECATEDBY_STR, BAD_CAST XMLNS_CPE2D3_EXTENSION); if (deprecatedby->name != NULL) { xmlTextWriterWriteAttribute(writer, BAD_CAST ATTR_NAME_STR, BAD_CAST deprecatedby->name); } if (deprecatedby->type != 0) { xmlTextWriterWriteAttribute(writer, BAD_CAST ATTR_TYPE_STR, BAD_CAST oscap_enum_to_string(CPE_EXT_DEPRECATION_MAP, deprecatedby->type)); } xmlTextWriterEndElement(writer); if (xmlGetLastError() != NULL) oscap_setxmlerr(xmlGetLastError()); return 0; }
/** * Writes a ControllerProperties to XML. * * @param writer The XML writer. * @param _controllerProperties The ControllerProperties to write. * @return The total bytes written, or -1 on error; */ static int xmlTextWriterWriteNs0ControllerPropertiesType(xmlTextWriterPtr writer, struct full_ns0_controllerProperties *_controllerProperties) { int status, totalBytes = 0, i; xmlChar *binaryData; if (_controllerProperties->properties != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "properties", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}properties. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _controllerProperties->_sizeof_properties; i++) { #if DEBUG_ENUNCIATE > 1 printf("writing element {}property...\n"); #endif status = xmlTextWriterWriteNs0PropertyElementNS(writer, &(_controllerProperties->properties[i]), 0); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write element {}property. status: %i\n", status); #endif return status; } totalBytes += status; } if (_controllerProperties->properties != NULL) { status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}properties. status: %i\n", status); #endif return status; } totalBytes += status; } return totalBytes; }
static void writeElement(Serialization *serialization, DFNode *element, int depth) { const TagDecl *tagDecl = DFNameMapNameForTag(serialization->doc->map,element->tag); assert(tagDecl != NULL); const NamespaceDecl *nsDecl = DFNameMapNamespaceForID(serialization->doc->map,tagDecl->namespaceID); assert(nsDecl != NULL); const xmlChar *prefix = (const xmlChar *)nsDecl->prefix; const xmlChar *localName = (const xmlChar *)tagDecl->localName; if (serialization->indent && (element->parent != element->doc->docNode)) xmlTextWriterWriteRawLen(serialization->writer,INDENT,1+depth); if (serialization->html || (tagDecl->namespaceID == serialization->defaultNS)) xmlTextWriterStartElement(serialization->writer,localName); else xmlTextWriterStartElementNS(serialization->writer,prefix,localName,NULL); if ((element->parent == serialization->doc->docNode) && !serialization->html) writeNamespaceDeclarations(serialization,element); writeAttributes(serialization,element); for (DFNode *child = element->first; child != NULL; child = child->next) writeNode(serialization,child,depth+2); if (serialization->indent && (element->first != NULL)) { if ((element->first != element->last) || (element->first->tag != DOM_TEXT)) xmlTextWriterWriteRawLen(serialization->writer,INDENT,1+depth); } if (serialization->html && (element->first == NULL) && HTML_requiresCloseTag(element->tag)) { xmlTextWriterWriteString(serialization->writer,(xmlChar *)""); } xmlTextWriterEndElement(serialization->writer); }
bool cvss_metrics_export(const struct cvss_metrics *m, xmlTextWriterPtr writer) { assert(writer != NULL); if (!cvss_metrics_is_valid(m)) return false; const char *elname = NULL; switch (m->category) { case CVSS_BASE: elname = "base_metrics"; break; case CVSS_TEMPORAL: elname = "temporal_metrics"; break; case CVSS_ENVIRONMENTAL: elname = "environmental_metrics"; break; default: assert(false); return false; } xmlTextWriterStartElementNS(writer, NULL, BAD_CAST elname, NS_CVSS_URI); if (m->upgraded_from_version) xmlTextWriterWriteAttribute(writer, BAD_CAST "upgraded-from-version", BAD_CAST m->upgraded_from_version); if (!isnan(m->score)) { char *score_str = oscap_sprintf("%.1f", m->score); xmlTextWriterWriteElementNS(writer, NULL, BAD_CAST "score", NULL, BAD_CAST score_str); free(score_str); } for (size_t i = 0; i < cvss_metrics_component_num(m); ++i) { const struct cvss_valtab_entry *val = cvss_valtab(m->category | i, m->metrics.ANY[i], NULL, NULL); const struct cvss_keytab_entry *key = cvss_keytab(m->category | i, NULL); if (key->xml_str != NULL && val->xml_str != NULL) xmlTextWriterWriteElementNS(writer, NULL, BAD_CAST key->xml_str, NULL, BAD_CAST val->xml_str); } if (m->source) xmlTextWriterWriteElementNS(writer, NULL, BAD_CAST "source", NULL, BAD_CAST m->source); if (m->generated_on_datetime) xmlTextWriterWriteElementNS(writer, NULL, BAD_CAST "generated-on-datetime", NULL, BAD_CAST m->generated_on_datetime); xmlTextWriterEndElement(writer); return true; }
/** * Writes a Nodes to XML. * * @param writer The XML writer. * @param _nodes The Nodes to write. * @return The total bytes written, or -1 on error; */ static int xmlTextWriterWriteNs0NodesType(xmlTextWriterPtr writer, struct full_ns0_nodes *_nodes) { int status, totalBytes = 0, i; xmlChar *binaryData; for (i = 0; i < _nodes->_sizeof_node; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "node", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}node. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {}node for element {}node...\n"); #endif status = xmlTextWriterWriteNs0NodeType(writer, &(_nodes->node[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {}node for element {}node. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}node. status: %i\n", status); #endif return status; } totalBytes += status; } return totalBytes; }
bool c_XMLWriter::t_writeelementns(const String& prefix, const String& name, const String& uri, const String& content /* = null_string */) { if (xmlValidateName((xmlChar*)name.data(), 0)) { raise_warning("invalid element name: %s", name.data()); return false; } int ret = -1; if (m_ptr) { if (content.isNull()) { ret = xmlTextWriterStartElementNS(m_ptr, (xmlChar*)prefix.data(), (xmlChar*)name.data(), (xmlChar*)uri.data()); if (ret == -1) return false; ret = xmlTextWriterEndElement(m_ptr); if (ret == -1) return false; } else { ret = xmlTextWriterWriteElementNS(m_ptr, (xmlChar*)prefix.data(), (xmlChar*)name.data(), (xmlChar*)uri.data(), (xmlChar*)content.data()); } } return ret != -1; }
/** * Writes a SubnetConfigs to XML. * * @param writer The XML writer. * @param _subnetConfigs The SubnetConfigs to write. * @return The total bytes written, or -1 on error; */ static int xmlTextWriterWriteNs0SubnetConfigsType(xmlTextWriterPtr writer, struct full_ns0_subnetConfigs *_subnetConfigs) { int status, totalBytes = 0, i; xmlChar *binaryData; for (i = 0; i < _subnetConfigs->_sizeof_subnetConfig; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "subnetConfig", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}subnetConfig. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {}subnetConfig for element {}subnetConfig...\n"); #endif status = xmlTextWriterWriteNs0SubnetConfigType(writer, &(_subnetConfigs->subnetConfig[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {}subnetConfig for element {}subnetConfig. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}subnetConfig. status: %i\n", status); #endif return status; } totalBytes += status; } return totalBytes; }
/** * Writes a SubnetConfig to XML under element name "subnetConfig". * * @param writer The XML writer. * @param _subnetConfig The SubnetConfig to write. * @param writeNamespaces Whether to write the namespace prefixes. * @return 1 if successful, 0 otherwise. */ static int xmlTextWriterWriteNs0SubnetConfigElementNS(xmlTextWriterPtr writer, struct full_ns0_subnetConfig *_subnetConfig, int writeNamespaces) { int totalBytes = 0; int status; status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "subnetConfig", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write start element {}subnetConfig. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {}subnetConfig for root element {}subnetConfig...\n"); #endif status = xmlTextWriterWriteNs0SubnetConfigType(writer, _subnetConfig); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write type for start element {}subnetConfig. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to end element {}subnetConfig. status: %i\n", status); #endif return status; } totalBytes += status; return totalBytes; }
/** * Writes a NetworkCapabilities to XML under element name "networkCapabilities". * * @param writer The XML writer. * @param _networkCapabilities The NetworkCapabilities to write. * @param writeNamespaces Whether to write the namespace prefixes. * @return 1 if successful, 0 otherwise. */ static int xmlTextWriterWriteNs0NetworkCapabilitiesElementNS(xmlTextWriterPtr writer, struct full_ns0_networkCapabilities *_networkCapabilities, int writeNamespaces) { int totalBytes = 0; int status; status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "networkCapabilities", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write start element {}networkCapabilities. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {}networkCapabilities for root element {}networkCapabilities...\n"); #endif status = xmlTextWriterWriteNs0NetworkCapabilitiesType(writer, _networkCapabilities); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to write type for start element {}networkCapabilities. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("unable to end element {}networkCapabilities. status: %i\n", status); #endif return status; } totalBytes += status; return totalBytes; }
int write_dsig_template(opendcp_t *opendcp, xmlTextWriterPtr xml) { BIO *bio[3]; X509 *x[3]; X509_NAME *issuer_xn[3]; X509_NAME *subject_xn[3]; char *cert[3]; int i; dcp_log(LOG_DEBUG, "xml_sign: write_dsig_template"); if (opendcp->xml_signature.use_external) { /* read certificates from file */ FILE *cp; cp = fopen(opendcp->xml_signature.signer,"rb"); if (cp) { x[0] = PEM_read_X509(cp,NULL,NULL,NULL); fclose(cp); } cp = fopen(opendcp->xml_signature.ca,"rb"); if (cp) { x[1] = PEM_read_X509(cp,NULL,NULL,NULL); fclose(cp); } cp = fopen(opendcp->xml_signature.root,"rb"); if (cp) { x[2] = PEM_read_X509(cp,NULL,NULL,NULL); fclose(cp); } cert[0] = strip_cert_file(opendcp->xml_signature.signer); cert[1] = strip_cert_file(opendcp->xml_signature.ca); cert[2] = strip_cert_file(opendcp->xml_signature.root); } else { /* read certificate from memory */ bio[0] = BIO_new_mem_buf((void *)opendcp_signer_cert, -1); bio[1] = BIO_new_mem_buf((void *)opendcp_ca_cert, -1); bio[2] = BIO_new_mem_buf((void *)opendcp_root_cert, -1); /* save a copy with the BEGIN/END stripped */ cert[0] = strip_cert(opendcp_signer_cert); cert[1] = strip_cert(opendcp_ca_cert); cert[2] = strip_cert(opendcp_root_cert); for (i=0;i<3;i++) { if (bio[i] == NULL) { dcp_log(LOG_ERROR,"Could allocate certificate from memory"); return OPENDCP_ERROR; } x[i] = PEM_read_bio_X509(bio[i], NULL, NULL, NULL); if (!BIO_set_close(bio[i], BIO_NOCLOSE)) { dcp_log(LOG_ERROR,"Could set BIO close flag"); return OPENDCP_ERROR; } if (x[i] == NULL) { dcp_log(LOG_ERROR,"Could not read certificate"); return OPENDCP_ERROR; } } } /* get issuer, subject */ for (i=0;i<3;i++) { issuer_xn[i] = X509_get_issuer_name(x[i]); subject_xn[i] = X509_get_subject_name(x[i]); if (issuer_xn[i] == NULL || subject_xn[i] == NULL) { dcp_log(LOG_ERROR,"Could not parse certificate data"); return OPENDCP_ERROR; } } dcp_log(LOG_DEBUG, "xml_sign: write_dsig_template: start signer"); /* signer */ xmlTextWriterStartElement(xml, BAD_CAST "Signer"); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509Data", NULL); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509IssuerSerial", NULL); xmlTextWriterWriteFormatElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509IssuerName", NULL, "%s", dn_oneline(issuer_xn[0])); xmlTextWriterWriteFormatElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509SerialNumber", NULL, "%ld", ASN1_INTEGER_get(X509_get_serialNumber(x[0]))); xmlTextWriterEndElement(xml); xmlTextWriterWriteFormatElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509SubjectName", NULL, "%s", dn_oneline(subject_xn[0])); xmlTextWriterEndElement(xml); xmlTextWriterEndElement(xml); /* template */ xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "Signature", NULL); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "SignedInfo", NULL); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "CanonicalizationMethod", NULL); xmlTextWriterWriteAttribute(xml, BAD_CAST "Algorithm", BAD_CAST DS_CMA); xmlTextWriterEndElement(xml); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "SignatureMethod", NULL); xmlTextWriterWriteAttribute(xml, BAD_CAST "Algorithm", BAD_CAST DS_SMA[opendcp->ns]); xmlTextWriterEndElement(xml); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "Reference", NULL); xmlTextWriterWriteAttribute(xml, BAD_CAST "URI", BAD_CAST NULL); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST"Transforms", NULL); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "Transform", NULL); xmlTextWriterWriteAttribute(xml, BAD_CAST "Algorithm", BAD_CAST DS_TMA); xmlTextWriterEndElement(xml); xmlTextWriterEndElement(xml); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "DigestMethod", NULL); xmlTextWriterWriteAttribute(xml, BAD_CAST "Algorithm", BAD_CAST DS_DMA); xmlTextWriterEndElement(xml); xmlTextWriterWriteElementNS(xml, BAD_CAST "dsig", BAD_CAST "DigestValue", NULL, BAD_CAST ""); xmlTextWriterEndElement(xml); xmlTextWriterEndElement(xml); xmlTextWriterWriteElementNS(xml, BAD_CAST "dsig", BAD_CAST "SignatureValue", NULL, BAD_CAST ""); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "KeyInfo", NULL); for (i=0;i<3;i++) { xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509Data", NULL); xmlTextWriterStartElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509IssuerSerial", NULL); xmlTextWriterWriteFormatElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509IssuerName", NULL, "%s", dn_oneline(issuer_xn[i])); xmlTextWriterWriteFormatElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509SerialNumber", NULL, "%ld", ASN1_INTEGER_get(X509_get_serialNumber(x[i]))); xmlTextWriterEndElement(xml); xmlTextWriterWriteFormatElementNS(xml, BAD_CAST "dsig", BAD_CAST "X509Certificate", NULL, "%s", cert[i]); xmlTextWriterEndElement(xml); } xmlTextWriterEndElement(xml); /* KeyInfo */ xmlTextWriterEndElement(xml); /* Signature */ if (subject_xn[0]) { free(subject_xn[0]); } for (i=0;i<3;i++) { if (issuer_xn[i]) { free(issuer_xn[i]); } } return OPENDCP_NO_ERROR; }
/** * Writes a NetworkCapabilities to XML. * * @param writer The XML writer. * @param _networkCapabilities The NetworkCapabilities to write. * @return The total bytes written, or -1 on error; */ static int xmlTextWriterWriteNs0NetworkCapabilitiesType(xmlTextWriterPtr writer, struct full_ns0_networkCapabilities *_networkCapabilities) { int status, totalBytes = 0, i; xmlChar *binaryData; for (i = 0; i < _networkCapabilities->_sizeof_node; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "node", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}node. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}node...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->node[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}node. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}node. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_latency; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "latency", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}latency. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}latency...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->latency[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}latency. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}latency. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_macAddressList; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "macAddressList", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}macAddressList. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}macAddressList...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->macAddressList[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}macAddressList. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}macAddressList. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_bandwidth; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "bandwidth", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}bandwidth. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}bandwidth...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->bandwidth[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}bandwidth. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}bandwidth. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_link; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "link", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}link. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}link...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->link[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}link. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}link. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_controller; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "controller", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}controller. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}controller...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->controller[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}controller. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}controller. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_host; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "host", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}host. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}host...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->host[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}host. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}host. status: %i\n", status); #endif return status; } totalBytes += status; } for (i = 0; i < _networkCapabilities->_sizeof_ipAddressList; i++) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "ipAddressList", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}ipAddressList. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}ipAddressList...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, &(_networkCapabilities->ipAddressList[i])); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}ipAddressList. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}ipAddressList. status: %i\n", status); #endif return status; } totalBytes += status; } return totalBytes; }
/** * Writes a Name to XML. * * @param writer The XML writer. * @param _name The Name to write. * @return The total bytes written, or -1 on error; */ static int xmlTextWriterWritePersonaNameType(xmlTextWriterPtr writer, struct ifyouwannabecool_persona_name *_name) { int status, totalBytes = 0, i; xmlChar *binaryData; if (_name->givenName != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "givenName", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}givenName. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}givenName...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, (_name->givenName)); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}givenName. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}givenName. status: %i\n", status); #endif return status; } totalBytes += status; } if (_name->surname != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "surname", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}surname. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}surname...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, (_name->surname)); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}surname. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}surname. status: %i\n", status); #endif return status; } totalBytes += status; } return totalBytes; }
static char * create_resource_list_xml(const LinphoneFriendList *list) { char *xml_content = NULL; MSList *elem; xmlBufferPtr buf; xmlTextWriterPtr writer; int err; if (ms_list_size(list->friends) <= 0) return NULL; buf = xmlBufferCreate(); if (buf == NULL) { ms_error("%s: Error creating the XML buffer", __FUNCTION__); return NULL; } writer = xmlNewTextWriterMemory(buf, 0); if (writer == NULL) { ms_error("%s: Error creating the XML writer", __FUNCTION__); return NULL; } xmlTextWriterSetIndent(writer,1); err = xmlTextWriterStartDocument(writer, "1.0", "UTF-8", NULL); if (err >= 0) { err = xmlTextWriterStartElementNS(writer, NULL, (const xmlChar *)"resource-lists", (const xmlChar *)"urn:ietf:params:xml:ns:resource-lists"); } if (err >= 0) { err = xmlTextWriterWriteAttributeNS(writer, (const xmlChar *)"xmlns", (const xmlChar *)"xsi", NULL, (const xmlChar *)"http://www.w3.org/2001/XMLSchema-instance"); } if (err>= 0) { err = xmlTextWriterStartElement(writer, (const xmlChar *)"list"); } for (elem = list->friends; elem != NULL; elem = elem->next) { LinphoneFriend *friend = (LinphoneFriend *)elem->data; char *uri = linphone_address_as_string_uri_only(friend->uri); if (err >= 0) { err = xmlTextWriterStartElement(writer, (const xmlChar *)"entry"); } if (err >= 0) { err = xmlTextWriterWriteAttribute(writer, (const xmlChar *)"uri", (const xmlChar *)uri); } if (err >= 0) { /* Close the "entry" element. */ err = xmlTextWriterEndElement(writer); } if (uri) ms_free(uri); } if (err >= 0) { /* Close the "list" element. */ err = xmlTextWriterEndElement(writer); } if (err >= 0) { /* Close the "resource-lists" element. */ err = xmlTextWriterEndElement(writer); } if (err >= 0) { err = xmlTextWriterEndDocument(writer); } if (err > 0) { /* xmlTextWriterEndDocument returns the size of the content. */ xml_content = ms_strdup((char *)buf->content); } xmlFreeTextWriter(writer); xmlBufferFree(buf); return xml_content; }
void XMLSchema::writeXml(xmlTextWriterPtr w) const { int pos = 0; for (auto di = m_dims.begin(); di != m_dims.end(); ++di, ++pos) { xmlTextWriterStartElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"dimension", NULL); std::ostringstream position; position << (pos + 1); xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"position", NULL, (const xmlChar*)position.str().c_str()); std::ostringstream size; size << Dimension::size(di->m_dimType.m_type); xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"size", NULL, (const xmlChar*)size.str().c_str()); std::string description = Dimension::description(di->m_dimType.m_id); if (description.size()) xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"description", NULL, (const xmlChar*)description.c_str()); XForm xform = di->m_dimType.m_xform; if (xform.nonstandard()) { std::ostringstream out; out.precision(15); out << xform.m_scale.m_val; std::string scale = out.str(); out.str(std::string()); out << xform.m_offset.m_val; std::string offset = out.str(); out << xform.m_scale.m_val; xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar *)"scale", NULL, (const xmlChar *)scale.data()); xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar *)"offset", NULL, (const xmlChar *)offset.data()); } std::string name = di->m_name; if (name.size()) xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"name", NULL, (const xmlChar*)name.c_str()); xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"interpretation", NULL, (const xmlChar*) Dimension::interpretationName(di->m_dimType.m_type).c_str()); xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"active", NULL, (const xmlChar*)"true"); xmlTextWriterEndElement(w); xmlTextWriterFlush(w); } std::ostringstream orientation; if (m_orientation == Orientation::PointMajor) orientation << "point"; if (m_orientation == Orientation::DimensionMajor) orientation << "dimension"; if (!m_metadata.empty()) { addMetadataEntry(w, m_metadata); } xmlTextWriterWriteElementNS(w, (const xmlChar*) "pc", (const xmlChar*)"orientation", NULL, (const xmlChar*)orientation.str().c_str()); xmlTextWriterWriteElementNS(w, (const xmlChar*)"pc", (const xmlChar*)"version", NULL, (const xmlChar*)PDAL_XML_SCHEMA_VERSION); xmlTextWriterEndElement(w); xmlTextWriterFlush(w); }
/** * Writes a Persona to XML. * * @param writer The XML writer. * @param _persona The Persona to write. * @return The total bytes written, or -1 on error; */ static int xmlTextWriterWritePersonaPersonaType(xmlTextWriterPtr writer, struct ifyouwannabecool_persona_persona *_persona) { int status, totalBytes = 0, i; xmlChar *binaryData; if (_persona->id != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "id", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}id. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}id...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, (_persona->id)); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}id. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}id. status: %i\n", status); #endif return status; } totalBytes += status; } if (_persona->email != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "email", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}email. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}email...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, (_persona->email)); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}email. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}email. status: %i\n", status); #endif return status; } totalBytes += status; } if (_persona->alias != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "alias", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}alias. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://www.w3.org/2001/XMLSchema}string for element {}alias...\n"); #endif status = xmlTextWriterWriteXsStringType(writer, (_persona->alias)); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://www.w3.org/2001/XMLSchema}string for element {}alias. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}alias. status: %i\n", status); #endif return status; } totalBytes += status; } if (_persona->name != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "name", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}name. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing type {http://api.ifyouwannabecool.com/persona}name for element {}name...\n"); #endif status = xmlTextWriterWritePersonaNameType(writer, (_persona->name)); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write type {http://api.ifyouwannabecool.com/persona}name for element {}name. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}name. status: %i\n", status); #endif return status; } totalBytes += status; } if (_persona->picture != NULL) { status = xmlTextWriterStartElementNS(writer, NULL, BAD_CAST "picture", NULL); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write start element {}picture. status: %i\n", status); #endif return status; } totalBytes += status; #if DEBUG_ENUNCIATE > 1 printf("writing binary data for element {}picture...\n"); #endif binaryData = _encode_base64(_persona->picture, _persona->_sizeof_picture); status = xmlTextWriterWriteString(writer, binaryData); free(binaryData); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write binary data for element {}picture. status: %i\n", status); #endif return status; } totalBytes += status; status = xmlTextWriterEndElement(writer); if (status < 0) { #if DEBUG_ENUNCIATE printf("Failed to write end element {}picture. status: %i\n", status); #endif return status; } totalBytes += status; } return totalBytes; }