APG v2.2.0

This commit is contained in:
Adel I. Mirzazhanov
2003-07-28 16:26:03 +07:00
committed by skinc
parent 900ff5ea18
commit df3f864b46
33 changed files with 1655 additions and 386 deletions

29
bfconvert/Makefile Normal file
View File

@@ -0,0 +1,29 @@
##################################################################
# You can modify CC variable if you have compiler other than GCC
# But the code was designed and tested with GCC
CC = gcc
##################################################################
# Compilation flags
# You should comment the line below for AIX+native cc
FLAGS = -Wall
ECHO = echo
PROGNAME = bfconvert
SOURCES = bfconvert.c
all:
${CC} ${FLAGS} -o ${PROGNAME} ${SOURCES}
strip:
strip ${PROGNAME}
install:
@${ECHO} "**********************************************"
@${ECHO} "* This program shold be used to convert your *"
@${ECHO} "* filters once. So if you want to install *"
@${ECHO} "* this program you have to do it manualy :-) *"
@${ECHO} "**********************************************"
clean:
rm -f ${PROGNAME} *.o *core

24
bfconvert/README Normal file
View File

@@ -0,0 +1,24 @@
NAME
bfconvert
DESCRIPTION
Convert APG Bloom-filter version 1.0.1 to
version 1.1.0
BUILD
Just type `make' and hit [Enter] at the
command prompt.
USAGE
bfconvert old_bf_file_name new_bf_file_name
RETURN
0 - success
-1 - something wrong
NOTE
Converted filter will be case sensitive.
Conversion to the case insensitive filter
is impossible because of the bloom-filter
nature.

168
bfconvert/bfconvert.c Normal file
View File

@@ -0,0 +1,168 @@
/*
** Copyright (c) 2003
** Adel I. Mirzazhanov. All rights reserved
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1.Redistributions of source code must retain the above
** copyright notice, this list of conditions and the following
** disclaimer.
** 2.Redistributions in binary form must reproduce the above
** copyright notice, this list of conditions and the following
** disclaimer in the documentation and/or other materials
** provided with the distribution.
** 3.The name of the author may not be used to endorse or
** promote products derived from this software without
** specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
** OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
** ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
** GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
** WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
** NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
***************************************************************
** NAME : BFCONVERT **
** DESCRIPTION : convert APG Bloom-filter version 1.0.1 to **
** version 1.1.0 **
** USAGE : bfconvert old_bf_file_name new_bf_file_name **
** RETURN : 0 - success **
** -1 - something wrong **
***************************************************************
*/
#include <stdio.h>
#define OLD_APGBF_HEADER_LEN 12
#define OLD_APGBF_HEADER_ID "APGBF101"
#define NEW_APGBF_HEADER_LEN 13
#define NEW_APGBF_HEADER_ID "APGBF"
#define NEW_APGBF_HEADER_VER "110"
#define NEW_APGBF_HEADER_MODE 0x00
int main (int argc, char *argv[]);
int
main(int argc, char *argv[])
{
typedef unsigned char f_mode;
struct new_apg_bf_hdr {
char id[5]; /* filter ID */
char version[3]; /* filter version */
unsigned long int fs; /* filter size */
f_mode mode; /* filter flags */
};
struct old_apg_bf_hdr {
char id[8]; /* ID */
unsigned long int fs; /* filter size */
};
struct new_apg_bf_hdr new_bf_hdr;
struct old_apg_bf_hdr old_bf_hdr;
char old_etalon_bf_id[] = OLD_APGBF_HEADER_ID;
char new_etalon_bf_id[] = NEW_APGBF_HEADER_ID;
char new_etalon_bf_ver[] = NEW_APGBF_HEADER_VER;
FILE *old_f; /* old filter file descriptor */
FILE *new_f; /* new filter file descriptor */
unsigned char tmp_buf; /* Temporary buffer */
/* Checking arguments */
if (argc != 3)
{
printf ("Usage: bfconvert old_bf_file_name new_bf_file_name\n");
return(-1);
}
/* Opening input and output files */
if ((old_f = fopen (argv[1], "r")) == NULL)
{
perror("open the old bloom-filter file");
return(-1);
}
if ((new_f = fopen (argv[2], "w")) == NULL)
{
perror("open the new bloom-filter file");
return(-1);
}
if (fread ( (void *)&old_bf_hdr, OLD_APGBF_HEADER_LEN, 1, old_f) != 1)
if (ferror (old_f) != 0)
{
perror("read from the old bloom-filter file");
return(-1);
}
/* Checking input file */
if ((old_bf_hdr.id[0] != old_etalon_bf_id[0]) || (old_bf_hdr.id[1] != old_etalon_bf_id[1]) ||
(old_bf_hdr.id[2] != old_etalon_bf_id[2]) || (old_bf_hdr.id[3] != old_etalon_bf_id[3]) ||
(old_bf_hdr.id[4] != old_etalon_bf_id[4]) || (old_bf_hdr.id[5] != old_etalon_bf_id[5]) ||
(old_bf_hdr.id[6] != old_etalon_bf_id[6]) || (old_bf_hdr.id[7] != old_etalon_bf_id[7]) )
{
fprintf(stderr,"Input file is not APG bloom filter file v1.0.1\n");
fflush (stderr);
return (-1);
}
/* Constructing output BF file header */
new_bf_hdr.id[0] = new_etalon_bf_id[0];
new_bf_hdr.id[1] = new_etalon_bf_id[1];
new_bf_hdr.id[2] = new_etalon_bf_id[2];
new_bf_hdr.id[3] = new_etalon_bf_id[3];
new_bf_hdr.id[4] = new_etalon_bf_id[4];
new_bf_hdr.version[0] = new_etalon_bf_ver[0];
new_bf_hdr.version[1] = new_etalon_bf_ver[1];
new_bf_hdr.version[2] = new_etalon_bf_ver[2];
new_bf_hdr.fs = old_bf_hdr.fs;
new_bf_hdr.mode = NEW_APGBF_HEADER_MODE;
/* Writing new filter header to output file */
if (fwrite ( (void *)&new_bf_hdr, NEW_APGBF_HEADER_LEN, 1, new_f) != 1)
{
perror("write to the new bloom-filter file");
return(-1);
}
/* Reading filter content from the old BF file and writing it to the new BF file */
while (fread ( (void *)&tmp_buf, 1, 1, old_f) == 1)
{
if(fwrite( (void *)&tmp_buf, 1, 1, new_f) != 1)
{
perror("write to the new bloom-filter file");
return(-1);
}
}
if (ferror (old_f) != 0)
{
perror("read from the old bloom-filter file");
return(-1);
}
/* Close input and output files */
if (fclose(old_f) == EOF)
{
perror("close old bloom-filter file");
return(-1);
}
if (fclose(new_f) == EOF)
{
perror("close new bloom-filter file");
return(-1);
}
printf("\nInput file has been successfuly converted\n");
return(0);
}