diff --git a/coppino-main.ino b/coppino-main.ino index f058b40..e7c43e3 100644 --- a/coppino-main.ino +++ b/coppino-main.ino @@ -6,8 +6,7 @@ void setup() { pinMode(13, OUTPUT); Serial.begin(9600); - char addr[16] = { 0x20, 0x01, 0x04, 0x70, 0xc8, 0x44, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0xfe}; - coppino::address.deserialize(addr); + memcpy(&coppino::address, "\x20\x01\x04\x70\xc8\x44\x00\x31\x00\x00\x00\x00\x00\x00\xca\xfe", 16); } void loop() { @@ -27,7 +26,7 @@ void loop() { ip_packet.setNextHeader(17); // UDP - // slip::send(ip_packet.serialize(), 18 + 40); + // slip::send(&ip_packet, 18 + 40); // ?? coppino::handler(); diff --git a/coppino.ino b/coppino.ino index 11c2743..b473daa 100644 --- a/coppino.ino +++ b/coppino.ino @@ -9,8 +9,7 @@ namespace coppino { int r; while ((r = slip::recv(buffer, LEN)) != -1) { - ipv6::IPv6Packet packet; - packet.deserialize(buffer, r); + ipv6::IPv6Packet packet(buffer, r); packet.doAction(); } diff --git a/ipv6.h b/ipv6.h index 1369bff..c035a80 100644 --- a/ipv6.h +++ b/ipv6.h @@ -16,8 +16,6 @@ namespace ipv6 { public: IPv6Addr(); IPv6Addr(const char* address); - void deserialize(const char* address); - const char* serialize(); }; extern const IPv6Addr ALL_NODES_ADDRESS; @@ -35,14 +33,13 @@ namespace ipv6 { private: char packet[LEN]; public: + IPv6Packet(); + IPv6Packet(const char* buffer, int len); void setSrcAddress(IPv6Addr& address); void setDstAddress(IPv6Addr& address); void setNextHeader(uint8_t next_header); void setFlow(const char* flow); void setPayload(char* payload, int len); - - char* serialize(); - void deserialize(const char*, int len); void doAction(); }; diff --git a/ipv6.ino b/ipv6.ino index 2762ed0..26537cf 100644 --- a/ipv6.ino +++ b/ipv6.ino @@ -48,24 +48,16 @@ uint16_t compute_checksum(const char* src_addr, const char* dst_addr, uint8_t ne IPv6Addr::IPv6Addr() {;} IPv6Addr::IPv6Addr(const char* address) { - this->deserialize(address); -} - -void IPv6Addr::deserialize(const char* address) { memcpy(this->address, address, 16); } -const char* IPv6Addr::serialize() { - return this->address; -} - /******** IPv6Packet ********/ -char* IPv6Packet::serialize() { /* do we actually need these function? everything is already store in a tokenized/serialized form */ - return packet; +IPv6Packet::IPv6Packet() { + ; } -void IPv6Packet::deserialize(const char* buffer, int len) { - memcpy(packet, buffer, len); +IPv6Packet::IPv6Packet(const char* buffer, int len) { + memcpy(this->packet, buffer, len); } void IPv6Packet::setNextHeader(uint8_t next_header) { @@ -127,7 +119,7 @@ void handleICMP(const char* src_addr, const char* dst_addr, const char* flow, ch memset(packet + 2, 0, 2); /* zero-checksum */ uint16_t computed_checksum = compute_checksum(src_addr, dst_addr, NH_ICMP, packet, len); - //if (memcmp(&computed_checksum, received_checksum, 2) == 0) { /* if checksum is valid, then... */ + if (memcmp(&computed_checksum, received_checksum, 2) == 0) { /* if checksum is valid, then... */ /* Build an echo reply: * the reply has the same exact format of the request, * except for Type and Checksum */ @@ -148,7 +140,7 @@ void handleICMP(const char* src_addr, const char* dst_addr, const char* flow, ch reply_packet.setDstAddress(tmp_addr); reply_packet.setNextHeader(NH_ICMP); slip::send((void*)&reply_packet, 40 + len); - //} + } } return; }