Skip to content
Snippets Groups Projects
Commit f02c549c authored by Lubos Slovak's avatar Lubos Slovak
Browse files

A lot of bugfixes + some debug output added.

parent 7fb6b5da
No related branches found
No related tags found
No related merge requests found
......@@ -621,15 +621,14 @@ size_t dnss_dname_wire_length( dnss_dname_wire dname_wire )
void dnss_dname_wire_cp( dnss_dname_wire from, dnss_dname_wire to )
{
assert(dnss_dname_wire_length(from) == dnss_dname_wire_length(to));
memcpy(to, from, dnss_dname_wire_length(from));
memcpy(to, from, (strlen(from) + 1));
}
/*----------------------------------------------------------------------------*/
dnss_dname_wire dnss_dname_wire_copy( dnss_dname_wire from )
{
dnss_dname_wire dw = malloc(dnss_dname_wire_length(from) * sizeof(char));
dnss_dname_wire dw = malloc((strlen(from) + 1) * sizeof(char));
if (dw == NULL) {
return NULL;
......
#include <stdio.h>
#include "common.h"
#include "cuckoo-test.h"
#include "server.h"
/*----------------------------------------------------------------------------*/
......@@ -12,9 +12,6 @@ int main( int argc, char **argv )
return -1;
}
test_hash_table(argv[1]);
start_server(argv[1]);
return 0;
cute_server *server = cute_create();
return cute_start(server, argv[1]);
}
......@@ -3,8 +3,11 @@
#include "socket-manager.h"
#include "zone-database.h"
#include "name-server.h"
#include "zone-parser.h"
#include <stdio.h>
#define CUTE_DEBUG
/*----------------------------------------------------------------------------*/
static const int DEFAULT_THR_COUNT = 2;
......@@ -14,36 +17,61 @@ static const unsigned short DEFAULT_PORT = 53535;
cute_server *cute_create()
{
#ifdef CUTE_DEBUG
printf("Creating Server structure..\n");
#endif
cute_server *server = malloc(sizeof(cute_server));
if (server == NULL) {
ERR_ALLOC_FAILED;
return NULL;
}
#ifdef CUTE_DEBUG
printf("Done\n\n");
#endif
#ifdef CUTE_DEBUG
printf("Creating Zone Database structure..\n");
#endif
server->zone_db = zdb_create();
if (server->zone_db == NULL) {
return NULL;
}
#ifdef CUTE_DEBUG
printf("Done\n\n");
#endif
#ifdef CUTE_DEBUG
printf("Creating Name Server structure..\n");
#endif
server->nameserver = ns_create(server->zone_db);
if (server->nameserver == NULL) {
zdb_destroy(&server->zone_db);
free(server);
return NULL;
}
#ifdef CUTE_DEBUG
printf("Done\n\n");
#endif
#ifdef CUTE_DEBUG
printf("Creating Socket Manager structure..\n");
#endif
server->socket_mgr = sm_create(DEFAULT_PORT, server->nameserver);
if (server->socket_mgr == NULL) {
ns_destroy(&server->nameserver);
zdb_destroy(&server->zone_db);
free(server);
return NULL;
}
#ifdef CUTE_DEBUG
printf("Done\n\n");
#endif
#ifdef CUTE_DEBUG
printf("Creating Dispatcher structure..\n");
#endif
server->dispatcher = dpt_create(DEFAULT_THR_COUNT, sm_listen,
server->socket_mgr);
if (server->dispatcher == NULL) {
sm_destroy(&server->socket_mgr);
ns_destroy(&server->nameserver);
......@@ -51,14 +79,27 @@ cute_server *cute_create()
free(server);
return NULL;
}
#ifdef CUTE_DEBUG
printf("Done\n\n");
#endif
return server;
}
/*----------------------------------------------------------------------------*/
int cute_start( cute_server *server )
int cute_start( cute_server *server, const char *filename )
{
#ifdef CUTE_DEBUG
printf("Parsing zone file %s..\n", filename);
#endif
if (zp_parse_zone(filename, server->zone_db) != 0) {
return -1;
}
#ifdef CUTE_DEBUG
printf("Starting the Dispatcher..\n");
#endif
return dpt_start(server->dispatcher);
}
......
......@@ -19,7 +19,7 @@ typedef struct cute_server {
cute_server *cute_create();
int cute_start( cute_server *server );
int cute_start( cute_server *server, const char *filename );
void cute_destroy( cute_server **server );
......
#include "common.h"
#include "socket-manager.h"
#include "name-server.h"
#include <sys/socket.h>
#include <netinet/in.h>
......@@ -12,6 +13,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <assert.h>
//#define SM_DEBUG
......@@ -19,8 +21,7 @@ const uint SOCKET_BUFF_SIZE = 4096;
/*----------------------------------------------------------------------------*/
sm_manager *sm_create( unsigned short port,
void (*answer_fnc)(const char *, uint, char *, uint *) )
sm_manager *sm_create( unsigned short port, ns_nameserver *nameserver )
{
sm_manager *manager = malloc(sizeof(sm_manager));
......@@ -80,7 +81,7 @@ sm_manager *sm_create( unsigned short port,
printf("Successful\n");
}*/
manager->answer_fnc = answer_fnc;
manager->nameserver = nameserver;
return manager;
}
......@@ -129,14 +130,15 @@ void *sm_listen( void *obj )
pthread_mutex_unlock(&manager->mutex);
answer_size = SOCKET_BUFF_SIZE;
manager->answer_fnc(buf, n, answer, &answer_size);
int res = ns_answer_request(manager->nameserver, buf, n, answer,
&answer_size);
#ifdef SM_DEBUG
printf("Got answer of size %d.\n", answer_size);
#endif
if (answer_size > 0) {
if (res == 0) {
assert(answer_size > 0);
#ifdef SM_DEBUG
printf("Answer wire format (size %u):\n", answer_size);
hex_print(answer, answer_size);
......
......@@ -4,6 +4,7 @@
#include <sys/epoll.h>
#include <pthread.h>
#include "common.h"
#include "name-server.h"
const uint SOCKET_BUFF_SIZE;
......@@ -13,7 +14,7 @@ struct sm_manager {
int socket; // later use array of sockets?
struct epoll_event event;
int epfd;
void (*answer_fnc)(const char *, uint, char *, uint *);
ns_nameserver *nameserver;
pthread_mutex_t mutex;
};
......@@ -21,8 +22,7 @@ typedef struct sm_manager sm_manager;
/*----------------------------------------------------------------------------*/
sm_manager *sm_create( unsigned short port,
void (*answer_fnc)(const char *, uint, char *, uint *) );
sm_manager *sm_create( unsigned short port, ns_nameserver *nameserver );
void *sm_listen( void *obj );
......
......@@ -6,6 +6,9 @@
/*----------------------------------------------------------------------------*/
#define ZP_DEBUG
#define ZP_PARSE_DEBUG
static const uint BUF_SIZE = 25;
static const int ERR_FILE_OPEN = -1;
static const int ERR_PARSE = -2;
......@@ -80,11 +83,11 @@ int zp_test_count_domain_names( FILE *file, uint *names )
/*----------------------------------------------------------------------------*/
int zp_test_read_dname( char **buffer, uint *buf_i, FILE* file,
char *ch )
char *ch )
{
// allocate some buffer
#ifdef ZP_PARSE_DEBUG
printf("Allocating buffer\n");
printf("Allocating buffer\n");
#endif
uint buf_size = BUF_SIZE;
*buffer = (char *)malloc(buf_size * sizeof(char));
......@@ -101,7 +104,7 @@ int zp_test_read_dname( char **buffer, uint *buf_i, FILE* file,
*buf_i = 0;
while (*ch != ' ' && *ch != '\n' && *ch != EOF) {
*buffer[*buf_i] = *ch;
(*buffer)[*buf_i] = *ch;
(*buf_i)++;
// if the buffer is not big enough, resize
......@@ -116,7 +119,8 @@ int zp_test_read_dname( char **buffer, uint *buf_i, FILE* file,
*ch = fgetc(file);
}
*buffer[*buf_i] = '\0';
(*buffer)[*buf_i] = '\0';
return 0;
}
......@@ -184,12 +188,11 @@ int zp_test_parse_file( zdb_database *database,
memcpy(key, rr->owner, key_size);
#ifdef ZP_PARSE_DEBUG
if (line % 100000 == 1) {
if (1) {
fprintf(stderr, "Inserting item number %u, key:\n", line);
hex_print(key, key_size);
}
#endif
if ((res = zdb_insert_name(database, *zone_name, key, node)) != 0) {
fprintf(stderr, "\nInsert item returned %d.\n", res);
if (res < 0) {
......@@ -201,7 +204,7 @@ int zp_test_parse_file( zdb_database *database,
}
#ifdef ZP_PARSE_DEBUG
if (line % 100000 == 0) {
if (1) {
fprintf(stderr, "Done.\n");
}
#endif
......@@ -221,18 +224,18 @@ int zp_test_parse_zone( const char *filename, zdb_database *database )
char *DEFAULT_ZONE_NAME = "cz";
// open the zone file
#ifdef ZP_DEBUG
printf("Opening file...");
#endif
#ifdef ZP_DEBUG
printf("Opening file...\n");
#endif
FILE *file = fopen(filename, "r");
if (file == NULL) {
fprintf(stderr, "Can't open file: %s.\n", filename);
return ERR_FILE_OPEN;
}
#ifdef ZP_DEBUG
printf("Done.\n\n");
#endif
#ifdef ZP_DEBUG
printf("Done.\n");
#endif
// determine name of the zone (and later other things)
// for now lets assume there is only one zone and use the default name (cz)
......@@ -248,6 +251,9 @@ int zp_test_parse_zone( const char *filename, zdb_database *database )
int res = dnss_dname_to_wire(DEFAULT_ZONE_NAME, zone_name, name_size);
assert(res == 0);
#ifdef ZP_DEBUG
printf("Counting domain names in the file...\n");
#endif
uint names;
// count distinct domain names in the zone file
if ((res = zp_test_count_domain_names(file, &names)) != 0) {
......@@ -255,7 +261,13 @@ int zp_test_parse_zone( const char *filename, zdb_database *database )
free(zone_name);
return ERR_COUNT;
}
#ifdef ZP_DEBUG
printf("Done.\n");
#endif
#ifdef ZP_DEBUG
printf("Creating new zone with name '%s'...\n", zone_name);
#endif
// create a new zone in the zone database
if ((res = zdb_create_zone(database, zone_name, names)) != 0) {
fclose(file);
......@@ -263,11 +275,17 @@ int zp_test_parse_zone( const char *filename, zdb_database *database )
ERR_ZONE_CREATE_FAILED;
return ERR_ZONE_CREATE;
}
#ifdef ZP_DEBUG
printf("Done.\n");
#endif
fseek(file, 0, SEEK_SET);
#ifdef ZP_DEBUG
printf("Parsing the zone file...\n");
#endif
// parse the zone file and fill in the zone
if ((res == zp_test_parse_file(database, &zone_name, file)) != 0) {
if ((res = zp_test_parse_file(database, &zone_name, file)) != 0) {
// is this necessary?
zdb_remove_zone(database, zone_name);
free(zone_name);
......@@ -275,6 +293,9 @@ int zp_test_parse_zone( const char *filename, zdb_database *database )
ERR_PARSING_FAILED;
return ERR_PARSE;
}
#ifdef ZP_DEBUG
printf("Done.\n");
#endif
free(zone_name);
fclose(file);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment