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