Home
       hyperbitblock.c - hbb - hyperbitblock
  HTML git clone git://kroovy.de/hbb
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       hyperbitblock.c (1661B)
       ---
            1 #define _POSIX_SOURCE
            2 #include <signal.h>
            3 #include <stdint.h>
            4 #include <stdio.h>
            5 #include <stdlib.h>
            6 #include <string.h>
            7 #include <sys/mman.h>
            8 #include <sys/types.h>
            9 #include <sys/uio.h>
           10 #include <unistd.h>
           11 
           12 #include <ctype.h>
           13 #include <fcntl.h>
           14 
           15 int
           16 is_bit_set(unsigned value, unsigned bitindex)
           17 {
           18     return (value & (1 << bitindex)) != 0;
           19 }
           20 
           21 int
           22 str_to_ip(char *s, uint8_t *v4)
           23 {
           24     uint8_t oct=0;
           25     
           26     int i,j;
           27 
           28     j=0;
           29     for (i=0 ;s[i] != '\0'; i++) {
           30         if (s[i] == '.') {
           31             v4[j] = oct;
           32             oct = 0;
           33             j++;
           34 
           35         } else {
           36             oct *= 10;
           37             oct += (int)s[i] - '0';
           38         }
           39     }
           40     v4[j] = oct;
           41     
           42     return 0;
           43 }
           44 
           45 int
           46 main(void)
           47 {
           48     int fd;
           49     FILE* db;
           50     int i, res, ret=1;
           51     uint8_t v4[4] = {0,0,0,0};
           52     uint8_t* arr = malloc(4294967296);
           53     uint32_t i32 = 0;
           54 
           55     char c;
           56     char line[64];
           57 
           58     fd = open("mynamedpipe", O_RDWR);
           59     db = fopen("bit.db", "r");
           60 
           61     int cnt=0;
           62     while (ret > 0) {
           63         ret = fread(arr, 1024, 1, db);
           64     cnt++;
           65     }
           66 
           67     //set some values
           68     arr[1067179] = 255;
           69     arr[309791169] = 255;
           70     arr[3663462608] = 255;
           71 
           72 nextline:
           73     for (i=0; (res = read(fd, &c, 1)) > 0; i++) { //consider readline/getline
           74         line[i] = c;
           75         if (c == '\n') {
           76             line[i] = '\0';
           77             break;
           78         }
           79         c = '\0';
           80     }
           81     if (strncmp(line, "q", 1) == 0) {
           82         free(arr);
           83     return 0;
           84     }
           85 
           86     str_to_ip(line, v4);
           87     i32 = (v4[0] << 24) | (v4[1] << 16) | (v4[2] << 8) | v4[3];
           88     printf("%u.%u.%u.%u\t-->\t%u\t-->\t%u\n",v4[0],v4[1],v4[2],v4[3],i32,arr[i32]);
           89     goto nextline;
           90 
           91     close(fd);
           92     fclose(db);
           93 }