fork WIZnetInterface

Dependents:   Weather_Forecast_Helloworld_WIZwiki-W750 Weather_Forecast_Helloworld_WIZwiki-W750 Weather_Forecast_Helloworld_WIZwiki-W750_test DHCPAddressAssignment ... more

Fork of WIZnetInterface by WIZnet

Committer:
Soohwan Kim
Date:
Mon Jun 15 11:18:37 2015 +0900
Revision:
0:6f28332c466f
initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Soohwan Kim 0:6f28332c466f 1 // dnsname.h 2013/8/27
Soohwan Kim 0:6f28332c466f 2 #pragma once
Soohwan Kim 0:6f28332c466f 3 //#include <string>
Soohwan Kim 0:6f28332c466f 4 #include "pico_string.h"
Soohwan Kim 0:6f28332c466f 5 class dnsname {
Soohwan Kim 0:6f28332c466f 6 public:
Soohwan Kim 0:6f28332c466f 7 uint8_t *buf;
Soohwan Kim 0:6f28332c466f 8 pico_string str;
Soohwan Kim 0:6f28332c466f 9 dnsname(uint8_t *s) {
Soohwan Kim 0:6f28332c466f 10 buf = s;
Soohwan Kim 0:6f28332c466f 11 }
Soohwan Kim 0:6f28332c466f 12 int decode(int pos) {
Soohwan Kim 0:6f28332c466f 13 while(1) {
Soohwan Kim 0:6f28332c466f 14 int len = buf[pos++];
Soohwan Kim 0:6f28332c466f 15 if (len == 0x00) {
Soohwan Kim 0:6f28332c466f 16 break;
Soohwan Kim 0:6f28332c466f 17 }
Soohwan Kim 0:6f28332c466f 18 if ((len&0xc0) == 0xc0) { //compress
Soohwan Kim 0:6f28332c466f 19 int offset = (len&0x3f)<<8|buf[pos];
Soohwan Kim 0:6f28332c466f 20 decode(offset);
Soohwan Kim 0:6f28332c466f 21 return pos+1;
Soohwan Kim 0:6f28332c466f 22 }
Soohwan Kim 0:6f28332c466f 23 if (!str.empty()) {
Soohwan Kim 0:6f28332c466f 24 str.append(".");
Soohwan Kim 0:6f28332c466f 25 }
Soohwan Kim 0:6f28332c466f 26 str.append((const char*)(buf+pos), len);
Soohwan Kim 0:6f28332c466f 27 pos += len;
Soohwan Kim 0:6f28332c466f 28 }
Soohwan Kim 0:6f28332c466f 29 return pos;
Soohwan Kim 0:6f28332c466f 30 }
Soohwan Kim 0:6f28332c466f 31
Soohwan Kim 0:6f28332c466f 32 int encode(int pos, char* s) {
Soohwan Kim 0:6f28332c466f 33 while(*s) {
Soohwan Kim 0:6f28332c466f 34 char *f = strchr(s, '.');
Soohwan Kim 0:6f28332c466f 35 if (f == NULL) {
Soohwan Kim 0:6f28332c466f 36 int len = strlen(s);
Soohwan Kim 0:6f28332c466f 37 buf[pos++] = len;
Soohwan Kim 0:6f28332c466f 38 memcpy(buf+pos, s, len);
Soohwan Kim 0:6f28332c466f 39 pos += len;
Soohwan Kim 0:6f28332c466f 40 break;
Soohwan Kim 0:6f28332c466f 41 }
Soohwan Kim 0:6f28332c466f 42 int len = f - s;
Soohwan Kim 0:6f28332c466f 43 buf[pos++] = len;
Soohwan Kim 0:6f28332c466f 44 memcpy(buf+pos, s, len);
Soohwan Kim 0:6f28332c466f 45 s = f+1;
Soohwan Kim 0:6f28332c466f 46 pos += len;
Soohwan Kim 0:6f28332c466f 47 }
Soohwan Kim 0:6f28332c466f 48 buf[pos++] = 0x00;
Soohwan Kim 0:6f28332c466f 49 return pos;
Soohwan Kim 0:6f28332c466f 50 }
Soohwan Kim 0:6f28332c466f 51 };
Soohwan Kim 0:6f28332c466f 52