First
Dependents: mbed-os-rest-api-V1-1 mbed-os-rest-api-V1-2 mbed-os-rest-api-V1-2-2
NetworkManager.cpp@0:b12dd3a065c0, 2018-10-08 (annotated)
- Committer:
- asaewing
- Date:
- Mon Oct 08 00:49:06 2018 +0000
- Revision:
- 0:b12dd3a065c0
- Child:
- 1:358fcf86ddab
First;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
asaewing | 0:b12dd3a065c0 | 1 | #include "module_for_all.h" |
asaewing | 0:b12dd3a065c0 | 2 | |
asaewing | 0:b12dd3a065c0 | 3 | NetworkManager::NetworkManager() { |
asaewing | 0:b12dd3a065c0 | 4 | _ip = "192.168.20.101"; |
asaewing | 0:b12dd3a065c0 | 5 | _gateway = "192.168.20.1"; |
asaewing | 0:b12dd3a065c0 | 6 | _mask = "255.255.255.0"; |
asaewing | 0:b12dd3a065c0 | 7 | _port = 8080; |
asaewing | 0:b12dd3a065c0 | 8 | |
asaewing | 0:b12dd3a065c0 | 9 | _m_ip = ""; |
asaewing | 0:b12dd3a065c0 | 10 | _m_mac = ""; |
asaewing | 0:b12dd3a065c0 | 11 | |
asaewing | 0:b12dd3a065c0 | 12 | std::string _http_method = ""; |
asaewing | 0:b12dd3a065c0 | 13 | std::string _api_command = ""; |
asaewing | 0:b12dd3a065c0 | 14 | } |
asaewing | 0:b12dd3a065c0 | 15 | |
asaewing | 0:b12dd3a065c0 | 16 | NetworkManager::NetworkManager(char* IP, char* GATEWAY, char* MASK, int PORT) { |
asaewing | 0:b12dd3a065c0 | 17 | _ip = IP; |
asaewing | 0:b12dd3a065c0 | 18 | _gateway = GATEWAY; |
asaewing | 0:b12dd3a065c0 | 19 | _mask = MASK; |
asaewing | 0:b12dd3a065c0 | 20 | _port = PORT; |
asaewing | 0:b12dd3a065c0 | 21 | |
asaewing | 0:b12dd3a065c0 | 22 | _m_ip = ""; |
asaewing | 0:b12dd3a065c0 | 23 | _m_mac = ""; |
asaewing | 0:b12dd3a065c0 | 24 | |
asaewing | 0:b12dd3a065c0 | 25 | std::string _http_method = ""; |
asaewing | 0:b12dd3a065c0 | 26 | std::string _api_command = ""; |
asaewing | 0:b12dd3a065c0 | 27 | } |
asaewing | 0:b12dd3a065c0 | 28 | |
asaewing | 0:b12dd3a065c0 | 29 | void NetworkManager::SetConfig(char* IP, char* GATEWAY, char* MASK, int PORT) { |
asaewing | 0:b12dd3a065c0 | 30 | _ip = IP; |
asaewing | 0:b12dd3a065c0 | 31 | _gateway = GATEWAY; |
asaewing | 0:b12dd3a065c0 | 32 | _mask = MASK; |
asaewing | 0:b12dd3a065c0 | 33 | _port = PORT; |
asaewing | 0:b12dd3a065c0 | 34 | printf("NetworkManager::SetConfig OK\r\n"); |
asaewing | 0:b12dd3a065c0 | 35 | } |
asaewing | 0:b12dd3a065c0 | 36 | |
asaewing | 0:b12dd3a065c0 | 37 | void NetworkManager::ServerInit() { |
asaewing | 0:b12dd3a065c0 | 38 | eth.disconnect(); |
asaewing | 0:b12dd3a065c0 | 39 | eth.set_network(_ip,_mask,_gateway); |
asaewing | 0:b12dd3a065c0 | 40 | eth.connect(); |
asaewing | 0:b12dd3a065c0 | 41 | |
asaewing | 0:b12dd3a065c0 | 42 | _m_ip = eth.get_ip_address(); |
asaewing | 0:b12dd3a065c0 | 43 | _m_mac = eth.get_mac_address(); |
asaewing | 0:b12dd3a065c0 | 44 | printf("mbed's IP address is: %s\n\r", _m_ip ? _m_ip : "No IP"); |
asaewing | 0:b12dd3a065c0 | 45 | printf("mbed's MAC address is: %s\n\r", _m_mac ? _m_mac : "No MAC"); |
asaewing | 0:b12dd3a065c0 | 46 | } |
asaewing | 0:b12dd3a065c0 | 47 | |
asaewing | 0:b12dd3a065c0 | 48 | bool NetworkManager::OpenServer() { |
asaewing | 0:b12dd3a065c0 | 49 | /* Open the server on ethernet stack */ |
asaewing | 0:b12dd3a065c0 | 50 | int ii=srv.open(ð); |
asaewing | 0:b12dd3a065c0 | 51 | |
asaewing | 0:b12dd3a065c0 | 52 | if (ii<0) { |
asaewing | 0:b12dd3a065c0 | 53 | printf("open error: %i \r\n",ii); |
asaewing | 0:b12dd3a065c0 | 54 | return true; |
asaewing | 0:b12dd3a065c0 | 55 | } |
asaewing | 0:b12dd3a065c0 | 56 | printf("server open\r\n"); |
asaewing | 0:b12dd3a065c0 | 57 | return false; |
asaewing | 0:b12dd3a065c0 | 58 | } |
asaewing | 0:b12dd3a065c0 | 59 | |
asaewing | 0:b12dd3a065c0 | 60 | bool NetworkManager::BindPort() { |
asaewing | 0:b12dd3a065c0 | 61 | /* Bind the HTTP port (TCP 80) to the server */ |
asaewing | 0:b12dd3a065c0 | 62 | int ii=srv.bind(_m_ip, 80); |
asaewing | 0:b12dd3a065c0 | 63 | if (ii<0) { |
asaewing | 0:b12dd3a065c0 | 64 | printf("bind error: %i \r\n",ii); |
asaewing | 0:b12dd3a065c0 | 65 | return true; |
asaewing | 0:b12dd3a065c0 | 66 | } |
asaewing | 0:b12dd3a065c0 | 67 | printf("Bound\r\n"); |
asaewing | 0:b12dd3a065c0 | 68 | return false; |
asaewing | 0:b12dd3a065c0 | 69 | } |
asaewing | 0:b12dd3a065c0 | 70 | |
asaewing | 0:b12dd3a065c0 | 71 | bool NetworkManager::ListenConnections() { |
asaewing | 0:b12dd3a065c0 | 72 | /* Can handle 5 simultaneous connections */ |
asaewing | 0:b12dd3a065c0 | 73 | srv.listen(5); |
asaewing | 0:b12dd3a065c0 | 74 | if (srv.listen()<0) { |
asaewing | 0:b12dd3a065c0 | 75 | printf("listen error\r\n"); |
asaewing | 0:b12dd3a065c0 | 76 | return true; |
asaewing | 0:b12dd3a065c0 | 77 | } |
asaewing | 0:b12dd3a065c0 | 78 | printf("Listening\r\n"); |
asaewing | 0:b12dd3a065c0 | 79 | return false; |
asaewing | 0:b12dd3a065c0 | 80 | } |
asaewing | 0:b12dd3a065c0 | 81 | |
asaewing | 0:b12dd3a065c0 | 82 | bool NetworkManager::CheckAccept() { |
asaewing | 0:b12dd3a065c0 | 83 | int ii = srv.accept(&clt_sock); |
asaewing | 0:b12dd3a065c0 | 84 | if (ii<0) { |
asaewing | 0:b12dd3a065c0 | 85 | printf("accept error: %i \r\n",ii); |
asaewing | 0:b12dd3a065c0 | 86 | return true; |
asaewing | 0:b12dd3a065c0 | 87 | } |
asaewing | 0:b12dd3a065c0 | 88 | printf("Socket Accepted\r\n"); |
asaewing | 0:b12dd3a065c0 | 89 | return false; |
asaewing | 0:b12dd3a065c0 | 90 | } |
asaewing | 0:b12dd3a065c0 | 91 | |
asaewing | 0:b12dd3a065c0 | 92 | void NetworkManager::AcceptEvent() { |
asaewing | 0:b12dd3a065c0 | 93 | srv.accept(&clt_sock, &clt_addr); |
asaewing | 0:b12dd3a065c0 | 94 | |
asaewing | 0:b12dd3a065c0 | 95 | //printf("The target IP address is '%s'\n", eth.get_ip_address()); |
asaewing | 0:b12dd3a065c0 | 96 | //printf("The target MAC address is '%s'\n", eth.get_mac_address()); |
asaewing | 0:b12dd3a065c0 | 97 | printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port()); |
asaewing | 0:b12dd3a065c0 | 98 | |
asaewing | 0:b12dd3a065c0 | 99 | // Receive data |
asaewing | 0:b12dd3a065c0 | 100 | char buf[1024]; |
asaewing | 0:b12dd3a065c0 | 101 | clt_sock.recv(buf, 100); |
asaewing | 0:b12dd3a065c0 | 102 | printf("## print recv: %s\r\n", buf); |
asaewing | 0:b12dd3a065c0 | 103 | printf("## print recv: Finish\r\n"); |
asaewing | 0:b12dd3a065c0 | 104 | //char *arr[10]; |
asaewing | 0:b12dd3a065c0 | 105 | //memset(arr, 0, sizeof(arr)); |
asaewing | 0:b12dd3a065c0 | 106 | |
asaewing | 0:b12dd3a065c0 | 107 | std::string tmpBuf(buf); |
asaewing | 0:b12dd3a065c0 | 108 | |
asaewing | 0:b12dd3a065c0 | 109 | _recvList.reserve(100); |
asaewing | 0:b12dd3a065c0 | 110 | split(tmpBuf, _recvList, " "); |
asaewing | 0:b12dd3a065c0 | 111 | |
asaewing | 0:b12dd3a065c0 | 112 | _http_method = _recvList[0]; |
asaewing | 0:b12dd3a065c0 | 113 | _api_command = _recvList[1]; |
asaewing | 0:b12dd3a065c0 | 114 | } |
asaewing | 0:b12dd3a065c0 | 115 | |
asaewing | 0:b12dd3a065c0 | 116 | void NetworkManager::SendResponseEvent(std::string _response) { |
asaewing | 0:b12dd3a065c0 | 117 | |
asaewing | 0:b12dd3a065c0 | 118 | //std::string response = HTTP_STATUS_LINE; |
asaewing | 0:b12dd3a065c0 | 119 | |
asaewing | 0:b12dd3a065c0 | 120 | /*printf("$$ _recvList[0] : %s \r\n", _recvList[0].c_str()); |
asaewing | 0:b12dd3a065c0 | 121 | printf("$$ _recvList[1] : %s \r\n", _recvList[1].c_str()); |
asaewing | 0:b12dd3a065c0 | 122 | printf("$$ _recvList[2] : %s \r\n", _recvList[2].c_str()); |
asaewing | 0:b12dd3a065c0 | 123 | printf("$$ _recvList[3] : %s \r\n", _recvList[3].c_str());*/ |
asaewing | 0:b12dd3a065c0 | 124 | |
asaewing | 0:b12dd3a065c0 | 125 | |
asaewing | 0:b12dd3a065c0 | 126 | //std::string tmpResponse = ""; |
asaewing | 0:b12dd3a065c0 | 127 | //tmpResponse = makeResponse(_response); |
asaewing | 0:b12dd3a065c0 | 128 | char* tmpString = stringToChar(makeResponse(_response)); |
asaewing | 0:b12dd3a065c0 | 129 | clt_sock.send(tmpString, strlen(tmpString)); |
asaewing | 0:b12dd3a065c0 | 130 | //clt_sock.send(response, strlen(response)); |
asaewing | 0:b12dd3a065c0 | 131 | |
asaewing | 0:b12dd3a065c0 | 132 | // Send data |
asaewing | 0:b12dd3a065c0 | 133 | //clt_sock.send(HTTP_RESPONSE, strlen(HTTP_RESPONSE)); |
asaewing | 0:b12dd3a065c0 | 134 | |
asaewing | 0:b12dd3a065c0 | 135 | // Close the socket |
asaewing | 0:b12dd3a065c0 | 136 | clt_sock.close(); |
asaewing | 0:b12dd3a065c0 | 137 | |
asaewing | 0:b12dd3a065c0 | 138 | printf("Socket close\r\n"); |
asaewing | 0:b12dd3a065c0 | 139 | } |
asaewing | 0:b12dd3a065c0 | 140 | |
asaewing | 0:b12dd3a065c0 | 141 | std::string NetworkManager::getHttpMethod() { |
asaewing | 0:b12dd3a065c0 | 142 | return _http_method; |
asaewing | 0:b12dd3a065c0 | 143 | } |
asaewing | 0:b12dd3a065c0 | 144 | |
asaewing | 0:b12dd3a065c0 | 145 | |
asaewing | 0:b12dd3a065c0 | 146 | std::string NetworkManager::getApiCommand() { |
asaewing | 0:b12dd3a065c0 | 147 | return _api_command; |
asaewing | 0:b12dd3a065c0 | 148 | } |
asaewing | 0:b12dd3a065c0 | 149 | |
asaewing | 0:b12dd3a065c0 | 150 | std::string NetworkManager::makeResponse(std::string tmpResponse) { |
asaewing | 0:b12dd3a065c0 | 151 | std::string returnResponse = HTTP_STATUS_LINE; |
asaewing | 0:b12dd3a065c0 | 152 | returnResponse.append("\r\n"); |
asaewing | 0:b12dd3a065c0 | 153 | returnResponse.append(HTTP_HEADER_FIELDS); |
asaewing | 0:b12dd3a065c0 | 154 | returnResponse.append("\r\n\r\n"); |
asaewing | 0:b12dd3a065c0 | 155 | returnResponse.append(tmpResponse); |
asaewing | 0:b12dd3a065c0 | 156 | returnResponse.append("\r\n"); |
asaewing | 0:b12dd3a065c0 | 157 | |
asaewing | 0:b12dd3a065c0 | 158 | return returnResponse; |
asaewing | 0:b12dd3a065c0 | 159 | } |