[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: New to XML - Dequeue2 Request Issue



   Hello again Corby.
   I've tried to neaten up the code a bit from my original copy/paste in
   an attempt to make it more readable. See below. Maybe copy/paste this
   out to your RDP (or whatever editor your using) so you can take a
   closer look at it.
   This program actually does decode the base64 into an XML and parses it,
   all within the program, and without using an intermediate file on the
   IFS. I'm sure this is not the only way to do this, but it does work.
   Have a closer look.
   Paul Reid
   Application Developer III
   From:        corby.weaver@xxxxxxxxxxxxxxxxx
   To:        HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
   Date:        12/15/2015 11:40 AM
   Subject:        RE: New to XML - Dequeue2 Request Issue
   Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     __________________________________________________________________

      I'm hoping to be able to use the base64_decode process, just not
   sure
     how to go about doing it.  I've got everything else working fine
     (bringing the XML file in, parsing the actual data from that
   response,
     etc).  I've gone thru the forum and looked at various
     suggestions/examples that are out there but not having success with
   it.
      I feel like I'm spinning my wheels.
     From:        PReid@xxxxxxxxxxxx
     To:        HTTPAPI and FTPAPI Projects
   <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>,
     Cc:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     Date:        12/14/2015 10:49 AM
     Subject:        RE: New to XML - Dequeue2 Request Issue
     Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       __________________________________________________________________
     Hello. I'll admit that I haven't read this thread entirely, but I'd
     like
     to try and offer some assistance back to the group that has helped me
     so
     much in the past. I believe that I'm doing exactly what you are
   trying
     to
     do. Below I have copied the source from my program in the hopes that
     maybe
     this will assist you. Of course I have removed any sensitive User ID,
     Password info, etc, and replaced is with ***.
     I'm still at the learning stage with all of this, so I know I'm not
     using
     the best methodology for creating my XML SOAP request (just creating
   a
     big
     string...apologies to Jon Paris) , that is something for me to learn
   in
     the future, however I'm hoping you still may find this useful.
     This code is currently in production as is working fine for us,
     however; I
     offer no guarantees on it working for you.
   H BNDDIR('DSBNDDIR':'HTTPAPI':'QC2LE':'UTBNDDIR')
   *----------------------------------------------------------------------
   --*
   * DSRPERFMON - Download Performance Monitoring data from SHAW.
   *
   * Currently this program receives two different transactions from the
   web
   * service: 1 : T.4.01.0 - PM Performance Data Transaction Type.
   *          2 : T.3.02.0 - Critical Event Reporting (CER).
   * The data from both of these transactions is written out to file
   * DSPPERFMON.
    *---------------------------------------------------------------------
   ---*
   * Prototype call to this program:
   *----------------------------------------------------------------------
   --*
   *
   D DSRPERFMON      PR                  extpgm('DSRPERFMON')
   *
   D DSRPERFMON      PI
   *
   *----------------------------------------------------------------------
   --*
   * Prototypes:
    *---------------------------------------------------------------------
   ---*
   *
   * Scott Klement's HTTPAPI.
   /include qrpglesrc,HTTPAPI_H
   *
   * Scott Klement's Base64 encoder/decoder.
   /include qrpglesrc,BASE64_H
   *
   * Scott Klement's prototype for performing I/O with the IFS.
   /include qrpglesrc,IFSIO_H
   *
   * Write out performance monitoring data to out database.
   /include qcopysrc,DSTPERFUP
   *
   * For sending email notifications.
   /include qcopysrc,UTTEMAIL
   *
   *----------------------------------------------------------------------
   --*
   * incoming - Parse response from SHAW.
   *----------------------------------------------------------------------
   --*
   *
   D incoming...
   D                 PR
   D   userData...
   D                                8F
   D   nestingDepth...
   D                               10I 0 value
   D   elementName...
   D                             1024A   varying const
   D   elementPath...
   D                            24576A   varying const
   D   elementValue...
   D                                     likeds(Xmlstring_t)
   D   attributes...
   D                                 *   dim(32767)
   D                                     const options(*varsize)
    *
   *----------------------------------------------------------------------
   --*
   * embedded - Parse the embedded XML.
   *----------------------------------------------------------------------
   --*
   *
   D embedded...
   D                 PR
   D   userData...
   D                                 *   value
   D   nestingDepth...
   D                               10I 0 value
   D   elementName...
   D                             1024A   varying const
   D   elementPath...
   D                            24576A   varying const
   D   elementValue...
   D                            65535A   varying const
   D   attributes...
   D                                 *   dim(32767)
   D                                     const options(*varsize)
   *
   *----------------------------------------------------------------------
   --*
   * All data required to write a record to DSPPERFMON.
   *----------------------------------------------------------------------
   --*
   *
   D allPerfDataDS...
   D                 DS                  likeDS(DSRMPERFUP_allPerfDataDS)
   *
   *----------------------------------------------------------------------
   --*
   * Errors on procedure call when writing to DSPPERFMON.
   *----------------------------------------------------------------------
   --*
   *
   D errorInfo...
   D                 DS                  likeDS(UTTERRDS_errorDS)
   *
   *----------------------------------------------------------------------
   --*
   * Receive data with pointers into a data structure.
   *----------------------------------------------------------------------
   --*
   *
   D XmlString_t...
   D                 DS                  qualified Template
   D  data                           *
   D  len                          10I 0
   *
   *----------------------------------------------------------------------
   --*
   * Last transaction ID.
   *----------------------------------------------------------------------
   --*
   *
   D ##PERFMON...
   D                 S             17  0 dtaara(##PERFMON)
   *
   *----------------------------------------------------------------------
   --*
   * Local variables in alphabetical order:
    *---------------------------------------------------------------------
   ---*
   *
   D decodedData...
   D                 S               A   len(2000000) varying
   D decodedLength...
   D                 S             10I 0
   D errorMessage...
   D                 S            100A   inz(*blanks)
   D parserLog...
   D                 S           1000A   varying
   D peErrorNo...
   D                 S             10I 0 inz(*zeros)
   D rc1...
   D                 S             10I 0
   D rc2...
   D                 S             10I 0
   D responseLog...
   D                 S           1000A   varying
   D scMsg...
   D                 S            102A   inz(*blanks)
   D sndGroup...
   D                 S             10A   inz('OPSSUPPORT')
   D sndMessage...
   D                 S           1000A   inz(*blanks)
   D sndSubject...
   D                 S             50A   inz(*blanks)
   D soapRequest...
   D                 S          32767A   varying
   D soapHeader...
   D                 S          32767A   varying
   D soapBody...
   D                 S          32767A   varying
   D subscriberId...
   D                 S              9A   varying
   D transCount...
   D                 S              5P 0 inz(*zeros)
   D transIdIn...
   D                 S             17A   varying
   D transIdOut...
   D                 S             17  0 inz(*zeros)
   D userData...
   D                 S              8F
   D var...
   D                 S             50A   based(p_var)
   *
   *----------------------------------------------------------------------
   --*
   * Mainline:
   *----------------------------------------------------------------------
   --*
   *
   /free
    // Assemble an XML SOAP request to be posted to SHAW's Web Service.
    exsr assembleSOAPheader;
    exsr assembleSOAPbody;
    soapRequest = %trim(soapHeader) + %trim(soapBody);
    // Turn on the debugger before the post.
    responseLog = '/PerformanceMonitoring/responseLog.txt';
    http_debug(*on : responseLog);
    // Change the way the XML parser returns the data. We need
    // to return pointers because the amount of data is so large.
    http_XmlReturnPtr(*on);
    // Post XML SOAP request.
    rc1 = http_url_post_xml(
         'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs'
        : %addr(soapRequest) + 2
        : %len(soapRequest)
        : *NULL
        : %paddr(incoming)
        : %addr(userData)
        : HTTP_TIMEOUT
        : HTTP_USERAGENT
        : 'text/xml'
        : 'http://www.qualcomm.com/dequeue2');
    // Change the XML parser so that no longer just returns pointers.
    http_XmlReturnPtr(*off);
    // Turn off the debugger.
    http_debug(*off);
    // When we receive a valid response rc1 = 1.
    if rc1 = 1;
     // Only continue process if data was returned (transCount > 0).
     if transCount > 0;
      // Parse the decoded XML returned from SHAW.
      exsr parseDecodedXML;
      // If an error occurs while consuming the Web Service then send
      // a message to OPS support.
      else;
       scMsg      = http_error(peErrorNo);
       sndSubject = 'Error retrieving performace data from SHAW. #1';
       sndMessage = 'SHAW Web Service dequeue2 returned an error' +
                    ' &N ' +
                    'Run date . . . :' +
                    %trim(%char(%date())) +
                    ' &N ' +
                    'Run time . . . :' +
                    %trim(%char(%time())) +
                    ' &N ' +
                    'transCount . . :' +
                    %trim(%char(transCount)) +
                    ' &N ' +
                    'transIdOut . . :' +
                    %trim(%char(transIdOut)) +
                    ' &N ' +
                    'Error returned :' +
                    %trim(errorMessage) +
                    ' &N ' +
                    'http_error() . :' +
                     %trim(scMsg) +
                    ' &N ' +
                    'peErrorNo. . . :' +
                    %trim(%char(peErrorNo)) +
                    ' &N ' +
                    'Please Investigate!' +
                    ' &N ' +
                    'Program name = DSRPERFMON' +
                    ' &N ' +
                    'See log /PerformanceMonitoring/responseLog.txt';
       exsr eMailErrorMessage;
      endif;
      // The End.
      *inlr = *on;
      return;
   //---------------------------------------------------------------------
   --*
   // Parse the decoded XML.
   //---------------------------------------------------------------------
   --*
   begsr parseDecodedXML;
     // Initialize all data fields in file DSPPERFMON.
     clear allPerfDataDS;
    // Turn on the dubugger before parsing the embedded XML.
    parserLog = '/PerformanceMonitoring/parserLog.txt';
    http_debug(*on : parserLog);
    // Parse the XML repsponse embedded in the "transactions"
    rc2 = http_parse_xml_string(%addr(decodedData: *DATA)
                                      : %len(decodedData)
                                      : 819
                                      : *NULL
                                      : %paddr(embedded)
                                      : *NULL);
    // turn off the debugger.
    http_debug(*off);
    // If the parsing was not successful send an error to Ops support.
    if rc2 <> 0;
     scMsg = http_error(peErrorNo);
     sndSubject = 'Error parsing performace data from SHAW. #2';
     sndMessage = 'SHAW Web Service dequeue2 parsing error' +
                  ' &N ' +
                  'Run date . . . :' +
                  %trim(%char(%date())) +
                  ' &N ' +
                  'Run time . . . :' +
                  %trim(%char(%time())) +
                  ' &N ' +
                  'transCount . . :' +
                  %trim(%char(transCount)) +
                  ' &N ' +
                  'transIdOut . . :' +
                  %trim(%char(transIdOut)) +
                  ' &N ' +
                  'Error returned :' +
                  %trim(errorMessage) +
                  ' &N ' +
                  'http_error() . :' +
                  %trim(scMsg) +
                  ' &N ' +
                  'peErrorNo. . . :' +
                  %trim(%char(peErrorNo)) +
                  ' &N ' +
                  'Please Investigate!' +
                  ' &N ' +
                  'Program name = DSRPERFMON' +
                  ' &N ' +
                  'See log /PerformanceMonitoring/parserLog.txt';
     exsr eMailErrorMessage;
    // Output the last transaction ID to the data area. The next time
    // we run this process we will start at this transaction number.
    else;
     ##PERFMON = transIdOut + 1;
     out ##PERFMON;
    endif;
   endsr;
   //---------------------------------------------------------------------
   --*
   // Assemble SOAP header XML request. Username and password have been
   // hard coded as they are not expected to change.
   //---------------------------------------------------------------------
   --*
   begsr assembleSOAPheader;
   soapHeader =
   '<?xml version="1.0" encoding="utf-8"?>'
   +' <soap:Envelope'
   +' xmlns:soap="[1][1]http://schemas.xmlsoap.org/soap/envelope/";'
   +' xmlns:wsa="[2][2]http://schemas.xmlsoap.org/ws/2004/03/addressing";'
   +' xmlns:wsse="[3]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
                +'wss-wssecurity-secext-1.0.xsd"'
   +' xmlns:wsu="[4]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
                +'wss-wssecurity-utility-1.0.xsd"'
   +' xmlns:xsd="[3][5]http://www.w3.org/2001/XMLSchema";'
   +' xmlns:xsi="[4][6]http://www.w3.org/2001/XMLSchema-instance";>'
   +'<soap:Header>'
   +'<wsse:Security soap:mustUnderstand="1" >'
   +'<wsse:UsernameToken>'
   +'<wsse:Username>******@*******</wsse:Username>'
   +'<wsse:Password Type="[5][7]http://docs.oasis-open.org/wss/2004/01/'
                        +'oasis-200401-wss-username-token-profile-1.0#'
                        +'PasswordText">*********</wsse:Password>'
   +'</wsse:UsernameToken>'
   +'</wsse:Security>'
   +'</soap:Header>';
   endsr;
   //---------------------------------------------------------------------
   --*
   // Assemble SOAP body XML request. Subscriber ID has been hard coded as
   // is not expected to change.
   //---------------------------------------------------------------------
   --*
   begsr assembleSOAPbody;
   subscriberId    = '*';
   in *lock ##PERFMON;
   transIdIn = %trim(%char(##PERFMON));
   soapBody =
     '<soap:Body>'
       +'<dequeue2>'
          +'<subscriberId>'
              + subscriberId
          +'</subscriberId>'
          +'<transactionIdIn>'
             + transIdIn
           +'</transactionIdIn>'
       +'</dequeue2>'
     +'</soap:Body>'
    +'</soap:Envelope>';
    endsr;
   //---------------------------------------------------------------------
   --*
   // eMail error message.
   //---------------------------------------------------------------------
   --*
   begsr eMailErrorMessage;
   UTRMEMAIL_sendSimpleToGroup(sndGroup
                             : sndSubject
                             : sndMessage);
   endsr;
   /end-free
   *
   *----------------------------------------------------------------------
   --*
   * incoming - Parse XML response from SHAW.
   *----------------------------------------------------------------------
   --*
   *
   P incoming...
   P                 B
   *
   D incoming...
   D                 PI
   D   userData...
   D                                8F
   D   nestingDepth...
   D                               10I 0 value
   D   elementName...
   D                             1024A   varying const
   D   elementPath...
   D                            24576A   varying const
   D   elementValue...
   D                                     likeds(XmlString_t)
   D   attributes...
   D                                 *   dim(32767)
   D                                     const options(*varsize)
   *
   /free
    // The number of transcations returbed on this run.
    if elementName = 'count';
       p_var = elementValue.data;
       transCount = %dec(%subst(var:1:elementValue.len):5:0);
    // The data in the 'transactions' element
    // is a base64 encoded XML document.
    elseif elementName = 'transactions';
       %len(decodedData) = %len(decodedData : *MAX);
       decodedLength = base64_decode( elementValue.data
                                    : elementValue.len
                                    : %addr(decodedData : *data)
                                    : %len(decodedData : *MAX) );
       %len(decodedData) = decodedLength;
    // The last transaction ID that was returned.
    elseif elementName = 'transactionIdOut';
       p_var = elementValue.data;
       transIdOut = %dec(%subst(var:1:elementValue.len):17:0);
    elseif elementName = 'soap:Text';
       p_var = elementValue.data;
       errorMessage = %subst(var:1:elementValue.len);
    endif;
   /end-free
   *
   P incoming        E
   *
   *----------------------------------------------------------------------
   --*
   * embedded - Parse the embedded XML and write to our database.
   *----------------------------------------------------------------------
   --*
   *
   P embedded...
   P                 B
   *
   D embedded...
   D                 PI
   D   userData...
   D                                 *   value
   D   nestingDepth...
   D                               10I 0 value
   D   elementName...
   D                             1024A   varying const
   D   elementPath...
   D                            24576A   varying const
   D   elementValue...
   D                            65535A   varying const
   D   attributes...
   D                                 *   dim(32767)
   D                                     const options(*varsize)
   *
    * Local variables:
   D attributeCount...
   D                 S             10I 0
   D attributeName...
   D                 S           1024A   varying
   D attributeValue...
   D                 S          65535A   varying
   *
   * General work fields.
   D mobileType...
   D                 S              2A   inz(*blanks)
   D posType...
   D                 S              1A   inz(*blanks)
   D ignitionStatus...
   D                 S              1A   inz(*blanks)
   D tripStatus...
   D                 S              1A   inz(*blanks)
   D faultFlag...
   D                 S              1A   inz(*blanks)
   D registeredDriver...
   D                 S              1A   inz(*blanks)
   *
   * Work fields used to covert GMT (Greenwich Mean Time) to
   * EST (Eastern Standard Time).
   D gmtDateTime...
   D                 S             20A   inz(*blanks)
   D isoAlphaDateTime...
   D                 S             26A   inz(*blanks)
   D timeStamp...
   D                 S               Z
   inz(Z'0001-01-01-00.00.00.000000')
   D isoDate...
   D                 S               D   inz(*loval)
   D isoTime...
   D                 S               T   inz(*loval)
   *
   * Work fields for a Proximity location:
   D  proxCity...
   D                 S             10A   inz(*blanks)
   D  proxDist...
   D                 S              7A   inz(*blanks)
   D  proxDir...
   D                 S              3A   inz(*blanks)
   D  proxPlac...
   D                 S             10A   inz(*blanks)
   D  proxPlTp...
   D                 S              4A   inz(*blanks)
   D  proxStPr...
   D                 S              2A   inz(*blanks)
   D  proxPost...
   D                 S              6A   inz(*blanks)
   D  proxCoun...
   D                 S              2A   inz(*blanks)
   *
   /free
    // Transaction ID - Container for a single transaction (aka: event)
    // of any type.
    select;
    when elementName = 'tran';
         attributeCount = 1;
         dow http_nextXmlAttr(attributes
                            : attributeCount
                            : attributeName
                            : attributeValue);
             if attributeName = 'ID';
                  allPerfDataDS.pmTransID# = %trim(attributeValue);
             endif;
         enddo;
         // Write a new record for each T.4.01.0 or
         // T.3.02.0 transaction received.
         if allPerfDataDS.pmTranType = 'T.4.01.0' or
            allPerfDataDS.pmTranType = 'T.3.02.0';
            DSRMPERFUP_writeAllPerformanceData(
                       allPerfDataDS :
                       errorInfo);
         endif;
         // Clear fields used to write DSPPERFMON records.
         clear allPerfDataDS;
         // Clear general work fields.
         mobileType       = *blanks;
         posType          = *blanks;
         ignitionStatus   = *blanks;
         tripStatus       = *blanks;
         faultFlag        = *blanks;
         registeredDriver = *blanks;
    // T.4.01.0 - PM Performance Data Transaction Type.
    // T.3.02.0 - Critical Event Reporting (CER) Data Transaction Type.
    when elementName = 'T.4.01.0';
         allPerfDataDS.pmTranType = 'T.4.01.0';
    when elementName = 'T.3.02.0';
         allPerfDataDS.pmTranType = 'T.3.02.0';
    // Date and Time when the event took place.
    when elementName = 'eventTS';
         gmtDateTime = *blanks;
         gmtDateTime = %trim(elementValue);
         exsr convertGMTtoEST;
         allPerfDataDS.pmEvntDate = isoDate;
         allPerfDataDS.pmEvntTime = isoTime;
    // Uniquely define a piece of equipment (truck).
    when elementName = 'equipment';
         attributeCount = 1;
         dow http_nextXmlAttr(attributes
                            : attributeCount
                            : attributeName
                            : attributeValue);
             // Unique customer-defined equipment identifier.
             // In our system this is our truck number.
             select;
             when attributeName = 'ID';
                  allPerfDataDS.pmEqpID = %trim(attributeValue);
             // Unique manufacture-assigned address of the
             // equipment's mobile communication unit.
             when attributeName = 'unitAddress';
                   allPerfDataDS.pmEqpAddr = %trim(attributeValue);
             // Indicates the type of equipment, "trailer" or "tractor".
             when attributeName = 'equipType';
                  allPerfDataDS.pmEqpType = %trim(attributeValue);
             // Indicates the type of mobile communication device.
             when attributeName = 'mobileType';
                  mobileType = %trim(attributeValue);
                  select;
                  when mobileType = '0 ';
                       allPerfDataDS.pmEqpMobTp = 'Unknown ';
                  when mobileType = '1 ';
                       allPerfDataDS.pmEqpMobTp = 'MCT     ';
                  when mobileType = '2 ';
                       allPerfDataDS.pmEqpMobTp = 'TMCT    ';
                  when mobileType = '3 ';
                       allPerfDataDS.pmEqpMobTp = 'OmniOne ';
                  when mobileType = '4 ';
                       allPerfDataDS.pmEqpMobTp = 'MCP     ';
                  when mobileType = '5 ';
                       allPerfDataDS.pmEqpMobTp = 'MCP100  ';
                  when mobileType = '6 ';
                       allPerfDataDS.pmEqpMobTp = 'MCP110  ';
                  when mobileType = '7 ';
                       allPerfDataDS.pmEqpMobTp = 'MCP200  ';
                  when mobileType = '8 ';
                       allPerfDataDS.pmEqpMobTp = 'MCP50   ';
                  when mobileType = '10';
                       allPerfDataDS.pmEqpMobTp = 'UTT     ';
                  when mobileType = '11';
                       allPerfDataDS.pmEqpMobTp = 'Tethered';
                  when mobileType = '12';
                       allPerfDataDS.pmEqpMobTp = 'Stingray';
                  endsl;
             // On-board device identifier.
             when attributeName = 'deviceID';
                  allPerfDataDS.pmEqpDevID = %trim(attributeValue);
             endsl;
         enddo;
    // Driver I.D.
    when elementName = 'driverID';
         allPerfDataDS.pmDriverID = %trim(elementValue);
    // Geographical coordinates at a point in time.
    when elementName = 'position';
         attributeCount = 1;
         dow http_nextXmlAttr(attributes
                            : attributeCount
                            : attributeName
                            : attributeValue);
             select;
             // Longitude expressed in signed degrees with
             // floating-point decimal precision.
             when attributeName = 'lon';
                  allPerfDataDS.pmLongitud = %trim(attributeValue);
             // Latitude expressed in signed degrees with
             // floating-point decimal precision.
             when attributeName = 'lat';
                  allPerfDataDS.pmLatitud = %trim(attributeValue);
             // Position timestamp in GMT.
             when attributeName = 'posTS';
                    gmtDateTime = *blanks;
                    gmtDateTime = %trim(attributeValue);
                    exsr convertGMTtoEST;
                    allPerfDataDS.pmPosnDate = isoDate;
                    allPerfDataDS.pmPosnTime = isoTime;
             endsl;
         enddo;
    // Identifies the hardware that was used to determine the position
    // information contained in the tranaction.
    when elementName = 'posType';
          posType = %trim(elementValue);
          select;
          when posType = '0';
               allPerfDataDS.pmPosnType = 'Unknown';
          when posType = '1';
               allPerfDataDS.pmPosnType = 'LORAN  ';
          when posType = '2';
               allPerfDataDS.pmPosnType = 'QASPR  ';
          when posType = '3';
               allPerfDataDS.pmPosnType = 'GPS    ';
          endsl;
    // Ignition Status of the truck. "On" or "Off".
    when elementName = 'ignitionStatus';
         ignitionStatus = %trim(elementValue);
         select;
         when ignitionStatus = '1';
              allPerfDataDS.pmIgnStat = 'On ';
         when ignitionStatus = '2';
              allPerfDataDS.pmIgnStat = 'Off';
         endsl;
    // The Trip status of the truck. "In" or "Out" of Trip. Note:
    // The trip status feature requires that SensorTRACS service
    // to be enabled. and configured.
    when elementName = 'tripStatus';
         tripStatus = %trim(elementValue);
         select;
         when tripStatus = 'I';
              allPerfDataDS.pmTripStat = 'In ';
         when tripStatus = 'O';
              allPerfDataDS.pmTripStat = 'Out';
         endsl;
    // Date and time recording started for this Driver.
    // (Since last extraction reset).
    when elementName = 'dataStartTS';
         gmtDateTime = *blanks;
         gmtDateTime = %trim(elementValue);
         exsr convertGMTtoEST;
         allPerfDataDS.pmStrtDate = isoDate;
         allPerfDataDS.pmStrtTime = isoTime;
    // Date and time that recording ended for this Driver.
    // (Time of this extraction reset).
    when elementName = 'dataEndTS';
         gmtDateTime = *blanks;
         gmtDateTime = %trim(elementValue);
         exsr convertGMTtoEST;
         allPerfDataDS.pmEndDate = isoDate;
         allPerfDataDS.pmEndTime = isoTime;
    // Distance travelled in miles or kilometers.
    when elementName = 'distance';
         allPerfDataDS.pmDistance = %trim(elementValue);
    // The number of minutes recorded for this Driver while ignition was
    // on but excluding intertrip idle time (includes idle time during
    // trip but not between trips).
    when elementName = 'driveTime';
         allPerfDataDS.pmDrivTime = %trim(elementValue);
    // The number of minutes recorded for this Driver while the ignition
    // was on.
    when elementName = 'engineTime';
         allPerfDataDS.pmEngTime = %trim(elementValue);
    // The number of minutes when the vehicle speed was greater than zero.
    when elementName = 'moveTime';
         allPerfDataDS.pmMoveTime = %trim(elementValue);
    // The number of minutes idling between trips (excess idle time for
    // this Driver).
    when elementName = 'intertripIdleTime';
         allPerfDataDS.pmIntIdle   = %trim(elementValue);
    // The number of minutes idling when the duration of the idling period
    // was longer than the end of trip (EOT) threshold, but shorter than
    // the short idle threshold. Note MCT firmware version 14.02 or higher
    // is required.
    when elementName = 'shortIdleTime';
         allPerfDataDS.pmShrtIdle  = %trim(elementValue);
    // The number of minutes the Driver has exceeded the settable RPM
    // threshold.
    when elementName = 'overRPMTime';
         allPerfDataDS.pmOverRPMT  = %trim(elementValue);
    // The number of times the settable RPM threshold was exceeded in
    // one minute.
    when elementName = 'overRPMCount';
         allPerfDataDS.pmOverRPMC  = %trim(elementValue);
    // The longest duration exceeding the settable RPM threshold (rounded
    // up to the next minute).
    when elementName = 'overRPMMax';
         allPerfDataDS.pmOverRPMM  = %trim(elementValue);
    // The number of minutes the Driver exceeded the settable speed
    // threshold.
    when elementName = 'overSpdTime';
         allPerfDataDS.pmOverSpdT = %trim(elementValue);
    // The number of times the settable speed threshold exceeded 1 min.
    when elementName = 'overSpdCount';
         allPerfDataDS.pmOverSpdC  = %trim(elementValue);
    // The longest duration exceeded the settable speed threshold
   (rounded
    // up to the next minute).
    when elementName = 'overSpdMax';
         allPerfDataDS.pmOverSpdM  = %trim(elementValue);
    // The number of minutes the driver has exceeded the settable
    // excessive speed threshold. Note: MCT firmware version > 10.51
    // required.
    when elementName = 'excessSpdTime';
         allPerfDataDS.pmExceSpdT  = %trim(elementValue);
    // The total amount of fuel burned by this Driver in gallons, liters,
    // or imperial gallons based on the customer's preference. Note: MCT
    // firmware version above 10.51 is required.
    when elementName = 'totalFuelUsed';
         allPerfDataDS.pmTotlFuel = %trim(elementValue);
    // The total amount of fuel burned by this Driver while the vehicle
    // was not moving and a PTO was not active. Units are in gallons,
    // liters, or imperial gallons based on the company's preference.
    // Note MCT firmware version above 10.51 is required.
    when elementName = 'idleFuelUsed';
         allPerfDataDS.pmIdleFuel = %trim(elementValue);
    // The total amount of fuel burned by this Driver while the parking
    // brake was applied. Units are in gallons, liters, or imperial
    // gallons based on the company's preference. Note: MCT firmware
    // version above 10.51 is required.
    when elementName = 'parkIdleFuelUsed';
         allPerfDataDS.pmParkIdle  = %trim(elementValue);
    // Indicates whether or not any fault conditions were present.
    when elementName = 'faultFlag';
         faultFlag = %trim(elementValue);
         select;
         when faultFlag = '0';
              allPerfDataDS.pmFaultFlg = 'No Faults      ';
         when faultFlag = '1';
              allPerfDataDS.pmFaultFlg = 'Faults detected';
         endsl;
    // Indicates whether or not the Driver is registered.
    when elementName = 'registeredDriver';
         registeredDriver = %trim(elementValue);
         select;
         when registeredDriver = '0';
              allPerfDataDS.pmRegiDriv = 'Unregistered';
         when registeredDriver = '1';
              allPerfDataDS.pmRegiDriv = 'Registered  ';
         endsl;
    // The number of minutes cruise control was active and a speed was
    // set.
    when elementName = 'cruiseCtrlTime';
         allPerfDataDS.pmCruiseCt = %trim(elementValue);
    // The number of minutes vehicle was in top gear.
    when elementName = 'topGearTime';
         allPerfDataDS.pmTopGear = %trim(elementValue);
    // The method or source used to acquire gear data for determining time
    // in top gear. Possible values are: "Vehicle data bus (J1939) is the
    // sole source", "Hybrid combination of data bus and onboard
    // algorithmic sources", or "Onboard algorithm is the sole source".
    when elementName = 'gearDataSource';
         allPerfDataDS.pmGearData = %trim(elementValue);
    // Either "MPH" or "KPH".
    when elementName = 'spdRpmTimes';
         attributeCount = 1;
         dow http_nextXmlAttr(attributes
                            : attributeCount
                            : attributeName
                            : attributeValue);
             select;
             when attributeName = 'spdUnits';
                  allPerfDataDS.pmSpeedUOM = %trim(attributeValue);
             endsl;
         enddo;
    // Proximity - Location information expressed as a reference to a
    // nearby place.
    when elementName = 'proximity';
         attributeCount = 1;
         dow http_nextXmlAttr(attributes
                            : attributeCount
                            : attributeName
                            : attributeValue);
              select;
              // Proximity City name.
             when attributeName = 'city';
                   proxCity = %trim(attributeValue);
             // The distance to the (proximity) place in miles or kms.
             when attributeName = 'distance';
                   proxDist = %trim(attributeValue);
             // Direction to the (proximity) place using a compass
   notation
             // notation containing a maximum of 3 characters.
             // (e.g. N, SE, NNW).
             when attributeName = 'direction';
                  proxDir = %trim(attributeValue);
             // The unique customer-defined name of the (proximity) place,
   if
             // the place type is not CITY or TOWN.
             when attributeName = 'placeName';
                  proxPlac = %trim(attributeValue);
             // Proximity Place Type such as CITY or TOWN.
             when attributeName = 'placeType';
                  proxPlTp = %trim(attributeValue);
             // Proximity State or Province code.
             when attributeName = 'stateProv';
                  proxStPr = %trim(attributeValue);
             // Proximity Postal code - 12 character maximum.
             when attributeName = 'postal';
                  proxPost = %trim(attributeValue);
             // Proximity Country code, possible values are US,CA,MX.
             when attributeName = 'country';
                  proxCoun = %trim(attributeValue);
             endsl;
         enddo;
         // If this is a TOWN then populate the Proximity Town fields.
         if proxPlTp = 'TOWN';
            allPerfDataDS.pmPrxTCity = proxCity;
            allPerfDataDS.pmPrxTDist = proxDist;
            allPerfDataDS.pmPrxTDir  = proxDir;
            allPerfDataDS.pmPrxTPlac = proxPlac;
            allPerfDataDS.pmPrxTPlTp = proxPlTp;
            allPerfDataDS.pmPrxTStPr = proxStPr;
            allPerfDataDS.pmPrxTPost = proxPost;
            allPerfDataDS.pmPrxTCoun = proxCoun;
         // If this is a CITY then populate the Proximity City fields.
         elseif proxPlTp = 'CITY';
            allPerfDataDS.pmPrxCCity = proxCity;
            allPerfDataDS.pmPrxCDist = proxDist;
            allPerfDataDS.pmPrxCDir  = proxDir;
            allPerfDataDS.pmPrxCPlac = proxPlac;
            allPerfDataDS.pmPrxCPlTp = proxPlTp;
            allPerfDataDS.pmPrxCStPr = proxStPr;
            allPerfDataDS.pmPrxCPost = proxPost;
            allPerfDataDS.pmPrxCCoun = proxCoun;
         endif;
         // Reset the proximity work fields.
         proxCity = *blanks;
         proxDist = *blanks;
         proxDir  = *blanks;
         proxPlac = *blanks;
         proxPlTp = *blanks;
         proxStPr = *blanks;
         proxPost = *blanks;
         proxCoun = *blanks;
    // T.3.02.0 - Critical Event Reporting (CER)
    // A unique identifier for this incident.
    when elementName = 'eventKey';
         allPerfDataDS.pmCerEvtKy = %trim(elementValue);
    // Date and Time that this event was sent in.
    when elementName = 'sentTS';
         gmtDateTime = *blanks;
         gmtDateTime = %trim(elementValue);
         exsr convertGMTtoEST;
         allPerfDataDS.pmCerSntDt = isoDate;
         allPerfDataDS.pmCerSntTm = isoTime;
    // The event that triggered this incident.
    when elementName = 'eventTrigger';
         allPerfDataDS.pmCerEvent = %trim(elementValue);
    // Trigger specific data for the incident.
    when elementName = 'triggerData';
         allPerfDataDS.pmCerTrgDa = %trim(elementValue);
    // Purpose of this is similar to the Event Trigger element. But,
    // this will be used specifically for EVIMS with value EVIMS.
    when elementName = 'eventType';
         allPerfDataDS.pmCerEvtTp = %trim(elementValue);
    // Speed.
    when elementName = 'speed';
         allPerfDataDS.pmCerSpeed = %trim(elementValue);
    // Parking Brake Status.
    when elementName = 'parkBrakeStatus';
         allPerfDataDS.pmCerParBk = %trim(elementValue);
    // Message location, date and time.
    when elementName = 'messageLocation';
         allPerfDataDS.pmCerMLon  = allPerfDataDS.pmLongitud;
         allPerfDataDS.pmCerMLat  = allPerfDataDS.pmLatitud;
         allPerfDataDS.pmCerMDate = allPerfDataDS.pmPosnDate;
         allPerfDataDS.pmCerMTime = allPerfDataDS.pmPosnTime;
         allPerfDataDS.pmLongitud = *blanks;
         allPerfDataDS.pmLatitud  = *blanks;
         allPerfDataDS.pmPosnDate = *loval;
         allPerfDataDS.pmPosnTime = *loval;
         // Proximity to the nearest town.
         allPerfDataDS.pmCerTDist = allPerfDataDS.pmPrxTDist;
         allPerfDataDS.pmCerTDir  = allPerfDataDS.pmPrxTDir;
          allPerfDataDS.pmCerTPlac = allPerfDataDS.pmPrxTPlac;
         allPerfDataDS.pmCerTPlTp = allPerfDataDS.pmPrxTPlTp;
         allPerfDataDS.pmCerTCity = allPerfDataDS.pmPrxTCity;
         allPerfDataDS.pmCerTStPr = allPerfDataDS.pmPrxTStPr;
         allPerfDataDS.pmCerTPost = allPerfDataDS.pmPrxTPost;
         allPerfDataDS.pmCerTCoun = allPerfDataDS.pmPrxTCoun;
         allPerfDataDS.pmPrxTDist = *blanks;
         allPerfDataDS.pmPrxTDir  = *blanks;
         allPerfDataDS.pmPrxTPlac = *blanks;
         allPerfDataDS.pmPrxTPlTp = *blanks;
         allPerfDataDS.pmPrxTCity = *blanks;
         allPerfDataDS.pmPrxTStPr = *blanks;
         allPerfDataDS.pmPrxTPost = *blanks;
         allPerfDataDS.pmPrxTCoun = *blanks;
         // Proximity to the nearest city.
         allPerfDataDS.pmCerCDist = allPerfDataDS.pmPrxCDist;
         allPerfDataDS.pmCerCDir  = allPerfDataDS.pmPrxCDir;
         allPerfDataDS.pmCerCPlac = allPerfDataDS.pmPrxCPlac;
         allPerfDataDS.pmCerCPlTp = allPerfDataDS.pmPrxCPlTp;
         allPerfDataDS.pmCerCCity = allPerfDataDS.pmPrxCCity;
         allPerfDataDS.pmCerCStPr = allPerfDataDS.pmPrxCStPr;
         allPerfDataDS.pmCerCPost = allPerfDataDS.pmPrxCPost;
         allPerfDataDS.pmCerCCoun = allPerfDataDS.pmPrxCCoun;
         allPerfDataDS.pmPrxCDist = *blanks;
         allPerfDataDS.pmPrxCDir  = *blanks;
         allPerfDataDS.pmPrxCPlac = *blanks;
         allPerfDataDS.pmPrxCPlTp = *blanks;
         allPerfDataDS.pmPrxCCity = *blanks;
         allPerfDataDS.pmPrxCStPr = *blanks;
         allPerfDataDS.pmPrxCPost = *blanks;
         allPerfDataDS.pmPrxCCoun = *blanks;
    // Message location, date and time.
    when elementName = 'incidentLocation';
         allPerfDataDS.pmCerILon  = allPerfDataDS.pmLongitud;
         allPerfDataDS.pmCerILat  = allPerfDataDS.pmLatitud;
         allPerfDataDS.pmCerIDate = allPerfDataDS.pmPosnDate;
         allPerfDataDS.pmCerITime = allPerfDataDS.pmPosnTime;
         allPerfDataDS.pmLongitud = *blanks;
         allPerfDataDS.pmLatitud  = *blanks;
         allPerfDataDS.pmPosnDate = *loval;
         allPerfDataDS.pmPosnTime = *loval;
    // CER URL.
    when elementName = 'eventUrl';
         allPerfDataDS.pmCerUrl = %trim(elementValue);
    endsl;
   //---------------------------------------------------------------------
   --*
   // Convert a GMT Date/Time Stamp to EST in ISO format.
   //---------------------------------------------------------------------
   --*
    begsr convertGMTtoEST;
    isoDate = *loval;
    isoTime = *loval;
    isoAlphaDateTime = *blanks;
    timeStamp        = *loval;
    isoAlphaDateTime = %subst(gmtDateTime:1:4) +
                       '-' +
                       %subst(gmtDateTime:6:2) +
                       '-' +
                       %subst(gmtDateTime:9:2) +
                       '-' +
                       %subst(gmtDateTime:12:2) +
                       '.' +
                       %subst(gmtDateTime:15:2) +
                       '.' +
                       %subst(gmtDateTime:18:2) +
                       '.' +
                       '000000';
    test(ZE) *ISO isoAlphaDateTime;
    if not %error;
       timeStamp = %timestamp(isoAlphaDateTime:*ISO)
                              - %hours(5);  // Convert GMT to EST.
       isoDate = %date(%subst(%char(timeStamp):1:10));
       isoTime = %time(%subst(%char(timeStamp):12:8));
    endif;
   endsr;
   /end-free
   *
   P embedded...
   P                 E
   *
     ___________________________________________________________
     Paul Reid
     Application Developer III
     From:   corby.weaver@xxxxxxxxxxxxxxxxx
     To:     HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>
     Date:   12/14/2015 10:54 AM
     Subject:        RE: New to XML - Dequeue2 Request Issue
     Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       OK, I'm still struggling with the base64_decode portion of this.
     I've
       searched thru the forum and I'm not finding what I think I need.  I
       could be wrong.  Where in my process will a do the call to
       base64_decode and what is the correct code to add?
       Thanks again!
       Corby Weaver
       From:        Mike Krebs <mkrebs@xxxxxxxxxxxxxxxxxx>
       To:        HTTPAPI and FTPAPI Projects
     <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>,
       Date:        12/11/2015 12:28 PM
       Subject:        RE: New to XML - Dequeue2 Request Issue
       Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx

   __________________________________________________________________
       Upon further review, I see you don't understand what happens here:
           if (http_parse_xml_stmf( soapfile
                                : HTTP_XML_CALC
                                : *null
                                : %paddr(SaveEmbed)
                                : %addr(embfile) ) < 0);
       The Expat parser and Scott's port of it handle the incoming XML as
   a
       stream of elements. There are various ways to parse the XML. The
   API
     as
       called above will call SaveEmbed each time it gets to the end of an
       element. That is on a </whatever>. By looking at your incoming
   data,
       transactions is the inner most element we are interested in. So, my
       code checks if name matches transactions. It is called a bunch of
     other
       times (every time there is a </whatever>) but every other time it
     does
       not do anything other than return.
       So your SaveEmbed was working but the last element didn't have a
       "value" with it. So, your code created the file with just the
   header.
       You want just the base64 encoded data in the file. Then you can
     decode
       the file and parse that for the actual data.
       -----Original Message-----
       From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       [[1][6][8]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf
   Of
     Mike
       Krebs
       Sent: Friday, December 11, 2015 11:47 AM
       To: HTTPAPI and FTPAPI Projects
       Subject: RE: New to XML - Dequeue2 Request Issue
       You didn't make it convenient by including extra data in your post.
       Many of us don't just read code, we try to code the problem
     ourselves!
       I managed to recreate the SOAPfile data and was able to parse using
       your saveembed with minor tweak to create the embfile.
       I saved the SOAPfile data to a file called /home/mikekr/corby.xml
   and
       changed the "data" portion to
     <transactions>base64stuff</transactions>
       Here is my complete program that parses corby.xml and creates
   embfile
       with what you need. Change the file names appropriately and see if
     you
       have the base64 encoded data in /tmp/OmniTracsFuleFin.soap after
   you
       run it.
       h bnddir('HTTPAPI')
       /copy httpapi_h
       /copy ifsio_h
        dcl-s embfile  varchar(50);
        dcl-s soapfile varchar(50);
       D SaveEmbed       PR
       D   embfile                     50a   varying
       D   depth                       10I 0 value
       D   name                      1024A   varying const
       D   path                     24576A   varying const
       D   value                    32767A   varying const
       D   attrs                         *   dim(32767)
       D                                     const options(*varsize)
        http_debug(*on);
        soapfile = '/home/MIKEKR/corby.xml';
        embfile  = '/tmp/OmniTracsFuelFin.soap';
           if (http_parse_xml_stmf( soapfile
                                : HTTP_XML_CALC
                                : *null
                                : %paddr(SaveEmbed)
                                : %addr(embfile) ) < 0);
              // callp close(fd);
              // unlink(soapfile);
              // unlink(embfile);
               http_crash();
             endif;
         *inlr = *on;
         //  unlink(soapfile);
       P SaveEmbed       B
       D SaveEmbed       PI
       D   embfile                     50a   varying
       D   depth                       10I 0 value
       D   name                      1024A   varying const
       D   path                     24576A   varying const
       D   value                    32767A   varying const
       D   attrs                         *   dim(32767)
       D                                     const options(*varsize)
       D writeConst      PR            10I 0 ExtProc('write')
       D  fildes                       10i 0 value
       D  buf                       65535A   const options(*varsize)
       D  bytes                        10U 0 value
       D xmlhdr          s             80a   varying
       D fd              s             10i 0
          if name = 'transactions';
          unlink(embfile);
          fd = open(embfile:O_CREAT+O_CCSID+O_WRONLY
                    :S_IRUSR + S_IWUSR:819);
          callp close(fd);
          fd = open(embfile: O_WRONLY+O_TEXTDATA);
          writeConst(fd: value:  %len(value));
          callp close(fd);
          endif;
       P                 e
       -----Original Message-----
       From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       [[2][7][9]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf
   Of
     Scott
       Klement
       Sent: Friday, December 11, 2015 8:58 AM
       To: HTTPAPI and FTPAPI Projects
       Subject: Re: New to XML - Dequeue2 Request Issue
       Corby,
       I see that a few weeks ago, you acknowledged that the data being
   sent
       to
       you is base64-encoded..   As far as I can tell, however, you never
     call
       the base64_decode() routine to decode it...   am I missing
   something?
       -SK
       On 12/11/2015 8:22 AM, corby.weaver@xxxxxxxxxxxxxxxxx wrote:
       >     Here is my full code, less proprietary info.  I wouldn't
     normally
       >     include D specs, but I want to be sure all of my bases are
       covered.
       >     0012.00 H DFTACTGRP(*NO) BNDDIR('HTTPAPI':'QC2LE':'BASE64')
       >     0013.00  /define DEBUGGING
       >     0014.00
       >     0020.00  /copy httpapi_h
       >     0021.00  /copy base64_h
       >     0022.00  /copy ifsio_h
       >     0023.00
       >     0024.00 D QCMDEXC         PR
   ExtPgm('QCMDEXC')
       >     0025.00 D   command                  32702a   const
       options(*varsize)
       >     0026.00 D   len                         15p 5 const
       >     0027.00 D   igc                          3a   const
       options(*nopass)
       >     0028.00
       >     0029.00 D SOAP            s          32767A   varying
       >     0030.00 D rc              s             10I 0
       >     0031.00 D fd              s             10I 0
       >     0032.00 D soapfile        s             50a   varying
       >     0033.00 D embfile         s             50a   varying
       >     0034.00 D fuel            ds                  likeds(fuel_t)
       >     0035.00 D cmd             s            200A
       >     0036.00 D wait            s              1A
       >     0037.00
       >     0038.00 D SaveEmbed       PR
       >     0039.00 D   embfile                     50a   varying
       >     0040.00 D   depth                       10I 0 value
       >     0041.00 D   name                      1024A   varying const
       >     0042.00 D   path                     24576A   varying const
       >     0043.00 D   value                    32767A   varying const
       >     0044.00 D   attrs                         *   dim(32767)
       >     0045.00 D                                     const
       options(*varsize)
       >     0046.00
       >     0047.00 D fuel_t          ds                  qualified
       >     0048.00 D                                     based(Template)
       >     0049.00 D   vehicle                     20a   varying
       >     0050.00 D   driver                      30a   varying
       >     0051.00 D   comp                        30a   varying
       >     0052.00
       >     0053.00 D embedded        PR
       >     0054.00 D   fuel                              likeds(fuel_t)
       >     0055.00 D   depth                       10I 0 value
       >     0056.00 D   name                      1024A   varying const
       >     0057.00 D   path                     24576A   varying const
       >     0058.00 D   value                    32767A   varying const
       >     0059.00 D   attrs                         *   dim(32767)
       >     0060.00 D                                     const
       options(*varsize)
       >
       >     0061.00 D                 ds
       >
       >     0062.00 D DS_TimeStamp                    z
       >
       >     0063.00 D  ds_curdate                   10
       overlay(ds_timestamp:1)
       >
       >     0064.00 D  ds_curtime                   12
       overlay(ds_timestamp:12)
       >
       >     0065.00
       >
       >     0066.00 D                 ds
       >
       >     0067.00 D DS_TimeStampB                   z
       >
       >     0068.00 D  ds_curdateB                  10
       overlay(ds_timestampB:1)
       >
       >     0069.00 D  ds_curtimeB                  12
       overlay(ds_timestampB:12)
       >
       >     0070.00
       >
       >     0071.00 D createdate      s             10
       >
       >     0072.00 D createtime      s             12
       >
       >     0073.00 D expiredate      s             10
       >
       >     0074.00 D expiretime      s             12
       >
       >     0075.00 D reqfrmdate      s             10
       >
       >     0076.00 D reqtodate       s             10
       >
       >     0077.00 D digit1099       s              1
       >
       >     0078.00
       >
       >     0079.00 D tokentxt        s             18a   varying
       >
       >     0080.00 D token64         s             24a
       >     0081.00 D p_tokenUTF      s               *
       >     0082.00 D utflen          s             10i 0
       >     0083.00 D b64len          s             10i 0
       >     0084.00 D timoffset       s              3  0
       >     0085.00 D lasttrip        s              8
       >     0086.00
       >     0087.00 C     *entry        plist
       >     0088.00 C                   parm                    timoffset
       >     0089.00 C                   parm                    lasttrip
       >     0090.00
       >     0091.00 C                   Time
     DS_TimeStamp
       >     0092.00
       >     0093.00  /free
       >     0094.00  /if defined(DEBUGGING)
       >     0095.00    http_debug(*ON);
       >     0096.00  /endif
       >     0097.00    *inlr = *on;
       >     0098.00
       >     0099.00   DS_TimeStampB = DS_TimeStamp;
       >     0100.00
       >
       >     0101.00   // Calculate UTC Create Time And Date
       >
       >     0102.00   timoffset = timoffset * -1;
       >
       >     0103.00   DS_TimeStamp = DS_TimeStamp + %minutes(timoffset);
       >
       >     0104.00   createdate = ds_curdate;
       >
       >     0105.00   createtime = ds_curtime;
       >
       >     0106.00   %subst(createtime:3:1) = ':';
       >
       >     0107.00   %subst(createtime:6:1) = ':';
       >
       >     0108.00
       >
       >     0109.00   // Calculate UTC Expire Time And Date
       >
       >     0110.00   DS_TimeStamp = DS_TimeStamp + %minutes(5);
       >
       >     0111.00   expiredate = ds_curdate;
       >
       >     0112.00   expiretime = ds_curtime;
       >
       >     0113.00   %subst(expiretime:3:1) = ':';
       >
       >     0114.00   %subst(expiretime:6:1) = ':';
       >
       >     0115.00
       >
       >     0116.00   // Calculate UTC Requested To Date
       >
       >     0117.00   DS_TimeStampB = DS_TimeStampB - %days(1);
       >
       >     0118.00   reqtodate = ds_curdateB;
       >
       >     0119.00
       >
       >     0120.00   // Calculate UTC Requested From Date
       >     0121.00   DS_TimeStampB = DS_TimeStampB - %days(1);
       >     0122.00   reqfrmdate = ds_curdateB;
       >     0123.00
       >     0124.00   http_setCCSIDs( 1208: 0 );
       >     0125.00
       >     0126.00   tokentxt = %triml(createdate + createtime);
       >     0127.00
       >     0128.00   utflen = HTTP_xlatedyn( %len(tokentxt)
       >     0129.00                         : %addr(tokentxt) + 2
       >     0130.00                         : TO_ASCII
       >     0131.00                         : p_tokenUTF );
       >     0132.00
       >     0133.00   b64len = base64_encode( p_tokenUTF
       >     0134.00                         : utflen
       >     0135.00                         : %addr(token64)
       >     0136.00                         : %size(token64) );
       >     0137.00
       >     0138.00   dealloc p_tokenUTF;
       >     0139.00
       >     0140.00   // Note:  http_debug(*ON/*OFF) can be used to turn
       debugging
       >
       >     0141.00   //        on and off.  When debugging is turned on,
       >     diagnostic
       >     0142.00   //        info is written to an IFS file named
       >
       >     0143.00   //        /tmp/httpapi_debug.txt
       >
       >     0144.00
       >
       >     0145.00   //http_debug(*ON);
       >
       >     0146.00
       >
       >     0147.00   // Note:  http_XmlStripCRLF(*ON/*OFF) controls
     whether
       or not
       >
       >     0148.00   //        the XML parser removes CR and LF
   characters
       from
       >     the
       >     0149.00   //        Xml data that's passed to your 'Incoming'
       >     procedure.
       >     0150.00
       >
       >     0151.00   http_XmlStripCRLF(*ON);
       >
       >     0152.00
       >
       >     0153.00   SOAP =
       >
       >     0154.00    '<?xml version="1.0" encoding="UTF-8"
       standalone="no"?>'
       >
       >     0155.00   +'<SOAP-ENV:Envelope'
       >
       >     0156.00   +'
       >

   xmlns:SOAP-ENV="[1][3][8][10]http://schemas.xmlsoap.org/soap/envelope/";
   '
       >     0157.00   +'
   xmlns:web="[2][4][9][11]http://websvcs.otswebws";>'
       >
       >     0158.00   +'<SOAP-ENV:Header>'
       >
       >     0159.00   +'    <wsse:Security SOAP-ENV:mustUnderstand="1"'
       >
       >     0160.00   +'
       >

   xmlns:wsse="[3][5][10][12]http://docs.oasis-open.org/wss/2004/01/oasis-
   2004
     01-'
       >     0161.00   +'wss-wssecurity-secext-1.0.xsd">'
       >
       >     0162.00   +'    <wsu:Timestamp wsu:Id="Timestamp-6"'
       >
       >     0163.00   +'
       >

   xmlns:wsu="[4][6][11][13]http://docs.oasis-open.org/wss/2004/01/oasis-2
   0040
     1'
       >     0164.00   +'-wss-wssecurity-utility-1.0.xsd">'
       >
       >     0165.00   +'
       >     <wsu:Created>'+createdate+'T'+createtime+'Z</wsu:Created>'
       >     0166.00   +'
       >     <wsu:Expires>'+expiredate+'T'+expiretime+'Z</wsu:Expires>'
       >     0167.00   +'    </wsu:Timestamp>'
       >
       >     0168.00   +'    <wsse:UsernameToken wsu:Id="UsernameToken-5"
       xmlns:wsu'
       >
       >     0169.00

   +'="[5][7][12][14]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
       >
       >     0170.00   +'wss-wssecurity-utility-1.0.xsd">'
       >
       >     0171.00   +'    <wsse:Username>XXXXXXXXXX</wsse:Username>'
       >
       >     0172.00   +'    <wsse:Password
       Type="[6][8][13][15]http://docs.oasis-open.org/wss'
       >
       >     0173.00
     +'/2004/01/oasis-200401-wss-username-token-profile-1.0'
       >
       >     0174.00   +'#PasswordText">XXXXXXXXXX</wsse:Password>'
       >
       >     0175.00   +'    <wsse:Nonce
       >     EncodingType="[7][9][14][16]http://docs.oasis-open.org/'
       >     0176.00
     +'wss/2004/01/oasis-200401-wss-soap-message-security-'
       >
       >     0177.00
     //+'1.0#Base64Binary">Qcw0k1jjcEvvrNldT3ex1A==</wsse:'
       >
       >     0178.00   +'1.0#Base64Binary">'+token64+'</wsse:'
       >
       >     0179.00   +'Nonce>'
       >
       >     0180.00   +'
       >     <wsu:Created>'+createdate+'T'+createtime+'Z</wsu:Created>'
       >     0181.00   +'    </wsse:UsernameToken>'
       >
       >     0182.00   +'    </wsse:Security>'
       >
       >     0183.00   +'</SOAP-ENV:Header>'
       >
       >     0184.00   +'<SOAP-ENV:Body>'
       >
       >     0185.00   +'    <web:dequeue2>'
       >
       >     0186.00   +'         <subscriberId>3</subscriberId>'
       >
       >     0187.00   +'         <transactionIdIn>0</transactionIdIn>'
       >
       >     0188.00   +'    </web:dequeue2>'
       >
       >     0189.00   +'</SOAP-ENV:Body>'
       >
       >     0190.00   +'</SOAP-ENV:Envelope>';
       >
       >     0191.00
       >
       >     0192.00   http_debug(*ON);
       >
       >     0193.00
       >
       >     0194.00     soapfile = '/tmp/OmniTracsFuelRaw.soap';
       >
       >     0195.00
       >
       >     0196.00     rc = http_url_post(
       >
       >     0197.00
       >
       >     0198.00
       >
     'https://services.omnitracs.com:443/otsWebWS/services/OTSWebSvcs'
       >     0199.00                     : %addr(SOAP) + 2
       >
       >     0200.00                     : %len(SOAP)
       >     0201.00                     : soapfile
       >     0202.00                     : HTTP_TIMEOUT
       >     0203.00                     : HTTP_USERAGENT
       >     0204.00                     : 'text/xml'
       >     0205.00                     : 'ETS Test');
       >     0206.00
       >     0207.00   if (rc <> 1);
       >     0208.00      unlink(soapfile);
       >     0209.00      http_crash();
       >     0210.00   endif;
       >     0211.00
       >     0212.00   // ----------------------------------------------
       >     0213.00   //   The response from the server will be in
       >     0214.00   //   the IFS in a file with a unique name.
       >     0215.00   //   that IFS filename is in the "tempfile"
       >     0216.00   //   variable at this point.
       >     0217.00   //
       >     0218.00   //   For debugging purposes, display the
       >     0219.00   //   contents of that file, now.
       >     0220.00   // ----------------------------------------------
       >     0221.00  /if defined(DEBUGGING)
       >     0222.00      dsply ('Press <ENTER> to see SOAP response') ' '
       wait;
       >     0223.00      cmd = 'DSPF STMF(''' + soapfile + ''')';
       >     0224.00      QCMDEXC(cmd: %len(cmd));
       >     0225.00  /endif
       >     0226.00
       >     0227.00    // ----------------------------------------------
       >     0228.00    //  Parse the SOAP document (the one in soapfile)
       >     0229.00    //  Inside it will be another XML document that's
       >     0230.00    //  embedded within -- save that to a separate
       >     0231.00    //  file in the IFS.
       >     0232.00    // ----------------------------------------------
       >     0233.00
       >     0234.00      embfile = '/tmp/OmniTracsFuelFin.soap';
       >     0235.00
       >     0236.00      if (http_parse_xml_stmf( soapfile
       >     0237.00                             : HTTP_XML_CALC
       >     0238.00                             : *null
       >     0239.00                             : %paddr(SaveEmbed)
        >     0240.00                             : %addr(embfile) ) < 0);
       >     0241.00          callp close(fd);
       >     0242.00          unlink(soapfile);
       >     0243.00          unlink(embfile);
       >     0244.00          http_crash();
       >     0245.00      endif;
       >     0246.00
       >     0247.00      unlink(soapfile);
       >     0248.00
       >     0249.00    // ----------------------------------------------
       >     0250.00    //   For the sake of debugging, display the
       >     0251.00    //   contents of the embedded XML document
       >     0252.00    //   (Remove from production code)
       >     0253.00    // ----------------------------------------------
       >     0254.00
       >     0255.00  /if defined(DEBUGGING)
       >     0256.00      dsply ('Press <ENTER> to see extracted XML') ' '
       wait;
       >     0257.00      cmd = 'DSPF STMF(''' + embfile + ''')';
       >     0258.00      QCMDEXC(cmd: %len(cmd));
       >     0259.00  /endif
       >     0260.00
       >     0261.00    // ----------------------------------------------
       >     0262.00    //    Parse the second XML document (the one
       >     0263.00    //    that was embedded)
       >     0264.00    // ----------------------------------------------
       >     0265.00      fuel = *allx'00';
       >     0266.00      if (http_parse_xml_stmf( embfile
       >     0267.00                             : HTTP_XML_CALC
       >     0268.00                             : *null
       >     0269.00                             : %paddr(Embedded)
       >     0270.00                             : %addr(fuel) ) < 0);
       >     0271.00          unlink(embfile);
       >     0272.00          http_crash();
       >     0273.00      endif;
       >     0274.00
       >     0275.00
       >     0276.00   *inlr = *on;
       >     0277.00
       >     0278.00  /end-free
       >     0279.00
       >     0280.00 P SaveEmbed       B
       >     0281.00 D SaveEmbed       PI
       >     0282.00 D   embfile                     50a   varying
       >     0283.00 D   depth                       10I 0 value
       >     0284.00 D   name                      1024A   varying const
       >     0285.00 D   path                     24576A   varying const
       >     0286.00 D   value                    32767A   varying const
       >     0287.00 D   attrs                         *   dim(32767)
       >     0288.00 D                                     const
       options(*varsize)
       >     0289.00
       >     0290.00 D writeConst      PR            10I 0
   ExtProc('write')
       >     0291.00 D  fildes                       10i 0 value
       >     0292.00 D  buf                       65535A   const
       options(*varsize)
       >     0293.00 D  bytes                        10U 0 value
       >     0294.00
       >     0295.00 D xmlhdr          s             80a   varying
       >     0296.00 D fd              s             10i 0
       >     0297.00
       >     0298.00  /free
       >     0299.00  //    if (name <>
     'GetABADetailsByRoutingNumberResult');
       >     0300.00  //      return;
       >     0301.00  //    endif;
       >     0302.00
       >     0303.00       // ------------------------------------------
       >     0304.00       //   create new stream file in IFS
       >     0305.00       //   tag it with CCSID 1208 (UTF-8)
       >     0306.00       // ------------------------------------------
       >     0307.00
       >     0308.00       unlink(embfile);
       >     0309.00       fd = open(embfile: O_CREAT+O_CCSID+O_WRONLY
       >     0310.00                        : S_IRUSR + S_IWUSR: 819);
       >     0311.00       callp close(fd);
       >     0312.00
       >     0313.00       // ------------------------------------------
       >     0314.00       //    Open stream file for appending data
       >     0315.00       //    and write embedded XML document to it
       >     0316.00       // ------------------------------------------
       >     0317.00
       >     0318.00       fd = open(embfile: O_WRONLY+O_TEXTDATA);
       >     0319.00
       >     0320.00       xmlhdr= '<?xml version="1.0"
   encoding="UTF-8"?>'
     +
       >     x'0d25';
        >     0321.00       writeConst(fd: xmlhdr: %len(xmlhdr));
       >
       >     0322.00       writeConst(fd: value:  %len(value));
       >
       >     0323.00
       >
       >     0324.00       callp close(fd);
       >
       >     0325.00  /end-free
       >
       >     0326.00 P                 E
       >
       >     0327.00
       >
       >     0328.00
       >
       >     0329.00 P embedded        B
       >
       >     0330.00 D embedded        PI
       >
       >     0331.00 D   fuel                              likeds(fuel_t)
       >
       >     0332.00 D   depth                       10I 0 value
       >
       >     0333.00 D   name                      1024A   varying const
       >
       >     0334.00 D   path                     24576A   varying const
       >
       >     0335.00 D   value                    32767A   varying const
       >
       >     0336.00 D   attrs                         *   dim(32767)
       >
       >     0337.00 D                                     const
       options(*varsize)
       >
       >     0338.00
       >
       >     0339.00  /free
       >
       >     0340.00     select;
       >     0341.00     when name = 'vehicleID';
       >     0342.00        fuel.vehicle = %trimr(value);
       >     0343.00     when name = 'driverName';
       >     0344.00        fuel.driver = %trimr(value);
       >     0345.00     when name = 'companyName';
       >     0346.00        fuel.comp = %trimr(value);
       >     0347.00     endsl;
       >     0348.00  /end-free
       >     0349.00 P                 E
       >     Here are my results as seen in step 221.00:
       >      ************Beginning of data**************
       >
       >     <soapenv:Envelope
       >

   xmlns:soapenv="[8][10][15][17]http://schemas.xmlsoap.org/soap/envelope/
   "
       >

   xmlns:soapenc="[9][11][16][18]http://schemas.xmlsoap.org/soap/encoding/
       >     "
   xmlns:xsd="[10][12][17][19]http://www.w3.org/2001/XMLSchema";
       >

   xmlns:xsi="[11][13][18][20]http://www.w3.org/2001/XMLSchema-instance";><
   soap
     env:
       Head
       >     er/><soapenv:Body>
       >     <p917:dequeue2Response
       >

   xmlns:p917="[12][14][19][21]http://websvcs.otswebws";><dequeue2Return><c
   ount
     >1</
       coun
       >     t><transactions>PD94bWwgdmVyc2lvbj0iMS4wIi
       >

   BlbmNvZGluZz0iVVRGLTgiPz48dHJhbkJsb2NrPjx0cmFuIElEPSI0ODQ5MTgiIGNvbXBhb
       >     nlJRD0iRkFSTkVSQk9DSyIgYXV4SUQ9IjA1NDYwNTk4MjQiPjxULjIuUk0wMS
       >

   4wPjxldmVudFRTPjIwMTUtMDktMjJUMjE6MzM6MDZaPC9ldmVudFRTPjxlcXVpcG1lbnQgS
       >     UQ9IkJBR1VOSVQiIGVxdWlwVHlwZT0idHJhY3RvciIgdW5pdEFkZHJlc3M9Ij
       >

   AxMDcwNTI2OTAiIG1vYmlsZVR5cGU9IjgiLz48ZHJpdmVySUQ+VFJBSU5FUjwvZHJpdmVyS
       >     UQ+PHBvc2l0aW9uIGxvbj0iLTk0LjgzNzU5MiIgbGF0PSI0Mi4wNjYwMTgiIH
       >

   Bvc1RTPSIyMDE1LTA5LTIyVDE0OjU0OjIyWiIvPjxwb3NUeXBlPjM8L3Bvc1R5cGU+PGlnb
       >     ml0aW9uU3RhdHVzPjE8L2lnbml0aW9uU3RhdHVzPjx0cmlwU3RhdHVzPk88L3
       >

   RyaXBTdGF0dXM+PEdNSD4wMDEwMTgwMzE8L0dNSD48cmVjZWl2ZWRUUz4yMDE1LTA5LTIyV
       >     DIxOjM2OjU2WjwvcmVjZWl2ZWRUUz48bXNnUHJpb3JpdHk+MDwvbXNnUHJpb3
       >

   JpdHk+PG1hY3JvQm9keT48bWFjcm9UeXBlIGRpcmVjdGlvbj0iUiIgbnVtYmVyPSIxIiB2Z
       >     XJzaW9uPSIyIj5UUlVDSyBGVUVMPC9tYWNyb1R5cGU+PG1hY3JvRmllbGQgZG
       >

   ljdFRhZz0idmVoaWNsZUlkIj5CMDE8L21hY3JvRmllbGQ+PG1hY3JvRmllbGQgZGljdFRhZ
       >     z0iZHJpdmVyTmFtZSI+QklMTFkgQk9CPC9tYWNyb0ZpZWxkPjxtYWNyb0ZpZW
       >

   xkIGRpY3RUYWc9ImNvbXBhbnlOYW1lIj5TUEFSS1lTIENBUlJPTEw8L21hY3JvRmllbGQ+P
       >     G1hY3JvRmllbGQgZGljdFRhZz0ic3RhdGUiPklBPC9tYWNyb0ZpZWxkPjxtYW
       >

   Nyb0ZpZWxkIGRpY3RUYWc9ImdhbGxvbnMiPjUwPC9tYWNyb0ZpZWxkPjxtYWNyb0ZpZWxkI
       >     GRpY3RUYWc9ImNvc3Qgb2YgZnVlbCI+MjAwLjAwPC9tYWNyb0ZpZWxkPjxtYW
       >

   Nyb0ZpZWxkIGRpY3RUYWc9IndlaWdodCI+NTAwPC9tYWNyb0ZpZWxkPjwvbWFjcm9Cb2R5P
       >     jwvVC4yLlJNMDEuMD48L3RyYW4+PC90cmFuQmxvY2s+</transactions><tr
       >

   ansactionIdOut>484918</transactionIdOut></dequeue2Return></p917:dequeue
       >     2Response></soapenv:Body></soapenv:Envelope>
       >      ************End of Data********************
       >     My results as seen in step 255.00
       >      ************Beginning of data**************
       >     <?xml version="1.0" encoding="UTF-8"?>
       >      ************End of Data********************
       >     When I move on to the next step, I get "XML parse failed at
     line
       2, col
       >     0, element not found."  What am I missing?
       >     Thanks for the feedback.
       >
       >     Corby Weaver
       >     From:        Mike Krebs <mkrebs@xxxxxxxxxxxxxxxxxx>
       >     To:        HTTPAPI and FTPAPI Projects
       <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>,
       >     Date:        12/07/2015 10:37 AM
       >     Subject:        RE: New to XML - Dequeue2 Request Issue
       >     Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >
       >
   __________________________________________________________________
       >
       >     Nothing stands out to me...you never explained how and where
     "I'm
       >     having an issue".
       >     Post debug. Make sure to scrub proprietary or confidential
       information.
       >     -----Original Message-----
       >     From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >
   [[13][15][20][22]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On
     Behalf
       Of
       >     corby.weaver@xxxxxxxxxxxxxxxxx
       >     Sent: Wednesday, December 2, 2015 10:50 AM
       >     To: HTTPAPI and FTPAPI Projects
       >     Subject: RE: New to XML - Dequeue2 Request Issue
       >       I've got my initial file coming in fine (Step 1).  I'm
   having
       an
       >     issue
       >       with Step 2, parsing the "real" data.
       >       Here is my code:
       >           soapfile = '/tmp/OmniTracsFuelRaw.soap';
       >           rc = http_url_post(
       >
       >
     'https://services.omnitracs.com:443/otsWebWS/services/OTSWebSvcs'
       >                           : %addr(SOAP) + 2
       >                           : %len(SOAP)
       >                           : soapfile
       >                           : HTTP_TIMEOUT
       >                           : HTTP_USERAGENT
       >                           : 'text/xml'
       >                           : 'ETS Test');
       >         if (rc <> 1);
       >            unlink(soapfile);
       >            http_crash();
       >         endif;
       >         // ----------------------------------------------
       >         //   The response from the server will be in
       >         //   the IFS in a file with a unique name.
       >         //   that IFS filename is in the "tempfile"
       >         //   variable at this point.
       >         //
       >         //   For debugging purposes, display the
       >         //   contents of that file, now.
       >         // ----------------------------------------------
       >          // ----------------------------------------------
       >          //  Parse the SOAP document (the one in soapfile)
       >          //  Inside it will be another XML document that's
       >          //  embedded within -- save that to a separate
       >          //  file in the IFS.
       >          // ----------------------------------------------
       >            embfile = '/tmp/OmniTracsFuelFin.soap';
       >            if (http_parse_xml_stmf( soapfile
       >                                   : HTTP_XML_CALC
       >                                   : *null
       >                                   : %paddr(SaveEmbed)
       >                                   : %addr(embfile) ) < 0);
       >                callp close(fd);
       >                unlink(soapfile);
       >                unlink(embfile);
       >                http_crash();
       >            endif;
       >            unlink(soapfile);
       >       Anything stand out?  Thoughts and suggestions are
     appreciated.
       >       Thanks!
       >       Corby Weaver
       >       From:        Mike Krebs <mkrebs@xxxxxxxxxxxxxxxxxx>
       >       To:        HTTPAPI and FTPAPI Projects
       >     <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>,
       >       Date:        11/20/2015 05:09 PM
       >       Subject:        RE: New to XML - Dequeue2 Request Issue
       >       Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >
       __________________________________________________________________
       >       Let's break the project into steps:
       >       1. Send request and receive response
       >       2. Parse the IFS file saving the "real" data
       >       3. Decode the "real" data
       >       4. Parse the "real" data
       >       See Example17 for 1, 2, and 4. To decode see Scott's Base64
     or
       the
       >       built-in support in OS400.
       >       Alternatively, use WSDL2RPG as in the linked thread to do
     what
       you
       >       need. It is a little harder to understand initially but it
     will
       >       generate programs for you to modify for the service.
     Depending
       on the
       >       WSDL, it might do everything you need.
       >       -----Original Message-----
       >       From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >
   [[1][14][16][21][23]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx]
     On
       Behalf Of
       >       corby.weaver@xxxxxxxxxxxxxxxxx
       >       Sent: Friday, November 20, 2015 1:05 PM
       >       To: HTTPAPI and FTPAPI Projects
       >       Subject: Re: New to XML - Dequeue2 Request Issue
       >         Sorry, it is encoded, not encrypted.  There was a similar
       post a
       >     few
       >         years ago where the transaction portion of the XML
   document
       was
       >       parsed
       >         and I assume the base64 decoder worked.  Being unfamiliar
       with XML,
       >     I
       >         do not know what the code should be for my specific
     program.
       >         Here is a link to the previous thread...
       >
       >

   [1][2][15][17][22][24]https://scottklement.com/archives/ftpapi/201210/m
   sg00
     121.
       html
       >         I'm hoping someone is able to help me with the portion of
       code that
       >         does the parse.
       >         Thanks,
       >         Corby Weaver
       >       References
       >         1.
       >
       >

   [3][16][18][23][25]https://scottklement.com/archives/ftpapi/201210/msg0
   0121
     .htm
       l
       >
       >

   -----------------------------------------------------------------------
       >       This is the FTPAPI mailing list.  To unsubscribe, please go
     to:
       >

   [4][17][19][24][26]http://www.scottklement.com/mailman/listinfo/ftpapi
       >
       >
       >

   ----------------------------------------------------------------------
       > -
       >
       >

   -----------------------------------------------------------------------
       >       This is the FTPAPI mailing list.  To unsubscribe, please go
     to:
       >

   [5][18][20][25][27]http://www.scottklement.com/mailman/listinfo/ftpapi
       >
       >

   -----------------------------------------------------------------------
       >     References
       >       1.
   [19][21][26][28]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >       2.

   [20][22][27][29]https://scottklement.com/archives/ftpapi/201210/msg0012
   1.ht
     ml
       >       3.

   [21][23][28][30]https://scottklement.com/archives/ftpapi/201210/msg0012
   1.ht
     ml
       >       4.
     [22][24][29][31]http://www.scottklement.com/mailman/listinfo/ftpapi
       >       5.
     [23][25][30][32]http://www.scottklement.com/mailman/listinfo/ftpapi
       >

   -----------------------------------------------------------------------
       >     This is the FTPAPI mailing list.  To unsubscribe, please go
   to:
       >
   [24][26][31][33]http://www.scottklement.com/mailman/listinfo/ftpapi
       >

   -----------------------------------------------------------------------
       >

   -----------------------------------------------------------------------
       >     This is the FTPAPI mailing list.  To unsubscribe, please go
   to:
       >
   [25][27][32][34]http://www.scottklement.com/mailman/listinfo/ftpapi
       >
       >

   ----------------------------------------------------------------------
       > -
       >
       > References
       >
       >     1. [28][33][35]http://schemas.xmlsoap.org/soap/envelope/
       >     2. [29][34][36]http://websvcs.otswebws/
       >     3.
     [30][35][37]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
       >     4.
   [31][36][38]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
       >     5.
     [32][37][39]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
       >     6. [33][38][40]http://docs.oasis-open.org/wss'
       >     7. [34][39][41]http://docs.oasis-open.org/'
       >     8. [35][40][42]http://schemas.xmlsoap.org/soap/envelope/
       >     9. [36][41][43]http://schemas.xmlsoap.org/soap/encoding/
       >    10. [37][42][44]http://www.w3.org/2001/XMLSchema
       >    11. [38][43][45]http://www.w3.org/2001/XMLSchema-instance
       >    12. [39][44][46]http://websvcs.otswebws/
       >    13. [40][45][47]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >    14. [41][46][48]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >    15.

   [42][47][49]https://scottklement.com/archives/ftpapi/201210/msg00121.ht
   ml
       >    16.

   [43][48][50]https://scottklement.com/archives/ftpapi/201210/msg00121.ht
   ml
       >    17.
   [44][49][51]http://www.scottklement.com/mailman/listinfo/ftpapi
       >    18.
   [45][50][52]http://www.scottklement.com/mailman/listinfo/ftpapi
       >    19. [46][51][53]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       >    20.

   [47][52][54]https://scottklement.com/archives/ftpapi/201210/msg00121.ht
   ml
       >    21.

   [48][53][55]https://scottklement.com/archives/ftpapi/201210/msg00121.ht
   ml
       >    22.
   [49][54][56]http://www.scottklement.com/mailman/listinfo/ftpapi
       >    23.
   [50][55][57]http://www.scottklement.com/mailman/listinfo/ftpapi
       >    24.
   [51][56][58]http://www.scottklement.com/mailman/listinfo/ftpapi
       >    25.
   [52][57][59]http://www.scottklement.com/mailman/listinfo/ftpapi
       >

   ----------------------------------------------------------------------
       > - This is the FTPAPI mailing list.  To unsubscribe, please go to:
       > [53][58][60]http://www.scottklement.com/mailman/listinfo/ftpapi
       >

   ----------------------------------------------------------------------
       > -
       >
       >
       >
       > -----
       > No virus found in this message.
       > Checked by AVG - [54][59][61]www.avg.com
       > Version: 2015.0.6176 / Virus Database: 4483/11157 - Release Date:
       > 12/11/15

   -----------------------------------------------------------------------
       This is the FTPAPI mailing list.  To unsubscribe, please go to:
       [55][60][62]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------

   -----------------------------------------------------------------------
       This is the FTPAPI mailing list.  To unsubscribe, please go to:
       [56][61][63]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------

   -----------------------------------------------------------------------
       This is the FTPAPI mailing list.  To unsubscribe, please go to:
       [57][62][64]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------
     References
       1. [63][65]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       2. [64][66]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       3. [65][67]http://schemas.xmlsoap.org/soap/envelope/
       4.

   [66][68]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFn
   LwPC

   8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtS
     gpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
       5. [67][69]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
       6. [68][70]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
       7. [69][71]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
       8. [70][72]http://docs.oasis-open.org/wss'
       9. [71][73]http://docs.oasis-open.org/'
      10. [72][74]http://schemas.xmlsoap.org/soap/envelope/
      11. [73][75]http://schemas.xmlsoap.org/soap/encoding/
      12. [74][76]http://www.w3.org/2001/XMLSchema
      13. [75][77]http://www.w3.org/2001/XMLSchema-instance
      14.

   [76][78]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFn
   LwPC

   8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtS
     gpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
      15. [77][79]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
      16. [78][80]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
      17.
   [79][81]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      18.
   [80][82]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      19. [81][83]http://www.scottklement.com/mailman/listinfo/ftpapi
      20. [82][84]http://www.scottklement.com/mailman/listinfo/ftpapi
      21. [83][85]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
      22.
   [84][86]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      23.
   [85][87]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      24. [86][88]http://www.scottklement.com/mailman/listinfo/ftpapi
      25. [87][89]http://www.scottklement.com/mailman/listinfo/ftpapi
      26. [88][90]http://www.scottklement.com/mailman/listinfo/ftpapi
      27. [89][91]http://www.scottklement.com/mailman/listinfo/ftpapi
      28. [90][92]http://schemas.xmlsoap.org/soap/envelope/
      29.

   [91][93]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFn
   LwPC

   8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtS
     gpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
      30. [92][94]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
      31. [93][95]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
      32. [94][96]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
      33. [95][97]http://docs.oasis-open.org/wss'
      34. [96][98]http://docs.oasis-open.org/'
      35. [97][99]http://schemas.xmlsoap.org/soap/envelope/
      36. [98][100]http://schemas.xmlsoap.org/soap/encoding/
      37. [99][101]http://www.w3.org/2001/XMLSchema
      38. [100][102]http://www.w3.org/2001/XMLSchema-instance
      39.

   [101][103]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnO
   FnLwP

   C8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8Uht
     SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
      40. [102][104]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
      41. [103][105]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
      42.
   [104][106]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      43.
   [105][107]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      44. [106][108]http://www.scottklement.com/mailman/listinfo/ftpapi
      45. [107][109]http://www.scottklement.com/mailman/listinfo/ftpapi
      46. [108][110]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
      47.
   [109][111]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      48.
   [110][112]https://scottklement.com/archives/ftpapi/201210/msg00121.html
      49. [111][113]http://www.scottklement.com/mailman/listinfo/ftpapi
      50. [112][114]http://www.scottklement.com/mailman/listinfo/ftpapi
      51. [113][115]http://www.scottklement.com/mailman/listinfo/ftpapi
      52. [114][116]http://www.scottklement.com/mailman/listinfo/ftpapi
      53. [115][117]http://www.scottklement.com/mailman/listinfo/ftpapi
      54. [116][118]file://localhost/tmp/www.avg.com
      55. [117][119]http://www.scottklement.com/mailman/listinfo/ftpapi
      56. [118][120]http://www.scottklement.com/mailman/listinfo/ftpapi
      57. [119][121]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------
     This is the FTPAPI mailing list.  To unsubscribe, please go to:
     [120][122]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------

   -----------------------------------------------------------------------
     This is the FTPAPI mailing list.  To unsubscribe, please go to:
     [121][123]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------
   References
     1. [124]http://schemas.xmlsoap.org/soap/envelope/
     2. [125]http://schemas.xmlsoap.org/ws/2004/03/addressing
     3. [126]http://www.w3.org/2001/XMLSchema
     4. [127]http://www.w3.org/2001/XMLSchema-instance
     5. [128]http://docs.oasis-open.org/wss/2004/01/'
     6. [129]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     7. [130]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     8. [131]http://schemas.xmlsoap.org/soap/envelope/
     9.
   [132]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
    10. [133]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    11. [134]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
    12. [135]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    13. [136]http://docs.oasis-open.org/wss'
    14. [137]http://docs.oasis-open.org/'
    15. [138]http://schemas.xmlsoap.org/soap/envelope/
    16. [139]http://schemas.xmlsoap.org/soap/encoding/
    17. [140]http://www.w3.org/2001/XMLSchema
    18. [141]http://www.w3.org/2001/XMLSchema-instance
    19.
   [142]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
    20. [143]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    21. [144]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    22. [145]https://scottklement.com/archives/ftpapi/201210/msg00121
    23. [146]https://scottklement.com/archives/ftpapi/201210/msg00121.htm
    24. [147]http://www.scottklement.com/mailman/listinfo/ftpapi
    25. [148]http://www.scottklement.com/mailman/listinfo/ftpapi
    26. [149]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    27. [150]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    28. [151]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    29. [152]http://www.scottklement.com/mailman/listinfo/ftpapi
    30. [153]http://www.scottklement.com/mailman/listinfo/ftpapi
    31. [154]http://www.scottklement.com/mailman/listinfo/ftpapi
    32. [155]http://www.scottklement.com/mailman/listinfo/ftpapi
    33. [156]http://schemas.xmlsoap.org/soap/envelope/
    34.
   [157]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
    35. [158]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    36. [159]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
    37. [160]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
     38. [161]http://docs.oasis-open.org/wss'
    39. [162]http://docs.oasis-open.org/'
    40. [163]http://schemas.xmlsoap.org/soap/envelope/
    41. [164]http://schemas.xmlsoap.org/soap/encoding/
    42. [165]http://www.w3.org/2001/XMLSchema
    43. [166]http://www.w3.org/2001/XMLSchema-instance
    44.
   [167]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
    45. [168]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    46. [169]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    47. [170]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    48. [171]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    49. [172]http://www.scottklement.com/mailman/listinfo/ftpapi
    50. [173]http://www.scottklement.com/mailman/listinfo/ftpapi
    51. [174]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    52. [175]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    53. [176]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    54. [177]http://www.scottklement.com/mailman/listinfo/ftpapi
    55. [178]http://www.scottklement.com/mailman/listinfo/ftpapi
    56. [179]http://www.scottklement.com/mailman/listinfo/ftpapi
    57. [180]http://www.scottklement.com/mailman/listinfo/ftpapi
    58. [181]http://www.scottklement.com/mailman/listinfo/ftpapi
    59. [182]file://localhost/tmp/www.avg.com
    60. [183]http://www.scottklement.com/mailman/listinfo/ftpapi
    61. [184]http://www.scottklement.com/mailman/listinfo/ftpapi
    62. [185]http://www.scottklement.com/mailman/listinfo/ftpapi
    63. [186]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    64. [187]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    65. [188]http://schemas.xmlsoap.org/soap/envelope/
    66.
   [189]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
    67. [190]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    68. [191]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
    69. [192]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    70. [193]http://docs.oasis-open.org/wss'
    71. [194]http://docs.oasis-open.org/'
    72. [195]http://schemas.xmlsoap.org/soap/envelope/
    73. [196]http://schemas.xmlsoap.org/soap/encoding/
    74. [197]http://www.w3.org/2001/XMLSchema
    75. [198]http://www.w3.org/2001/XMLSchema-instance
    76.
   [199]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
    77. [200]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    78. [201]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    79. [202]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    80. [203]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    81. [204]http://www.scottklement.com/mailman/listinfo/ftpapi
    82. [205]http://www.scottklement.com/mailman/listinfo/ftpapi
    83. [206]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
    84. [207]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    85. [208]https://scottklement.com/archives/ftpapi/201210/msg00121.html
    86. [209]http://www.scottklement.com/mailman/listinfo/ftpapi
    87. [210]http://www.scottklement.com/mailman/listinfo/ftpapi
    88. [211]http://www.scottklement.com/mailman/listinfo/ftpapi
    89. [212]http://www.scottklement.com/mailman/listinfo/ftpapi
    90. [213]http://schemas.xmlsoap.org/soap/envelope/
    91.
   [214]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
    92. [215]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    93. [216]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
    94. [217]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
    95. [218]http://docs.oasis-open.org/wss'
    96. [219]http://docs.oasis-open.org/'
    97. [220]http://schemas.xmlsoap.org/soap/envelope/
    98. [221]http://schemas.xmlsoap.org/soap/encoding/
    99. [222]http://www.w3.org/2001/XMLSchema
   100. [223]http://www.w3.org/2001/XMLSchema-instance
   101.
   [224]http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
   C8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8Uht
   SgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
   102. [225]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   103. [226]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   104. [227]https://scottklement.com/archives/ftpapi/201210/msg00121.html
   105. [228]https://scottklement.com/archives/ftpapi/201210/msg00121.html
   106. [229]http://www.scottklement.com/mailman/listinfo/ftpapi
   107. [230]http://www.scottklement.com/mailman/listinfo/ftpapi
   108. [231]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   109. [232]https://scottklement.com/archives/ftpapi/201210/msg00121.html
   110. [233]https://scottklement.com/archives/ftpapi/201210/msg00121.html
   111. [234]http://www.scottklement.com/mailman/listinfo/ftpapi
   112. [235]http://www.scottklement.com/mailman/listinfo/ftpapi
   113. [236]http://www.scottklement.com/mailman/listinfo/ftpapi
   114. [237]http://www.scottklement.com/mailman/listinfo/ftpapi
   115. [238]http://www.scottklement.com/mailman/listinfo/ftpapi
   116. [239]file://localhost/tmp/www.avg.com
   117. [240]http://www.scottklement.com/mailman/listinfo/ftpapi
   118. [241]http://www.scottklement.com/mailman/listinfo/ftpapi
   119. [242]http://www.scottklement.com/mailman/listinfo/ftpapi
   120. [243]http://www.scottklement.com/mailman/listinfo/ftpapi
   121. [244]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------
   This is the FTPAPI mailing list.  To unsubscribe, please go to:
   [245]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------

References

   1. http://schemas.xmlsoap.org/soap/envelope/
   2. http://schemas.xmlsoap.org/ws/2004/03/addressing
   3. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
   4. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
   5. http://www.w3.org/2001/XMLSchema
   6. http://www.w3.org/2001/XMLSchema-instance
   7. http://docs.oasis-open.org/wss/2004/01/'
   8. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   9. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  10. http://schemas.xmlsoap.org/soap/envelope/
  11. http://websvcs.otswebws/
  12. http://docs.oasis-open.org/wss/2004/01/oasis-2004
  13. http://docs.oasis-open.org/wss/2004/01/oasis-20040
  14. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  15. http://docs.oasis-open.org/wss'
  16. http://docs.oasis-open.org/'
  17. http://schemas.xmlsoap.org/soap/envelope/
  18. http://schemas.xmlsoap.org/soap/encoding/
  19. http://www.w3.org/2001/XMLSchema
  20. http://www.w3.org/2001/XMLSchema-instance
  21. http://websvcs.otswebws/
  22. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  23. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  24. https://scottklement.com/archives/ftpapi/201210/msg00
  25. https://scottklement.com/archives/ftpapi/201210/msg00121
  26. http://www.scottklement.com/mailman/listinfo/ftpapi
  27. http://www.scottklement.com/mailman/listinfo/ftpapi
  28. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  29. https://scottklement.com/archives/ftpapi/201210/msg00121.ht
  30. https://scottklement.com/archives/ftpapi/201210/msg00121.ht
  31. http://www.scottklement.com/mailman/listinfo/ftpapi
  32. http://www.scottklement.com/mailman/listinfo/ftpapi
  33. http://www.scottklement.com/mailman/listinfo/ftpapi
  34. http://www.scottklement.com/mailman/listinfo/ftpapi
  35. http://schemas.xmlsoap.org/soap/envelope/
  36. http://websvcs.otswebws/
  37. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  38. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
  39. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  40. http://docs.oasis-open.org/wss'
  41. http://docs.oasis-open.org/'
  42. http://schemas.xmlsoap.org/soap/envelope/
  43. http://schemas.xmlsoap.org/soap/encoding/
  44. http://www.w3.org/2001/XMLSchema
  45. http://www.w3.org/2001/XMLSchema-instance
  46. http://websvcs.otswebws/
  47. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  48. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  49. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  50. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  51. http://www.scottklement.com/mailman/listinfo/ftpapi
  52. http://www.scottklement.com/mailman/listinfo/ftpapi
  53. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  54. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  55. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  56. http://www.scottklement.com/mailman/listinfo/ftpapi
  57. http://www.scottklement.com/mailman/listinfo/ftpapi
  58. http://www.scottklement.com/mailman/listinfo/ftpapi
  59. http://www.scottklement.com/mailman/listinfo/ftpapi
  60. http://www.scottklement.com/mailman/listinfo/ftpapi
  61. file://localhost/tmp/www.avg.com
  62. http://www.scottklement.com/mailman/listinfo/ftpapi
  63. http://www.scottklement.com/mailman/listinfo/ftpapi
  64. http://www.scottklement.com/mailman/listinfo/ftpapi
  65. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  66. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  67. http://schemas.xmlsoap.org/soap/envelope/
  68. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC
  69. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  70. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
  71. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  72. http://docs.oasis-open.org/wss'
  73. http://docs.oasis-open.org/'
  74. http://schemas.xmlsoap.org/soap/envelope/
  75. http://schemas.xmlsoap.org/soap/encoding/
  76. http://www.w3.org/2001/XMLSchema
  77. http://www.w3.org/2001/XMLSchema-instance
  78. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC
  79. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  80. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  81. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  82. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  83. http://www.scottklement.com/mailman/listinfo/ftpapi
  84. http://www.scottklement.com/mailman/listinfo/ftpapi
  85. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  86. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  87. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  88. http://www.scottklement.com/mailman/listinfo/ftpapi
  89. http://www.scottklement.com/mailman/listinfo/ftpapi
  90. http://www.scottklement.com/mailman/listinfo/ftpapi
  91. http://www.scottklement.com/mailman/listinfo/ftpapi
  92. http://schemas.xmlsoap.org/soap/envelope/
  93. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC
  94. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  95. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
  96. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
  97. http://docs.oasis-open.org/wss'
  98. http://docs.oasis-open.org/'
  99. http://schemas.xmlsoap.org/soap/envelope/
 100. http://schemas.xmlsoap.org/soap/encoding/
 101. http://www.w3.org/2001/XMLSchema
 102. http://www.w3.org/2001/XMLSchema-instance
 103. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwP
 104. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 105. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 106. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 107. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 108. http://www.scottklement.com/mailman/listinfo/ftpapi
 109. http://www.scottklement.com/mailman/listinfo/ftpapi
 110. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 111. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 112. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 113. http://www.scottklement.com/mailman/listinfo/ftpapi
 114. http://www.scottklement.com/mailman/listinfo/ftpapi
 115. http://www.scottklement.com/mailman/listinfo/ftpapi
 116. http://www.scottklement.com/mailman/listinfo/ftpapi
 117. http://www.scottklement.com/mailman/listinfo/ftpapi
 118. file://localhost/tmp/www.avg.com
 119. http://www.scottklement.com/mailman/listinfo/ftpapi
 120. http://www.scottklement.com/mailman/listinfo/ftpapi
 121. http://www.scottklement.com/mailman/listinfo/ftpapi
 122. http://www.scottklement.com/mailman/listinfo/ftpapi
 123. http://www.scottklement.com/mailman/listinfo/ftpapi
 124. http://schemas.xmlsoap.org/soap/envelope/
 125. http://schemas.xmlsoap.org/ws/2004/03/addressing
 126. http://www.w3.org/2001/XMLSchema
 127. http://www.w3.org/2001/XMLSchema-instance
 128. http://docs.oasis-open.org/wss/2004/01/'
 129. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 130. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 131. http://schemas.xmlsoap.org/soap/envelope/
 132. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
 133. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 134. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
 135. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 136. http://docs.oasis-open.org/wss'
 137. http://docs.oasis-open.org/'
 138. http://schemas.xmlsoap.org/soap/envelope/
 139. http://schemas.xmlsoap.org/soap/encoding/
 140. http://www.w3.org/2001/XMLSchema
 141. http://www.w3.org/2001/XMLSchema-instance
 142. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
 143. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 144. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 145. https://scottklement.com/archives/ftpapi/201210/msg00121
 146. https://scottklement.com/archives/ftpapi/201210/msg00121.htm
 147. http://www.scottklement.com/mailman/listinfo/ftpapi
 148. http://www.scottklement.com/mailman/listinfo/ftpapi
 149. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 150. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 151. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 152. http://www.scottklement.com/mailman/listinfo/ftpapi
 153. http://www.scottklement.com/mailman/listinfo/ftpapi
 154. http://www.scottklement.com/mailman/listinfo/ftpapi
 155. http://www.scottklement.com/mailman/listinfo/ftpapi
 156. http://schemas.xmlsoap.org/soap/envelope/
 157. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
 158. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 159. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
 160. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 161. http://docs.oasis-open.org/wss'
 162. http://docs.oasis-open.org/'
 163. http://schemas.xmlsoap.org/soap/envelope/
 164. http://schemas.xmlsoap.org/soap/encoding/
 165. http://www.w3.org/2001/XMLSchema
 166. http://www.w3.org/2001/XMLSchema-instance
 167. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS0CBdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnNPTXT1dPAyMjSyIyhoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8U0hCQ&Z
 168. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 169. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 170. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 171. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 172. http://www.scottklement.com/mailman/listinfo/ftpapi
 173. http://www.scottklement.com/mailman/listinfo/ftpapi
 174. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 175. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 176. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 177. http://www.scottklement.com/mailman/listinfo/ftpapi
 178. http://www.scottklement.com/mailman/listinfo/ftpapi
 179. http://www.scottklement.com/mailman/listinfo/ftpapi
 180. http://www.scottklement.com/mailman/listinfo/ftpapi
 181. http://www.scottklement.com/mailman/listinfo/ftpapi
 182. file://localhost/tmp/www.avg.com
 183. http://www.scottklement.com/mailman/listinfo/ftpapi
 184. http://www.scottklement.com/mailman/listinfo/ftpapi
 185. http://www.scottklement.com/mailman/listinfo/ftpapi
 186. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 187. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 188. http://schemas.xmlsoap.org/soap/envelope/
 189. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
 190. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 191. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
 192. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 193. http://docs.oasis-open.org/wss'
 194. http://docs.oasis-open.org/'
 195. http://schemas.xmlsoap.org/soap/envelope/
 196. http://schemas.xmlsoap.org/soap/encoding/
 197. http://www.w3.org/2001/XMLSchema
 198. http://www.w3.org/2001/XMLSchema-instance
 199. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
 200. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 201. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 202. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 203. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 204. http://www.scottklement.com/mailman/listinfo/ftpapi
 205. http://www.scottklement.com/mailman/listinfo/ftpapi
 206. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 207. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 208. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 209. http://www.scottklement.com/mailman/listinfo/ftpapi
 210. http://www.scottklement.com/mailman/listinfo/ftpapi
 211. http://www.scottklement.com/mailman/listinfo/ftpapi
 212. http://www.scottklement.com/mailman/listinfo/ftpapi
 213. http://schemas.xmlsoap.org/soap/envelope/
 214. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
 215. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 216. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
 217. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
 218. http://docs.oasis-open.org/wss'
 219. http://docs.oasis-open.org/'
 220. http://schemas.xmlsoap.org/soap/envelope/
 221. http://schemas.xmlsoap.org/soap/encoding/
 222. http://www.w3.org/2001/XMLSchema
 223. http://www.w3.org/2001/XMLSchema-instance
 224. http://webdefence.global.blackspider.com/urlwrap/?q=AXicY3BnOFnLwPC8iYGhKKfS2Cxdr7ioTC83MTMnOT-vpCg_Ry85P5ehxMnVrdgs2c3A0NzS0IihoCg1M8UhtSgpvSi_tACsIqOkpMBKX788Nam4LLlYL7-kGMgsL9ZngAAA8QYhBA&Z
 225. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 226. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 227. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 228. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 229. http://www.scottklement.com/mailman/listinfo/ftpapi
 230. http://www.scottklement.com/mailman/listinfo/ftpapi
 231. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
 232. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 233. https://scottklement.com/archives/ftpapi/201210/msg00121.html
 234. http://www.scottklement.com/mailman/listinfo/ftpapi
 235. http://www.scottklement.com/mailman/listinfo/ftpapi
 236. http://www.scottklement.com/mailman/listinfo/ftpapi
 237. http://www.scottklement.com/mailman/listinfo/ftpapi
 238. http://www.scottklement.com/mailman/listinfo/ftpapi
 239. file://localhost/tmp/www.avg.com
 240. http://www.scottklement.com/mailman/listinfo/ftpapi
 241. http://www.scottklement.com/mailman/listinfo/ftpapi
 242. http://www.scottklement.com/mailman/listinfo/ftpapi
 243. http://www.scottklement.com/mailman/listinfo/ftpapi
 244. http://www.scottklement.com/mailman/listinfo/ftpapi
 245. http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------