removed serialize/deserialize methods
it's everything already stored as serialized, just to save memory (we only have 2k of memory)
This commit is contained in:
parent
fb79e3d371
commit
c07807fc86
@ -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();
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
7
ipv6.h
7
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,15 +33,14 @@ 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();
|
||||
};
|
||||
|
||||
|
20
ipv6.ino
20
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user