5 #include "contiki-net.h" 
    9 decode(
const char *src, 
size_t srclen, 
char *dst, 
size_t dstlen, 
int is_form)
 
   13 #define HEXTOI(x)  (isdigit(x) ? x - '0' : x - 'W') 
   15   for (i = j = 0; i < srclen && j < dstlen - 1; i++, j++) {
 
   17         isxdigit(* (
unsigned char *) (src + i + 1)) &&
 
   18         isxdigit(* (
unsigned char *) (src + i + 2))) {
 
   19       a = tolower(* (
unsigned char *) (src + i + 1));
 
   20       b = tolower(* (
unsigned char *) (src + i + 2));
 
   21       dst[j] = ((HEXTOI(a) << 4) | HEXTOI(b)) & 0xff;
 
   23     } 
else if (is_form && src[i] == 
'+') {
 
   32   return ( i == srclen );
 
   37 get_variable(
const char *name, 
const char *buffer, 
size_t buflen, 
char* output, 
size_t output_len, 
int decode_type)
 
   39   const char  *start = 
NULL, *end = 
NULL, *end_of_value;
 
   45   var_len = strlen(name);
 
   46   end = buffer + buflen;
 
   48   for (start = buffer; start + var_len < end; start++){
 
   49     if ((start == buffer || start[-1] == 
'&') && start[var_len] == 
'=' &&
 
   50         ! strncmp(name, start, var_len)) {
 
   55       end_of_value = (
const char *) memchr(start, 
'&', end - start);
 
   56       if (end_of_value == 
NULL) {
 
   60       return decode(start, end_of_value - start, output, output_len, decode_type);
 
   68 read_int(uint8_t *buf, uint8_t size)
 
   72   if (size >= 1 && size <= 4) {
 
   73     uint8_t *p = (uint8_t *)&data;
 
   74     memcpy(p + 4 - size, buf, size);
 
   77   return uip_ntohl(data);
 
   82 write_int(uint8_t *buf, uint32_t data, uint8_t size)
 
   86   if (size >= 1 && size <= 4) {
 
   87     data = uip_htonl(data);
 
   88     memcpy(buf, ((
char*)(&data)) + 4 - size, size);
 
   96 write_variable_int(uint8_t *buf, uint32_t data)
 
  101   } 
else if (data <= 0xFFFF) {
 
  103   } 
else if (data <= 0xFFFFFF) {
 
  106   return write_int(buf, data, size);
 
  109 uint16_t log_2(uint16_t value)
 
  117   return result ? result - 1 : result;
 
#define NULL
The null pointer.