Server structure (cute_server; should be renamed) created,
together with basic functions: create(), destroy(), start().
Added create() and destroy() functions for Name Server module.
Module Zone Parser:
One API function + test implementation of zone parsing (uses
the test file format).
Minor changes to dns-simple library API (would need further
changes).
Name Server is used for answering queries relayed by the Socket
Manager (Network) module.
The ns_nameserver structure is rather simple now, but will be
expanded in the future.
Changed some API parameters to const. Should consider the const-
-ness of parameters more thoroughly.
Lightweight module holding only an array of pointers to RRs and
with basic operations: create, destroy, add, find and
destructor for using in the overlying data structure.
Implemented functions
zdb_create()
zdb_create_zone()
zdb_find_zone()
zdb_remove_zone()
zdb_insert_name()
zdb_find_name()
zdb_destroy()
Removed the useless zds_node structure.
Added some other functions for working with dnss_dname_wire:
copy, compare, destroy.
Zone database - Now dummy module, no functions implemented yet.
Later will group all zone data structures, and provide high-
level API for the other server modules.
Zone data structure - Only wrapper around hash table functions.
Should provide transparent API for Zone database, disregarding
the underlying data structure.
Zone node - data structure to hold all information associated with
a domain name.
Consider renaming this structure later.
Used in Zone data structure and through its zds_node structure
in the rest of the server modules.
The use of zds_node structure needs revision, maybe useless.
New (now dummy) types for domain name (dnss_dname) and wire format
of the domain name (dnss_dname_wire). Both typedef'ed to char *.
Convenience methods to get string from dname and to get length of
a dname. Will be changed later, when the types change.
Minor changes (comment style changed).
An actual (working) development version should be always in this
branch.
For subtasks, new branches will be created. For now all the old
files are here, although this is actually a subtask. Later,
we will remove all the old code from this branch and move it to
some other branch.
The master branch should be used for working or stable versions.
Added .gitignore file.
Created basic directory structure for the project and changed
Makefile accordingly.
Added QtCreator project files (CuteDNS.*).
ck_check_used2() renamed to ck_check_used() as the previous
function of this name was of no use.
Added ck_check_used_twice() which checks if some position was used
twice druing a rehash - only after using a position twice can we
assume that an infinite loop occured
(can we or is it only a heuristic?)
Rehashing probably working in a basic setup and with no locks.
(Need to add: item locks, using both hashing functions in
lookup function, switching the generation after half the table
is rehashed, etc.)
This was not a feasible way to lock the items
- there was no way to atomically acquire the lock and save
the information to the structure.
Consider using some totally diffrent technique - copy-on-write,
RCU, etc.
Bugfix: assumed the first free place is after all locks.
Now using counter to keep tracks of threads waiting for lock.
STILL NOT FUNCTIONAL! (not tested, but the idea is wrong)
Bugfixes in ck_hash_item().
Completed ck_rehash() (rehashing of items from 2nd table).
No locks are used for rehashing yet.
Bug not fixed: detection of infinite loop in hashing is not correct.
Added structure irwl_table which holds table of locks (type
irwl_lock) of arbitrary items identified by a pointer.
Implemented read locking, write locking, unlocking, creation
and destruction of the structure.
Implementation uses mutex associated with the table to prevent
race conditions while locking/unlocking.
Function main() moved to new file main.c.
Bitset test moved to new files test.[ch].
Tests related to cuckoo table remain in cuckoo-test.[ch].
Removed rwlocks from ck_hash_table (will be replaced by standalone
item lock implementation).
Buffer was not used (wrong check).
Item which caused error in insertion (infinite loop while buffer
full) was being deleted in the test function even though it
may have been inserted into the table. (This was causing the
invalid pointer error.)
Simplified ck_insert_item().
A lot of macros in cuckoo-hash-table.c replaced by constants and
static inline functions.
Some debug output added.
dns-simple: RDATA is now allocated separately, not together with
RR.
There is some bug, probably in hash table insertion, resulting
in "Invalid pointer" error when destroying certain item in hash
table.
Added "generation" to hash table items and proper methods, hash counting, etc.
Added checks for NULL pointers when deleting items from table.
Fixed dnss_destroy_rr() (deleting RDATA twice).
Minor changes and fixes.
Universal system's functions moved to .c file.
All items are now properly created, copied and destroyed.
(too much copying - should avoid in later development)
Modified API of dns-simple 'library':
Added destructors which take ** to the object
and are setting the pointer to NULL.
dnss_dname_to_wire() now takes the position and allocated size as parameters.
dnss_create_response(), dnss_create_error_response() and dnss_wire_format()
now all return errors as appropriate.
Fixed copying issues in dns-simple 'library':
Questions and RRs are now copied entirely, not just pointers.
(See functions dnss_copy_questions() and dnss_copy_rrs().)
Added some checks for NULL-pointers when deallocating.
Added pointer to hash table item destructor function to the hash table.
ck_destroy_table() rewritten to destroy individual items in the table and buffer.
A lot of checks added (mostly for result of malloc).
Redundant and old code removed.
Bugfix in default A RR value (was string, should be 4 integers).
Ignoring query if response too long.
Removed some redundant code.
Added some debug output.
Replaced some macros by (static) const variables.
Added answer_request() function to be called.
Corrected dnss_create_response().
Added dnss_create_error_response().
dnss_wire_format() fixed.
dnss_parse_query() fixed.
socket manager fixed.
Creating default A RRs with dummy address (loopback), this has no implications
on performance testing.
Fixed some bugs in dns-simple.
Added header common.h to contain common typedefs, constants and macros.
More consistent debug messages (better #ifdefs)
Removed read_domain_names() and test_lookup() functions.
Added dnss_wire_format(), dnss_dname_to_wire() and dnss_parse_query().
Many functions in universal-system.h and bitset.h not inline any more
(should check it later and find a way to make them inline).
Classic (2-ary) cuckoo hash table with char* keys.
(Insert, find, delete implemented.)
Simple bitset (not used right now).
Several hash functions downloaded from web.
Universal system of hash functions (according to J. Katajainen & M. Lykke
of University of Copenhagen).
Several basic data structures for DNS data - not finished yet.