W5200(WIZ820io) network interface

Committer:
va009039
Date:
Thu Apr 19 11:14:43 2012 +0000
Revision:
2:a8df39b4f3aa
Parent:
0:61831b843b44

        

Who changed what in which revision?

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