X-Git-Url: https://git.sur5r.net/?p=gsconf;a=blobdiff_plain;f=gs105e.c;h=381f0b14fa22013b90a4b73b962b519a75c559b5;hp=a5b9aa60300345753050f02d0d3bcd3000ae9fae;hb=HEAD;hpb=11ae7c1958d87f75fb840c6556fa99abf85e6607 diff --git a/gs105e.c b/gs105e.c index a5b9aa6..381f0b1 100644 --- a/gs105e.c +++ b/gs105e.c @@ -5,8 +5,8 @@ #include #include -unsigned char * gs105e_queryData; -unsigned int gsDataLen; +char * gs105e_queryData; +int gsDataLen; struct vlan * getVlanSetting(unsigned int vlanId) { struct vlan * _vlan = settings.vlans; @@ -74,12 +74,14 @@ char newPacketId() { return (char)packetId; } + + void makeHeader(unsigned int queryType) { int n; - gs105e_queryData = (unsigned char * )realloc(gs105e_queryData, sizeof(char) * 32); + gs105e_queryData = realloc(gs105e_queryData, sizeof(char) * 32); gsDataLen = 32; @@ -95,8 +97,10 @@ void makeHeader(unsigned int queryType) { memcpy(&gs105e_queryData[24], "\x4e\x53\x44\x50", 4); //Magic!! :-O if (settings.password != NULL && queryType == QR_EXEC) { - - addActData(GS_PASSWORD, strlen(settings.password), settings.password); + char tmpPassword[strlen(settings.password)]; + for (n = 0; n < strlen(settings.password); n++) + tmpPassword[n] = passwordSecret[n % 19] ^ settings.password[n]; + addActData(GS_PASSWORD, strlen(settings.password), tmpPassword); } @@ -119,7 +123,7 @@ void gs105e_query (void) { emptyBuffer(); gs105e_queryData[23] = newPacketId(); - if (gs105e_queryData[gsDataLen - 4] != 0xFF | gs105e_queryData[gsDataLen - 3] != 0xFF | gs105e_queryData[gsDataLen - 2] != 0x00 | gs105e_queryData[gsDataLen - 1] != 0x00) + if ((gs105e_queryData[gsDataLen - 4] != 0xFF) | (gs105e_queryData[gsDataLen - 3] != 0xFF) | (gs105e_queryData[gsDataLen - 2] != 0x00) | (gs105e_queryData[gsDataLen - 1] != 0x00)) addData("\xFF\xFF\x00\x00", 4); sendBroadcast(gs105e_queryData, gsDataLen); @@ -247,7 +251,7 @@ int gs105e__receive(void) { // printf("Received No or Invalid Packet\n"); return -1; } - if (memcmp(&data[8], myMac, 6) | data[0] != 0x01 | (!(data[1] == 0x02 | data[1] == 0x04))) { + if (memcmp(&data[8], myMac, 6) | (data[0] != 0x01) | (!((data[1] == 0x02) | (data[1] == 0x04)))) { return -1; } @@ -287,7 +291,7 @@ int gs105e_actRecv(void) { // printf("Received No or Invalid Packet\n"); return -1; } - if (memcmp(&data[8], myMac, 6) | data[0] != 0x01 | (!(data[1] == 0x02 | data[1] == 0x04))) { + if (memcmp(&data[8], myMac, 6) | (data[0] != 0x01) | (!((data[1] == 0x02) | (data[1] == 0x04)))) { gs105e_actRecv(); return -1; } @@ -346,7 +350,7 @@ int gs105e_delVlan(int vlanId) { return gs105e_act(); } -int gs105e_restart(int vlanId) { +int gs105e_restart(void) { makeHeader(QR_EXEC); char data[1] = {1}; @@ -382,10 +386,13 @@ int gs105e_setName(char * data) { } int gs105e_setPassword(char * data) { - makeHeader(QR_EXEC); - + int n; + makeHeader(QR_EXEC); - addActData(GS_NEWPASSWORD, strlen(data), data); + char tmpPasswd[strlen(data)]; + for (n = 0; n < strlen(data); n++) + tmpPasswd[n] = data[n] ^ passwordSecret[n % 19]; + addActData(GS_NEWPASSWORD, strlen(data), tmpPasswd); return gs105e_act(); } @@ -412,25 +419,42 @@ void addDiscoveredDevice(int id) { if (ddev == NULL) { ddev = (struct gs105e_discovered *)malloc(sizeof(struct gs105e_discovered)); gs105e_devs = ddev; + ddev->next = NULL; }else { while (ddev != NULL) { - if (memcmp(ddev->mac, settings.mac, 6)) + if (memcmp(ddev->mac, settings.mac, 6)) { + ddev = ddev->next; continue; - ddev = ddev->next; + } + + break; } + } if (ddev == NULL) { - struct gs105e_discovered * ddev = gs105e_devs; + + ddev = gs105e_devs; gs105e_devs = (struct gs105e_discovered *)malloc(sizeof(struct gs105e_discovered)); + printf("%p\n", gs105e_devs); + printf("%p\n", ddev); gs105e_devs->next = ddev; ddev = gs105e_devs; + printf("%p\n", ddev); + } - ddev->name = settings.name; + + printf("%p\n", ddev->name); + ddev->name = (char *)malloc(sizeof(char) * strlen(settings.name)); + printf("DEBUG 1\n"); + memcpy(ddev->name, settings.name, strlen(settings.name) + 1); memcpy(ddev->mac, settings.mac, 6); + memcpy(ddev->ip, settings.ip, 4); memcpy(ddev->gateway, settings.gateway, 4); - ddev->model = settings.model; + ddev->model = (char *)malloc(sizeof(char) * strlen(settings.model)); + memcpy(ddev->model, settings.model, strlen(settings.model) + 1); + ddev->id = id; } @@ -458,7 +482,9 @@ int gs105e_discover(void) { gs105e_query (); gs105e_query (); while (gs105e__receive() == 0) { + printf("DEGUB DEVICE DISCOVERED\n"); addDiscoveredDevice(n + 1); + n++; } return n;