Пример #1
0
EXTXMLMETHOD int rtAsn1XmlEncOpenType 
(OSCTXT *pctxt, const OSOCTET* data, OSUINT32 nocts, 
 const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix) 
{
   OSUTF8CHAR* qname = 0;
   int stat;

   if (0 != isBinaryData (data, nocts)) {
      const OSUTF8CHAR *ename = (elemName == 0 || strcmp ("", elemName) == 0 ) ? 
         OSUTF8("binext") : elemName;

      qname = rtXmlNewQName (pctxt, ename, nsPrefix);
      
      if (0 != qname) {
         stat = rtXmlEncStartElement (pctxt, qname, 0, 0, TRUE);
         if (stat != 0) return LOG_RTERR (pctxt, stat);
      }
      else return RTERR_NOMEM;

      if (0 != data && nocts > 0) {
         stat = rtXmlEncHexStrValue (pctxt, nocts, data);
         pctxt->state = OSXMLDATA;

         if (stat != 0) return LOG_RTERR (pctxt, stat);
      }

      if (0 != qname) {
         stat = rtXmlEncEndElement (pctxt, qname, 0);
         if (stat != 0) return LOG_RTERR (pctxt, stat);

         rtxMemFreePtr (pctxt, qname);
      }
   }

   else {
      if (0 != elemName) {
         qname = rtXmlNewQName (pctxt, elemName, nsPrefix);

         if (0 != qname) {
            stat = rtXmlEncStartElement (pctxt, qname, 0, 0, TRUE);
            if (stat != 0) return LOG_RTERR (pctxt, stat);
         }
         else return RTERR_NOMEM;
      }

      if (0 != data && nocts > 0) {
         OSRTSAFEMEMCPY (pctxt, data, nocts);
         pctxt->state = OSXMLDATA;
      }

      if (0 != qname) {
         stat = rtXmlEncEndElement (pctxt, qname, 0);
         if (stat != 0) return LOG_RTERR (pctxt, stat);

         rtxMemFreePtr (pctxt, qname);
      }
   }

   return 0;
}
Пример #2
0
EXTXMLMETHOD int rtXmlEncUnicodeData 
(OSCTXT* pctxt, const OSUNICHAR* value, OSUINT32 nchars)
{
   int step;
   OSUINT32 inbufx;
   OSUNICHAR wc;

   for (inbufx = 0; inbufx < nchars; inbufx++) {
      wc = value[inbufx];

      if (wc < 0x80) {
         char c = (char) wc;
         /* One byte sequence */
         OSRTSAFEPUTCHAR (pctxt, c);
      }
      else {
         char outbuf[10];
         int sz;

         for (step = 2; step < 6; ++step)
            if ((wc & encoding_mask[step - 2]) == 0)
               break;
         sz = step;

         /* Copy multi-byte sequence to output buffer */
         outbuf[0] = encoding_byte[step - 2];
         --step;
         do {
            outbuf[step] = (OSOCTET) (0x80 | (wc & 0x3f));
            wc >>= 6;
         }
         while (--step > 0);
         outbuf[0] |= wc;

         OSRTSAFEMEMCPY (pctxt, (void*)outbuf, sz);
      }
   }

   return 0;
}
Пример #3
0
EXTXMLMETHOD int SAX2XMLStreamEndElement
(void *userData, const OSUTF8CHAR* localname, const OSUTF8CHAR* qname)
{
   OSCTXT* pctxt = (OSCTXT*) userData;
   pctxt->level--;

   if (pctxt->state == OSXMLSTART) {
      OSRTSAFEMEMCPY (pctxt, "/>", 2);
   }
   else {
      if (pctxt->state == OSXMLEND) {
         rtXmlEncIndent (pctxt);
      }
      if (0 == rtxCheckBuffer (pctxt, OSUTF8LEN(qname) + 3)) {
         OSRTPUTCHAR (pctxt, '<');
         OSRTPUTCHAR (pctxt, '/');
         OSRTMEMCPY (pctxt, qname, OSUTF8LEN(qname));
         OSRTPUTCHAR (pctxt, '>');
      }
   }
   pctxt->state = OSXMLEND;
   if (0 != localname) {} /* to suppress level 4 warning */
   return 0;
}
Пример #4
0
int XmlEnc_Envelope (OSCTXT* pctxt, Envelope* pvalue, 
   const OSUTF8CHAR* elemName, const OSUTF8CHAR* nsPrefix)
{
   int stat = 0;

   if (0 != elemName) {
      stat = rtXmlEncStartElement (pctxt, elemName, nsPrefix, FALSE);
      if (stat != 0) return LOG_RTERR (pctxt, stat);
   }

   /* add attributes */

   if (pvalue->m.encodingStylePresent) {
      OSRTSAFEMEMCPY (pctxt, OSUTF8(" tns:encodingStyle=\""), 20);

      stat = XmlEnc_EncodingStyle (pctxt, &pvalue->encodingStyle, 0, 0);
      if (stat != 0) return LOG_RTERR (pctxt, stat);

      OSRTSAFEPUTCHAR (pctxt, '"');
   }
   { OSRTDListNode* pnode = pvalue->attr.head;
   size_t len;
   while (0 != pnode) {
      len = rtxUTF8LenBytes (pnode->data);

      stat = rtxCheckBuffer (pctxt, len + 1);
      if (stat != 0) return LOG_RTERR (pctxt, stat);

      OSRTPUTCHAR (pctxt, ' ');
      OSRTMEMCPY (pctxt, pnode->data, len);

      pnode = pnode->next;
   }}

   OSRTSAFEPUTCHAR (pctxt, '>');
   pctxt->flags &= ~OSTERMSTART;
   pctxt->state = OSXMLSTART;

   { const OSUTF8CHAR* savedPrefix = nsPrefix;
   nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8(
      "http://schemas.xmlsoap.org/soap/envelope/"));

   /* encode header */

   if (pvalue->m.headerPresent) {
      stat = XmlEnc_Header (pctxt, &pvalue->header
         , OSUTF8("Header"), nsPrefix);
      if (stat != 0) return LOG_RTERR (pctxt, stat);
   }
   /* encode body */

   stat = XmlEnc_Body (pctxt, &pvalue->body, OSUTF8("Body"), nsPrefix);
   if (stat != 0) return LOG_RTERR (pctxt, stat);

   /* encode elem_list */

   { const OSUTF8CHAR* savedPrefix = nsPrefix;
   nsPrefix = rtXmlNSGetPrefix (pctxt, OSUTF8(
      "http://schemas.xmlsoap.org/soap/envelope/"));

   { OSRTDListNode* pnode = pvalue->elem_list.head;
   while (0 != pnode) {
      if (((OSXSDAny*)pnode->data)->t == OSXSDAny_xmlText) {
         stat = rtXmlEncAnyStr (pctxt, ((OSXSDAny*)pnode->data)->u.xmlText
            , OSUTF8(""), 0);
         if (stat != 0) return LOG_RTERR (pctxt, stat);
      }
      else {
         char buf[40];
         os_snprintf (buf, 40, "%d", ((OSXSDAny*)pnode->data)->t);
         rtxErrAddStrParm (pctxt, buf);
         return LOG_RTERR (pctxt, RTERR_INVOPT);
      }
      pnode = pnode->next;
   }}
   nsPrefix = savedPrefix;
   }

   nsPrefix = savedPrefix;
   }

   stat = rtXmlEncEndElement (pctxt, elemName, nsPrefix);
   if (stat != 0) return LOG_RTERR (pctxt, stat);

   return (stat);
}
Пример #5
0
EXTXMLMETHOD int rtXmlEncStringValue2 
   (OSCTXT* pctxt, const OSUTF8CHAR* value, size_t valueLen)
{
   if (0 != value && 0 != *value) {
      size_t i;      
      if (rtxCtxtTestFlag (pctxt, OSXMLC14N)) {
         /* C14N text node */
         if (pctxt->state == OSXMLDATA) {
            for (i = 0; i < valueLen; i++) {
               switch (value[i]) {
               case '&':
                  OSRTSAFEMEMCPY (pctxt, "&amp;", 5);
                  break;
               case '<': 
                  OSRTSAFEMEMCPY (pctxt, "&lt;", 4);
                  break;
               case '>': 
                  OSRTSAFEMEMCPY (pctxt, "&gt;", 4);
                  break;
               case 0xD:
                  OSRTSAFEMEMCPY (pctxt, "&#xD;", 5);
                  break;
               default:
                  OSRTSAFEPUTCHAR (pctxt, value[i]);
               }
            }
         }
         else { /* C14N attribute node */
            for (i = 0; i < valueLen; i++) {
               switch (value[i]) {
               case '&':
                  OSRTSAFEMEMCPY (pctxt, "&amp;", 5);
                  break;
               case '"':
                  OSRTSAFEMEMCPY (pctxt, "&quot;", 6);
                  break;
               case 0x9:
                  OSRTSAFEMEMCPY (pctxt, "&#x9;", 5);
                  break;
               case 0xA:
                  OSRTSAFEMEMCPY (pctxt, "&#xA;", 5);
                  break;
               case 0xD:
                  OSRTSAFEMEMCPY (pctxt, "&#xD;", 5);
                  break;
               case '<': 
                  OSRTSAFEMEMCPY (pctxt, "&lt;", 4);
                  break;
               default:
                  OSRTSAFEPUTCHAR (pctxt, value[i]);
               }
            }
         }
      }
      else { /* not C14N */
         for (i = 0; i < valueLen; i++) {
            switch (value[i]) {
            case '<': 
               OSRTSAFEMEMCPY (pctxt, "&lt;", 4);
               break;
            case '>': 
               OSRTSAFEMEMCPY (pctxt, "&gt;", 4);
               break;
            case '&': 
               OSRTSAFEMEMCPY (pctxt, "&amp;", 5);
               break;
            case '\'': 
               OSRTSAFEMEMCPY (pctxt, "&apos;", 6);
               break;
            case '"': 
               OSRTSAFEMEMCPY (pctxt, "&quot;", 6);
               break;
            default:
               OSRTSAFEPUTCHAR (pctxt, value[i]);
            }
         }
      }
   }   
   OSRT_CHECK_EVAL_DATE1(pctxt);

   return 0;
}