blockchain , sdchain cpp sdk and demo

Dependencies:   EthernetInterface mbed-rtos mbed uniqueCPUID

Fork of bcsdk by SDchain C Plus Plus Team

Committer:
webmaster
Date:
Thu Sep 21 02:09:04 2017 +0000
Revision:
8:f2a567ee3a46
Child:
10:aabd720e632c
test create asset;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
webmaster 8:f2a567ee3a46 1 #include "Client.h"
webmaster 8:f2a567ee3a46 2 //#include <WINSOCK2.H>
webmaster 8:f2a567ee3a46 3 #include "mbed.h"
webmaster 8:f2a567ee3a46 4 #include "EthernetInterface.h"
webmaster 8:f2a567ee3a46 5 //#include "BlockChain.h"
webmaster 8:f2a567ee3a46 6
webmaster 8:f2a567ee3a46 7
webmaster 8:f2a567ee3a46 8 Client::Client()
webmaster 8:f2a567ee3a46 9 {
webmaster 8:f2a567ee3a46 10 m_strIP = "101.201.199.150";
webmaster 8:f2a567ee3a46 11 m_sPort = 80;
webmaster 8:f2a567ee3a46 12 m_url = "/info";
webmaster 8:f2a567ee3a46 13 m_host = "testbc.hwelltech.com";
webmaster 8:f2a567ee3a46 14 m_token = "962cd39d-6496-4b23-a2c5-85e445069a78";
webmaster 8:f2a567ee3a46 15 }
webmaster 8:f2a567ee3a46 16
webmaster 8:f2a567ee3a46 17 Client::Client(string ip,short port)
webmaster 8:f2a567ee3a46 18 {
webmaster 8:f2a567ee3a46 19 this->m_strIP = ip;
webmaster 8:f2a567ee3a46 20 this->m_sPort = port;
webmaster 8:f2a567ee3a46 21
webmaster 8:f2a567ee3a46 22 m_url = "/info";
webmaster 8:f2a567ee3a46 23 m_host = "testbc.hwelltech.com";
webmaster 8:f2a567ee3a46 24 m_token = "962cd39d-6496-4b23-a2c5-85e445069a78";
webmaster 8:f2a567ee3a46 25 }
webmaster 8:f2a567ee3a46 26
webmaster 8:f2a567ee3a46 27 Client::~Client()
webmaster 8:f2a567ee3a46 28 {
webmaster 8:f2a567ee3a46 29
webmaster 8:f2a567ee3a46 30 }
webmaster 8:f2a567ee3a46 31
webmaster 8:f2a567ee3a46 32 bool Client::build_post_raw(const string & url,const string & content, string & post_raw)
webmaster 8:f2a567ee3a46 33 {
webmaster 8:f2a567ee3a46 34 return build_post_raw(url,m_host,m_token,content,post_raw);
webmaster 8:f2a567ee3a46 35 }
webmaster 8:f2a567ee3a46 36
webmaster 8:f2a567ee3a46 37 bool Client::build_post_raw(const string & url, const string & host, const string & token, const string & content, string & post_raw)
webmaster 8:f2a567ee3a46 38 {
webmaster 8:f2a567ee3a46 39 bool ret = true;
webmaster 8:f2a567ee3a46 40
webmaster 8:f2a567ee3a46 41 post_raw = "";
webmaster 8:f2a567ee3a46 42 post_raw.append("POST "+ url + " HTTP/1.1\r\n");
webmaster 8:f2a567ee3a46 43 post_raw.append("Host: " + host + "\r\n");
webmaster 8:f2a567ee3a46 44 post_raw.append("Connection: keep-alive\r\n");
webmaster 8:f2a567ee3a46 45 post_raw.append("accept: application/json\r\n");
webmaster 8:f2a567ee3a46 46 post_raw.append("content-type: application/json\r\n");
webmaster 8:f2a567ee3a46 47 string authorization = "Basic YmxvY2tnZW5lcmF0b3I6MTM3NzQzMDJlNTcyYmU4MWMxZmRmZjg2NGZiODA2Yjc2NjcxMzg5NzMwZjBjMDYwZDNlODExNTQ4OGRjNjQ2Mg==";
webmaster 8:f2a567ee3a46 48 //if(!token.empty())
webmaster 8:f2a567ee3a46 49 // authorization = Base64Encode(token)
webmaster 8:f2a567ee3a46 50 post_raw.append("authorization: " + authorization + "\r\n");
webmaster 8:f2a567ee3a46 51
webmaster 8:f2a567ee3a46 52 char pLen[16] = {0};
webmaster 8:f2a567ee3a46 53 //sprintf_s(pLen, sizeof(pLen), "%d", content.length());
webmaster 8:f2a567ee3a46 54 sprintf(pLen, "%d", content.length());
webmaster 8:f2a567ee3a46 55 string strLen = pLen;
webmaster 8:f2a567ee3a46 56
webmaster 8:f2a567ee3a46 57 post_raw.append("Content-Length: " + strLen + "\r\n");
webmaster 8:f2a567ee3a46 58 post_raw.append("\r\n");
webmaster 8:f2a567ee3a46 59 post_raw.append(content);
webmaster 8:f2a567ee3a46 60 post_raw.append("\r\n\r\n");
webmaster 8:f2a567ee3a46 61
webmaster 8:f2a567ee3a46 62 return ret;
webmaster 8:f2a567ee3a46 63 }
webmaster 8:f2a567ee3a46 64
webmaster 8:f2a567ee3a46 65 int Client::http_post(const string & url,const string & content,string & strOut)
webmaster 8:f2a567ee3a46 66 {
webmaster 8:f2a567ee3a46 67 string post_raw = "";
webmaster 8:f2a567ee3a46 68 build_post_raw(url,content,post_raw);
webmaster 8:f2a567ee3a46 69 return http_post_raw(post_raw,strOut);
webmaster 8:f2a567ee3a46 70 }
webmaster 8:f2a567ee3a46 71
webmaster 8:f2a567ee3a46 72 int Client::http_post_raw(const string &strIn,string &strOut)
webmaster 8:f2a567ee3a46 73 {
webmaster 8:f2a567ee3a46 74 string strReq;
webmaster 8:f2a567ee3a46 75 string strRep;
webmaster 8:f2a567ee3a46 76 strReq = strIn;
webmaster 8:f2a567ee3a46 77
webmaster 8:f2a567ee3a46 78 //SOCKET sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
webmaster 8:f2a567ee3a46 79 TCPSocketConnection sClient;
webmaster 8:f2a567ee3a46 80 /*
webmaster 8:f2a567ee3a46 81 if(sClient == INVALID_SOCKET)
webmaster 8:f2a567ee3a46 82 {
webmaster 8:f2a567ee3a46 83 printf("invalid socket!");
webmaster 8:f2a567ee3a46 84 return 0;
webmaster 8:f2a567ee3a46 85 }
webmaster 8:f2a567ee3a46 86 */
webmaster 8:f2a567ee3a46 87 #ifdef WIN32
webmaster 8:f2a567ee3a46 88 // windows下是这样设置超时时间
webmaster 8:f2a567ee3a46 89 int recvTimeout = 3 * 1000; //30s
webmaster 8:f2a567ee3a46 90 int sendTimeout = 3 * 1000; //30s
webmaster 8:f2a567ee3a46 91 setsockopt(sClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&recvTimeout ,sizeof(int));
webmaster 8:f2a567ee3a46 92 setsockopt(sClient, SOL_SOCKET, SO_SNDTIMEO, (char *)&sendTimeout ,sizeof(int));
webmaster 8:f2a567ee3a46 93 #elif __LINUX__
webmaster 8:f2a567ee3a46 94 // linux下是这样设置超时时间
webmaster 8:f2a567ee3a46 95 struct timeval timeout = {3,0};
webmaster 8:f2a567ee3a46 96 setsockopt(sClient, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,sizeof(struct timeval));
webmaster 8:f2a567ee3a46 97 setsockopt(sClient, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,sizeof(struct timeval));
webmaster 8:f2a567ee3a46 98 #else
webmaster 8:f2a567ee3a46 99 unsigned int timeout = 1500;
webmaster 8:f2a567ee3a46 100 sClient.set_blocking(false, timeout); // Timeout after (1.5)s
webmaster 8:f2a567ee3a46 101 #endif
webmaster 8:f2a567ee3a46 102
webmaster 8:f2a567ee3a46 103
webmaster 8:f2a567ee3a46 104 /*
webmaster 8:f2a567ee3a46 105 sockaddr_in serAddr;
webmaster 8:f2a567ee3a46 106 serAddr.sin_family = AF_INET;
webmaster 8:f2a567ee3a46 107 serAddr.sin_port = htons(m_sPort);
webmaster 8:f2a567ee3a46 108 serAddr.sin_addr.S_un.S_addr = inet_addr(m_strIP.c_str());
webmaster 8:f2a567ee3a46 109 if(connect(sClient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
webmaster 8:f2a567ee3a46 110 {
webmaster 8:f2a567ee3a46 111 printf("connect error !");
webmaster 8:f2a567ee3a46 112 closesocket(sClient);
webmaster 8:f2a567ee3a46 113 return SOCKET_ERROR;
webmaster 8:f2a567ee3a46 114 }
webmaster 8:f2a567ee3a46 115 */
webmaster 8:f2a567ee3a46 116 while (sClient.connect(m_strIP.c_str(), m_sPort) < 0) {
webmaster 8:f2a567ee3a46 117 printf("Unable to connect to (%s) on port (%d)\n", m_strIP.c_str(), m_sPort);
webmaster 8:f2a567ee3a46 118 wait(1);
webmaster 8:f2a567ee3a46 119 }
webmaster 8:f2a567ee3a46 120 printf("Connected to Server at %s\n", m_strIP.c_str());
webmaster 8:f2a567ee3a46 121
webmaster 8:f2a567ee3a46 122 int ret = 0;
webmaster 8:f2a567ee3a46 123
webmaster 8:f2a567ee3a46 124 /*
webmaster 8:f2a567ee3a46 125 int left = strReq.length();
webmaster 8:f2a567ee3a46 126 unsigned int pos = 0;
webmaster 8:f2a567ee3a46 127 ret = send(sClient, strReq.c_str(), strReq.length(), 0);
webmaster 8:f2a567ee3a46 128 while (ret < left )
webmaster 8:f2a567ee3a46 129 {
webmaster 8:f2a567ee3a46 130 pos = pos + ret;
webmaster 8:f2a567ee3a46 131 ret = send(sClient, strReq.c_str() + pos, strReq.length() - pos, 0);
webmaster 8:f2a567ee3a46 132 ret = sClient.send(strReq.c_str() + pos, strReq.length() - pos);
webmaster 8:f2a567ee3a46 133 if (ret < 0)
webmaster 8:f2a567ee3a46 134 {
webmaster 8:f2a567ee3a46 135 return SOCKET_ERROR;
webmaster 8:f2a567ee3a46 136 }
webmaster 8:f2a567ee3a46 137 }
webmaster 8:f2a567ee3a46 138 */
webmaster 8:f2a567ee3a46 139 ret = sClient.send_all((char *)strReq.c_str(), strReq.length());
webmaster 8:f2a567ee3a46 140 if (ret < 0)
webmaster 8:f2a567ee3a46 141 {
webmaster 8:f2a567ee3a46 142 //get last error
webmaster 8:f2a567ee3a46 143 //get errno
webmaster 8:f2a567ee3a46 144 return ret;
webmaster 8:f2a567ee3a46 145 }
webmaster 8:f2a567ee3a46 146
webmaster 8:f2a567ee3a46 147 #ifdef DEBUG_LOG
webmaster 8:f2a567ee3a46 148 cout<< ">>>>>>>>>>HTTP Request (Length = "<< strReq.length() << "):\n" << strReq << endl;
webmaster 8:f2a567ee3a46 149 #endif
webmaster 8:f2a567ee3a46 150
webmaster 8:f2a567ee3a46 151
webmaster 8:f2a567ee3a46 152 char recData[BUFSIZE+1] = {0};
webmaster 8:f2a567ee3a46 153
webmaster 8:f2a567ee3a46 154 ret = 0;
webmaster 8:f2a567ee3a46 155 //ret = recv(sClient, recData, BUFSIZE, 0);
webmaster 8:f2a567ee3a46 156 ret = sClient.receive(recData, BUFSIZE);
webmaster 8:f2a567ee3a46 157 strRep.append(recData);
webmaster 8:f2a567ee3a46 158
webmaster 8:f2a567ee3a46 159 // 第一次收数据可能没有收完全,所以一直收到没有数据为止,这里会堵塞
webmaster 8:f2a567ee3a46 160 while (ret > 0)
webmaster 8:f2a567ee3a46 161 {
webmaster 8:f2a567ee3a46 162 memset(recData,0,BUFSIZE);
webmaster 8:f2a567ee3a46 163 //ret = recv(sClient, recData, BUFSIZE, 0);
webmaster 8:f2a567ee3a46 164 ret = sClient.receive(recData, BUFSIZE);
webmaster 8:f2a567ee3a46 165
webmaster 8:f2a567ee3a46 166 if (ret > 0)
webmaster 8:f2a567ee3a46 167 {
webmaster 8:f2a567ee3a46 168 strRep.append(recData);
webmaster 8:f2a567ee3a46 169 }
webmaster 8:f2a567ee3a46 170 }
webmaster 8:f2a567ee3a46 171
webmaster 8:f2a567ee3a46 172 strOut = strRep;
webmaster 8:f2a567ee3a46 173
webmaster 8:f2a567ee3a46 174 #ifdef DEBUG_LOG
webmaster 8:f2a567ee3a46 175 cout<< ">>>>>>>>>>HTTP Response (Length = "<< strRep.length() << "):\n" << strRep << endl;
webmaster 8:f2a567ee3a46 176 #endif
webmaster 8:f2a567ee3a46 177
webmaster 8:f2a567ee3a46 178 // Clean up
webmaster 8:f2a567ee3a46 179 //closesocket(sClient);
webmaster 8:f2a567ee3a46 180 sClient.close();
webmaster 8:f2a567ee3a46 181 return 0;
webmaster 8:f2a567ee3a46 182 }