Beispiel #1
0
EXTERN int asn1E_Ns1_Max_height (OSCTXT* pctxt,
   Ns1_Max_height *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   ll0 = 0;
   switch (pvalue->t)
   {
      case 1:
         ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
            xe_utf8str (pctxt, pvalue->u.alt, ASN1IMPL));
         if (ll < 0) return LOG_RTERR (pctxt, ll);
         ll1 += ll;
         break;

      case 2:
         ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|1,
            xe_utf8str (pctxt, pvalue->u.alt_1, ASN1IMPL));
         if (ll < 0) return LOG_RTERR (pctxt, ll);
         ll1 += ll;
         break;

      default:
         return LOG_RTERR (pctxt, RTERR_INVOPT);
   }
   ll0 += ll1;

   return (ll0);
}
Beispiel #2
0
EXTERN int asn1E_Detail (OSCTXT* pctxt,
   Detail *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;
   OSRTDListNode* pnode2;
   int ll2 = 0;

   /* encode elem_list */

   pnode2 = pvalue->elem_list.tail;
   while (0 != pnode2) {
      switch (((OSXSDAny*)pnode2->data)->t) {
      case OSXSDAny_binary:
         ll = xe_OpenType (pctxt, ((OSXSDAny*)pnode2->data)->u.binary->data, 
            ((OSXSDAny*)pnode2->data)->u.binary->numocts);
         break;
      case OSXSDAny_xmlText:
         ll = xe_utf8str (pctxt, ((OSXSDAny*)pnode2->data)->
            u.xmlText, ASN1EXPL);
         break;
      }
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      else ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   /* encode attr */

   pnode2 = pvalue->attr.tail;
   while (0 != pnode2) {
      ll = xe_utf8str (pctxt, ((const OSUTF8CHAR*)pnode2->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #3
0
EXTERN int asn1E_InvoiceType (OSCTXT* pctxt,
   InvoiceType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;
   OSRTDListNode* pnode2;
   int ll2 = 0;

   /* encode summary */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2,
      asn1E_InvoiceSummaryType (pctxt, &pvalue->summary, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode lineItem_list */

   if (!(pvalue->lineItem_list.count >= 1U)) {
      rtxErrAddStrParm (pctxt, "InvoiceType.lineItem_list.count");
      rtxErrAddIntParm (pctxt, (int)pvalue->lineItem_list.count);
      return LOG_RTERR (pctxt, RTERR_CONSVIO);
   }

   pnode2 = pvalue->lineItem_list.tail;
   while (0 != pnode2) {
      ll = asn1E_InvoiceLineItemType (pctxt, ((InvoiceLineItemType*)pnode2->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   /* encode header */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
      asn1E_InvoiceHeaderType (pctxt, &pvalue->header, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #4
0
int xe_oid64 (OSCTXT* pctxt, ASN1OID64 *object_p, ASN1TagType tagging)
{
   OSUINT64	subid;
   register int	aal, ll, i;

   /* Validate given object ID by applying ASN.1 rules */

   if (0 == object_p) return LOG_RTERR(pctxt, ASN_E_INVOBJID);
   if (object_p->numids < 2) return LOG_RTERR(pctxt, ASN_E_INVOBJID);
   if (object_p->subid[0] > 2) return LOG_RTERR(pctxt, ASN_E_INVOBJID);
   if (object_p->subid[0] != 2 && object_p->subid[1] > 39) 
      return LOG_RTERR(pctxt, ASN_E_INVOBJID);

   /* Passed checks, encode object identifier */
 
   for (aal = 0, i = object_p->numids - 1; i >= 1 && aal >= 0; i--)
   {
      subid = (i == 1) ? 
	 (object_p->subid[0] * 40) + object_p->subid[1] : object_p->subid[i];

      aal = ((ll = xe_ident64 (pctxt, subid)) >= 0) ? aal + ll : ll;
   }

   if (tagging == ASN1EXPL && aal > 0) 
      aal = xe_tag_len (pctxt, TM_UNIV|TM_PRIM|ASN_ID_OBJID, aal);

   return (aal);
}
Beispiel #5
0
EXTERN int asn1E_Model (OSCTXT* pctxt,
   Model *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;
   OSRTDListNode* pnode2;
   int ll2 = 0;

   /* encode element14_list */

   pnode2 = pvalue->element14_list.tail;
   while (0 != pnode2) {
      ll = asn1E_Odf_Element14 (pctxt, (Odf_Element14*)((Odf_Element14*)pnode2->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   /* encode attr */

   pnode2 = pvalue->attr.tail;
   while (0 != pnode2) {
      ll = xe_utf8str (pctxt, ((const OSUTF8CHAR*)pnode2->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #6
0
EXTERN int asn1E_Fault (OSCTXT* pctxt,
   Fault *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode detail */

   if (pvalue->m.detailPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
         asn1E_Detail (pctxt, &pvalue->detail, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode faultactor */

   if (pvalue->m.faultactorPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|2,
         xe_utf8str (pctxt, pvalue->faultactor, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode faultstring */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|1,
      xe_utf8str (pctxt, pvalue->faultstring, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode faultcode */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
      asn1E_XSD_QName (pctxt, &pvalue->faultcode, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #7
0
EXTERN int asn1E_Seisdata (OSCTXT* pctxt,
   Seisdata *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode data */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|5,
      asn1E_Xcrdtype (pctxt, &pvalue->data, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode cdp */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|4,
      asn1E_Xcrdtype (pctxt, &pvalue->cdp, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode zval */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
      asn1E_Xcrdtype (pctxt, &pvalue->zval, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode ycrd */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2,
      asn1E_Xcrdtype (pctxt, &pvalue->ycrd, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode xcrd */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1,
      asn1E_Xcrdtype (pctxt, &pvalue->xcrd, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode head */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
      asn1E_Headtype (pctxt, &pvalue->head, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
EXTERN int asn1E_UBL_OrderChange_1_0_EarliestDateType (OSCTXT* pctxt,
   UBL_OrderChange_1_0_EarliestDateType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode base */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
      xe_utf8str (pctxt, pvalue->base, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
EXTERN int asn1E_UBL_OrderChange_1_0_LineItemCountNumericType (OSCTXT* pctxt,
   UBL_OrderChange_1_0_LineItemCountNumericType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode base */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
      xe_real (pctxt, &pvalue->base, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #10
0
int xe_octstr (OSCTXT*  pctxt, 
               const OSOCTET* object_p, 
               OSUINT32   numocts, 
               ASN1TagType tagging)
{
   int aal = (0 == object_p) ? 0 : xe_memcpy (pctxt, object_p, numocts);

   if (tagging == ASN1EXPL && aal >= 0) 
      aal = xe_tag_len (pctxt, TM_UNIV|TM_PRIM|ASN_ID_OCTSTR, aal);

   LCHECKBER (pctxt);

   return (aal);
}
EXTERN int asn1E_UBL_OrderChange_1_0_ValidityDurationMeasureType (OSCTXT* pctxt,
   UBL_OrderChange_1_0_ValidityDurationMeasureType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode base */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|2,
      xe_real (pctxt, &pvalue->base, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode measureUnitCodeListVersionID */

   if (pvalue->m.measureUnitCodeListVersionIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|1,
         xe_utf8str (pctxt, pvalue->measureUnitCodeListVersionID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode measureUnitCode */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
      xe_utf8str (pctxt, pvalue->measureUnitCode, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
EXTERN int asn1E_PackagesCountQuantityType (OSCTXT* pctxt,
   PackagesCountQuantityType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode base */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|4,
      xe_real (pctxt, &pvalue->base, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode quantityUnitCodeListID */

   if (pvalue->m.quantityUnitCodeListIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|3,
         xe_utf8str (pctxt, pvalue->quantityUnitCodeListID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode quantityUnitCodeListAgencyName */

   if (pvalue->m.quantityUnitCodeListAgencyNamePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|2,
         xe_utf8str (pctxt, pvalue->quantityUnitCodeListAgencyName, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode quantityUnitCodeListAgencyID */

   if (pvalue->m.quantityUnitCodeListAgencyIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|1,
         xe_utf8str (pctxt, pvalue->quantityUnitCodeListAgencyID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode quantityUnitCode */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
      xe_utf8str (pctxt, pvalue->quantityUnitCode, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #13
0
EXTERN int asn1E_Xcrdtype (OSCTXT* pctxt,
   Xcrdtype *pvalue, ASN1TagType tagging)
{
   int xx1;
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   for (xx1 = (pvalue->n - 1); xx1 >= 0; xx1--)
   {
      ll = xe_real (pctxt, &pvalue->elem[xx1], ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #14
0
int xe_16BitCharStr (OSCTXT* pctxt, Asn116BitCharString* object_p,
                     ASN1TagType tagging, ASN1TAG tag)
{
   OSOCTET lbuf[2];
   int i, ll, ll0 = 0;

   if (0 == object_p) return LOG_RTERR(pctxt, RTERR_BADVALUE);

   for (i = object_p->nchars - 1; i >= 0; i--) {
      lbuf[0] = (OSOCTET) (object_p->data[i] / 256);
      lbuf[1] = (OSOCTET) (object_p->data[i] % 256);

      ll = xe_memcpy (pctxt, lbuf, 2);
      if (ll >= 0) ll0 += ll; else return (ll);
   }

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, tag, ll0);

   return (ll0);
}
EXTERN int asn1E_OrderChangeType_orderLine_list (OSCTXT* pctxt,
   OrderChangeType_orderLine_list *pvalue, ASN1TagType tagging)
{
   OSRTDListNode* pnode;
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   pnode = pvalue->tail;
   while (0 != pnode) {
      ll = asn1E_OrderLine (pctxt, ((OrderLine*)pnode->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;

      pnode = pnode->prev;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
EXTERN int asn1E__SeqOfUBL_Order_1_0_AdditionalDocumentReference (OSCTXT* pctxt,
   _SeqOfUBL_Order_1_0_AdditionalDocumentReference *pvalue, ASN1TagType tagging)
{
   OSRTDListNode* pnode;
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   pnode = pvalue->tail;
   while (0 != pnode) {
      ll = asn1E_UBL_Order_1_0_AdditionalDocumentReference (pctxt, ((UBL_Order_1_0_AdditionalDocumentReference*)pnode->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;

      pnode = pnode->prev;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #17
0
EXTERN int asn1E_EncodingStyle_1 (OSCTXT* pctxt,
   EncodingStyle_1 *pvalue, ASN1TagType tagging)
{
   OSRTDListNode* pnode;
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   pnode = pvalue->tail;
   while (0 != pnode) {
      ll = xe_utf8str (pctxt, ((const OSUTF8CHAR*)pnode->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;

      pnode = pnode->prev;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
EXTERN int asn1E_OrderChangeType (OSCTXT* pctxt,
   OrderChangeType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode paymentMeans */

   if (pvalue->m.paymentMeansPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|36,
         asn1E_PaymentMeans (pctxt, &pvalue->paymentMeans, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode orderLine_list */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|35,
      asn1E_OrderChangeType_orderLine_list (pctxt, &pvalue->orderLine_list, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode destinationCountry */

   if (pvalue->m.destinationCountryPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|34,
         asn1E_UBL_OrderChange_1_0_DestinationCountry (pctxt, &pvalue->destinationCountry, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode salesConditions */

   if (pvalue->m.salesConditionsPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|33,
         asn1E_SalesConditions (pctxt, &pvalue->salesConditions, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode allowanceCharge_list */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|32,
      asn1E__SeqOfAllowanceCharge (pctxt, &pvalue->allowanceCharge_list, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode deliveryTerms */

   if (pvalue->m.deliveryTermsPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|31,
         asn1E_DeliveryTerms (pctxt, &pvalue->deliveryTerms, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode delivery_list */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|30,
      asn1E__SeqOfDelivery (pctxt, &pvalue->delivery_list, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode freightForwarderParty */

   if (pvalue->m.freightForwarderPartyPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|29,
         asn1E_UBL_OrderChange_1_0_FreightForwarderParty (pctxt, &pvalue->freightForwarderParty, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode originatorParty */

   if (pvalue->m.originatorPartyPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|28,
         asn1E_UBL_OrderChange_1_0_OriginatorParty (pctxt, &pvalue->originatorParty, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode sellerParty */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|27,
      asn1E_SellerParty (pctxt, &pvalue->sellerParty, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode buyerParty */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|26,
      asn1E_BuyerParty (pctxt, &pvalue->buyerParty, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode quoteDocumentReference */

   if (pvalue->m.quoteDocumentReferencePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|25,
         asn1E_UBL_OrderChange_1_0_QuoteDocumentReference (pctxt, &pvalue->quoteDocumentReference, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode contractDocumentReference */

   if (pvalue->m.contractDocumentReferencePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|24,
         asn1E_UBL_OrderChange_1_0_ContractDocumentReference (pctxt, &pvalue->contractDocumentReference, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode orderReference_list */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|23,
      asn1E__SeqOfOrderReference (pctxt, &pvalue->orderReference_list, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode lineItemCountNumeric */

   if (pvalue->m.lineItemCountNumericPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|22,
         asn1E_UBL_OrderChange_1_0_LineItemCountNumeric (pctxt, &pvalue->lineItemCountNumeric, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode netVolumeMeasure */

   if (pvalue->m.netVolumeMeasurePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|21,
         asn1E_NetVolumeMeasure (pctxt, &pvalue->netVolumeMeasure, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode grossVolumeMeasure */

   if (pvalue->m.grossVolumeMeasurePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|20,
         asn1E_GrossVolumeMeasure (pctxt, &pvalue->grossVolumeMeasure, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode netNetWeightMeasure */

   if (pvalue->m.netNetWeightMeasurePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|19,
         asn1E_NetNetWeightMeasure (pctxt, &pvalue->netNetWeightMeasure, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode netWeightMeasure */

   if (pvalue->m.netWeightMeasurePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|18,
         asn1E_NetWeightMeasure (pctxt, &pvalue->netWeightMeasure, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode grossWeightMeasure */

   if (pvalue->m.grossWeightMeasurePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|17,
         asn1E_GrossWeightMeasure (pctxt, &pvalue->grossWeightMeasure, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode totalPackagesCountQuantity */

   if (pvalue->m.totalPackagesCountQuantityPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|16,
         asn1E_TotalPackagesCountQuantity (pctxt, &pvalue->totalPackagesCountQuantity, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode lineExtensionTotalAmount */

   if (pvalue->m.lineExtensionTotalAmountPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|15,
         asn1E_LineExtensionTotalAmount (pctxt, &pvalue->lineExtensionTotalAmount, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode taxTotalAmount */

   if (pvalue->m.taxTotalAmountPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|14,
         asn1E_TaxTotalAmount (pctxt, &pvalue->taxTotalAmount, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode validityDurationMeasure */

   if (pvalue->m.validityDurationMeasurePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|13,
         asn1E_UBL_OrderChange_1_0_ValidityDurationMeasure (pctxt, &pvalue->validityDurationMeasure, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode expiryDate */

   if (pvalue->m.expiryDatePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|12,
         asn1E_ExpiryDate (pctxt, &pvalue->expiryDate, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode earliestDate */

   if (pvalue->m.earliestDatePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|11,
         asn1E_UBL_OrderChange_1_0_EarliestDate (pctxt, &pvalue->earliestDate, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode pricingCurrencyCode */

   if (pvalue->m.pricingCurrencyCodePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|10,
         asn1E_CurrencyCodeType (pctxt, &pvalue->pricingCurrencyCode, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode transactionCurrencyCode */

   if (pvalue->m.transactionCurrencyCodePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|9,
         asn1E_CurrencyCodeType (pctxt, &pvalue->transactionCurrencyCode, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode acknowledgementResponseCode */

   if (pvalue->m.acknowledgementResponseCodePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|8,
         asn1E_AcknowledgementResponseCodeType (pctxt, &pvalue->acknowledgementResponseCode, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode note */

   if (pvalue->m.notePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|7,
         asn1E_Note (pctxt, &pvalue->note, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode sequenceNumberID */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|6,
      asn1E_UBL_UnspecializedDatatypes_1_0_IdentifierType (pctxt, &pvalue->sequenceNumberID, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode documentStatusCode */

   if (pvalue->m.documentStatusCodePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|5,
         asn1E_DocumentStatusCodeType (pctxt, &pvalue->documentStatusCode, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode issueDate */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|4,
      asn1E_IssueDate (pctxt, &pvalue->issueDate, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode gUID */

   if (pvalue->m.gUIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
         asn1E_UBL_UnspecializedDatatypes_1_0_IdentifierType (pctxt, &pvalue->gUID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode copyIndicator */

   if (pvalue->m.copyIndicatorPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2,
         asn1E_CopyIndicator (pctxt, &pvalue->copyIndicator, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode sellersID */

   if (pvalue->m.sellersIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1,
         asn1E_UBL_UnspecializedDatatypes_1_0_IdentifierType (pctxt, &pvalue->sellersID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode buyersID */

   if (pvalue->m.buyersIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
         asn1E_UBL_UnspecializedDatatypes_1_0_IdentifierType (pctxt, &pvalue->buyersID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #19
0
EXTERN int asn1E_InvoiceHeaderType (OSCTXT* pctxt,
   InvoiceHeaderType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode lineItemCountValue */

   if (pvalue->m.lineItemCountValuePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|11,
         asn1E_CCT_NumericType (pctxt, &pvalue->lineItemCountValue, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode paymentMeans */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|10,
      asn1E_PaymentMeansType (pctxt, &pvalue->paymentMeans, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode shipment */

   if (pvalue->m.shipmentPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|9,
         asn1E_ShipmentType (pctxt, &pvalue->shipment, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode despatchParty */

   if (pvalue->m.despatchPartyPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|8,
         asn1E_PartyType (pctxt, &pvalue->despatchParty, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode consigneeParty */

   if (pvalue->m.consigneePartyPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|7,
         asn1E_PartyType (pctxt, &pvalue->consigneeParty, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode sellerParty */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|6,
      asn1E_PartyType (pctxt, &pvalue->sellerParty, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode buyerParty */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|5,
      asn1E_PartyType (pctxt, &pvalue->buyerParty, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode language */

   if (pvalue->m.languagePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|4,
         asn1E_LanguageType (pctxt, &pvalue->language, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode currencyCode */

   if (pvalue->m.currencyCodePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
         asn1E_CCT_CodeType (pctxt, &pvalue->currencyCode, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode pOIdentifier */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2,
      asn1E_CCT_IdentifierType (pctxt, &pvalue->pOIdentifier, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode identifier */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1,
      asn1E_CCT_IdentifierType (pctxt, &pvalue->identifier, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode issueDateTime */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
      asn1E_CCT_DateTimeType (pctxt, &pvalue->issueDateTime, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #20
0
EXTERN int asn1E_InvoiceLineItemType (OSCTXT* pctxt,
   InvoiceLineItemType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode totalAmount */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|6,
      asn1E_CCT_AmountType (pctxt, &pvalue->totalAmount, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode itemTax */

   if (pvalue->m.itemTaxPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|5,
         asn1E_CCT_AmountType (pctxt, &pvalue->itemTax, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode pricingVariation */

   if (pvalue->m.pricingVariationPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|4,
         asn1E_PricingVariationType (pctxt, &pvalue->pricingVariation, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode pricing */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
      asn1E_PricingType (pctxt, &pvalue->pricing, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode orderStatus */

   if (pvalue->m.orderStatusPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2,
         asn1E_CCT_CodeType (pctxt, &pvalue->orderStatus, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode item */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1,
      asn1E_ItemType (pctxt, &pvalue->item, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode lineID */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
      asn1E_CCT_IdentifierType (pctxt, &pvalue->lineID, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
EXTERN int asn1E_OperatorCodeType (OSCTXT* pctxt,
   OperatorCodeType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode base */

   if(pvalue->base < 0 || pvalue->base > 1)
      return LOG_RTERR (pctxt, RTERR_INVENUM);

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|9,
      asn1E_OperatorCodeContentType (pctxt, &pvalue->base, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode name */

   if (pvalue->m.namePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|8,
         xe_utf8str (pctxt, pvalue->name, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode languageID */

   if (pvalue->m.languageIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|7,
         xe_utf8str (pctxt, pvalue->languageID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListVersionID */

   if (pvalue->m.codeListVersionIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|6,
         xe_utf8str (pctxt, pvalue->codeListVersionID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListURI */

   if (pvalue->m.codeListURIPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|5,
         xe_utf8str (pctxt, pvalue->codeListURI, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListSchemeURI */

   if (pvalue->m.codeListSchemeURIPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|4,
         xe_utf8str (pctxt, pvalue->codeListSchemeURI, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListName */

   if (pvalue->m.codeListNamePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|3,
         xe_utf8str (pctxt, pvalue->codeListName, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListID */

   if (pvalue->m.codeListIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|2,
         xe_utf8str (pctxt, pvalue->codeListID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListAgencyName */

   if (pvalue->m.codeListAgencyNamePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|1,
         xe_utf8str (pctxt, pvalue->codeListAgencyName, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode codeListAgencyID */

   if (pvalue->m.codeListAgencyIDPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
         xe_utf8str (pctxt, pvalue->codeListAgencyID, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #22
0
int xe_derReal10 (OSCTXT *pctxt, const char* object_p, ASN1TagType tagging)
{
   int ll0 = 0;
   int stat;
   const char* p;
   const char* mantBeg = 0;
   const char* mantEnd = 0;
   int digits = 0;
   int trailZeros = 0;
   int mantExpVal = 0;
   int expVal = 0;
   int tm;
   char mantMinus = 0;
   char expMinus = 0;
   char flFrac = 0;
   char c;
   
   if (!object_p)
      return LOG_RTERRNEW (pctxt, RTERR_INVPARAM);

   /* skip ws and leading zeros and plus */
   for (p = object_p; (c = *p) != 0; p++) {
      if (c == '-')
         mantMinus = 1;
      else if (c != ' ' && c != '0' && c != '+') 
         break;
   }

   mantBeg = mantEnd = p;

   /* count mantissa digits */
   for (; (c = *p) != 0; p++) {
      if (c == '0')
         trailZeros++;
      else if (c > '0' && c <= '9') {
         if (digits == 0 && flFrac) {
            mantExpVal = -trailZeros;
            digits = 1;
            mantBeg = p;
         }
         else
            digits += trailZeros + 1;

         trailZeros = 0;
         mantEnd = p + 1;
      }
      else if (c == '.') {
         mantExpVal = digits + trailZeros;
         flFrac = 1;
      }
      else if (c == 'e' || c == 'E') {
         p++;
         break;
      }
      else if (c != ' ')
         break;
   }

   if (digits > 0) {
      if (!flFrac)
         mantExpVal = digits + trailZeros;

      /* skip ws and leading zeros and plus */
      for (; (c = *p) != 0; p++) {
         if (c == '-')
            expMinus = 1;
         else if (c != ' ' && c != '0' && c != '+') 
            break;
      }

      /* get exponent */
      for (; (c = *p) != 0; p++) {
         if (c >= '0' && c <= '9')
            expVal = expVal * 10 + (c - '0');
         else if (c != ' ')
            break;
      }

      if (expMinus)
         expVal = -expVal;

      expVal += mantExpVal;

      expVal -= digits;

      /* put exponent */
      if (expVal != 0)  {
         if (expVal < 0) {
            expMinus = 1;
            expVal = -expVal;
         }
         else
            expMinus = 0;

         while (expVal) {
            c = expVal % 10;
            expVal /= 10;
            XE_SAFEPUT1(pctxt, '0' + c);
            ll0++;
         }

         if (expMinus) {
            XE_SAFEPUT1(pctxt, '-');
            ll0++;
         }
      }
      else {
         XE_CHKBUF(pctxt, 2)
         XE_PUT1(pctxt, '0')
         XE_PUT1(pctxt, '+')
         ll0 += 2;
      }

      tm = digits + 3 + mantMinus;
      XE_CHKBUF(pctxt, (unsigned)(tm))
      ll0 += tm;

      XE_PUT1(pctxt, 'E');
      XE_PUT1(pctxt, '.');
      
      do {
         c = *(--mantEnd);
         if (c < '0' || c > '9') 
            continue;

         XE_PUT1(pctxt, c);
      } while (mantEnd != mantBeg);

      if (mantMinus)
         XE_PUT1(pctxt, '-');

      XE_PUT1(pctxt, 3)
   }

   if (tagging == ASN1EXPL) {
      stat = xe_tag_len (pctxt, TM_UNIV|TM_PRIM|9, ll0);
      if (stat < 0) return LOG_RTERR (pctxt, stat);
      ll0 = stat;
   }

   return ll0;
}
Beispiel #23
0
EXTERN int asn1E_InvoiceSummaryType (OSCTXT* pctxt,
   InvoiceSummaryType *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;
   OSRTDListNode* pnode2;
   int ll2 = 0;

   /* encode summaryNote */

   if (pvalue->m.summaryNotePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|6,
         asn1E_NoteType (pctxt, &pvalue->summaryNote, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode packingSlipIdentifier */

   if (pvalue->m.packingSlipIdentifierPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|5,
         asn1E_CCT_IdentifierType (pctxt, &pvalue->packingSlipIdentifier, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode priceAmount */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|4,
      asn1E_CCT_AmountType (pctxt, &pvalue->priceAmount, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode totalTax */

   if (pvalue->m.totalTaxPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
         asn1E_TaxType (pctxt, &pvalue->totalTax, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode pricingVariation_list */

   pnode2 = pvalue->pricingVariation_list.tail;
   while (0 != pnode2) {
      ll = asn1E_PricingVariationType (pctxt, ((PricingVariationType*)pnode2->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   /* encode subtotalAmount */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1,
      asn1E_CCT_AmountType (pctxt, &pvalue->subtotalAmount, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode lineItemCountValue */

   if (pvalue->m.lineItemCountValuePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
         asn1E_CCT_NumericType (pctxt, &pvalue->lineItemCountValue, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #24
0
EXTERN int asn1E_Headtype (OSCTXT* pctxt,
   Headtype *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;

   /* encode xyzs_field_precisions */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|9,
      xe_utf8str (pctxt, pvalue->xyzs_field_precisions, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode xyzs_field_names */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|8,
      xe_utf8str (pctxt, pvalue->xyzs_field_names, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode num_xyzs_fields */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|7,
      xe_int8 (pctxt, &pvalue->num_xyzs_fields, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode zinc */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|6,
      xe_real (pctxt, &pvalue->zinc, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode zstart */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|5,
      xe_real (pctxt, &pvalue->zstart, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode precision */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|4,
      xe_int8 (pctxt, &pvalue->precision, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode nsamp */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|3,
      xe_int16 (pctxt, &pvalue->nsamp, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode ntrace */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|2,
      xe_integer (pctxt, &pvalue->ntrace, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode area */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|1,
      xe_utf8str (pctxt, pvalue->area, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode name */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_PRIM|0,
      xe_utf8str (pctxt, pvalue->name, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}
Beispiel #25
0
EXTERN int asn1E_Envelope (OSCTXT* pctxt,
   Envelope *pvalue, ASN1TagType tagging)
{
   int ll;
   int ll0 = 0;
   int ll1 = 0;
   OSRTDListNode* pnode2;
   int ll2 = 0;

   /* encode elem_list */

   pnode2 = pvalue->elem_list.tail;
   while (0 != pnode2) {
      switch (((OSXSDAny*)pnode2->data)->t) {
      case OSXSDAny_binary:
         ll = xe_OpenType (pctxt, ((OSXSDAny*)pnode2->data)->u.binary->data, 
            ((OSXSDAny*)pnode2->data)->u.binary->numocts);
         break;
      case OSXSDAny_xmlText:
         ll = xe_utf8str (pctxt, ((OSXSDAny*)pnode2->data)->
            u.xmlText, ASN1EXPL);
         break;
      }
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      else ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|4, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   /* encode body */

   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|3,
      asn1E_Body (pctxt, &pvalue->body, ASN1IMPL));
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   ll1 += ll;

   /* encode header */

   if (pvalue->m.headerPresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|2,
         asn1E_Header (pctxt, &pvalue->header, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   /* encode attr */

   pnode2 = pvalue->attr.tail;
   while (0 != pnode2) {
      ll = xe_utf8str (pctxt, ((const OSUTF8CHAR*)pnode2->data), ASN1EXPL);
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll2 += ll;

      pnode2 = pnode2->prev;
   }
   ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|1, ll2);
   if (ll < 0) return LOG_RTERR (pctxt, ll);
   else { ll1 += ll; ll2 = 0; }

   /* encode encodingStyle */

   if (pvalue->m.encodingStylePresent) {
      ll = xe_tag_len (pctxt, TM_CTXT|TM_CONS|0,
         asn1E_EncodingStyle (pctxt, &pvalue->encodingStyle, ASN1IMPL));
      if (ll < 0) return LOG_RTERR (pctxt, ll);
      ll1 += ll;
   }
   ll0 += ll1;

   if (tagging == ASN1EXPL)
      ll0 = xe_tag_len (pctxt, TM_UNIV|TM_CONS|16, ll0);

   return (ll0);
}