FIAP (IEEE1888) library

Dependents:   Fetch_IEEE1888_Storage IEEE1888_MULTI_SENSOR_GW

Fork of FiapV2 by Yasushi TAUCHI

Revision:
2:2ba00be13585
Parent:
0:d34a9148b19e
Child:
3:7b144e1a52db
--- a/fiap.cpp	Mon Aug 20 02:20:35 2012 +0000
+++ b/fiap.cpp	Mon Aug 20 11:50:07 2012 +0000
@@ -5,59 +5,43 @@
 #include "spxmlnode.hpp"
 #include "spxmlhandle.hpp"
 
-char outBuffer[1500+1]={0};
-//    HTTPClient http;
-
-//HTTPText InData("text/html", 800);
-//    HTTPStream stream;
-
+char outBuffer[1500+1]= {0};
 char _soap_text[800];
 char uuid[37];
+//    HTTPClient http;
+//    HTTPText InData("text/html", 800);
+//    HTTPStream stream;
 //char str[50];
 //int yy,mo,dd,hh,mm,ss;
 //char requestBuffer[50];
 //int i,ii,ll;
 //HTTPResult r;
 //FIAP::FIAP(string Storage,string PointSetId) {
-FIAP::FIAP(char Storage[],char PointSetId[]) {
-    debug_mode=false;
-    strcpy(_fiap_storage,Storage);
-    strcpy(_fiap_id_prefix,PointSetId);
 
+void FIAP::post_xml_initialize(void)
+{
     strcpy(_soap_header,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-    strcat(_soap_header ,"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">");
-    strcat(_soap_header , "<soapenv:Body>");
-    strcat(_soap_header , "<ns2:dataRQ xmlns:ns2=\"http://soap.fiap.org/\">");
-    strcat(_soap_header , "<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">");
-    strcat(_soap_header , "<body>");
-    strcat(_soap_header , "<pointSet id=\"");
-    strcat(_soap_header , _fiap_id_prefix);
-    strcat(_soap_header , "\">");
-
-    strcpy(_soap_footer,"</pointSet>");
-    strcat(_soap_footer ,"</body>");
-    strcat(_soap_footer ,"</transport>");
+    strcat(_soap_header,"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">");
+    strcat(_soap_header,"<soapenv:Body>");
+    strcat(_soap_header,"<ns2:dataRQ xmlns:ns2=\"http://soap.fiap.org/\">");
+    strcat(_soap_header,"<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">");
+    strcat(_soap_header,"<body>");
+    strcpy(_soap_footer,"</body>");
+    strcat(_soap_footer,"</transport>");
     strcat(_soap_footer,"</ns2:dataRQ>");
     strcat(_soap_footer,"</soapenv:Body>");
     strcat(_soap_footer,"</soapenv:Envelope>");
     strcat(_soap_footer,"\r\n\r\n");
-
     strcpy(_soap_action,"\"http://soap.fiap.org/data\"");
 }
-
-FIAP::FIAP(char Storage[]) {
-//printf("start-fiap(fetch)\r\n");
-    debug_mode=false;
-    //printf(Storage);
-    strcpy(_fiap_storage,Storage);
+void FIAP::fetch_xml_initialize(void)
+{
     strcpy(_soap_header,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-    strcat(_soap_header , "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">");
-    strcat(_soap_header , "<soapenv:Body>");
-    strcat(_soap_header , "<ns2:queryRQ xmlns:ns2=\"http://soap.fiap.org/\">");
-    strcat(_soap_header , "<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">");
-    strcat(_soap_header , "<header>");
-//printf("start-fiap(fetch)2\r\n");
-
+    strcat(_soap_header,"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">");
+    strcat(_soap_header,"<soapenv:Body>");
+    strcat(_soap_header,"<ns2:queryRQ xmlns:ns2=\"http://soap.fiap.org/\">");
+    strcat(_soap_header,"<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">");
+    strcat(_soap_header,"<header>");
     strcpy(_soap_footer,"</header>");
     strcat(_soap_footer,"</transport>");
     strcat(_soap_footer,"</ns2:queryRQ>");
@@ -65,19 +49,21 @@
     strcat(_soap_footer,"</soapenv:Envelope>");
     strcat(_soap_footer,"\r\n\r\n");
     strcpy(_soap_action,"\"http://soap.fiap.org/query\"");
-//   printf("start-fiap(fetch)-define-end\r\n");
 }
 
-int FIAP::fetch_last_data(struct fiap_element* v,unsigned int esize) {
+FIAP::FIAP(char Storage[])
+{
+    debug_mode=false;
+    strcpy(_fiap_storage,Storage);
+}
+
+int FIAP::fetch_last_data(struct fiap_element* v,unsigned int esize)
+{
     HTTPClient http;
     int i,ii,ll;
- //   char uuid[37];
- //   char _soap_text[800];
+    fetch_xml_initialize();
     strcpy( _soap_text, _soap_header);
-
     sprintf(uuid,"%04x%04x-%04x-%04x-%04x-%04x%04x%04x",rand()%0x10000,rand()%0x10000,rand()%0x10000,rand()%1000|0x4000,rand()%0x1000|0x8000,rand()%0x10000,rand()%10000,(rand()+1)%0x10000);
-//sprintf(uuid,"0a90f1fa-bdb4-48ff-87d3-661d2af6ff4c");
-
     strcat( _soap_text , "<query id=\"");
     strcat( _soap_text , uuid);
     strcat( _soap_text , "\" type=\"storage\">");
@@ -94,151 +80,14 @@
         printf(_soap_text);
         printf("<<< Request(end)\n");
     }
-    http.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
-//   http.setRequestHeader("SOAPAction","query");
-    http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/query\"");
-    HTTPText InData("text/html", 800);
-    InData.set(_soap_text);
-//    HTTPText OutData("text/html", 2048);
-    HTTPStream stream;
- // char outBuffer[1500+1]={0};
-    stream.readNext((byte*)outBuffer,1500);
-printf("post.start \n\r");
- //    HTTPResult r = http.post(_fiap_storage,InData,&OutData);
- HTTPResult    r = http.post(_fiap_storage,InData,&stream);
-printf("post.end \n\r");
-    if (r==HTTP_PROCESSING) {
-        if (debug_mode)printf("Processing \n");
-        return -1;
-    }
-    if (r==HTTP_PARSE) {
-        if (debug_mode) printf("URI Parse error \n");
-        return -1;
-    }
-    if (r==HTTP_DNS) {
-        if (debug_mode) printf("Could not resolve name\n");
-        return -1;
-    }
-    if (r==HTTP_PRTCL) {
-        if (debug_mode)printf("Protocol error\n");
-        return -1;
-    }
-    if (r==HTTP_NOTFOUND) {
-        if (debug_mode)printf("HTTP 404 Error\n");
-        return -1;
-    }
-    if (r==HTTP_REFUSED) {
-        if (debug_mode) printf("HTTP 403 Error \n");
-        return -1;
-    }
-    if (r==HTTP_ERROR) {
-        if (debug_mode)printf("HTTP xxx error %d  \n ",r);
-        return -1;
-    }
-    if (r==HTTP_TIMEOUT) {
-        if (debug_mode)printf("Connection timeout\n");
-        return -1;
-    }
-    if (r==HTTP_CONN) {
-        if (debug_mode)printf("Connection error\n");
-        return -1;
-    }
-   //   printf("Responce(start)>>>\n");
-   //   printf(OutData.gets());
-   //   printf("<<< Response(end)\n");
-    //  return;
-    SP_XmlNodeList * points;
-    if (stream.readable()) {
-        if (debug_mode)printf("\n\r data Get Ok\n\r");
-        SP_XmlDomParser parser;
-        outBuffer[stream.readLen()]=0;
-        parser.append(outBuffer,strlen(outBuffer));
-        //stream.readNext((byte*)outBuffer,4096);
-        SP_XmlHandle rootHandle(parser.getDocument()->getRootElement());
-        SP_XmlHandle transport = rootHandle.getChild(0).getChild(0).getChild(0);
-        SP_XmlElementNode * fiapError = transport.getChild("header").getChild("error").toElement();
-        int yy,mo,dd,hh,mm,ss;
-
-         char str[50];
-        printf ("%s \n",transport.toElement()->getName());
-        if (fiapError==NULL) {
-            SP_XmlElementNode * values =transport.getChild("body").toElement();
-            points=(SP_XmlNodeList *)values->getChildren() ;
-            //      points=values->getChildren();
-            int j=points->getLength();
-            if (debug_mode)    printf("GetValues of No %d \n\r",j);
-            SP_XmlElementNode *data_point_node,*data_value_node;
-            SP_XmlCDataNode *data_value_cnode;
-            for (i=0; i<j; i++) {
-                SP_XmlHandle data_handle(points->get(i));//Point
-                data_point_node=data_handle.toElement();
-                data_value_node=data_handle.getChild("value").toElement();
-                data_value_cnode=data_handle.getChild("value").getChild(0).toCData();
-                if (debug_mode)         printf("PointID=%s \r\n",data_point_node->getAttrValue("id"));
-                if (debug_mode)         printf("date=%s \r\n",data_value_node->getAttrValue("time"));
-                if (debug_mode)         printf("data=%s \r\n",data_value_cnode->getText());
-                //time_t second[50]={0};
-                for (ii=0; ii<esize; ii++) {
-                    if (strcmp(v[ii].cid,data_point_node->getAttrValue("id"))==0) {
-                        sprintf(str,"%s",data_value_node->getAttrValue("time"));
-                        ll=sscanf(str,"%d-%d-%dT%d:%d:%d.",&yy,&mo,&dd,&hh,&mm,&ss);
-                        if (debug_mode)printf("date convert no %d (%d/%d/%d %d:%d:%d) \r\n",ll,yy,mo,dd,hh,mm,ss);
-                        v[ii].year=yy;
-                        v[ii].month=mo;
-                        v[ii].day=dd;
-                        v[ii].hour=hh;
-                        v[ii].minute=mm;
-                        v[ii].second=ss;
-                        sprintf(v[ii].value,"%s",data_value_cnode->getText());
-                    }
-                }
-            }
-        } else {
-            printf("ERROR\n\r");
-        }
-    } else {
-        if (debug_mode)printf("error\n\r");
-    }
-
-    return 0;
-}
-int FIAP::fetch_last_data(struct fiap_element *v) {
-    HTTPClient http;
-    int ll;
- //   char uuid[37];
- //  char _soap_text[800];
-    strcpy(_soap_text, _soap_header);
-
-    sprintf(uuid,"%04x%04x-%04x-%04x-%04x-%04x%04x%04x",rand()%0x10000,rand()%0x10000,rand()%0x10000,rand()%1000|0x4000,rand()%0x1000|0x8000,rand()%0x10000,rand()%10000,(rand()+1)%0x10000);
-//sprintf(uuid,"0a90f1fa-bdb4-48ff-87d3-661d2af6ff4c");
-    strcat(_soap_text , "<query id=\"");
-    strcat(_soap_text , uuid);
-    strcat(_soap_text , "\" type=\"storage\">");
-    strcat(_soap_text , "<key id=\"");
-    strcat(_soap_text , v->cid);
-    strcat(_soap_text , "\" attrName=\"time\" select=\"maximum\"/>");
-    strcat(_soap_text , "</query>");
-    strcat(_soap_text , _soap_footer);
-    if (debug_mode) {
-        printf("\r\n");
-        printf(_fiap_storage);
-        printf("\r\n");
-        printf(_soap_text);
-        printf("<<< Request(end)\n");
-    }
-    http.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
-//   http.setRequestHeader("SOAPAction","query");
-    http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/query\"");
-    HTTPText InData;
-    InData.set(_soap_text);
-    //HTTPText OutData("text/html", 2000);
-    //  HTTPText OutData;
-    HTTPStream stream;
-   // char outBuffer[1500+1];
-    stream.readNext((byte*)outBuffer,strlen(outBuffer));
+    //HTTPText InData("text/html", 800);
+    //InData.set(_soap_text);
+    HTTPText InData(_soap_text);
+    char str[800];
+    HTTPText stream(str,800);
+    //stream.readNext((byte*)outBuffer,1500);
     printf("post.start \n\r");
-    //HTTPResult r = http.post(_fiap_storage,InData,&OutData);
-    HTTPResult r = http.post(_fiap_storage,InData,&stream);
+    HTTPResult r = http.postXML(_fiap_storage,"http://soap.fiap.org/query",InData,&stream);
     printf("post.end \n\r");
     if (r==HTTP_PROCESSING) {
         if (debug_mode)printf("Processing \n");
@@ -276,28 +125,138 @@
         if (debug_mode)printf("Connection error\n");
         return -1;
     }
-    // printf("Responce(start)>>>\n");
-    // printf(OutData.gets());
-    // printf("<<< Response(end)\n");
-    // return;
-
     SP_XmlNodeList * points;
-    if (stream.readable()) {
+    if (strlen(str)>0) {
         if (debug_mode)printf("\n\r data Get Ok\n\r");
         SP_XmlDomParser parser;
-        if (debug_mode)printf("stream readlen = %d \n\r",stream.readLen());
-
-        outBuffer[stream.readLen()]=0;
-        printf("check0\n\r");
-        parser.append(outBuffer,strlen(outBuffer));
-        printf("check1\n\r");
-
+        parser.append(str,strlen(str));
         //stream.readNext((byte*)outBuffer,4096);
         SP_XmlHandle rootHandle(parser.getDocument()->getRootElement());
         SP_XmlHandle transport = rootHandle.getChild(0).getChild(0).getChild(0);
         SP_XmlElementNode * fiapError = transport.getChild("header").getChild("error").toElement();
-            int yy,mo,dd,hh,mm,ss;
+        int yy,mo,dd,hh,mm,ss;
+        char str[50];
+        printf ("%s \n",transport.toElement()->getName());
+        if (fiapError==NULL) {
+            SP_XmlElementNode * values =transport.getChild("body").toElement();
+            points=(SP_XmlNodeList *)values->getChildren() ;
+            int j=points->getLength();
+            if (debug_mode)    printf("GetValues of No %d \n\r",j);
+            SP_XmlElementNode *data_point_node,*data_value_node;
+            SP_XmlCDataNode *data_value_cnode;
+            for (i=0; i<j; i++) {
+                SP_XmlHandle data_handle(points->get(i));//Point
+                data_point_node=data_handle.toElement();
+                data_value_node=data_handle.getChild("value").toElement();
+                data_value_cnode=data_handle.getChild("value").getChild(0).toCData();
+                if (debug_mode)         printf("PointID=%s \r\n",data_point_node->getAttrValue("id"));
+                if (debug_mode)         printf("date=%s \r\n",data_value_node->getAttrValue("time"));
+                if (debug_mode)         printf("data=%s \r\n",data_value_cnode->getText());
+                //time_t second[50]={0};
+                for (ii=0; ii<esize; ii++) {
+                    if (strcmp(v[ii].cid,data_point_node->getAttrValue("id"))==0) {
+                        sprintf(str,"%s",data_value_node->getAttrValue("time"));
+                        ll=sscanf(str,"%d-%d-%dT%d:%d:%d.",&yy,&mo,&dd,&hh,&mm,&ss);
+                        if (debug_mode)printf("date convert no %d (%d/%d/%d %d:%d:%d) \r\n",ll,yy,mo,dd,hh,mm,ss);
+                        v[ii].year=yy;
+                        v[ii].month=mo;
+                        v[ii].day=dd;
+                        v[ii].hour=hh;
+                        v[ii].minute=mm;
+                        v[ii].second=ss;
+                        sprintf(v[ii].value,"%s",data_value_cnode->getText());
+                    }
+                }
+            }
+        } else {
+            printf("ERROR\n\r");
+        }
+    } else {
+        if (debug_mode)printf("error\n\r");
+    }
+    return 0;
+}
 
+int FIAP::fetch_last_data(struct fiap_element *v)
+{
+    HTTPClient http;
+    int ll;
+    char str[800];
+    fetch_xml_initialize();
+    strcpy(_soap_text, _soap_header);
+    sprintf(uuid,"%04x%04x-%04x-%04x-%04x-%04x%04x%04x",rand()%0x10000,rand()%0x10000,rand()%0x10000,rand()%1000|0x4000,rand()%0x1000|0x8000,rand()%0x10000,rand()%10000,(rand()+1)%0x10000);
+    strcat(_soap_text , "<query id=\"");
+    strcat(_soap_text , uuid);
+    strcat(_soap_text , "\" type=\"storage\">");
+    strcat(_soap_text , "<key id=\"");
+    strcat(_soap_text , v->cid);
+    strcat(_soap_text , "\" attrName=\"time\" select=\"maximum\"/>");
+    strcat(_soap_text , "</query>");
+    strcat(_soap_text , _soap_footer);
+    if (debug_mode) {
+        printf("\r\n");
+        printf(_fiap_storage);
+        printf("\r\n");
+        printf(_soap_text);
+        printf("<<< Request(end)\n");
+    }
+//    http.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
+//    http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/query\"");
+    HTTPText InData(_soap_text);
+    HTTPText stream(str,800);
+//    stream.readNext((byte*)outBuffer,strlen(outBuffer));
+    printf("post.start \n\r");
+    HTTPResult r = http.postXML(_fiap_storage,"http://soap.fiap.org/query",InData,&stream);
+    printf("post.end \n\r");
+    if (r==HTTP_PROCESSING) {
+        if (debug_mode)printf("Processing \n");
+        return -1;
+    }
+    if (r==HTTP_PARSE) {
+        if (debug_mode) printf("URI Parse error \n");
+        return -1;
+    }
+    if (r==HTTP_DNS) {
+        if (debug_mode) printf("Could not resolve name\n");
+        return -1;
+    }
+    if (r==HTTP_PRTCL) {
+        if (debug_mode)printf("Protocol error\n");
+        return -1;
+    }
+    if (r==HTTP_NOTFOUND) {
+        if (debug_mode)printf("HTTP 404 Error\n");
+        return -1;
+    }
+    if (r==HTTP_REFUSED) {
+        if (debug_mode) printf("HTTP 403 Error \n");
+        return -1;
+    }
+    if (r==HTTP_ERROR) {
+        if (debug_mode)printf("HTTP xxx error %d  \n ",r);
+        return -1;
+    }
+    if (r==HTTP_TIMEOUT) {
+        if (debug_mode)printf("Connection timeout\n");
+        return -1;
+    }
+    if (r==HTTP_CONN) {
+        if (debug_mode)printf("Connection error\n");
+        return -1;
+    }
+    SP_XmlNodeList * points;
+    if (strlen(str)>0) {
+        if (debug_mode)printf("\n\r data Get Ok\n\r");
+        SP_XmlDomParser parser;
+       // if (debug_mode)printf("stream readlen = %d \n\r",stream.readLen());
+       // outBuffer[stream.readLen()]=0;
+        printf("check0\n\r");
+        parser.append(str,strlen(str));
+        printf("check1\n\r");
+        SP_XmlHandle rootHandle(parser.getDocument()->getRootElement());
+        SP_XmlHandle transport = rootHandle.getChild(0).getChild(0).getChild(0);
+        SP_XmlElementNode * fiapError = transport.getChild("header").getChild("error").toElement();
+        int yy,mo,dd,hh,mm,ss;
         char str[50];
         printf ("%s \n\r",transport.toElement()->getName());
         if (fiapError==NULL) {
@@ -331,43 +290,44 @@
     } else {
         if (debug_mode)printf("error\n\r");
     }
-
     return 0;
-
 }
 
-int FIAP::post(struct fiap_element* v, unsigned int esize) {
+
+
+int FIAP::post(struct fiap_element* v, unsigned int esize)
+{
     HTTPClient http;
     int i;
+    char str[800];
     char requestBuffer[50];
- //   char _soap_text[800];
-    strcpy(_soap_header,_soap_text);
+    post_xml_initialize();
+    strcpy(_soap_text,_soap_header);
     for (i=0; i<esize; i++) {
         sprintf(requestBuffer,"%04d-%02d-%02dT%02d:%02d:%02d.0000000",v[i].year,v[i].month,v[i].day,v[i].hour,v[i].minute,v[i].second);
         strcat(_soap_text , "<point id=\"");
         strcat(_soap_text , _fiap_id_prefix);
-        strcat( _soap_text , v[i].cid);
+        strcat(_soap_text , v[i].cid);
         strcat( _soap_text, "\">");
-        strcat(   _soap_text , "<value time=\"");
-        strcat(   _soap_text , requestBuffer);
-        strcat(   _soap_text , v[i].timezone);
-        strcat(   _soap_text , "\">");
-        strcat(   _soap_text , v[i].value);
-        strcat(   _soap_text , "</value>");
-        strcat(   _soap_text , "</point>");
+        strcat(_soap_text , "<value time=\"");
+        strcat(_soap_text , requestBuffer);
+        strcat(_soap_text , v[i].timezone);
+        strcat(_soap_text , "\">");
+        strcat(_soap_text , v[i].value);
+        strcat(_soap_text , "</value>");
+        strcat(_soap_text , "</point>");
     }
-    strcat(   _soap_text , _soap_footer);
+    strcat(_soap_text , _soap_footer);
     if (debug_mode) {
         printf(_soap_text);
         printf("<<< Request(end)\n");
     }
-    http.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
-    http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/data\"");
+//    http.setRequestHeader("Content-Type","text/xml; charset=UTF-8");
+//    http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/data\"");
 //    InData=new HTTPText();
-    HTTPText InData;
-    InData.set(_soap_text);
-    HTTPText OutData;
-    HTTPResult r = http.post(_fiap_storage,InData,&OutData);
+    HTTPText InData(_soap_text);
+    HTTPText OutData(str,800);
+    HTTPResult r = http.postXML(_fiap_storage,"http://soap.fiap.org/data",InData,&OutData);
     if (r==HTTP_PROCESSING) {
         if (debug_mode)printf("Processing \n");
         return -1;
@@ -404,6 +364,5 @@
         if (debug_mode)printf("Connection error\n");
         return -1;
     }
-
     return 0;
 }
\ No newline at end of file