#include    "goahead.h"
#include    "libipmi_IPM.h"
#include    "com_IPMIDefs.h"
#include    "ResultUtils.h"
#include    "cJSON.h"
/*获取设备信息*/

/*获取设备信息*/
void getDeviceInfo(Webs *wp){
    logmsg(2, "--------------------ggggg11gggg----------------");

    uint16_t    wRet = LIBIPMI_E_SUCCESS;
    GetDevIDRes_T   DeviceID;
    struct ifreq ifreq;
    int sock;
    struct sockaddr_in *myaddr;

    char BuildTime[30] = {0};
    char FwVersion[10] = {0};
    char MacAddr[18] = {0};
    char IpAddr[16] = {0};
    

    //Create session
    LIBIPMI_CreateSession(&wp->ipmi_session, 10);

    //get build time
    sprintf(BuildTime, "%s %s", __DATE__, __TIME__);

    //get firmware version
    wRet = IPMICMD_GetDeviceID( &wp->ipmi_session, &DeviceID, DEFAULT_TIMEOUT);
    if (wRet == LIBIPMI_E_SUCCESS)
    {
        sprintf(FwVersion, "%d.%d", DeviceID.FirmwareRevision1, DeviceID.FirmwareRevision2);
    }

    //get mac address
    if((sock=socket(AF_INET,SOCK_STREAM,0))<0)
    {
        printf("Get mac address socket fail!\n");
    }
    else
    {
        strcpy(ifreq.ifr_name,"eth0");
        if(ioctl(sock,SIOCGIFHWADDR,&ifreq)<0)
        {
            printf("Get mac address ioctl fail!\n");
        }
        else
        {
            sprintf(MacAddr, "%02x:%02x:%02x:%02x:%02x:%02x",
                    (unsigned char)ifreq.ifr_hwaddr.sa_data[0],
                    (unsigned char)ifreq.ifr_hwaddr.sa_data[1],
                    (unsigned char)ifreq.ifr_hwaddr.sa_data[2],
                    (unsigned char)ifreq.ifr_hwaddr.sa_data[3],
                    (unsigned char)ifreq.ifr_hwaddr.sa_data[4],
                    (unsigned char)ifreq.ifr_hwaddr.sa_data[5]);
        }
    }
    close(sock);

    //get ip address
    strcpy(ifreq.ifr_name, "eth0");
    if((sock=socket(AF_INET, SOCK_STREAM, 0))<0)
    {
        printf("Get ip address socket fail!\n");
    }
    else
    {
        wRet = ioctl(sock, SIOCGIFADDR, &ifreq);
        if(wRet < 0)
        {
            printf("Get ip address ioctl fail!\n");
        }
        else
        {
            myaddr = (struct sockaddr_in *)&(ifreq.ifr_addr);
            strcpy(IpAddr, inet_ntoa(myaddr->sin_addr));   
        }
    }
    close(sock);
    
    //Close session
    LIBIPMI_CloseSession(&wp->ipmi_session );

    printf("BuildTime: %s\n", BuildTime);
    printf("FwVersion: %s\n", FwVersion);
    printf("MacAddr: %s\n", MacAddr);
    printf("IpAddr: %s\n", IpAddr);

    cchar *pStr;
    int code = 200;
    cJSON * root =  cJSON_CreateObject();
    cJSON * data =  cJSON_CreateObject();
    // cJSON * next =  cJSON_CreateObject();
    cJSON_AddItemToObject(root, "data", data);//根节点下添加
    cJSON_AddItemToObject(root, "msg", cJSON_CreateString(""));
    cJSON_AddItemToObject(root, "code", cJSON_CreateString("200"));
    cJSON_AddStringToObject(data, "buildTime", BuildTime);
    cJSON_AddStringToObject(data, "fwVersion", FwVersion);
    cJSON_AddStringToObject(data, "macAddr", MacAddr);
    cJSON_AddStringToObject(data, "ipAddr", IpAddr);

    pStr = cJSON_Print(root);

    printf("first json:\n%s\n", pStr);
    logmsg(2, "-----------------------jso1n----------------------%s", pStr);
    logmsg(2, "--------------------ccccccccccsscc----------------");
    websSetStatus(wp, 200);
    websWriteHeaders(wp, -1, 0);
    websWriteEndHeaders(wp); 
    //websWrite(wp, "[");
    websWrite(wp, pStr);
    //websWrite(wp, "]");
    //websFlush(wp, 0);
    websDone(wp);
}


/*获取cpu信息*/
void getCPUInfo(){

}


/*获取刀片信息*/
void getCardInfo(){

}


void buy(Webs *wp)
{
    cchar    *name, *age;
    name = websGetVar(wp, "name", NULL);
    age = websGetVar(wp, "age", NULL);
     logmsg(2, "----------------------------11-----------------");
    logmsg(2, "name value is : %s", name );
     logmsg(2, "age value is : %s", age );
    websSetStatus(wp, 200);
    websWriteHeaders(wp, -1, 0);
    websWriteEndHeaders(wp);
   
    websWrite(wp, "Name %s", name);
    websWrite(wp, "age %s", age); 
    websFlush(wp, 0);
    websDone(wp);
}



// /*
//     Implement /action/actionTest. Parse the form variables: name, address and echo back.
//  */
void actionTest(Webs *wp)
{


logmsg(2, "--------------------ggggggggg----------------");

    uint16_t    wRet = LIBIPMI_E_SUCCESS;
    GetDevIDRes_T   DeviceID;
    char BuildTime[30] = {0};
    char FwVersion[10] = {0};
    //Create session
    LIBIPMI_CreateSession(&wp->ipmi_session, 10);
    sprintf(BuildTime, "%s %s", __DATE__, __TIME__);
    wRet = IPMICMD_GetDeviceID( &wp->ipmi_session, &DeviceID, DEFAULT_TIMEOUT);
    if (wRet == LIBIPMI_E_SUCCESS)
    {
        sprintf(FwVersion, "%d.%d", DeviceID.FirmwareRevision1, DeviceID.FirmwareRevision2);
    }
    printf("BuildTime: %s\n", BuildTime);
    printf("FwVersion: %s\n", FwVersion);
    //Close session
    LIBIPMI_CloseSession(&wp->ipmi_session );
   
    cchar   *name, *address;

    name = websGetVar(wp, "name", NULL);
    address = websGetVar(wp, "address", NULL);
    websSetStatus(wp, 200);
    websWriteHeaders(wp, -1, 0);
    websWriteEndHeaders(wp);
    websWrite(wp, "Name %s", name);
    websFlush(wp, 0);
    websDone(wp);
}


