]> git.sur5r.net Git - gsconf/blobdiff - gs105e.c
A bunch of fixes for various compiler warnings
[gsconf] / gs105e.c
index ccee5d759a646cd01891a1c4f79783441ccb3cc5..381f0b14fa22013b90a4b73b962b519a75c559b5 100644 (file)
--- a/gs105e.c
+++ b/gs105e.c
@@ -5,8 +5,8 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-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;
         
         
@@ -90,13 +92,15 @@ void makeHeader(unsigned int queryType) {
         gs105e_queryData[1] = queryType % 256;
         
         memcpy(&gs105e_queryData[8], myMac, 6);
-        if (memcpy(settings.mac, "\x00\x00\x00\x00\x00\x00", 6))
+        if (memcmp(settings.mac, "\x00\x00\x00\x00\x00\x00", 6))
                 memcpy(&gs105e_queryData[14], settings.mac, 6);
         
         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);
         
@@ -220,12 +224,15 @@ void gs105e_interpret_slice(unsigned int ID, char * data, int len) {
                         break;
                 case GS_PORTDIAG:;
                         p = &settings.portStatistics[data[0]];
-                        p->cableError = toUInt4(&data[1]);
-                        p->errorDist = toUInt4(&data[5]);
+                        p->cableError = (char)toUInt4(&data[1]);
+                        p->errorDist = (char)toUInt4(&data[5]);
                         break;
                 case ACT_DHCP:;
                         settings.dhcp = data[1] & 0x03;
                         break;
+                case GS_VLANSETTING:;
+                        settings.vlanType = data[0];
+                        break;
         }
 }
 
@@ -244,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;
         }
         
@@ -284,18 +291,32 @@ 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;
         }
         
+        
+        
         if (data[2] == 0) {
+                for (n = 32; n < len; ) {
+                        id = (data[n] * 256)  + data[n + 1];
+                        slLen = (data[n+2] * 256)  + data[n + 3];
+
+                        gs105e_interpret_slice(id, &data[n + 4], slLen);
+                        n += slLen + 4;
+                }
                 return data[2];
         }
 }
 int gs105e_act() {
         gs105e_query();
-        return gs105e_actRecv();
+        int n = gs105e_actRecv();
+        if (n < 0){
+                gs105e_query();
+                n = gs105e_actRecv();
+        }
+        return n;
 }
 
 
@@ -329,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};
@@ -342,17 +363,17 @@ int gs105e_restart(int vlanId) {
 
 int gs105e_mirrorPorts(int outputPort, int mirrorMask) {
         makeHeader(QR_EXEC);
-        char data[3] = {outputPort, 0,  mirrorMask};
+        char data[3] = {(char)outputPort, 0, (char) mirrorMask};
         
         addActData(ACT_PORTMIRROR, 3, data);
         return gs105e_act();
 }
 
 int gs105e_cableDiagnostics(int port) {
-        makeHeader(QR_EXEC);
+        makeHeader(QR_REQ);
         char data[1] = {port};
         
-        addActData(ACT_PORTMIRROR, 3, data);
+        addActData(GS_PORTDIAG, 1, data);
         return gs105e_act();
 }
 
@@ -364,6 +385,17 @@ int gs105e_setName(char * data) {
         return gs105e_act();
 }
 
+int gs105e_setPassword(char * data) {
+        int n;
+       makeHeader(QR_EXEC);
+        
+        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();
+}
+
 int gs105e_dhcpSettings(int action) {
         makeHeader(QR_EXEC);
         char data[1] = {(char)action};
@@ -372,6 +404,14 @@ int gs105e_dhcpSettings(int action) {
         return gs105e_act();
 }
 
+int gs105e_vlanEnable(void) {
+        makeHeader(QR_EXEC);
+        char data[1] = {4};
+        
+        addActData(GS_VLANSETTING, 1, data);
+        return gs105e_act();        
+}
+
 void addDiscoveredDevice(int id) {
         
         struct gs105e_discovered * ddev = gs105e_devs;
@@ -379,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;
         
 }
@@ -425,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;
@@ -460,6 +519,7 @@ void gs105e_queryAll(void) {
         addQuery(ACT_DHCP);
         addQuery(GS_PORTSTATUS);        
         addQuery(GS_VLAN);
+        addQuery(GS_VLANSETTING);
         
         gs105e_query ();
          gs105e_receive();