First

Dependents:   mbed-os-rest-api-V1-1 mbed-os-rest-api-V1-2 mbed-os-rest-api-V1-2-2

NetworkManager.cpp

Committer:
asaewing
Date:
2018-10-08
Revision:
0:b12dd3a065c0
Child:
1:358fcf86ddab

File content as of revision 0:b12dd3a065c0:

#include "module_for_all.h"

NetworkManager::NetworkManager() {
    _ip = "192.168.20.101";
    _gateway = "192.168.20.1";
    _mask = "255.255.255.0";
    _port = 8080;
    
    _m_ip = "";
    _m_mac = "";
    
    std::string _http_method = "";
    std::string _api_command = "";
}

NetworkManager::NetworkManager(char* IP, char* GATEWAY, char* MASK, int PORT) {
    _ip = IP;
    _gateway = GATEWAY;
    _mask = MASK;
    _port = PORT;
    
    _m_ip = "";
    _m_mac = "";

    std::string _http_method = "";
    std::string _api_command = "";
}

void NetworkManager::SetConfig(char* IP, char* GATEWAY, char* MASK, int PORT) {
    _ip = IP;
    _gateway = GATEWAY;
    _mask = MASK;
    _port = PORT;
    printf("NetworkManager::SetConfig OK\r\n");
}

void NetworkManager::ServerInit() {
    eth.disconnect();
    eth.set_network(_ip,_mask,_gateway);
    eth.connect();
    
    _m_ip = eth.get_ip_address();
    _m_mac = eth.get_mac_address();
    printf("mbed's IP address is: %s\n\r", _m_ip ? _m_ip : "No IP");
    printf("mbed's MAC address is: %s\n\r", _m_mac ? _m_mac : "No MAC");
}

bool NetworkManager::OpenServer() {
    /* Open the server on ethernet stack */
    int ii=srv.open(&eth);

    if (ii<0) {
        printf("open error: %i \r\n",ii);
        return true;
    }
    printf("server open\r\n");
    return false;
}

bool NetworkManager::BindPort() {
    /* Bind the HTTP port (TCP 80) to the server */
    int ii=srv.bind(_m_ip, 80);
    if (ii<0) {
        printf("bind error: %i \r\n",ii);
        return true;
    }
    printf("Bound\r\n");
    return false;
}

bool NetworkManager::ListenConnections() {
    /* Can handle 5 simultaneous connections */
    srv.listen(5);
    if (srv.listen()<0) {
        printf("listen error\r\n");
        return true;
    }
    printf("Listening\r\n");
    return false;
}

bool NetworkManager::CheckAccept() {
    int ii = srv.accept(&clt_sock);
    if (ii<0) {
        printf("accept error: %i \r\n",ii);
        return true;
    }
    printf("Socket Accepted\r\n");
    return false;
}

void NetworkManager::AcceptEvent() {
    srv.accept(&clt_sock, &clt_addr);
        
    //printf("The target IP address is '%s'\n", eth.get_ip_address());
    //printf("The target MAC address is '%s'\n", eth.get_mac_address());
    printf("accept %s:%d\n", clt_addr.get_ip_address(), clt_addr.get_port());
        
    // Receive data
    char buf[1024];
    clt_sock.recv(buf, 100);
    printf("## print recv: %s\r\n", buf);
    printf("## print recv: Finish\r\n");
    //char *arr[10];
    //memset(arr, 0, sizeof(arr));
    
    std::string tmpBuf(buf);

    _recvList.reserve(100);
    split(tmpBuf, _recvList, " ");

    _http_method = _recvList[0];
    _api_command = _recvList[1];
}

void NetworkManager::SendResponseEvent(std::string _response) {
    
    //std::string response = HTTP_STATUS_LINE;
    
    /*printf("$$ _recvList[0] : %s \r\n", _recvList[0].c_str());
    printf("$$ _recvList[1] : %s \r\n", _recvList[1].c_str());
    printf("$$ _recvList[2] : %s \r\n", _recvList[2].c_str());
    printf("$$ _recvList[3] : %s \r\n", _recvList[3].c_str());*/
    

    //std::string tmpResponse = "";
    //tmpResponse = makeResponse(_response);
    char* tmpString = stringToChar(makeResponse(_response));
    clt_sock.send(tmpString, strlen(tmpString));
    //clt_sock.send(response, strlen(response));
    
    // Send data
    //clt_sock.send(HTTP_RESPONSE, strlen(HTTP_RESPONSE));
    
    // Close the socket
    clt_sock.close();
    
    printf("Socket close\r\n");
}

std::string NetworkManager::getHttpMethod() {
    return _http_method;
}


std::string NetworkManager::getApiCommand() {
    return _api_command;
}

std::string NetworkManager::makeResponse(std::string tmpResponse) {
    std::string returnResponse = HTTP_STATUS_LINE;
    returnResponse.append("\r\n");
    returnResponse.append(HTTP_HEADER_FIELDS);
    returnResponse.append("\r\n\r\n");
    returnResponse.append(tmpResponse);
    returnResponse.append("\r\n");
    
    return returnResponse;
}