6 changed files with 73 additions and 21 deletions
-
2.gitignore
-
5Makefile
-
37accel.c
-
36database.py
-
5database_schema.sql
-
9feed_dns.py
@ -0,0 +1,5 @@ |
|||
libaccel.so: accel.o |
|||
clang -shared -Wl,-soname,libaccel.so -o libaccel.so accel.o |
|||
|
|||
accel.o: accel.c |
|||
clang -c -fPIC -O3 accel.c -o accel.o |
@ -0,0 +1,37 @@ |
|||
#include <stdlib.h> |
|||
|
|||
int ip4_flat(char* value, wchar_t* flat) |
|||
{ |
|||
unsigned char value_index = 0; |
|||
unsigned char octet_index = 0; |
|||
unsigned char octet_value = 0; |
|||
char flat_index; |
|||
unsigned char value_chara; |
|||
do { |
|||
value_chara = value[value_index]; |
|||
if (value_chara >= '0' && value_chara <= '9') { |
|||
octet_value *= 10; |
|||
octet_value += value_chara - '0'; |
|||
} else if (value_chara == '.') { |
|||
for (flat_index = (octet_index+1)*8-1; flat_index >= octet_index*8; flat_index--) { |
|||
flat[flat_index] = '0' + (octet_value & 1); |
|||
octet_value >>= 1; |
|||
} |
|||
octet_index++; |
|||
octet_value = 0; |
|||
} else if (value_chara == '\0') { |
|||
if (octet_index != 3) { |
|||
return 1; |
|||
} |
|||
for (flat_index = 31; flat_index >= 24; flat_index--) { |
|||
flat[flat_index] = '0' + (octet_value & 1); |
|||
octet_value >>= 1; |
|||
} |
|||
return 0; |
|||
} else { |
|||
return 1; |
|||
} |
|||
value_index++; |
|||
} while (1); // This ugly thing save one comparison |
|||
return 1; |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue