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.