FIAP (IEEE1888) library
Dependents: Fetch_IEEE1888_Storage IEEE1888_MULTI_SENSOR_GW
Fork of FiapV2 by
fiap.cpp@9:02ae92c06e52, 2013-02-20 (annotated)
- Committer:
- strysd
- Date:
- Wed Feb 20 16:12:27 2013 +0000
- Revision:
- 9:02ae92c06e52
- Parent:
- 8:0b203716e92b
- Child:
- 10:b355957e01f4
make storage url to set with setStorage function, without constructor.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yueee_yt | 0:d34a9148b19e | 1 | #include "fiap.h" |
yueee_yt | 0:d34a9148b19e | 2 | #include "mbed.h" |
yueee_yt | 0:d34a9148b19e | 3 | #include "stdio.h" |
yueee_yt | 0:d34a9148b19e | 4 | #include "spdomparser.hpp" |
yueee_yt | 0:d34a9148b19e | 5 | #include "spxmlnode.hpp" |
yueee_yt | 0:d34a9148b19e | 6 | #include "spxmlhandle.hpp" |
yueee_yt | 0:d34a9148b19e | 7 | |
yueee_yt | 8:0b203716e92b | 8 | char outBuffer[2000+1]= {0}; |
yueee_yt | 8:0b203716e92b | 9 | char _soap_text[2000]; |
yueee_yt | 0:d34a9148b19e | 10 | char uuid[37]; |
yueee_yt | 2:2ba00be13585 | 11 | // HTTPClient http; |
yueee_yt | 2:2ba00be13585 | 12 | // HTTPText InData("text/html", 800); |
yueee_yt | 2:2ba00be13585 | 13 | // HTTPStream stream; |
yueee_yt | 0:d34a9148b19e | 14 | //char str[50]; |
yueee_yt | 0:d34a9148b19e | 15 | //int yy,mo,dd,hh,mm,ss; |
yueee_yt | 0:d34a9148b19e | 16 | //char requestBuffer[50]; |
yueee_yt | 0:d34a9148b19e | 17 | //int i,ii,ll; |
yueee_yt | 0:d34a9148b19e | 18 | //HTTPResult r; |
yueee_yt | 0:d34a9148b19e | 19 | //FIAP::FIAP(string Storage,string PointSetId) { |
yueee_yt | 0:d34a9148b19e | 20 | |
yueee_yt | 2:2ba00be13585 | 21 | void FIAP::post_xml_initialize(void) |
yueee_yt | 2:2ba00be13585 | 22 | { |
yueee_yt | 0:d34a9148b19e | 23 | strcpy(_soap_header,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); |
yueee_yt | 2:2ba00be13585 | 24 | strcat(_soap_header,"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
yueee_yt | 2:2ba00be13585 | 25 | strcat(_soap_header,"<soapenv:Body>"); |
yueee_yt | 2:2ba00be13585 | 26 | strcat(_soap_header,"<ns2:dataRQ xmlns:ns2=\"http://soap.fiap.org/\">"); |
yueee_yt | 2:2ba00be13585 | 27 | strcat(_soap_header,"<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">"); |
yueee_yt | 2:2ba00be13585 | 28 | strcat(_soap_header,"<body>"); |
yueee_yt | 2:2ba00be13585 | 29 | strcpy(_soap_footer,"</body>"); |
yueee_yt | 2:2ba00be13585 | 30 | strcat(_soap_footer,"</transport>"); |
yueee_yt | 0:d34a9148b19e | 31 | strcat(_soap_footer,"</ns2:dataRQ>"); |
yueee_yt | 0:d34a9148b19e | 32 | strcat(_soap_footer,"</soapenv:Body>"); |
yueee_yt | 0:d34a9148b19e | 33 | strcat(_soap_footer,"</soapenv:Envelope>"); |
yueee_yt | 0:d34a9148b19e | 34 | strcat(_soap_footer,"\r\n\r\n"); |
yueee_yt | 0:d34a9148b19e | 35 | strcpy(_soap_action,"\"http://soap.fiap.org/data\""); |
yueee_yt | 0:d34a9148b19e | 36 | } |
yueee_yt | 2:2ba00be13585 | 37 | void FIAP::fetch_xml_initialize(void) |
yueee_yt | 2:2ba00be13585 | 38 | { |
yueee_yt | 0:d34a9148b19e | 39 | strcpy(_soap_header,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); |
yueee_yt | 2:2ba00be13585 | 40 | strcat(_soap_header,"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"); |
yueee_yt | 2:2ba00be13585 | 41 | strcat(_soap_header,"<soapenv:Body>"); |
yueee_yt | 2:2ba00be13585 | 42 | strcat(_soap_header,"<ns2:queryRQ xmlns:ns2=\"http://soap.fiap.org/\">"); |
yueee_yt | 2:2ba00be13585 | 43 | strcat(_soap_header,"<transport xmlns=\"http://gutp.jp/fiap/2009/11/\">"); |
yueee_yt | 2:2ba00be13585 | 44 | strcat(_soap_header,"<header>"); |
yueee_yt | 0:d34a9148b19e | 45 | strcpy(_soap_footer,"</header>"); |
yueee_yt | 0:d34a9148b19e | 46 | strcat(_soap_footer,"</transport>"); |
yueee_yt | 0:d34a9148b19e | 47 | strcat(_soap_footer,"</ns2:queryRQ>"); |
yueee_yt | 0:d34a9148b19e | 48 | strcat(_soap_footer,"</soapenv:Body>"); |
yueee_yt | 0:d34a9148b19e | 49 | strcat(_soap_footer,"</soapenv:Envelope>"); |
yueee_yt | 0:d34a9148b19e | 50 | strcat(_soap_footer,"\r\n\r\n"); |
yueee_yt | 0:d34a9148b19e | 51 | strcpy(_soap_action,"\"http://soap.fiap.org/query\""); |
yueee_yt | 0:d34a9148b19e | 52 | } |
yueee_yt | 0:d34a9148b19e | 53 | |
strysd | 9:02ae92c06e52 | 54 | FIAP::FIAP() |
yueee_yt | 2:2ba00be13585 | 55 | { |
yueee_yt | 2:2ba00be13585 | 56 | debug_mode=false; |
strysd | 9:02ae92c06e52 | 57 | } |
strysd | 9:02ae92c06e52 | 58 | |
strysd | 9:02ae92c06e52 | 59 | void FIAP::setStorage(char Storage[]) |
strysd | 9:02ae92c06e52 | 60 | { |
yueee_yt | 2:2ba00be13585 | 61 | strcpy(_fiap_storage,Storage); |
strysd | 9:02ae92c06e52 | 62 | return; |
yueee_yt | 2:2ba00be13585 | 63 | } |
yueee_yt | 2:2ba00be13585 | 64 | |
yueee_yt | 2:2ba00be13585 | 65 | int FIAP::fetch_last_data(struct fiap_element* v,unsigned int esize) |
yueee_yt | 2:2ba00be13585 | 66 | { |
yueee_yt | 0:d34a9148b19e | 67 | HTTPClient http; |
yueee_yt | 6:52e95ea60ec1 | 68 | int i,ii,ll,k1,k2; |
yueee_yt | 2:2ba00be13585 | 69 | fetch_xml_initialize(); |
yueee_yt | 0:d34a9148b19e | 70 | strcpy( _soap_text, _soap_header); |
yueee_yt | 0:d34a9148b19e | 71 | 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); |
yueee_yt | 0:d34a9148b19e | 72 | strcat( _soap_text , "<query id=\""); |
yueee_yt | 0:d34a9148b19e | 73 | strcat( _soap_text , uuid); |
yueee_yt | 0:d34a9148b19e | 74 | strcat( _soap_text , "\" type=\"storage\">"); |
yueee_yt | 0:d34a9148b19e | 75 | for (i=0; i<esize; i++) { |
yueee_yt | 0:d34a9148b19e | 76 | strcat(_soap_text , "<key id=\""); |
yueee_yt | 0:d34a9148b19e | 77 | strcat(_soap_text , v[i].cid); |
yueee_yt | 0:d34a9148b19e | 78 | strcat(_soap_text , "\" attrName=\"time\" select=\"maximum\"/>"); |
yueee_yt | 0:d34a9148b19e | 79 | } |
yueee_yt | 0:d34a9148b19e | 80 | strcat(_soap_text , "</query>"); |
yueee_yt | 0:d34a9148b19e | 81 | strcat(_soap_text , _soap_footer); |
yueee_yt | 0:d34a9148b19e | 82 | if (debug_mode) { |
yueee_yt | 0:d34a9148b19e | 83 | printf(_fiap_storage); |
yueee_yt | 0:d34a9148b19e | 84 | printf("\r\n"); |
yueee_yt | 0:d34a9148b19e | 85 | printf(_soap_text); |
yueee_yt | 0:d34a9148b19e | 86 | printf("<<< Request(end)\n"); |
yueee_yt | 0:d34a9148b19e | 87 | } |
yueee_yt | 2:2ba00be13585 | 88 | //HTTPText InData("text/html", 800); |
yueee_yt | 2:2ba00be13585 | 89 | //InData.set(_soap_text); |
yueee_yt | 2:2ba00be13585 | 90 | HTTPText InData(_soap_text); |
yueee_yt | 3:7b144e1a52db | 91 | char rstr[800]; |
yueee_yt | 3:7b144e1a52db | 92 | HTTPText stream(rstr,800); |
yueee_yt | 2:2ba00be13585 | 93 | //stream.readNext((byte*)outBuffer,1500); |
yueee_yt | 6:52e95ea60ec1 | 94 | if (debug_mode)printf("post.start \n\r"); |
yueee_yt | 2:2ba00be13585 | 95 | HTTPResult r = http.postXML(_fiap_storage,"http://soap.fiap.org/query",InData,&stream); |
yueee_yt | 4:edbcc1833b58 | 96 | if (debug_mode) printf("post.end \n\r"); |
yueee_yt | 6:52e95ea60ec1 | 97 | if (debug_mode) { |
yueee_yt | 6:52e95ea60ec1 | 98 | printf("****\n\r"); |
yueee_yt | 6:52e95ea60ec1 | 99 | printf(rstr); |
yueee_yt | 6:52e95ea60ec1 | 100 | printf("\n\r****\n\r"); |
yueee_yt | 6:52e95ea60ec1 | 101 | } |
yueee_yt | 3:7b144e1a52db | 102 | if(!r) { |
yueee_yt | 3:7b144e1a52db | 103 | if (debug_mode)printf("Success \n"); |
yueee_yt | 3:7b144e1a52db | 104 | } else { |
yueee_yt | 3:7b144e1a52db | 105 | |
yueee_yt | 3:7b144e1a52db | 106 | if (r==HTTP_PROCESSING) { |
yueee_yt | 3:7b144e1a52db | 107 | if (debug_mode)printf("Processing \n"); |
yueee_yt | 3:7b144e1a52db | 108 | return -1; |
yueee_yt | 3:7b144e1a52db | 109 | } |
yueee_yt | 3:7b144e1a52db | 110 | if (r==HTTP_PARSE) { |
yueee_yt | 3:7b144e1a52db | 111 | if (debug_mode) printf("URI Parse error \n"); |
yueee_yt | 3:7b144e1a52db | 112 | return -1; |
yueee_yt | 3:7b144e1a52db | 113 | } |
yueee_yt | 3:7b144e1a52db | 114 | if (r==HTTP_DNS) { |
yueee_yt | 3:7b144e1a52db | 115 | if (debug_mode) printf("Could not resolve name\n"); |
yueee_yt | 3:7b144e1a52db | 116 | return -1; |
yueee_yt | 3:7b144e1a52db | 117 | } |
yueee_yt | 3:7b144e1a52db | 118 | if (r==HTTP_PRTCL) { |
yueee_yt | 3:7b144e1a52db | 119 | if (debug_mode)printf("Protocol error\n"); |
yueee_yt | 3:7b144e1a52db | 120 | return -1; |
yueee_yt | 3:7b144e1a52db | 121 | } |
yueee_yt | 3:7b144e1a52db | 122 | if (r==HTTP_NOTFOUND) { |
yueee_yt | 3:7b144e1a52db | 123 | if (debug_mode)printf("HTTP 404 Error\n"); |
yueee_yt | 3:7b144e1a52db | 124 | return -1; |
yueee_yt | 3:7b144e1a52db | 125 | } |
yueee_yt | 3:7b144e1a52db | 126 | if (r==HTTP_REFUSED) { |
yueee_yt | 3:7b144e1a52db | 127 | if (debug_mode) printf("HTTP 403 Error \n"); |
yueee_yt | 3:7b144e1a52db | 128 | return -1; |
yueee_yt | 3:7b144e1a52db | 129 | } |
yueee_yt | 3:7b144e1a52db | 130 | if (r==HTTP_ERROR) { |
yueee_yt | 3:7b144e1a52db | 131 | if (debug_mode)printf("HTTP xxx error %d \n ",r); |
yueee_yt | 3:7b144e1a52db | 132 | return -1; |
yueee_yt | 3:7b144e1a52db | 133 | } |
yueee_yt | 3:7b144e1a52db | 134 | if (r==HTTP_TIMEOUT) { |
yueee_yt | 3:7b144e1a52db | 135 | if (debug_mode)printf("Connection timeout\n"); |
yueee_yt | 3:7b144e1a52db | 136 | return -1; |
yueee_yt | 3:7b144e1a52db | 137 | } |
yueee_yt | 3:7b144e1a52db | 138 | if (r==HTTP_CONN) { |
yueee_yt | 3:7b144e1a52db | 139 | if (debug_mode)printf("Connection error\n"); |
yueee_yt | 3:7b144e1a52db | 140 | return -1; |
yueee_yt | 3:7b144e1a52db | 141 | } |
yueee_yt | 6:52e95ea60ec1 | 142 | if (r==HTTP_CLOSED) { |
yueee_yt | 6:52e95ea60ec1 | 143 | if (debug_mode)printf("Connection error\n"); |
yueee_yt | 6:52e95ea60ec1 | 144 | return -1; |
yueee_yt | 6:52e95ea60ec1 | 145 | } |
yueee_yt | 6:52e95ea60ec1 | 146 | if (debug_mode)printf("Unknown Network Error\n"); |
yueee_yt | 6:52e95ea60ec1 | 147 | return -1; |
yueee_yt | 0:d34a9148b19e | 148 | } |
yueee_yt | 0:d34a9148b19e | 149 | SP_XmlNodeList * points; |
yueee_yt | 6:52e95ea60ec1 | 150 | SP_XmlNodeList * trans_point; |
yueee_yt | 3:7b144e1a52db | 151 | if (strlen(rstr)>0) { |
yueee_yt | 0:d34a9148b19e | 152 | if (debug_mode)printf("\n\r data Get Ok\n\r"); |
yueee_yt | 0:d34a9148b19e | 153 | SP_XmlDomParser parser; |
yueee_yt | 3:7b144e1a52db | 154 | parser.append(rstr,strlen(rstr)); |
yueee_yt | 0:d34a9148b19e | 155 | //stream.readNext((byte*)outBuffer,4096); |
yueee_yt | 0:d34a9148b19e | 156 | SP_XmlHandle rootHandle(parser.getDocument()->getRootElement()); |
yueee_yt | 0:d34a9148b19e | 157 | SP_XmlHandle transport = rootHandle.getChild(0).getChild(0).getChild(0); |
yueee_yt | 0:d34a9148b19e | 158 | SP_XmlElementNode * fiapError = transport.getChild("header").getChild("error").toElement(); |
yueee_yt | 2:2ba00be13585 | 159 | int yy,mo,dd,hh,mm,ss; |
yueee_yt | 2:2ba00be13585 | 160 | char str[50]; |
yueee_yt | 4:edbcc1833b58 | 161 | if (debug_mode) printf ("%s \n",transport.toElement()->getName()); |
yueee_yt | 2:2ba00be13585 | 162 | if (fiapError==NULL) { |
yueee_yt | 6:52e95ea60ec1 | 163 | SP_XmlElementNode * trans_element = transport.toElement(); |
yueee_yt | 6:52e95ea60ec1 | 164 | trans_point=(SP_XmlNodeList *)trans_element->getChildren() ; |
yueee_yt | 6:52e95ea60ec1 | 165 | k1=trans_point->getLength(); |
yueee_yt | 6:52e95ea60ec1 | 166 | if(debug_mode)printf("Trans Child has Element of No %d \n\r",k1); |
yueee_yt | 6:52e95ea60ec1 | 167 | SP_XmlElementNode * values; |
yueee_yt | 6:52e95ea60ec1 | 168 | for(k2=0; k2<k1; k2++) { |
yueee_yt | 6:52e95ea60ec1 | 169 | values =transport.getChild(k2).toElement(); |
yueee_yt | 6:52e95ea60ec1 | 170 | if(debug_mode)printf(values->getName()); |
yueee_yt | 6:52e95ea60ec1 | 171 | if(debug_mode)printf("\n\r"); |
yueee_yt | 6:52e95ea60ec1 | 172 | if(strstr((values->getName()),"body") !=NULL) { |
yueee_yt | 6:52e95ea60ec1 | 173 | if(debug_mode)printf("find body \n\r"); |
yueee_yt | 6:52e95ea60ec1 | 174 | points=(SP_XmlNodeList *)values->getChildren() ; |
yueee_yt | 6:52e95ea60ec1 | 175 | int j=points->getLength(); |
yueee_yt | 6:52e95ea60ec1 | 176 | if (debug_mode) printf("GetValues of No %d \n\r",j); |
yueee_yt | 6:52e95ea60ec1 | 177 | SP_XmlElementNode *data_point_node,*data_value_node; |
yueee_yt | 6:52e95ea60ec1 | 178 | SP_XmlCDataNode *data_value_cnode; |
yueee_yt | 6:52e95ea60ec1 | 179 | for (i=0; i<j; i++) { |
yueee_yt | 6:52e95ea60ec1 | 180 | SP_XmlHandle data_handle(points->get(i));//Point |
yueee_yt | 6:52e95ea60ec1 | 181 | data_point_node=data_handle.toElement(); |
yueee_yt | 6:52e95ea60ec1 | 182 | //data_value_node=data_handle.getChild("value").toElement(); |
yueee_yt | 6:52e95ea60ec1 | 183 | //data_value_cnode=data_handle.getChild("value").getChild(0).toCData(); |
yueee_yt | 6:52e95ea60ec1 | 184 | data_value_node=data_handle.getChild(0).toElement(); |
yueee_yt | 6:52e95ea60ec1 | 185 | data_value_cnode=data_handle.getChild(0).getChild(0).toCData(); |
yueee_yt | 6:52e95ea60ec1 | 186 | if (debug_mode) printf("PointID=%s \r\n",data_point_node->getAttrValue("id")); |
yueee_yt | 6:52e95ea60ec1 | 187 | if (debug_mode) printf("date=%s \r\n",data_value_node->getAttrValue("time")); |
yueee_yt | 6:52e95ea60ec1 | 188 | if (debug_mode) printf("data=%s \r\n",data_value_cnode->getText()); |
yueee_yt | 6:52e95ea60ec1 | 189 | for (ii=0; ii<esize; ii++) { |
yueee_yt | 6:52e95ea60ec1 | 190 | if (strcmp(v[ii].cid,data_point_node->getAttrValue("id"))==0) { |
yueee_yt | 6:52e95ea60ec1 | 191 | sprintf(str,"%s",data_value_node->getAttrValue("time")); |
yueee_yt | 6:52e95ea60ec1 | 192 | ll=sscanf(str,"%d-%d-%dT%d:%d:%d.",&yy,&mo,&dd,&hh,&mm,&ss); |
yueee_yt | 6:52e95ea60ec1 | 193 | if (debug_mode)printf("date convert no %d (%d/%d/%d %d:%d:%d) \r\n",ll,yy,mo,dd,hh,mm,ss); |
yueee_yt | 6:52e95ea60ec1 | 194 | v[ii].year=yy; |
yueee_yt | 6:52e95ea60ec1 | 195 | v[ii].month=mo; |
yueee_yt | 6:52e95ea60ec1 | 196 | v[ii].day=dd; |
yueee_yt | 6:52e95ea60ec1 | 197 | v[ii].hour=hh; |
yueee_yt | 6:52e95ea60ec1 | 198 | v[ii].minute=mm; |
yueee_yt | 6:52e95ea60ec1 | 199 | v[ii].second=ss; |
yueee_yt | 6:52e95ea60ec1 | 200 | sprintf(v[ii].value,"%s",data_value_cnode->getText()); |
yueee_yt | 6:52e95ea60ec1 | 201 | } |
yueee_yt | 6:52e95ea60ec1 | 202 | } |
yueee_yt | 2:2ba00be13585 | 203 | } |
yueee_yt | 6:52e95ea60ec1 | 204 | |
yueee_yt | 2:2ba00be13585 | 205 | } |
yueee_yt | 6:52e95ea60ec1 | 206 | |
yueee_yt | 6:52e95ea60ec1 | 207 | |
yueee_yt | 2:2ba00be13585 | 208 | } |
yueee_yt | 6:52e95ea60ec1 | 209 | |
yueee_yt | 2:2ba00be13585 | 210 | } else { |
yueee_yt | 2:2ba00be13585 | 211 | printf("ERROR\n\r"); |
yueee_yt | 2:2ba00be13585 | 212 | } |
yueee_yt | 2:2ba00be13585 | 213 | } else { |
yueee_yt | 2:2ba00be13585 | 214 | if (debug_mode)printf("error\n\r"); |
yueee_yt | 2:2ba00be13585 | 215 | } |
yueee_yt | 2:2ba00be13585 | 216 | return 0; |
yueee_yt | 2:2ba00be13585 | 217 | } |
yueee_yt | 0:d34a9148b19e | 218 | |
yueee_yt | 2:2ba00be13585 | 219 | int FIAP::fetch_last_data(struct fiap_element *v) |
yueee_yt | 2:2ba00be13585 | 220 | { |
yueee_yt | 2:2ba00be13585 | 221 | HTTPClient http; |
yueee_yt | 2:2ba00be13585 | 222 | int ll; |
yueee_yt | 3:7b144e1a52db | 223 | char rstr[800]; |
yueee_yt | 2:2ba00be13585 | 224 | fetch_xml_initialize(); |
yueee_yt | 2:2ba00be13585 | 225 | strcpy(_soap_text, _soap_header); |
yueee_yt | 2:2ba00be13585 | 226 | 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); |
yueee_yt | 2:2ba00be13585 | 227 | strcat(_soap_text , "<query id=\""); |
yueee_yt | 2:2ba00be13585 | 228 | strcat(_soap_text , uuid); |
yueee_yt | 2:2ba00be13585 | 229 | strcat(_soap_text , "\" type=\"storage\">"); |
yueee_yt | 2:2ba00be13585 | 230 | strcat(_soap_text , "<key id=\""); |
yueee_yt | 2:2ba00be13585 | 231 | strcat(_soap_text , v->cid); |
yueee_yt | 2:2ba00be13585 | 232 | strcat(_soap_text , "\" attrName=\"time\" select=\"maximum\"/>"); |
yueee_yt | 2:2ba00be13585 | 233 | strcat(_soap_text , "</query>"); |
yueee_yt | 2:2ba00be13585 | 234 | strcat(_soap_text , _soap_footer); |
yueee_yt | 2:2ba00be13585 | 235 | if (debug_mode) { |
yueee_yt | 2:2ba00be13585 | 236 | printf("\r\n"); |
yueee_yt | 2:2ba00be13585 | 237 | printf(_fiap_storage); |
yueee_yt | 2:2ba00be13585 | 238 | printf("\r\n"); |
yueee_yt | 2:2ba00be13585 | 239 | printf(_soap_text); |
yueee_yt | 2:2ba00be13585 | 240 | printf("<<< Request(end)\n"); |
yueee_yt | 2:2ba00be13585 | 241 | } |
yueee_yt | 2:2ba00be13585 | 242 | // http.setRequestHeader("Content-Type","text/xml; charset=UTF-8"); |
yueee_yt | 2:2ba00be13585 | 243 | // http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/query\""); |
yueee_yt | 2:2ba00be13585 | 244 | HTTPText InData(_soap_text); |
yueee_yt | 3:7b144e1a52db | 245 | HTTPText stream(rstr,800); |
yueee_yt | 2:2ba00be13585 | 246 | // stream.readNext((byte*)outBuffer,strlen(outBuffer)); |
yueee_yt | 6:52e95ea60ec1 | 247 | if (debug_mode)printf("post.start \n\r"); |
yueee_yt | 2:2ba00be13585 | 248 | HTTPResult r = http.postXML(_fiap_storage,"http://soap.fiap.org/query",InData,&stream); |
yueee_yt | 6:52e95ea60ec1 | 249 | if (debug_mode)printf("post.end \n\r"); |
yueee_yt | 3:7b144e1a52db | 250 | if(!r) { |
yueee_yt | 3:7b144e1a52db | 251 | if (debug_mode)printf("Success \n"); |
yueee_yt | 3:7b144e1a52db | 252 | } else { |
yueee_yt | 3:7b144e1a52db | 253 | if (r==HTTP_PROCESSING) { |
yueee_yt | 3:7b144e1a52db | 254 | if (debug_mode)printf("Processing \n"); |
yueee_yt | 3:7b144e1a52db | 255 | return -1; |
yueee_yt | 3:7b144e1a52db | 256 | } |
yueee_yt | 3:7b144e1a52db | 257 | if (r==HTTP_PARSE) { |
yueee_yt | 3:7b144e1a52db | 258 | if (debug_mode) printf("URI Parse error \n"); |
yueee_yt | 3:7b144e1a52db | 259 | return -1; |
yueee_yt | 3:7b144e1a52db | 260 | } |
yueee_yt | 3:7b144e1a52db | 261 | if (r==HTTP_DNS) { |
yueee_yt | 3:7b144e1a52db | 262 | if (debug_mode) printf("Could not resolve name\n"); |
yueee_yt | 3:7b144e1a52db | 263 | return -1; |
yueee_yt | 3:7b144e1a52db | 264 | } |
yueee_yt | 3:7b144e1a52db | 265 | if (r==HTTP_PRTCL) { |
yueee_yt | 3:7b144e1a52db | 266 | if (debug_mode)printf("Protocol error\n"); |
yueee_yt | 3:7b144e1a52db | 267 | return -1; |
yueee_yt | 3:7b144e1a52db | 268 | } |
yueee_yt | 3:7b144e1a52db | 269 | if (r==HTTP_NOTFOUND) { |
yueee_yt | 3:7b144e1a52db | 270 | if (debug_mode)printf("HTTP 404 Error\n"); |
yueee_yt | 3:7b144e1a52db | 271 | return -1; |
yueee_yt | 3:7b144e1a52db | 272 | } |
yueee_yt | 3:7b144e1a52db | 273 | if (r==HTTP_REFUSED) { |
yueee_yt | 3:7b144e1a52db | 274 | if (debug_mode) printf("HTTP 403 Error \n"); |
yueee_yt | 3:7b144e1a52db | 275 | return -1; |
yueee_yt | 3:7b144e1a52db | 276 | } |
yueee_yt | 3:7b144e1a52db | 277 | if (r==HTTP_ERROR) { |
yueee_yt | 3:7b144e1a52db | 278 | if (debug_mode)printf("HTTP xxx error %d \n ",r); |
yueee_yt | 3:7b144e1a52db | 279 | return -1; |
yueee_yt | 3:7b144e1a52db | 280 | } |
yueee_yt | 3:7b144e1a52db | 281 | if (r==HTTP_TIMEOUT) { |
yueee_yt | 3:7b144e1a52db | 282 | if (debug_mode)printf("Connection timeout\n"); |
yueee_yt | 3:7b144e1a52db | 283 | return -1; |
yueee_yt | 3:7b144e1a52db | 284 | } |
yueee_yt | 3:7b144e1a52db | 285 | if (r==HTTP_CONN) { |
yueee_yt | 3:7b144e1a52db | 286 | if (debug_mode)printf("Connection error\n"); |
yueee_yt | 3:7b144e1a52db | 287 | return -1; |
yueee_yt | 3:7b144e1a52db | 288 | } |
yueee_yt | 6:52e95ea60ec1 | 289 | if (r==HTTP_CLOSED) { |
yueee_yt | 6:52e95ea60ec1 | 290 | if (debug_mode)printf("Connection error\n"); |
yueee_yt | 6:52e95ea60ec1 | 291 | return -1; |
yueee_yt | 6:52e95ea60ec1 | 292 | } |
yueee_yt | 6:52e95ea60ec1 | 293 | if (debug_mode)printf("Unknown Network Error\n"); |
yueee_yt | 6:52e95ea60ec1 | 294 | return -1; |
yueee_yt | 2:2ba00be13585 | 295 | } |
yueee_yt | 2:2ba00be13585 | 296 | SP_XmlNodeList * points; |
yueee_yt | 3:7b144e1a52db | 297 | if (strlen(rstr)>0) { |
yueee_yt | 2:2ba00be13585 | 298 | if (debug_mode)printf("\n\r data Get Ok\n\r"); |
yueee_yt | 6:52e95ea60ec1 | 299 | |
yueee_yt | 2:2ba00be13585 | 300 | SP_XmlDomParser parser; |
yueee_yt | 6:52e95ea60ec1 | 301 | |
yueee_yt | 3:7b144e1a52db | 302 | // if (debug_mode)printf("stream readlen = %d \n\r",stream.readLen()); |
yueee_yt | 3:7b144e1a52db | 303 | // outBuffer[stream.readLen()]=0; |
yueee_yt | 6:52e95ea60ec1 | 304 | if (debug_mode)printf("check0\n\r"); |
yueee_yt | 3:7b144e1a52db | 305 | parser.append(rstr,strlen(rstr)); |
yueee_yt | 6:52e95ea60ec1 | 306 | if (debug_mode)printf("check1\n\r"); |
yueee_yt | 2:2ba00be13585 | 307 | SP_XmlHandle rootHandle(parser.getDocument()->getRootElement()); |
yueee_yt | 2:2ba00be13585 | 308 | SP_XmlHandle transport = rootHandle.getChild(0).getChild(0).getChild(0); |
yueee_yt | 2:2ba00be13585 | 309 | SP_XmlElementNode * fiapError = transport.getChild("header").getChild("error").toElement(); |
yueee_yt | 2:2ba00be13585 | 310 | int yy,mo,dd,hh,mm,ss; |
yueee_yt | 0:d34a9148b19e | 311 | char str[50]; |
yueee_yt | 6:52e95ea60ec1 | 312 | if (debug_mode)printf ("%s \n\r",transport.toElement()->getName()); |
yueee_yt | 0:d34a9148b19e | 313 | if (fiapError==NULL) { |
yueee_yt | 0:d34a9148b19e | 314 | SP_XmlElementNode * values =transport.getChild("body").toElement(); |
yueee_yt | 0:d34a9148b19e | 315 | points=(SP_XmlNodeList *)values->getChildren() ; |
yueee_yt | 0:d34a9148b19e | 316 | // points=values->getChildren(); |
yueee_yt | 0:d34a9148b19e | 317 | int j=points->getLength(); |
yueee_yt | 0:d34a9148b19e | 318 | if (debug_mode) printf("GetValues of No %d \n\r",j); |
yueee_yt | 0:d34a9148b19e | 319 | SP_XmlElementNode *data_point_node,*data_value_node; |
yueee_yt | 0:d34a9148b19e | 320 | SP_XmlCDataNode *data_value_cnode; |
yueee_yt | 0:d34a9148b19e | 321 | SP_XmlHandle data_handle(points->get(0));//Point |
yueee_yt | 0:d34a9148b19e | 322 | data_point_node=data_handle.toElement(); |
yueee_yt | 0:d34a9148b19e | 323 | data_value_node=data_handle.getChild("value").toElement(); |
yueee_yt | 0:d34a9148b19e | 324 | data_value_cnode=data_handle.getChild("value").getChild(0).toCData(); |
yueee_yt | 0:d34a9148b19e | 325 | if (debug_mode) printf("PointID=%s \r\n",data_point_node->getAttrValue("id")); |
yueee_yt | 0:d34a9148b19e | 326 | if (debug_mode) printf("date=%s \r\n",data_value_node->getAttrValue("time")); |
yueee_yt | 0:d34a9148b19e | 327 | if (debug_mode) printf("data=%s \r\n",data_value_cnode->getText()); |
yueee_yt | 0:d34a9148b19e | 328 | sprintf(str,"%s",data_value_node->getAttrValue("time")); |
yueee_yt | 0:d34a9148b19e | 329 | ll=sscanf(str,"%d-%d-%dT%d:%d:%d.",&yy,&mo,&dd,&hh,&mm,&ss); |
yueee_yt | 0:d34a9148b19e | 330 | if (debug_mode)printf("date convert no %d (%d/%d/%d %d:%d:%d) \r\n",ll,yy,mo,dd,hh,mm,ss); |
yueee_yt | 0:d34a9148b19e | 331 | v->year=yy; |
yueee_yt | 0:d34a9148b19e | 332 | v->month=mo; |
yueee_yt | 0:d34a9148b19e | 333 | v->day=dd; |
yueee_yt | 0:d34a9148b19e | 334 | v->hour=hh; |
yueee_yt | 0:d34a9148b19e | 335 | v->minute=mm; |
yueee_yt | 0:d34a9148b19e | 336 | v->second=ss; |
yueee_yt | 0:d34a9148b19e | 337 | sprintf(v->value,"%s", data_value_cnode->getText()); |
yueee_yt | 0:d34a9148b19e | 338 | } else { |
yueee_yt | 0:d34a9148b19e | 339 | printf("ERROR\n\r"); |
yueee_yt | 0:d34a9148b19e | 340 | } |
yueee_yt | 0:d34a9148b19e | 341 | } else { |
yueee_yt | 0:d34a9148b19e | 342 | if (debug_mode)printf("error\n\r"); |
yueee_yt | 0:d34a9148b19e | 343 | } |
yueee_yt | 0:d34a9148b19e | 344 | return 0; |
yueee_yt | 0:d34a9148b19e | 345 | } |
yueee_yt | 0:d34a9148b19e | 346 | |
yueee_yt | 2:2ba00be13585 | 347 | |
yueee_yt | 2:2ba00be13585 | 348 | |
yueee_yt | 2:2ba00be13585 | 349 | int FIAP::post(struct fiap_element* v, unsigned int esize) |
yueee_yt | 2:2ba00be13585 | 350 | { |
yueee_yt | 0:d34a9148b19e | 351 | HTTPClient http; |
yueee_yt | 0:d34a9148b19e | 352 | int i; |
yueee_yt | 7:cc924e783dff | 353 | char rstr[1200]; |
yueee_yt | 0:d34a9148b19e | 354 | char requestBuffer[50]; |
yueee_yt | 2:2ba00be13585 | 355 | post_xml_initialize(); |
yueee_yt | 2:2ba00be13585 | 356 | strcpy(_soap_text,_soap_header); |
yueee_yt | 0:d34a9148b19e | 357 | for (i=0; i<esize; i++) { |
yueee_yt | 0:d34a9148b19e | 358 | 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); |
yueee_yt | 0:d34a9148b19e | 359 | strcat(_soap_text , "<point id=\""); |
yueee_yt | 0:d34a9148b19e | 360 | strcat(_soap_text , _fiap_id_prefix); |
yueee_yt | 2:2ba00be13585 | 361 | strcat(_soap_text , v[i].cid); |
yueee_yt | 0:d34a9148b19e | 362 | strcat( _soap_text, "\">"); |
yueee_yt | 2:2ba00be13585 | 363 | strcat(_soap_text , "<value time=\""); |
yueee_yt | 2:2ba00be13585 | 364 | strcat(_soap_text , requestBuffer); |
yueee_yt | 2:2ba00be13585 | 365 | strcat(_soap_text , v[i].timezone); |
yueee_yt | 2:2ba00be13585 | 366 | strcat(_soap_text , "\">"); |
yueee_yt | 2:2ba00be13585 | 367 | strcat(_soap_text , v[i].value); |
yueee_yt | 2:2ba00be13585 | 368 | strcat(_soap_text , "</value>"); |
yueee_yt | 2:2ba00be13585 | 369 | strcat(_soap_text , "</point>"); |
yueee_yt | 0:d34a9148b19e | 370 | } |
yueee_yt | 2:2ba00be13585 | 371 | strcat(_soap_text , _soap_footer); |
yueee_yt | 0:d34a9148b19e | 372 | if (debug_mode) { |
yueee_yt | 0:d34a9148b19e | 373 | printf(_soap_text); |
yueee_yt | 0:d34a9148b19e | 374 | printf("<<< Request(end)\n"); |
yueee_yt | 0:d34a9148b19e | 375 | } |
yueee_yt | 2:2ba00be13585 | 376 | // http.setRequestHeader("Content-Type","text/xml; charset=UTF-8"); |
yueee_yt | 2:2ba00be13585 | 377 | // http.setRequestHeader("SOAPAction","\"http://soap.fiap.org/data\""); |
yueee_yt | 0:d34a9148b19e | 378 | // InData=new HTTPText(); |
yueee_yt | 2:2ba00be13585 | 379 | HTTPText InData(_soap_text); |
yueee_yt | 7:cc924e783dff | 380 | HTTPText OutData(rstr,1200); |
yueee_yt | 2:2ba00be13585 | 381 | HTTPResult r = http.postXML(_fiap_storage,"http://soap.fiap.org/data",InData,&OutData); |
yueee_yt | 3:7b144e1a52db | 382 | if(!r) { |
yueee_yt | 3:7b144e1a52db | 383 | if (debug_mode)printf("Success \n"); |
yueee_yt | 6:52e95ea60ec1 | 384 | if (debug_mode) { |
yueee_yt | 6:52e95ea60ec1 | 385 | printf("****\n\r"); |
yueee_yt | 6:52e95ea60ec1 | 386 | printf(rstr); |
yueee_yt | 6:52e95ea60ec1 | 387 | printf("\n\r****\n\r"); |
yueee_yt | 6:52e95ea60ec1 | 388 | } |
yueee_yt | 3:7b144e1a52db | 389 | } else { |
yueee_yt | 3:7b144e1a52db | 390 | if (r==HTTP_PROCESSING) { |
yueee_yt | 3:7b144e1a52db | 391 | if (debug_mode)printf("Processing \n"); |
yueee_yt | 3:7b144e1a52db | 392 | return -1; |
yueee_yt | 3:7b144e1a52db | 393 | } |
yueee_yt | 3:7b144e1a52db | 394 | if (r==HTTP_PARSE) { |
yueee_yt | 3:7b144e1a52db | 395 | if (debug_mode) printf("URI Parse error \n"); |
yueee_yt | 3:7b144e1a52db | 396 | return -1; |
yueee_yt | 3:7b144e1a52db | 397 | } |
yueee_yt | 3:7b144e1a52db | 398 | if (r==HTTP_DNS) { |
yueee_yt | 3:7b144e1a52db | 399 | if (debug_mode) printf("Could not resolve name\n"); |
yueee_yt | 3:7b144e1a52db | 400 | return -1; |
yueee_yt | 3:7b144e1a52db | 401 | } |
yueee_yt | 3:7b144e1a52db | 402 | if (r==HTTP_PRTCL) { |
yueee_yt | 3:7b144e1a52db | 403 | if (debug_mode)printf("Protocol error\n"); |
yueee_yt | 3:7b144e1a52db | 404 | return -1; |
yueee_yt | 3:7b144e1a52db | 405 | } |
yueee_yt | 3:7b144e1a52db | 406 | if (r==HTTP_NOTFOUND) { |
yueee_yt | 3:7b144e1a52db | 407 | if (debug_mode)printf("HTTP 404 Error\n"); |
yueee_yt | 3:7b144e1a52db | 408 | return -1; |
yueee_yt | 3:7b144e1a52db | 409 | } |
yueee_yt | 3:7b144e1a52db | 410 | if (r==HTTP_REFUSED) { |
yueee_yt | 3:7b144e1a52db | 411 | if (debug_mode) printf("HTTP 403 Error \n"); |
yueee_yt | 3:7b144e1a52db | 412 | return -1; |
yueee_yt | 3:7b144e1a52db | 413 | } |
yueee_yt | 3:7b144e1a52db | 414 | if (r==HTTP_ERROR) { |
yueee_yt | 3:7b144e1a52db | 415 | if (debug_mode)printf("HTTP xxx error \n"); |
yueee_yt | 3:7b144e1a52db | 416 | return -1; |
yueee_yt | 3:7b144e1a52db | 417 | } |
yueee_yt | 3:7b144e1a52db | 418 | if (r==HTTP_TIMEOUT) { |
yueee_yt | 3:7b144e1a52db | 419 | if (debug_mode)printf("Connection timeout\n"); |
yueee_yt | 3:7b144e1a52db | 420 | return -1; |
yueee_yt | 3:7b144e1a52db | 421 | } |
yueee_yt | 3:7b144e1a52db | 422 | if (r==HTTP_CONN) { |
yueee_yt | 3:7b144e1a52db | 423 | if (debug_mode)printf("Connection error\n"); |
yueee_yt | 3:7b144e1a52db | 424 | return -1; |
yueee_yt | 3:7b144e1a52db | 425 | } |
yueee_yt | 6:52e95ea60ec1 | 426 | if (r==HTTP_CLOSED) { |
yueee_yt | 6:52e95ea60ec1 | 427 | if (debug_mode)printf("Connection error\n"); |
yueee_yt | 6:52e95ea60ec1 | 428 | return -1; |
yueee_yt | 6:52e95ea60ec1 | 429 | } |
yueee_yt | 6:52e95ea60ec1 | 430 | if (debug_mode)printf("Unknown Network Error\n"); |
yueee_yt | 6:52e95ea60ec1 | 431 | return -1; |
yueee_yt | 0:d34a9148b19e | 432 | } |
yueee_yt | 0:d34a9148b19e | 433 | return 0; |
yueee_yt | 0:d34a9148b19e | 434 | } |