A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.

Dependents:   oldheating gps motorhome heating

Revision:
136:8a65abb0dc63
Parent:
119:8e1a7805b801
Child:
142:a8c0890a58d1
--- a/net.c	Sat Mar 23 12:25:48 2019 +0000
+++ b/net.c	Sat Apr 06 11:20:20 2019 +0000
@@ -59,7 +59,6 @@
 
     return h;
 }
-
 int32_t NetToHost32(int32_t n)
 {
     int32_t h;
@@ -92,30 +91,71 @@
 
     return h;
 }
-uint16_t onesComplement(uint16_t start, int count, void* pData)
+void NetInvert16(void* h, void* n)
+{
+    char* pn = (char*)n;
+    char* ph = (char*)h + 1;
+    
+    *ph = *pn; ph--; pn++; // 1<-0
+    *ph = *pn;             // 0<-1
+}
+void NetInvert32(void* h, void* n)
 {    
-    uint32_t sum = start;                               //Initialise the 32 bit accumulator with the last sum
-    uint16_t* p = (uint16_t*)pData;                     //Set up a 16 bit pointer for the data
+    char* pn = (char*)n;
+    char* ph = (char*)h + 3;
     
-    while(count > 1)
-    {
-        sum += *p++;                                    // Add each pair of bytes into 32 bit accumulator
-        count -= 2;
-    }
-    if(count) sum += * (uint8_t*) p;                    // Add left-over byte, if any
-    while (sum>>16) sum = (sum & 0xffff) + (sum >> 16); // Add any carries from the sum back into the sum to make it ones complement
-    return sum;
+    *ph = *pn; ph--; pn++; // 3<-0
+    *ph = *pn; ph--; pn++; // 2<-1
+    *ph = *pn; ph--; pn++; // 1<-2
+    *ph = *pn;             // 0<-3
 }
-uint16_t NetCheckSumTwo(int count1, void* pData1, int count2, void* pData2)
-{
-    uint16_t sum = onesComplement(0, count1, pData1);
-    return ~onesComplement(sum, count2, pData2);
-}
-uint16_t NetCheckSum(int count, void* pData)
-{
-    return ~onesComplement(0, count, pData);
+void NetInvert64(void* h, void* n)
+{   
+    char* pn = (char*)n;
+    char* ph = (char*)h + 7;
+    
+    *ph = *pn; ph--; pn++; // 7<-0
+    *ph = *pn; ph--; pn++; // 6<-1
+    *ph = *pn; ph--; pn++; // 5<-2
+    *ph = *pn; ph--; pn++; // 4<-3
+    *ph = *pn; ph--; pn++; // 3<-4
+    *ph = *pn; ph--; pn++; // 2<-5
+    *ph = *pn; ph--; pn++; // 1<-6
+    *ph = *pn;             // 0<-7
 }
 
+void NetDirect16(void* h, void* n)
+{
+    char* pn = (char*)n;
+    char* ph = (char*)h;
+    
+    *ph = *pn; ph++; pn++; // 0<-0
+    *ph = *pn;             // 1<-1
+}
+void NetDirect32(void* h, void* n)
+{    
+    char* pn = (char*)n;
+    char* ph = (char*)h;
+    
+    *ph = *pn; ph++; pn++; // 0<-0
+    *ph = *pn; ph++; pn++; // 1<-1
+    *ph = *pn; ph++; pn++; // 2<-2
+    *ph = *pn;             // 3<-3
+}
+void NetDirect64(void* h, void* n)
+{   
+    char* pn = (char*)n;
+    char* ph = (char*)h;
+    
+    *ph = *pn; ph++; pn++; // 0<-0
+    *ph = *pn; ph++; pn++; // 1<-1
+    *ph = *pn; ph++; pn++; // 2<-2
+    *ph = *pn; ph++; pn++; // 3<-3
+    *ph = *pn; ph++; pn++; // 4<-4
+    *ph = *pn; ph++; pn++; // 5<-5
+    *ph = *pn; ph++; pn++; // 6<-6
+    *ph = *pn;             // 7<-7
+}
 void NetInit(const char* name4, const char* name6)
 {   
     NetName4 = name4;