From: ahmad Date: Mon, 3 Dec 2018 00:19:57 +0000 (-0800) Subject: should work X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=ca797ac69e68d6ce3e8b4a39a39896c302bdff98;p=c11concurrency-benchmarks.git should work --- diff --git a/gdax-orderbook-hpp/demo/dependencies/libcds-2.3.2.tar.gz b/gdax-orderbook-hpp/demo/dependencies/libcds-2.3.2.tar.gz new file mode 100644 index 0000000..adbad83 Binary files /dev/null and b/gdax-orderbook-hpp/demo/dependencies/libcds-2.3.2.tar.gz differ diff --git a/gdax-orderbook-hpp/demo/dependencies/rapidjson-1.1.0.tar.gz b/gdax-orderbook-hpp/demo/dependencies/rapidjson-1.1.0.tar.gz new file mode 100644 index 0000000..eb129f3 Binary files /dev/null and b/gdax-orderbook-hpp/demo/dependencies/rapidjson-1.1.0.tar.gz differ diff --git a/gdax-orderbook-hpp/demo/dependencies/websocketpp-0.7.0.tar.gz b/gdax-orderbook-hpp/demo/dependencies/websocketpp-0.7.0.tar.gz new file mode 100644 index 0000000..91e7fb7 Binary files /dev/null and b/gdax-orderbook-hpp/demo/dependencies/websocketpp-0.7.0.tar.gz differ diff --git a/mabain/binaries/Makefile b/mabain/binaries/Makefile new file mode 100644 index 0000000..17714eb --- /dev/null +++ b/mabain/binaries/Makefile @@ -0,0 +1,17 @@ +CPP=g++ + +all: mbc + +CFLAGS = -I. -I../src -I../src/util -Wall -Werror -g -O3 -c -std=c++11 +LDFLAGS = -lpthread -lreadline -lncurses -L../src -lmabain + +mbc: mbc.cpp expr_parser.h expr_parser.cpp hexbin.h hexbin.cpp + $(CPP) $(CFLAGS) mbc.cpp + $(CPP) $(CFLAGS) expr_parser.cpp + $(CPP) $(CFLAGS) hexbin.cpp + $(CPP) mbc.o expr_parser.o hexbin.o -o mbc $(LDFLAGS) + +build: mbc + +clean: + -rm -f *.o mbc diff --git a/mabain/binaries/expr_parser.cpp b/mabain/binaries/expr_parser.cpp new file mode 100644 index 0000000..2fc6049 --- /dev/null +++ b/mabain/binaries/expr_parser.cpp @@ -0,0 +1,145 @@ +/** + * Copyright (C) 2017 Cisco Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// @author Changxue Deng + +#include +#include +#include +#include + +#include "expr_parser.h" +#include "hexbin.h" + +ExprParser::ExprParser(const std::string &exp) +{ + pos = 0; + expr = exp; + err_str = ""; +} + +ExprParser::~ExprParser() +{ +} + +int ExprParser::Evaluate(std::string &result) +{ + result = ""; + int rval = Parse(result); + if(rval < 0) + { + std::cout << err_str << "\n"; + } + else if(rval == 0 && pos < expr.length()) + { + std::cout << "extra string " + expr.substr(pos) + << " found at the end of expression\n"; + return -1; + } + + return rval; +} + +// Grammer: +// S ---> E +// E ---> bin( E ) +// E ---> hex( E ) +// E ---> T +// E ---> T + E (NOT IMPLEMENTED YET) +// T ---> literal string +// Sample expressions +// literal string: 'abcdefg' +// convert hex to binary: bin('0001ff01') +// convert hex to binary and back to hex: +// hex(bin('4da32feebf1611e7bd98c0b13cdb778c'))=='4da32feebf1611e7bd98c0b13cdb778c' +int ExprParser::Parse(std::string &result) +{ + if(pos >= expr.length()) + return 0; + + int rval; + switch(expr[pos]) + { + case 'b': + if(expr.find("in(", pos+1, 3) == std::string::npos) + { + err_str = "unrecognized expression " + expr.substr(pos); + return -1; + } + pos += 4; + rval = Parse(result); + if(rval < 0) + return rval; + if(expr[pos] != ')') + { + err_str = "missing ) at the end of " + expr.substr(0, pos); + return -1; + } + pos++; + rval = hex_2_bin(result.c_str(), result.length(), buffer, + EXPR_PARSER_BUFFER_SIZE); + if(rval < 0) + { + err_str = "failed to convert hex string " + result + " to binary format"; + return -1; + } + result = std::string((char *)buffer, rval); + break; + case 'h': + if(expr.find("ex(", pos+1, 3) == std::string::npos) + { + err_str = "unrecognized expression " + expr.substr(pos); + return -1; + } + pos += 4; + rval = Parse(result); + if(rval < 0) + return rval; + if(expr[pos] != ')') + { + err_str = "missing ) at the end of " + expr.substr(0, pos); + return -1; + } + pos++; + rval = bin_2_hex((const uint8_t *)result.data(), result.size(), + (char *)buffer, EXPR_PARSER_BUFFER_SIZE); + if(rval < 0) + { + err_str = "failed to convert binary string to hex"; + return -1; + } + result = std::string((char *)buffer, rval); + break; + case '\'': + { + size_t endp = expr.find('\'', pos+1); + if(endp == std::string::npos) + { + err_str = "expression " + expr.substr(0, pos) + " missing closing \'"; + return -1; + } + result = expr.substr(pos+1, endp-pos-1); + pos = endp + 1; + } + break; + default: + err_str = "unrecognized expression " + expr.substr(pos) + "\n"; + err_str += " ^"; + return -1; + } + + return 0; +} diff --git a/mabain/binaries/expr_parser.h b/mabain/binaries/expr_parser.h new file mode 100644 index 0000000..c80d495 --- /dev/null +++ b/mabain/binaries/expr_parser.h @@ -0,0 +1,42 @@ +/** + * Copyright (C) 2017 Cisco Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// @author Changxue Deng + +#ifndef __EXPR_PARSER_H__ +#define __EXPR_PARSER_H__ + +#include + +// A simple mabain client expression LL parser +class ExprParser +{ +public: + ExprParser(const std::string &expr); + ~ExprParser(); + int Evaluate(std::string &result); + +private: + int Parse(std::string &result); + + size_t pos; + std::string expr; +#define EXPR_PARSER_BUFFER_SIZE 1024 + uint8_t buffer[EXPR_PARSER_BUFFER_SIZE]; + std::string err_str; +}; + +#endif diff --git a/mabain/binaries/hexbin.cpp b/mabain/binaries/hexbin.cpp new file mode 100644 index 0000000..e737e4a --- /dev/null +++ b/mabain/binaries/hexbin.cpp @@ -0,0 +1,81 @@ +/** + * Copyright (C) 2017 Cisco Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// @author Changxue Deng + +#include + +#include "hexbin.h" + +int bin_2_hex(const uint8_t *data, int len, char *buff, int buf_size) +{ + if(buf_size < 2*len+1) return -1; + for(int i = 0; i < len; i++) + { + sprintf(buff + 2*i, "%02x", data[i]); + } + len *= 2; + buff[len] = '\0'; + return len; +} + +static inline int hex_to_half_byte(char hex) +{ + switch(hex) + { + case '0': return 0; + case '1': return 1; + case '2': return 2; + case '3': return 3; + case '4': return 4; + case '5': return 5; + case '6': return 6; + case '7': return 7; + case '8': return 8; + case '9': return 9; + case 'a': + case 'A': return 10; + case 'b': + case 'B': return 11; + case 'c': + case 'C': return 12; + case 'd': + case 'D': return 13; + case 'e': + case 'E': return 14; + case 'f': + case 'F': return 15; + default: return -1; + } +} + +int hex_2_bin(const char *data, int len, uint8_t *buff, int buf_size) +{ + if(len % 2 != 0) return -1; + len = len/2; + if(buf_size < len) return -1; + + char high_byte, low_byte; + for(int i = 0; i < len; i++) + { + high_byte = hex_to_half_byte(data[2*i]); + low_byte = hex_to_half_byte(data[2*i + 1]); + if(high_byte < 0 || low_byte < 0) return -1; + buff[i] = (high_byte << 4) + low_byte; + } + + return len; +} diff --git a/mabain/binaries/hexbin.h b/mabain/binaries/hexbin.h new file mode 100644 index 0000000..cb8d99a --- /dev/null +++ b/mabain/binaries/hexbin.h @@ -0,0 +1,27 @@ +/** + * Copyright (C) 2017 Cisco Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// @author Changxue Deng + +#ifndef __HEXBIN_H__ +#define __HEXBIN_H__ + +#include + +int bin_2_hex(const uint8_t *data, int len, char *buff, int buf_size); +int hex_2_bin(const char *data, int len, uint8_t *buff, int buf_size); + +#endif diff --git a/mabain/binaries/mbc.cpp b/mabain/binaries/mbc.cpp new file mode 100644 index 0000000..70099c9 --- /dev/null +++ b/mabain/binaries/mbc.cpp @@ -0,0 +1,676 @@ +/** + * Copyright (C) 2017 Cisco Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +// @author Changxue Deng + +// A mabain command-line client + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "db.h" +#include "mb_data.h" +#include "dict.h" +#include "error.h" +#include "version.h" + +#include "hexbin.h" +#include "expr_parser.h" + +using namespace mabain; + +enum mbc_command { + COMMAND_NONE = 0, + COMMAND_QUIT = 1, + COMMAND_UNKNOWN = 2, + COMMAND_STATS = 3, + COMMAND_FIND = 4, + COMMAND_FIND_ALL = 5, + COMMAND_INSERT = 6, + COMMAND_REPLACE = 7, + COMMAND_DELETE = 8, + COMMAND_DELETE_ALL = 9, + COMMAND_HELP = 10, + COMMAND_RESET_N_WRITER = 11, + COMMAND_RESET_N_READER = 12, + COMMAND_FIND_LPREFIX = 13, + COMMAND_PRINT_HEADER = 14, + COMMAND_FIND_HEX = 15, + COMMAND_FIND_LPREFIX_HEX = 16, + COMMAND_RECLAIM_RESOURCES = 17, + COMMAND_PARSING_ERROR = 18, +}; + +volatile bool quit_mbc = false; +static void HandleSignal(int sig) +{ + switch(sig) + { + case SIGSEGV: + std::cerr << "process segfault\n"; + abort(); + case SIGTERM: + case SIGINT: + case SIGQUIT: + case SIGHUP: + case SIGPIPE: + quit_mbc = true; + case SIGUSR1: + case SIGUSR2: + break; + } +} + +static void usage(const char *prog) +{ + std::cout << "Usage: " << prog << " -d mabain-directory [-im index-memcap] [-dm data-memcap] [-w] [-e query] [-s script-file]\n"; + std::cout <<"\t-d mabain databse directory\n"; + std::cout <<"\t-im index memcap\n"; + std::cout <<"\t-dm data memcap\n"; + std::cout <<"\t-w running in writer mode\n"; + std::cout <<"\t-e run query on command line\n"; + std::cout <<"\t-s run queries in a file\n"; + exit(1); +} + +static void show_help() +{ + std::cout << "\tfind(\"key\")\t\tsearch entry by key\n"; + std::cout << "\tfindPrefix(\"key\")\tsearch entry by key using longest prefix match\n"; + std::cout << "\tfindAll\t\t\tlist all entries\n"; + std::cout << "\tinsert(\"key\":\"value\")\tinsert a key-value pair\n"; + std::cout << "\treplace(\"key\":\"value\")\treplace a key-value pair\n"; + std::cout << "\tdelete(\"key\")\t\tdelete entry by key\n"; + std::cout << "\tdeleteAll\t\tdelete all entries\n"; + std::cout << "\tshow\t\t\tshow database statistics\n"; + std::cout << "\thelp\t\t\tshow helps\n"; + std::cout << "\tquit\t\t\tquit mabain client\n"; + std::cout << "\tdecWriterCount\t\tClear writer count in shared memory header\n"; + std::cout << "\tdecReaderCount\t\tdecrement reader count in shared memory header\n"; + std::cout << "\tprintHeader\t\tPrint shared memory header\n"; + std::cout << "\treclaimResources\tReclaim deleted resources\n"; +} + +static void trim_spaces(const char *cmd, std::string &cmd_trim) +{ + cmd_trim.clear(); + + int quotation = 0; + const char *p = cmd; + while(*p != '\0') + { + if(*p == '\'' || *p == '\"') + { + cmd_trim.append(1, '\''); + quotation ^= 1; + } + else if(!isspace(*p) || quotation) + { + cmd_trim.append(1, *p); + } + + p++; + } +} + +static bool check_hex_output(std::string &cmd) +{ + size_t pos = cmd.rfind(".hex()"); + if(pos == std::string::npos) + return false; + if(pos == cmd.length()-6) + { + cmd.erase(pos); + return true; + } + + return false; +} + +static int parse_key_value_pair(const std::string &kv_str, + std::string &key, + std::string &value) +{ + // search for ':' that separates key and value pair + // currently this utility does not support quotation in + // quotation, e.g, "abc\"def" as key or value. + size_t pos = 0; + int quotation_cnt = 0; + for(size_t i = 0; i < kv_str.length(); i++) + { + if(kv_str[i] == '\'') + { + quotation_cnt++; + } + else if(kv_str[i] == ':') + { + // do not count the ':' in the key or value string. + if(quotation_cnt % 2 == 0) + { + pos = i; + break; + } + } + } + + if(pos == 0) + return -1; + + ExprParser expr_key(kv_str.substr(0, pos)); + if(expr_key.Evaluate(key) < 0) + return -1; + + ExprParser expr_value(kv_str.substr(pos+1)); + if(expr_value.Evaluate(value) < 0) + return -1; + + return 0; +} + +static int parse_command(std::string &cmd, + std::string &key, + std::string &value) +{ + std::string yes; + bool hex_output = false; + + key = ""; + value = ""; + switch(cmd[0]) + { + case 'q': + if(cmd.compare("quit") == 0) + return COMMAND_QUIT; + break; + case 's': + if(cmd.compare("show") == 0) + return COMMAND_STATS; + break; + case 'f': + hex_output = check_hex_output(cmd); + if(cmd.compare(0, 5, "find(") == 0) + { + if(cmd[cmd.length()-1] != ')') + return COMMAND_UNKNOWN; + ExprParser expr(cmd.substr(5, cmd.length()-6)); + if(expr.Evaluate(key) < 0) + return COMMAND_PARSING_ERROR; + if(hex_output) + return COMMAND_FIND_HEX; + return COMMAND_FIND; + } + else if(cmd.compare(0, 11, "findPrefix(") == 0) + { + if(cmd[cmd.length()-1] != ')') + return COMMAND_UNKNOWN; + ExprParser expr(cmd.substr(11, cmd.length()-12)); + if(expr.Evaluate(key) < 0) + return COMMAND_PARSING_ERROR; + if(hex_output) + return COMMAND_FIND_LPREFIX_HEX; + return COMMAND_FIND_LPREFIX; + } + else if(cmd.compare("findAll") == 0) + return COMMAND_FIND_ALL; + break; + case 'd': + if(cmd.compare(0, 7, "delete(") == 0) + { + if(cmd[cmd.length()-1] != ')') + return COMMAND_UNKNOWN; + ExprParser expr(cmd.substr(7, cmd.length()-8)); + if(expr.Evaluate(key) < 0) + return COMMAND_PARSING_ERROR; + return COMMAND_DELETE; + } + else if(cmd.compare("deleteAll") == 0) + { + std::cout << "Do you want to delete all entries? Press \'Y\' to continue: "; + std::string del_all; + std::getline(std::cin, del_all); + if(del_all.length() == 0 || del_all[0] != 'Y') + return COMMAND_NONE; + return COMMAND_DELETE_ALL; + } + else if(cmd.compare("decReaderCount") == 0) + { + std::cout << "Do you want to decrement number of reader? Press \'y\' to continue: "; + std::getline(std::cin, yes); + if(yes.length() > 0 && yes[0] == 'y') + return COMMAND_RESET_N_READER; + return COMMAND_NONE; + } + else if(cmd.compare("decWriterCount") == 0) + { + std::cout << "Do you want to decrement number of writer? Press \'y\' to continue: "; + std::getline(std::cin, yes); + if(yes.length() > 0 && yes[0] == 'y') + return COMMAND_RESET_N_WRITER; + return COMMAND_NONE; + } + break; + case 'i': + if(cmd.compare(0, 7, "insert(") == 0) + { + if(cmd[cmd.length()-1] != ')') + return COMMAND_UNKNOWN; + if(parse_key_value_pair(cmd.substr(7, cmd.length()-8), key, value) < 0) + return COMMAND_PARSING_ERROR; + return COMMAND_INSERT; + } + break; + case 'r': + if(cmd.compare(0, 8, "replace(") == 0) + { + if(cmd[cmd.length()-1] != ')') + return COMMAND_UNKNOWN; + if(parse_key_value_pair(cmd.substr(8, cmd.length()-9), key, value) < 0) + return COMMAND_PARSING_ERROR; + return COMMAND_REPLACE; + } + else if(cmd.compare("reclaimResources") == 0) + return COMMAND_RECLAIM_RESOURCES; + else + return COMMAND_UNKNOWN; + break; + case 'h': + if(cmd.compare("help") == 0) + return COMMAND_HELP; + break; + case 'p': + if(cmd.compare("printHeader") == 0) + return COMMAND_PRINT_HEADER; + break; + default: + break; + } + + return COMMAND_UNKNOWN; +} + +#define ENTRY_PER_PAGE 20 +static void display_all_kvs(DB *db) +{ + if(db == NULL) + return; + + int count = 0; + for(DB::iterator iter = db->begin(); iter != db->end(); ++iter) + { + count++; + std::cout << iter.key << ": " << + std::string((char *)iter.value.buff, iter.value.data_len) << "\n"; + if(count % ENTRY_PER_PAGE == 0) + { + std::string show_more; + std::cout << "Press \'y\' for displaying more: "; + std::getline(std::cin, show_more); + if(show_more.length() == 0 || show_more[0] != 'y') + break; + } + } +} + +static void display_output(const MBData &mbd, bool hex_output, bool prefix) +{ + if(prefix) + std::cout << "key length matched: " << mbd.match_len << "\n"; + if(hex_output) + { + char hex_buff[256]; + int len = mbd.data_len; + if(256 < 2*len + 1) + { + std::cout << "display the first 127 bytes\n"; + len = 127; + } + if(bin_2_hex((const uint8_t *)mbd.buff, len, hex_buff, 256) < 0) + std::cout << "failed to convert binary to hex\n"; + else + std::cout << hex_buff << "\n"; + } + else + { + std::cout << std::string((char *)mbd.buff, mbd.data_len) << "\n"; + } +} + +static int RunCommand(int mode, DB *db, int cmd_id, const std::string &key, const std::string &value) +{ + int rval = MBError::SUCCESS; + bool overwrite = false; + bool hex_output = false; + MBData mbd; + + switch(cmd_id) + { + case COMMAND_NONE: + // no opertation needed + break; + case COMMAND_QUIT: + std::cout << "bye\n"; + quit_mbc = true; + break; + case COMMAND_FIND_HEX: + hex_output = true; + case COMMAND_FIND: + rval = db->Find(key, mbd); + if(rval == MBError::SUCCESS) + display_output(mbd, hex_output, false); + else + std::cout << MBError::get_error_str(rval) << "\n"; + break; + case COMMAND_FIND_LPREFIX_HEX: + hex_output = true; + case COMMAND_FIND_LPREFIX: + rval = db->FindLongestPrefix(key, mbd); + if(rval == MBError::SUCCESS) + display_output(mbd, hex_output, true); + else + std::cout << MBError::get_error_str(rval) << "\n"; + break; + case COMMAND_DELETE: + if(mode & CONSTS::ACCESS_MODE_WRITER) + { + rval = db->Remove(key); + std::cout << MBError::get_error_str(rval) << "\n"; + } + else + std::cout << "permission not allowed\n"; + break; + case COMMAND_REPLACE: + overwrite = true; + case COMMAND_INSERT: + if(mode & CONSTS::ACCESS_MODE_WRITER) + { + rval = db->Add(key, value, overwrite); + std::cout << MBError::get_error_str(rval) << "\n"; + } + else + std::cout << "permission not allowed\n"; + break; + case COMMAND_STATS: + db->PrintStats(); + break; + case COMMAND_HELP: + show_help(); + break; + case COMMAND_DELETE_ALL: + if(mode & CONSTS::ACCESS_MODE_WRITER) + { + rval = db->RemoveAll(); + std::cout << MBError::get_error_str(rval) << "\n"; + } + else + std::cout << "permission not allowed\n"; + break; + case COMMAND_FIND_ALL: + display_all_kvs(db); + break; + case COMMAND_RESET_N_WRITER: + if(mode & CONSTS::ACCESS_MODE_WRITER) + std::cout << "writer is running, cannot reset writer counter\n"; + else + db->UpdateNumHandlers(CONSTS::ACCESS_MODE_WRITER, -1); + break; + case COMMAND_RESET_N_READER: + db->UpdateNumHandlers(CONSTS::ACCESS_MODE_READER, -1); + break; + case COMMAND_PRINT_HEADER: + db->PrintHeader(); + break; + case COMMAND_RECLAIM_RESOURCES: + if(mode & CONSTS::ACCESS_MODE_WRITER) + db->CollectResource(1, 1); + else + std::cout << "writer is not running, can not perform grabage collection" << std::endl; + break; + case COMMAND_PARSING_ERROR: + break; + case COMMAND_UNKNOWN: + default: + std::cout << "unknown query\n"; + break; + } + + return rval; +} + +static void mbclient(DB *db, int mode) +{ + rl_bind_key('\t', rl_complete); + + printf("mabain %d.%d.%d shell\n", version[0], version[1], version[2]); + std::cout << "database directory: " << db->GetDBDir() << "\n"; + + int cmd_id; + std::string key; + std::string value; + std::string cmd; + + while(true) + { + char* line = readline(">> "); + if(line == NULL) break; + if(line[0] == '\0') + { + free(line); + continue; + } + + trim_spaces(line, cmd); + add_history(line); + free(line); + cmd_id = parse_command(cmd, key, value); + + RunCommand(mode, db, cmd_id, key, value); + + if(quit_mbc) break; + } +} + +static void run_query_command(DB *db, int mode, const std::string &command_str) +{ + std::string cmd; + int cmd_id; + std::string key; + std::string value; + + trim_spaces(command_str.c_str(), cmd); + if(cmd.length() == 0) + { + std::cerr << command_str << " not a valid command\n"; + return; + } + + cmd_id = parse_command(cmd, key, value); + RunCommand(mode, db, cmd_id, key, value); +} + +static void run_script(DB *db, int mode, const std::string &script_file) +{ + std::ifstream script_in(script_file); + if(!script_in.is_open()) { + std::cerr << "cannot open file " << script_file << "\n"; + return; + } + + std::string line; + int cmd_id; + std::string key; + std::string value; + std::string cmd; + + while(getline(script_in, line)) + { + trim_spaces(line.c_str(), cmd); + if(cmd.length() == 0) + { + std::cerr << line << " not a valid query\n"; + continue; + } + + cmd_id = parse_command(cmd, key, value); + std::cout << cmd << ": "; + RunCommand(mode, db, cmd_id, key, value); + + if(quit_mbc) break; + } + script_in.close(); +} + +int main(int argc, char *argv[]) +{ + sigset_t mask; + + signal(SIGINT, HandleSignal); + signal(SIGTERM, HandleSignal); + signal(SIGQUIT, HandleSignal); + signal(SIGPIPE, HandleSignal); + signal(SIGHUP, HandleSignal); + signal(SIGSEGV, HandleSignal); + signal(SIGUSR1, HandleSignal); + signal(SIGUSR2, HandleSignal); + + sigemptyset(&mask); + sigaddset(&mask, SIGTERM); + sigaddset(&mask, SIGQUIT); + sigaddset(&mask, SIGINT); + sigaddset(&mask, SIGPIPE); + sigaddset(&mask, SIGHUP); + sigaddset(&mask, SIGSEGV); + sigaddset(&mask, SIGUSR1); + sigaddset(&mask, SIGUSR2); + pthread_sigmask(SIG_SETMASK, &mask, NULL); + + sigemptyset(&mask); + pthread_sigmask(SIG_SETMASK, &mask, NULL); + + int64_t memcap_i = 1024*1024LL; + int64_t memcap_d = 1024*1024LL; + const char *db_dir = NULL; + int mode = 0; + std::string query_cmd = ""; + std::string script_file = ""; + int64_t index_blk_size = 64LL*1024*1024; + int64_t data_blk_size = 64LL*1024*1024; + int64_t lru_bucket_size = 1000; + + for(int i = 1; i < argc; i++) + { + if(strcmp(argv[i], "-d") == 0) + { + if(++i >= argc) + usage(argv[0]); + db_dir = argv[i]; + } + else if(strcmp(argv[i], "-im") == 0) + { + if(++i >= argc) + usage(argv[0]); + memcap_i = atoi(argv[i]); + } + else if(strcmp(argv[i], "-dm") == 0) + { + if(++i >= argc) + usage(argv[0]); + memcap_d = atoi(argv[i]); + } + else if(strcmp(argv[i], "-w") == 0) + { + mode |= CONSTS::ACCESS_MODE_WRITER; + } + else if(strcmp(argv[i], "-e") == 0) + { + if(++i >= argc) + usage(argv[0]); + query_cmd = argv[i]; + } + else if(strcmp(argv[i], "-s") == 0) + { + if(++i >= argc) + usage(argv[0]); + script_file = argv[i]; + } + else if(strcmp(argv[i], "--lru-bucket-size") == 0) + { + if(++i >= argc) + usage(argv[0]); + lru_bucket_size = atoi(argv[i]); + } + else if(strcmp(argv[i], "--index-block-size") == 0) + { + if(++i >= argc) + usage(argv[0]); + index_blk_size = atoi(argv[i]); + } + else if(strcmp(argv[i], "--data-block-size") == 0) + { + if(++i >= argc) + usage(argv[0]); + data_blk_size = atoi(argv[i]); + } + else + usage(argv[0]); + } + + if(db_dir == NULL) + usage(argv[0]); + + MBConfig mbconf; + memset(&mbconf, 0, sizeof(mbconf)); + mbconf.mbdir = db_dir; + mbconf.options = mode; + mbconf.memcap_index = memcap_i; + mbconf.memcap_data = memcap_d; + mbconf.block_size_index = index_blk_size; + mbconf.block_size_data = data_blk_size; + mbconf.num_entry_per_bucket = lru_bucket_size; + DB *db = new DB(mbconf); + if(!db->is_open()) + { + std::cout << db->StatusStr() << "\n"; + exit(1); + } + + // DB::SetLogFile("/var/tmp/mabain.log"); + // DB::LogDebug(); + + if(query_cmd.length() != 0) + { + run_query_command(db, mode, query_cmd); + } + else if(script_file.length() != 0) + { + run_script(db, mode, script_file); + } + else + { + mbclient(db, mode); + } + + db->Close(); + // DB::CloseLogFile(); + delete db; + return 0; +} diff --git a/mabain/src/test/key_list_3 b/mabain/src/test/key_list_3 new file mode 100644 index 0000000..c32fced --- /dev/null +++ b/mabain/src/test/key_list_3 @@ -0,0 +1,1000 @@ +com.VcAdhtqdgW/oLTG9vJZ +google.com/analytics +google.com/imghp +google.com/buzz +google.com/news +google.com/talk +google.com/apps +google.com/chrome +google.com/Top/Adult +google.com/intl/en/ads +google.com/intl/en/help/faq_translation.html +google.com/images +google.com/Top/World/Deutsch/Spiele/Brett-_und_Tischspiele/Kartenspiele/Poker +google.com/intl/ja +google.com/Top/World/Deutsch/Online-Shops/Computer/Spiele +google.com/translate_p +google.com/translate_t +google.com/contact/spamreport.html +google.com/intl/en/help +google.com/language_tools +google.com/health +google.com/hws/dell-inc/afe +google.com/finance +google.com/intl/en +google.com/mail +google.com +google.com/url +google.com/intl +google.com/voice +google.com/intl/zh-TW +google.com/ig +google.com/search +google.com/intl/es +facebook.com/pages/Hustletown-USA/The-Hustletown-Chronicle/244761903326 +facebook.com/pages/Osama-Shot-Down-Video/128655053878408 +facebook.com/pages/Brave-New-Foundation/48691586830 +facebook.com/pages/ineo/215689711935 +facebook.com/myfoodlovers +facebook.com +facebook.com/KnowItAll +facebook.com/Hatchlings.LGP +facebook.com/pages/Lil-Green-Patch +facebook.com/careers +facebook.com/pages/KickassClassicalcom +facebook.com/pages/Osama-is-dead-watch-the-Video-below/182039455179797 +facebook.com/mindjolt +facebook.com/wikileaks +facebook.com/video +facebook.com/fishworld +facebook.com/monsterworld +facebook.com/login.php +facebook.com/pages/Sex-hikayeleri/197453986950203 +facebook.com/apps +facebook.com/pages/Money +facebook.com/connect/uiserver.php +facebook.com/pages/Osama-Bin-Laden-Dead-Video/159067474156934 +youtube.com/GoogleDevelopers +youtube.com +youtube.com/user/rkellysextape1 +youtube.com/watch +youtube.com/opposide +youtube.com/watchihr-zFzBqo +youtube.com/profile_videos +youtube.com/proactivecomm +youtube.com/index +youtube.com/verify_age +yahoo.com/r/m2 +yahoo.com/sports +yahoo.com/image +yahoo.com +yahoo.com/video +yahoo.com/shopping +live.com +static.ak.fbcdn.net +wikipedia.org/wiki/Sexual_health_clinic +wikipedia.org +baidu.com/index.html +baidu.com +blogger.com/start +blogger.com +msn.com +qq.com +twitter.com/KimKardashian11 +twitter.com/KendraWilkinso1 +twitter.com/rasche1401 +twitter.com/KatieHolmesNud +twitter.com/perahta985 +twitter.com/weishaupt917 +twitter.com/reinke341 +twitter.com/wachsmann1541 +128.242.240.20 +128.242.245.20 +twitter.com +twitter.com/zastrow994 +twitter.com/trautwein9975 +twitter.com/fitz1677 +twitter.com/DeniseRichardsK +twitter.com/BritneySpearse +twitter.com/MileyCyrusnud +twitter.com/knab190 +twitter.com/Shakira_nude +twitter.com/steenbab +twitter.com/LilKimUncensord +twitter.com/BritneySpears11 +twitter.com/KateWinsletNude +twitter.com/carmenelectrapn +twitter.com/gustave12 +twitter.com/scheid1265 +twitter.com/ordella509 +twitter.com/jobs +twitter.com/JenniferLovew +twitter.com/verina1238 +twitter.com/downloads +twitter.com/falkner425 +twitter.com/PamelaAnderson0 +twitter.com/gamble_winning +twitter.com/LindsayLohanee +twitter.com/LindsayLohannn +168.143.162.36 +twitter.com/opel1409 +twitter.com/lysa380 +twitter.com/weinhold344 +twitter.com/schlecht1581 +twitter.com/britneyspearst +twitter.com/AnnaFarisNnude +twitter.com/CHristinaRicciN +twitter.com/carmenelectrasx +twitter.com/kimkardashian3 +twitter.com/adulttrishstrat +124.83.139.192 +203.216.227.176 +yahoo.co.jp +google.co.in +taobao.com/home/error2.php +taobao.com +taobao.com/index.php +taobao.com/info +taobao.com/university +google.de +google.de/search +google.com.hk +wordpress.com/zevk +72.233.104.124 +74.200.247.60 +wordpress.com/tag/anal +76.74.254.126 +wordpress.com +amazon.com/exec/obidos/tg/browse/-/3023481/ref=tab_m_gw_l +amazon.com/b +amazon.com/gp/sign-in.html/104-2529875-5942324 +amazon.com/dvd +amazon.com/books-used-books-textbooks/b/104-1942702-2157560 +amazon.com/Sims-Online-Game-Time-Card/dp/B00006CRVG +amazon.com/American-Military-Patch-Guide-Force-Marine/dp/1884452329 +amazon.com/s/103-0082455-2158222 +amazon.com +amazon.com/Barrons-Military-Careers-Donald-Hutton/dp/0764104896 +amazon.com/S3-AWS-home-page-Money +amazon.com/s.html/102-2323371-1345742 +amazon.com/Fugitive-Game-Online-Kevin-Mitnick/dp/0316528692 +amazon.com/exec/obidos/tg/browse/-/408310/sr=53-1/qid=1155809905/ref=tr_52741 +amazon.com/exec/obidos/tg/browse/-/577394/103-8906703-1799821 +amazon.com/exec/obidos/tg/sim-explorer/explore-artists/-/artist-name/music/Hedberg, Mitch/104-0925646-4260729 +amazon.com/b/ref=sc_fe_c_0_14248821_4/102-8963016-5264938 +amazon.com/gp/product/0976726904/qid=1097359582/sr=2-1/ref=pd_ka_2_1/002-9285128-9965644 +amazon.com/gp/sign-in.html +amazon.com/2005-Online-Shopping-Directory-Dummies/dp/0764574957 +amazon.com/Mechanical-Turk-AWS-home-page +amazon.com/Simple-Queue-Service-home-page +amazon.com/refr_ss_null/102-7504955-2659335 +amazon.com/My-Favorite-Roleplaying-Games/lm/21P7OMKQAU0DW +amazon.com/gp/browse.html/103-0612920-1453449 +amazon.com/s.html/002-4151026-7240030 +amazon.com/s.html/104-2205730-4045512 +amazon.com/aws +amazon.com/AWS-home-page-Money/b/ref=sc_fe_l_1/102-8963016-5264938 +amazon.com/Dark-Sourcebook-Star-Roleplaying-Game/dp/0786918497 +amazon.com/exec/obidos/ASIN/b0001h0a8o/domainsherloc-20/b0001h0a8o +amazon.com/gp/homepage.html/102-2323371-1345742 +amazon.com/exec/obidos/tg/browse/-/577394/104-2456764-4185545 +amazon.com/exec/obidos/ASIN/1556228686//steendam1-20 +amazon.com/exec/obidos/subst/home/home.html +amazon.com/gp/explorer/0976726904/2/ref=pd_lpo_ase/002-5655700-1876011 +amazon.com/My-Favorite-Roleplaying-Games/lm/21...[FoundonGoogle]28.htm +amazon.com/exec/obidos/tg/browse/-/3023481/ref=tab_m_gw_l/104-2456764-4185545 +amazon.com/b/ref=sc_fe_l_2/102-8963016-5264938 +amazon.com/E-Commerce-Service-AWS-home-page +amazon.com/b5FencodingTF8&node28013&tagoolshopcom&linkCoder2&camp789&creative325 +amazon.com/gp +amazon.com/exec/obidos/tg/browse/-/1040024/104-2456764-4185545 +amazon.com/gp/homepage.html/002-3020495-6312822 +amazon.com/My-Favorite-Roleplaying-Games/lm/21...[FoundonGoogle]42.htm +amazon.com/gp/browse.html +72.21.214.128 +amazon.com/Michael-Moorcooks-Stormbringer-Roleplaying-Game/dp/1568821522 +202.108.33.60 +sina.com.cn +google.co.uk +microsoft.com/japan/office/project/prodinfo/default.mspx +microsoft.com/japan/sharepoint/groupboard/default.mspx +microsoft.com/france/office/Access/prodinfo +microsoft.com/spain/empresas/guias/usabilidad/home.mspx +microsoft.com/latam/technet/info/news/art01 +microsoft.com/france/powerpoint +microsoft.com/france/trucform/default.asp +microsoft.com/latam/technet/articulos/200001/art07 +microsoft.com/library/errorpages/smarterror.aspx +microsoft.com/latam/windows/default.asp +microsoft.com/japan/office/frontpage/prodinfo/default.mspx +microsoft.com/france/formezvous/default.asp +microsoft.com/japan/msdn/vbasic +microsoft.com/latam/juegos/pandora +microsoft.com/australia +microsoft.com/XBOX +microsoft.com/germany/windows/products/windowsxp/default.mspx +microsoft.com/latam/office +microsoft.com/france/jeux/listexbox.asp +microsoft.com/technet/prodtechnol/isa/default.mspx +microsoft.com/presspass/features/1998/12-7ecom.mspx +microsoft.com/latam/technet/articulos/200007/art12 +microsoft.com/france/publisher +microsoft.com/japan/office/word/prodinfo/default.mspx +microsoft.com/pt/pt/default.aspx +microsoft.com/latam/technet/techinfo/intranet/default.asp +microsoft.com/mac/products/remote-desktop/default.mspx +microsoft.com/games/PC/combatfs3.aspx +microsoft.com/games/crimsonskies +microsoft.com +microsoft.com/isapi/redir.dll +microsoft.com/spain/defaultns.asp +microsoft.com/encarta/jp +microsoft.com/japan/sql/default.mspx +microsoft.com/cze +microsoft.com/latam/juegos/golf2001 +microsoft.com/smallbusiness/online/services-transition.mspx +microsoft.com/japan/technet/default.mspx +microsoft.com/games/Xbox/default.aspx +microsoft.com/security +microsoft.com/japan/enable/default.mspx +microsoft.com/brasil/windows/default.mspx +microsoft.com/italy/windows/products/winfamily/ie/default.mspx +microsoft.com/france/jeux/combatfs +microsoft.com/poland/windowsxp/mediacenter/default.mspx +microsoft.com/billgates/columns/1998essay/3-25col.aspx +microsoft.com/windows/embedded/eval/default.mspx +microsoft.com/japan/office/outlook/prodinfo/default.mspx +microsoft.com/en +microsoft.com/communities +microsoft.com/france/jeux/fs2000 +microsoft.com/presspass/default.mspx +microsoft.com/latam/applicationcenter/downloads/sp1.asp +microsoft.com/latam/technet/articulos/200102/art02/default.asp +microsoft.com/windows/desktopsearch/default.mspx +microsoft.com/japan/office/powerpoint/prodinfo/default.mspx +microsoft.com/spain/windows/ie/default.mspx +microsoft.com/windows/products/winfamily/windowshomeserver/connect.mspx +microsoft.com/japan/mac/officex/powerpoint +microsoft.com/japan/office/access/prodinfo/default.mspx +microsoft.com/technet/security/bulletin/notify.mspx +microsoft.com/latam/juegos/age2 +microsoft.com/products/info/default.aspx +microsoft.com/france/mappoint/default.mspx +microsoft.com/spain +microsoft.com/canada/windows/shop/default.mspx +microsoft.com/en/us/default.aspx +microsoft.com/japan/mac/officex/word +microsoft.com/iag +microsoft.com/mexico/404.asp +microsoft.com/germany/windows/downloads/ie/getitnow.mspx +microsoft.com/downloads +microsoft.com/france/jeux/motocross2 +microsoft.com/portugal +microsoft.com/latam/juegos/Age +microsoft.com/turkiye +microsoft.com/france/jeux/combatfs2 +microsoft.com/windowsxp/default.mspx +microsoft.com/Spain/technet/comunidad/articulos/2010.htm +microsoft.com/brasil +microsoft.com/downloads/Browse.aspx +microsoft.com/latam/juegos/flight +microsoft.com/careers +microsoft.com/france/404.htm +microsoft.com/windows/windowsmedia/default.mspx +microsoft.com/windows/ie/ie6/downloads/default.mspx +microsoft.com/poland +microsoft.com/technet/isa/default.mspx +microsoft.com/windows/using/windowsvista/tipsandtricks/default.mspx +microsoft.com/japan/msdn/vcsharp +microsoft.com/en/us +microsoft.com/isaserver/default.mspx +microsoft.com/france/word +microsoft.com/downloads/release.asp +microsoft.com/genuine/downloads/notepurchaselink.aspx +microsoft.com/silverlight/install.aspx +microsoft.com/IntlKB/Spain/E268/8/91.ASP +microsoft.com/Spain/technet/comunidad/articulos/2009.htm +microsoft.com/france/jeux/midtown2 +microsoft.com/japan/office/powerpoint/producer/prodinfo/default.mspx +microsoft.com/downloads/details.aspx +microsoft.com/windows/products/windowsvista/default.mspx +microsoft.com/germany/express/download/default.aspx +microsoft.com/latam/visualc +microsoft.com/japan/office/visio/prodinfo/default.mspx +microsoft.com/canada/home/planningandorganizing/2.6.9_takeyourgiftlistonline.aspx +microsoft.com/latam/juegos/nba +microsoft.com/Games/mechcommander2/default_go.asp +microsoft.com/japan/Office/default.mspx +microsoft.com/france/jeux/midtown +microsoft.com/japan/msdn/xml/default.asp +microsoft.com/latam/juegos/futbol +microsoft.com/windowsxp/using/games/learnmore/mmo.htm +microsoft.com/games/riseofnations/downloads.asp +microsoft.com/games +microsoft.com/latam/juegos/ls2000 +microsoft.com/spain/support/backoffice/nt/winntp.asp +microsoft.com/japan/msdn/visualc +microsoft.com/security/default.mspx +microsoft.com/latam/technet +microsoft.com/office/visio/networkcenter/jpn/default.mspx +microsoft.com/france/office/excel/prodinfo +microsoft.com/canada/home/familyandfun/2.1.49_gameonplayagainstonlineopponents.aspx +microsoft.com/latam/technet/productos/windows/windows2000/default.mspx +microsoft.com/latam/juegos/madness +microsoft.com/fr/fr/default.aspx +microsoft.com/japan/hagakistudio/default.mspx +microsoft.com/germany/windows/default.mspx +microsoft.com/latam/juegos/fs2000 +microsoft.com/games/dungeonsiege/5a.asp +microsoft.com/latam/technet/win98/default.asp +microsoft.com/latam/windowsme +microsoft.com/smallbusiness/hub.mspx +microsoft.com/France/jeux +microsoft.com/mexico +microsoft.com/germany/office/project/leistungsmerkmale/default.mspx +microsoft.com/latam/juegos/conquerors +microsoft.com/france/entrepreneur +microsoft.com/canada/windows/default.mspx +microsoft.com/korea/games +microsoft.com/finland/default.mspx +microsoft.com/japan/mac/officex +microsoft.com/japan/windowsxp/using/windowsmessenger/default.asp +microsoft.com/spain/windows/millennium/default.asp +microsoft.com/windows/default.mspx +microsoft.com/spain/support/windows/winmep.asp +microsoft.com/spain/support/win2000/win2000p.asp +microsoft.com/japan/mac/products/outlook +microsoft.com/spain/support/windows/win98p.asp +microsoft.com/latam/windows2000/server/evaluacion/noticias/boletines/sp2.asp +microsoft.com/france/office/frontpage/prodinfo +microsoft.com/streets/gps.mspx +microsoft.com/germany/isaserver/default.mspx +microsoft.com/Latam/windows95/default.asp +microsoft.com/japan/mac/products/oe +microsoft.com/hk +microsoft.com/korea/windows +microsoft.com/france/core/404.mspx +microsoft.com/japan/athome/security/default.mspx +microsoft.com/japan/exchange/default.mspx +microsoft.com/windows/windowsmedia/es/default.aspx +microsoft.com/windows/ie/ie6/using/securityandprivacy/default.mspx +microsoft.com/exchange/services/default.mspx +microsoft.com/japan/windowsxp/using/windowsmessenger +microsoft.com/japan/users/tips/powerpoint +microsoft.com/spain/juegos/ageofmythology/home.asp +microsoft.com/spain/windowsxp/default.mspx +microsoft.com/latam/juegos/motocross2 +microsoft.com/japan/office/excel/prodinfo/default.mspx +microsoft.com/latam/windowsxp +microsoft.com/piracy/Resources +microsoft.com/japan/mac/officex/excel +google.fr +myspace.com/agonyhill +myspace.com/kendall24 +myspace.com/shakerecords +myspace.com/thefight +myspace.com/kingfreedomman +myspace.com/winklemusic +myspace.com/flashlightbrown +myspace.com/deadartistsyndrome +myspace.com/ghostwhisperer +myspace.com/fuckfx +myspace.com/macmc +myspace.com/chateaumarmont +myspace.com/addictedrock +myspace.com/bexymartin +myspace.com/torymasonxxx +myspace.com/roozmusic +myspace.com/gregcannon +myspace.com/nothingrock +myspace.com/gbedu +63.135.80.49 +myspace.com/index.cfm +myspace.com/skater_12345 +myspace.com/thestampedingmachinestour +myspace.com/4cuartos +myspace.com/toxicpopnyc +myspace.com/thebandlucid +myspace.com/locknloadevents +myspace.com/thehessian +myspace.com/realdealhustle +myspace.com/primalage +myspace.com/novastaremi +myspace.com/healthyliving2day +myspace.com/photographybycj +myspace.com/pivotisagoodboy +myspace.com/geometrix +myspace.com/amyfarrismusic +myspace.com/shishapipe +myspace.com/afunkybeat +myspace.com/pierceband1 +myspace.com/aenimatoolcoverband +myspace.com/riccardobrush +myspace.com/kolpa +myspace.com/lyonmusic +myspace.com/francescosullo +myspace.com/vicegripthrottle +myspace.com/villebillies +myspace.com/iannnnnn +myspace.com/scrappygurlee +myspace.com/140410 +myspace.com/lil_hodge +myspace.com/virtualgeo +myspace.com/djebar +myspace.com/MK_Armageddon +myspace.com/burningheartsburlesque +myspace.com/daytripperrrr +myspace.com/calvinrichardson +myspace.com/seizethemoment +myspace.com/corbancreek +myspace.com/burnthecities +myspace.com/yakuza +myspace.com/djonline +myspace.com/nae_sde +myspace.com/slunt +myspace.com/rock939 +myspace.com/madtracker +myspace.com/cdoassfagersta +myspace.com/thewarriors +myspace.com/cubacrew +myspace.com/trippcore +myspace.com/andpress +myspace.com/concerttickets +myspace.com/freesonstudio +myspace.com/picturemeclubbing +myspace.com/realitytvconvention +myspace.com/theunionbar +myspace.com/truthuniversal +myspace.com/arestotheninth +myspace.com/adinahoward +myspace.com/twintanks +myspace.com/bluchip +myspace.com/intimatesaucergirl +myspace.com/dilanarox +myspace.com/wutanglatino +myspace.com/home/willyoucare +myspace.com/viperose +myspace.com/dixonmatthews +myspace.com/notrinity +myspace.com/glassepl +myspace.com/kellybrockmusic +myspace.com/gjfunkmusic +myspace.com/therealjin +myspace.com/dr_ken +myspace.com/underpressurerocks +myspace.com/totallylostit +myspace.com/primadonna +myspace.com/cr2records +myspace.com/officialpendulum +myspace.com/ritual_art_tattoo +myspace.com +myspace.com/theo +myspace.com/u989 +myspace.com/lacandelacanada +myspace.com/sierraswan +myspace.com/lovebitesmusicspace +windows.com +myspace.com/angelssensualsocialclub +myspace.com/thevenusguns +myspace.com/sundomingo +myspace.com/hurricaneanniemusic +myspace.com/blue_mike +myspace.com/mothmanohio +myspace.com/mentake +myspace.com/pleadthe5thproductions +myspace.com/waterhouserecords +myspace.com/playalyztic +myspace.com/theviolets +bing.com/reference +bing.com/community/blogs/webmaster +bing.com/maps +bing.com/videos +bing.com/community/blogs/travel +bing.com/travel +bing.com/games +bing.com/local +bing.com/shopping +bing.com/video +bing.com/community +bing.com/toolbox +bing.com/images +bing.com/news +bing.com/shop +bing.com +bing.com/search +ebay.com +yandex.ru +yandex.ru/schoolsearch +yandex.ru/yandsearch +87.250.250.11 +google.co.jp +linkedin.com/in/jennifergarnernude1 +linkedin.com/in/minimesextape +linkedin.com/jobs +linkedin.com/in/freejennifertoasteetoofsex +linkedin.com/in/carmencocks1 +linkedin.com/pub/anneliese-van-der-pol-nude/14/150/371 +linkedin.com/pub/dir/shakira/nude +linkedin.com/in/keeleyhazellsextape +linkedin.com/pub/dir/olsen twins/camel toe +linkedin.com/in/aishwaryaraiwearingnothing +linkedin.com/in/jenniferlopezdesnuda +linkedin.com/in/mondelore +linkedin.com/in/mariahcareynude1 +linkedin.com/in/isprinceharrygay +linkedin.com/in/carmenelectrasex1 +linkedin.com/in/angelinajolienaked1 +linkedin.com/pub/dir/denise richards/naked +linkedin.com/pub/dir/disney's raven +linkedin.com/in/emmawatsonkissingsomeone +linkedin.com/in/halleberrysexscene +linkedin.com/in/katehudsonnude +linkedin.com/directory/jobs +linkedin.com/in/nudetubee +linkedin.com/in/jenniferanistonnude +linkedin.com/pub/dir/emma watson/porn +linkedin.com/in/aliciamachadodesnuda +linkedin.com/in/parishiltonsextapeq +linkedin.com/in/britneyspearssextapeq +linkedin.com/pub/dir/tila tequila/sex +linkedin.com/in/carmenelectra +linkedin.com/pub/dir/kate mara/naked +linkedin.com/in/vernetroyersextape +linkedin.com/in/lindsaylohansex1 +linkedin.com/in/carmenelectranaked1 +linkedin.com/in/adriennebailonnudephotos +linkedin.com +linkedin.com/in/jennifermorrisonnude1 +linkedin.com/in/nudepics2 +linkedin.com/in/adriennebailonnaked +linkedin.com/in/freenudecelebrities1 +linkedin.com/in/nudephotos1 +linkedin.com/e/mv4bh9-ggo389m5-s/isd/1923193846/AZ406oUM/EML-invg_59 +linkedin.com/in/trishstratusnude +linkedin.com/pub/free-nude-celebs/14/6b/65b +linkedin.com/in/ravensymonebreast +linkedin.com/pub/dir/leighton meester/nude +linkedin.com/pub/dir/emma watson/wearing +linkedin.com/in/lindsaylohansextape1 +linkedin.com/pub/dir/olsen twins/nudity +linkedin.com/pub/disney-s-raven-symone-nude/14/150/604 +linkedin.com/in/nudecelebrities1 +linkedin.com/in/olsentwinsnude +linkedin.com/hiring +linkedin.com/pub/dir/jennifer aniston/sex scene +linkedin.com/pub/nude-art/14/6b/6a +linkedin.com/pub/dir/tila tequila/porn +linkedin.com/in/jenniferanistonbangs1 +linkedin.com/in/keiraknightleynude +linkedin.com/in/christinaaguileradirrty1 +linkedin.com/in/vanessahudgensnude +linkedin.com/pub/jennifer-love-hewitt/13/ab6/396 +linkedin.com/pub/dir/ellen degeneres/gay +linkedin.com/in/carmenelectrasexscene1 +linkedin.com/in/hilaryduffnude2 +google.com.br +163.com +mail.ru +flickr.com/photos/maryami +flickr.com/photos/glenneroo +flickr.com/photos/genosfear +flickr.com/photos/matthamilton +flickr.com/photos/lowelisboa +flickr.com/photos/68945978@N00 +flickr.com/photos/tags +flickr.com/photos/hainsworth +flickr.com/photos/acid +flickr.com/photos/81074972@N00 +flickr.com/photos/hereandnow +flickr.com +flickr.com/photos/koganuts +flickr.com/photos/annettes +fc2.com +craigslist.org/ers +craigslist.org +google.it +98.142.98.80 +conduit.com +rapidshare.com/files/262414747/PC_protect2.exe +rapidshare.com/files/174279263/orkut_fake_kanoor.rar +rapidshare.com +shiki-kin.com +rapidshare.com/files/433860916/LS-Magazine-LS-Models-Issue-16-lsm-set.01.rar +vkontakte.ru/id122531457 +vkontakte.ru/photos91312199 +vkontakte.ru/id94033115 +vkontakte.ru/id94292517 +vkontakte.ru/id82145469 +vkontakte.ru/id108735554 +vkontakte.ru/photos133344035 +vkontakte.ru +vkontakte.ru/id134990765 +vkontakte.ru/id112043304 +vkontakte.ru/id61003935 +vkontakte.ru/photo86288043_168151072 +vkontakte.ru/id128090653 +vkontakte.ru/id123995726 +vkontakte.ru/id76171013 +vkontakte.ru/photos116888097 +merriam-webster.com +google.es +soso.com +soso.com/q +bbc.co.uk/sports +bbc.co.uk/celebdaq +bbc.co.uk/iplayer +bbc.co.uk/religion/religions/islam +bbc.co.uk/cbeebies/teletubbies/funandgames/animalsounds/index.shtml +bbc.co.uk/skillswise +bbc.co.uk/bbcfour/cinema/features/kon-ichikawa.shtml +bbc.co.uk/webwise/askbruce +bbc.co.uk/religion/religions/islam/history/safavidempire_1.shtml +bbc.co.uk/food/recipes/database/ovenbakedsweetmisoma_73596.shtml +bbc.co.uk/urdu +bbc.co.uk/radio4/science +bbc.co.uk/blogs +bbc.co.uk/radio4/hitchhikers/game_nolan.shtml +bbc.co.uk/dna/h2g2/A1152983 +bbc.co.uk/china +bbc.co.uk/sport +bbc.co.uk/radio4/hitchhikers +bbc.co.uk/religion/religions/islam/history/mughalempire_1.shtml +bbc.co.uk/history/historic_figures/cranmer_thomas.shtml +bbc.co.uk/radio4/hitchhikers/game.shtml +bbc.co.uk/religion/religions/islam/history/uk_1.shtml +bbc.co.uk/worldservice +bbc.co.uk/tamil +bbc.co.uk/worldservice/index.shtml +bbc.co.uk/weather/world/country_guides/results.shtml +bbc.co.uk/go/dragonsden/ext/ide1/-/http://203.187.230.42/.~/ws/SignIn.htm +bbc.co.uk/religion/religions/christianity/holydays +bbc.co.uk/go/dragonsden +bbc.co.uk/schools +bbc.co.uk/cgi-bin/worldservice/psims/ScheduleSDT.cgi +bbc.co.uk/films/2000/10/26/maggie_cheung_inthemoodforlove_261000_interview.shtml +bbc.co.uk/go/dragonsden/ext/ide1/- +bbc.co.uk/pressoffice/pressreleases/stories/2002/10_october/10/omar_sharif_pyramid.shtml +bbc.co.uk/religion/religions/hinduism/index.shtml +bbc.co.uk/somali/index.shtml +bbc.co.uk/spanish/especiales/humanrights +bbc.co.uk/films/2000/10/31/richard_attenborough_article.shtml +bbc.co.uk/opensource +bbc.co.uk/dna/h2g2/alabaster/A246980 +bbc.co.uk/eastenders/games +bbc.co.uk/worldservice/africa/features/storyofafrica/index_section7.shtml +bbc.co.uk +bbc.co.uk/weather +bbc.co.uk/go/dragonsden/ext/ide1 +bbc.co.uk/religion/religions/islam/history/china_1.shtml +bbc.co.uk/go/dragonsden/ext +bbc.co.uk/radio4/science/soundoflife.shtml +bbc.co.uk/fivelive +imdb.com/name/nm0374423/bio +imdb.com +imdb.com/title/tt0283701 +imdb.com/name/nm0001041 +imdb.com/name/nm0374423 +imdb.com/name/nm0000118 +imdb.com/name/nm0001008 +imdb.com/name/nm0003593 +imdb.com/name/nm0006191 +imdb.com/name/nm0297906 +imdb.com/name/nm0437819 +imdb.com/title/tt0080310 +imdb.com/name/nm0005033 +imdb.com/name/nm0581093 +imdb.com/name/nm0000235 +imdb.com/name/nm0156484 +imdb.com/name/nm0000109 +imdb.com/title/tt0454919 +imdb.com/title/tt0159251 +imdb.com/name/nm0685472 +imdb.com/name/nm0000653 +imdb.com/name/nm0000659 +imdb.com/name/nm0828838 +imdb.com/name/nm0005406 +imdb.com/title/tt0070917 +imdb.com/name/nm0000308 +imdb.com/name/nm0001725 +imdb.com/name/nm0521872 +imdb.com/name/nm0000071 +imdb.com/name/nm0025483 +imdb.com/name/nm0000115 +imdb.com/name/nm0000314 +imdb.com/sections/games +imdb.com/title/tt0319262 +imdb.com/name/nm0559381 +imdb.com/name/nm0001127 +imdb.com/name/nm0576127 +imdb.com/title/tt0772174 +imdb.com/name/nm0001023 +imdb.com/Sections/Languages/Japanese +imdb.com/title/tt0103850 +imdb.com/name/nm0155562 +imdb.com/name/nm0680795 +imdb.com/name/nm0803238 +imdb.com/name/nm0005002 +imdb.com/name/nm0843775 +imdb.com/name/nm0000229 +imdb.com/name/nm0085312 +imdb.com/name/nm0000347 +googleusercontent.com +doubleclick.com +d-real.com +go.com +livejasmin.com +aol.com +aol.com/moreptr +aol.com/morefilein +aol.com/mail +aol.com/redir.adp +danadinhos.com +youku.com +bp.blogspot.com +google.com.mx +apple.com/es +apple.com/dotmac +apple.com/itunes +apple.com/jp +apple.com/fr/webobjects +apple.com/remotedesktop +apple.com/trailers +apple.com/dotmac/storage.html +apple.com/es/macosx +apple.com/downloads/macosx/games/role_strategy/cosmicencounteronline.html +apple.com/education/powerschool +apple.com/trailers/fox/dayaftertomorrow +apple.com/jobs/us/index.html +apple.com/itunes/store +apple.com/es/safari +apple.com/quicktime/win.html +dedesomantri.com +apple.com/jp/quicktime/player/win.html +apple.com +apple.com/quicktime/download/win.html +apple.com/jp/ipod +apple.com/de/itunes/download +apple.com/de/quicktime/download +apple.com/games +apple.com/es/ipod +69.55.59.132 +69.55.52.105 +xvideos.com +69.55.59.148 +69.55.48.246 +69.55.51.106 +69.55.52.86 +69.55.52.200 +146.82.203.230 +146.82.200.125 +146.82.203.242 +146.82.202.179 +146.82.202.180 +146.82.203.228 +146.82.204.113 +146.82.204.17 +146.82.204.35 +pornhub.com +sohu.com +orkut.com.br +fudosan-toushi.com +google.ca/search +google.ca +ask.com +ask.com/news +ask.com/web +ask.com/Latin-Chat +ask.com/# +ask.com/bar +ask.com/deals +ask.com/image +ask.com/video +ask.com/pictures +cnn.com/WORLD/europe/9908/31/moscow.blast.08/index.html +cnn.com/video +cnn.com/WORLD/europe/9810/13/giant.scrabble +cnn.com/WORLD/europe/9908/31/moscow.blast.07/index.html +cnn.com/SPECIALS +cnn.com/TECH/science/9812/03/t_t/shopping.online/index.html +cnn.com/TECH/computing/9806/18/email.overload.idg/index.html +cnn.com/travel +cnn.com/TECH/computing/9806/23/cheap.spam.idg/index.html +cnn.com/TECH/science/9811/26/t_t/doctor.on.call/next.week.html +cnn.com/2000/TECH/computing/05/05/open.source.smugglers.idg/index.html +cnn.com/2003/TECH/internet/12/12/sprj.hs03.gifts.online/index.html +cnn.com/HEALTH +cnn.com/US/9508/Labor_Day +cnn.com/WORLD/europe/9908/31/moscow.blast.03/index.html +cnn.com/SHOWBIZ +cnn.com/TECH/computing/9807/14/junk.email.02 +cnn.com/TECH/computing/9910/21/cybershopping.t_t/index.html +cnn.com/2005/LAW/06/24/ramasastry.website.prices +cnn.com/sport +cnn.com/SHOWBIZ/Movies/9907/07/isaac.hayes/index.html +cnn.com/WORLD/europe/9908/31/moscow.blast.06/index.html +cnn.com/2000/US/09/11/kids.tobacco.addiction +cnn.com/SHOWBIZ/TV/9911/17/obit.bergman.poss/index.html +cnn.com/sports +cnn.com/SHOWBIZ/9604/06/inherit.wind/index.html +cnn.com/WEATHER +cnn.com/video/netshow +cnn.com/TECH/computing/9806/30/diy.spam.idg/index.html +cnn.com/WORLD/europe/9908/31/moscow.blast.01/index.html +cnn.com/WORLD/europe/9908/31/moscow.blast.02/index.html +cnn.com +cnn.com/SPECIALS/2003/iraq/forces/weapons/index.html +cnn.com/espanol +cnn.com/TECH/computing/9903/24/mall.idg/index.html +cnn.com/WORLD/9511/okinawa/index.html +cnn.com/2003/TECH/internet/08/03/wikipedia +cnn.com/SPECIALS/1998/sinatra +google.ru +photobucket.com +youporn.com +adobe.com/products/flex +adobe.com/nl +adobe.com/products/acrobat +adobe.com/enterprise/accelio_jetform_notice.html +162.115.225.90 +adobe.com/fr/products/fireworks +adobe.com/cfusion/event/index.cfm +adobe.com/digitalimag/photoshop_services.html +adobe.com/kr +adobe.com/devnet/dreamweaver/articles/build_shopping_cart_pt3.html +adobe.com/no +adobe.com/products/photoshop/index.html +adobe.com/fr/products/photoshop +adobe.com/ie +adobe.com/devnet/security/security_zone/notification_service.html +adobe.com/dk +adobe.com/products/acrobat/main.html +adobe.com/au +adobe.com/tw +adobe.com/products/acrobat/readstep2.html +adobe.com/epaper/ebooks/ebookmall/index.html +adobe.com/za +adobe.com/de/products/flashplayer +adobe.com/de +adobe.com/es +adobe.com/devnet/dreamweaver/articles/build_shopping_cart_pt2.html +adobe.com/support/security +adobe.com/br +adobe.com/shockwave/download/download.cgi +adobe.com +adobe.com/in +137.188.96.90 +adobe.com/shockwave/download/index.cgi +adobe.com/fr +adobe.com/es/products/coldfusion +adobe.com/fr/products/tips +adobe.com/aboutadobe/careeropp/college/internships.html +vzw.com +162.115.32.90 +mediafire.com +205.196.120.8 +orkut.com +orkut.com/formularios/administradores +orkut.com/formularios +orkut.com/GLogin.aspx +orkut.com/formularios/administradores/orkut_admin_formulario.htm=20 +javapropertindo.com +about.com/careers +about.com/travel +about.com +about.com/shopping +tudou.com +221.12.89.120 +tudou.com/index.html +ebay.de/online +ebay.de +kagayaki-hills.jp +88.208.24.43 +88.208.24.44 +88.208.24.45 +88.208.24.47 +xhamster.com +xhamster.com/movies/644840/young_teen_fuck.html +espn.go.com +espn.go.com/nfl/columns/pasquarelli_len/1564103.html +espn.go.com/free-online-games +espn.go.com/mlb/profiles/profile/5650.html +68.71.210.70 +4shared.com/account/file/JICg20kf/The_big_bad_wolf.html +4shared.com +4shared.com/file/N0CqbMyz/Habbo_Moedas_Generator.html +files.wordpress.com +yahoo.net +google.co.id +ameblo.jp/r-nice +ameblo.jp/terumame +ameblo.jp/kataoka +ameblo.jp/nyan-evolution +ameblo.jp/latteco +ameblo.jp/kamada-yuya +ameblo.jp +ameblo.jp/kenken9 +ameblo.jp/f-hideo +ameblo.jp/papa0529 +ameblo.jp/gindama +ameblo.jp/meshi +ameblo.jp/ryumachi +ameblo.jp/indigo55 +ameblo.jp/tomizawaeri +ameblo.jp/photoem +ameblo.jp/tansaibouseibutsu +rakuten.co.jp/uzumasa +rakuten.co.jp/fande +rakuten.co.jp/asanoya +rakuten.co.jp/ccrepo +rakuten.co.jp/jewelclimb +rakuten.co.jp/yachiyoglass +rakuten.co.jp/benq +rakuten.co.jp/tokyouniform +rakuten.co.jp/amb +rakuten.co.jp/tmf +rakuten.co.jp/rack-kan +rakuten.co.jp/j-kotobuki +rakuten.co.jp/copo +rakuten.co.jp/lemocolo +rakuten.co.jp/nibac +rakuten.co.jp/uchigo +rakuten.co.jp/atomic-cycle +rakuten.co.jp/dousan +rakuten.co.jp/nkl +rakuten.co.jp/blessyou +rakuten.co.jp/hakuga +rakuten.co.jp/ninja +rakuten.co.jp/omsoc +rakuten.co.jp/nail-yasan +rakuten.co.jp/siletto +rakuten.co.jp/j-sugiyama +rakuten.co.jp/nagi +rakuten.co.jp/witdenmark +rakuten.co.jp/vivochica +rakuten.co.jp/magwater +rakuten.co.jp/diva-shop +rakuten.co.jp/denkyu +rakuten.co.jp/amigos +rakuten.co.jp/to-get-her +rakuten.co.jp/hakusen +rakuten.co.jp/mitsuba +rakuten.co.jp/volleyball +rakuten.co.jp/hokkori +rakuten.co.jp/deradera +rakuten.co.jp/bluehigh +rakuten.co.jp/bunza +rakuten.co.jp/tskagu +rakuten.co.jp/kawamoto +rakuten.co.jp/gps +rakuten.co.jp/kiriyasan +rakuten.co.jp/rosemadame +rakuten.co.jp/bali-indah +rakuten.co.jp/hukuya +rakuten.co.jp/fukusumi +rakuten.co.jp/office-world +rakuten.co.jp/olvo +rakuten.co.jp/mikazuki +rakuten.co.jp/touhoukoueki +rakuten.co.jp/k-zoy +rakuten.co.jp/itohkyuemon +rakuten.co.jp/kaban-club +rakuten.co.jp/aluk +rakuten.co.jp/e-cycleparts/kaiso.html +rakuten.co.jp/dankan +rakuten.co.jp/georges2 +rakuten.co.jp/omochaya +rakuten.co.jp +rakuten.co.jp/goodsman +rakuten.co.jp/yacon +rakuten.co.jp/e-hanafusa +rakuten.co.jp/clickcare +rakuten.co.jp/angeldew +rakuten.co.jp/yumelistshop +rakuten.co.jp/natural +rakuten.co.jp/925m +rakuten.co.jp/zeal +rakuten.co.jp/taurus +rakuten.co.jp/nagashio +rakuten.co.jp/ms +rakuten.co.jp/allora +rakuten.co.jp/onosun