mirror of
https://github.com/lxsang/ant-http
synced 2024-12-25 08:18:21 +01:00
change log mechanism
This commit is contained in:
parent
2dc6d09413
commit
e05515a537
@ -13,6 +13,10 @@ database=/opt/www/database/
|
||||
htdocs=/opt/www/htdocs
|
||||
; tmp dir
|
||||
tmpdir=/opt/www/tmp/
|
||||
; server log
|
||||
server_log = /var/log/antd.log
|
||||
; server error log
|
||||
error_log = /var/log/antd_error.log
|
||||
; server backlocg
|
||||
backlog=5000
|
||||
; eable or disalbe SSL
|
||||
|
@ -96,4 +96,4 @@ AM_CONDITIONAL([OSX], [test "$build_mac" = "yes"])
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
|
||||
# output the script:
|
||||
AC_OUTPUT
|
||||
AC_OUTPUT
|
||||
|
BIN
dist/antd-1.0.4b.tar.gz
vendored
BIN
dist/antd-1.0.4b.tar.gz
vendored
Binary file not shown.
112
http_server.c
112
http_server.c
@ -6,6 +6,50 @@ config_t *config()
|
||||
return &server_config;
|
||||
}
|
||||
|
||||
void error_log(const char* fmt, ...)
|
||||
{
|
||||
if(server_config.errorfp)
|
||||
{
|
||||
va_list arguments;
|
||||
char * data;
|
||||
va_start( arguments, fmt);
|
||||
int dlen = vsnprintf(0,0,fmt,arguments) + 1;
|
||||
va_end(arguments);
|
||||
if ((data = (char*)malloc(dlen*sizeof(char))) != 0)
|
||||
{
|
||||
va_start(arguments, fmt);
|
||||
vsnprintf(data, dlen, fmt, arguments);
|
||||
va_end(arguments);
|
||||
fwrite(data,dlen,1,server_config.errorfp);
|
||||
fflush(server_config.errorfp);
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void server_log(const char* fmt, ...)
|
||||
{
|
||||
|
||||
if(server_config.logfp)
|
||||
{
|
||||
va_list arguments;
|
||||
char * data;
|
||||
va_start( arguments, fmt);
|
||||
int dlen = vsnprintf(0,0,fmt,arguments) + 1;
|
||||
va_end(arguments);
|
||||
if ((data = (char*)malloc(dlen*sizeof(char))) != 0)
|
||||
{
|
||||
va_start(arguments, fmt);
|
||||
vsnprintf(data, dlen, fmt, arguments);
|
||||
va_end(arguments);
|
||||
fwrite(data,dlen,1,server_config.logfp);
|
||||
fflush(server_config.logfp);
|
||||
free(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
void destroy_config()
|
||||
{
|
||||
list_free(&(server_config.rules));
|
||||
@ -20,8 +64,17 @@ void destroy_config()
|
||||
free(server_config.htdocs);
|
||||
if (server_config.tmpdir)
|
||||
free(server_config.tmpdir);
|
||||
|
||||
LOG("Unclosed connection: %d\n", server_config.connection);
|
||||
if(server_config.errorfp)
|
||||
{
|
||||
fclose(server_config.errorfp);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if(server_config.logfp)
|
||||
{
|
||||
fclose(server_config.logfp);
|
||||
}
|
||||
#endif
|
||||
LOG("Unclosed connection: %d", server_config.connection);
|
||||
}
|
||||
|
||||
static int config_handler(void *conf, const char *section, const char *name,
|
||||
@ -65,6 +118,16 @@ static int config_handler(void *conf, const char *section, const char *name,
|
||||
{
|
||||
pconfig->n_workers = atoi(value);
|
||||
}
|
||||
else if (MATCH("SERVER", "error_log"))
|
||||
{
|
||||
pconfig->errorfp = fopen(value, "w");
|
||||
}
|
||||
#ifdef DEBUG
|
||||
else if (MATCH("SERVER", "server_log"))
|
||||
{
|
||||
pconfig->logfp = fopen(value, "w");
|
||||
}
|
||||
#endif
|
||||
#ifdef USE_OPENSSL
|
||||
else if (MATCH("SERVER", "ssl.enable"))
|
||||
{
|
||||
@ -137,15 +200,15 @@ void load_config(const char *file)
|
||||
#endif
|
||||
if (ini_parse(file, config_handler, &server_config) < 0)
|
||||
{
|
||||
LOG("Can't load '%s'\n. Used defaut configuration", file);
|
||||
ERROR("Can't load '%s'. Used defaut configuration", file);
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("Using configuration : %s\n", file);
|
||||
LOG("Using configuration : %s", file);
|
||||
#ifdef USE_OPENSSL
|
||||
LOG("SSL enable %d\n", server_config.usessl);
|
||||
LOG("SSL cert %s\n", server_config.sslcert);
|
||||
LOG("SSL key %s\n", server_config.sslkey);
|
||||
LOG("SSL enable %d", server_config.usessl);
|
||||
LOG("SSL cert %s", server_config.sslcert);
|
||||
LOG("SSL key %s", server_config.sslkey);
|
||||
#endif
|
||||
}
|
||||
init_file_system();
|
||||
@ -219,7 +282,7 @@ void *accept_request(void *data)
|
||||
task->handle = accept_request;
|
||||
return task;
|
||||
default:
|
||||
LOG("Error performing SSL handshake %d %d %lu\n", stat, ret, ERR_get_error());
|
||||
ERROR("Error performing SSL handshake %d %d %lu", stat, ret, ERR_get_error());
|
||||
//server_config.connection++;
|
||||
ERR_print_errors_fp(stderr);
|
||||
unknow(rq->client);
|
||||
@ -248,7 +311,7 @@ void *accept_request(void *data)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
LOG("Ready for reading %d\n", client->sock);
|
||||
//LOG("Ready for reading %d\n", client->sock);
|
||||
//server_config.connection++;
|
||||
read_buf(rq->client, buf, sizeof(buf));
|
||||
line = buf;
|
||||
@ -256,7 +319,7 @@ void *accept_request(void *data)
|
||||
token = strsep(&line, " ");
|
||||
if (!line)
|
||||
{
|
||||
LOG("No method found\n");
|
||||
LOG("No method found");
|
||||
unknow(rq->client);
|
||||
return task;
|
||||
}
|
||||
@ -267,7 +330,7 @@ void *accept_request(void *data)
|
||||
token = strsep(&line, " ");
|
||||
if (!line)
|
||||
{
|
||||
LOG("No request found\n");
|
||||
LOG("No request found");
|
||||
unknow(rq->client);
|
||||
return task;
|
||||
}
|
||||
@ -299,7 +362,7 @@ void *resolve_request(void *data)
|
||||
char *oldrqp = NULL;
|
||||
strcpy(path, server_config.htdocs);
|
||||
strcat(path, url);
|
||||
LOG("Path is : %s \n", path);
|
||||
LOG("Path is : %s", path);
|
||||
//if (path[strlen(path) - 1] == '/')
|
||||
// strcat(path, "index.html");
|
||||
if (stat(path, &st) == -1)
|
||||
@ -369,7 +432,7 @@ void *resolve_request(void *data)
|
||||
if (h)
|
||||
{
|
||||
//sprintf(path,"/%s%s",h,url);
|
||||
LOG("WARNING::::Access octetstream via handle %s\n", h);
|
||||
LOG("WARNING::::Access octetstream via handle %s", h);
|
||||
//if(execute_plugin(client,buf,method,rq) < 0)
|
||||
// cannot_execute(client);
|
||||
free(task);
|
||||
@ -391,7 +454,7 @@ void *finish_request(void *data)
|
||||
{
|
||||
destroy_request(data);
|
||||
server_config.connection--;
|
||||
LOG("Remaining connection %d\n", server_config.connection);
|
||||
LOG("Remaining connection %d", server_config.connection);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -526,7 +589,7 @@ int startup(unsigned *port)
|
||||
error_die("getsockname");
|
||||
*port = ntohs(name.sin_port);
|
||||
}
|
||||
LOG("back log is %d\n", server_config.backlog);
|
||||
LOG("back log is %d", server_config.backlog);
|
||||
if (listen(httpd, server_config.backlog) < 0)
|
||||
error_die("listen");
|
||||
return (httpd);
|
||||
@ -614,9 +677,9 @@ void *decode_request_header(void *data)
|
||||
//if(line) free(line);
|
||||
memset(buf, 0, sizeof(buf));
|
||||
strcat(buf, url);
|
||||
LOG("Original query: %s\n", url);
|
||||
LOG("Original query: %s", url);
|
||||
query = apply_rules(host, buf);
|
||||
LOG("Processed query: %s\n", query);
|
||||
LOG("Processed query: %s", query);
|
||||
dput(rq->request, "RESOURCE_PATH", url_decode(buf));
|
||||
if (query)
|
||||
{
|
||||
@ -699,7 +762,7 @@ void *decode_post_request(void *data)
|
||||
return task;
|
||||
if (ctype == NULL || clen == -1)
|
||||
{
|
||||
LOG("Bad request\n");
|
||||
LOG("Bad request");
|
||||
badrequest(rq->client);
|
||||
return task;
|
||||
}
|
||||
@ -767,7 +830,7 @@ void ws_confirm_request(void *client, const char *key)
|
||||
sprintf(buf, "\r\n");
|
||||
antd_send(client, buf, strlen(buf));
|
||||
|
||||
LOG("%s\n", "Websocket is now enabled for plugin");
|
||||
LOG("%s", "Websocket is now enabled for plugin");
|
||||
}
|
||||
/**
|
||||
* Decode the cookie header to a dictionary
|
||||
@ -948,7 +1011,8 @@ void *decode_multi_part_request_data(void *data)
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
//fseek(fp,-2, SEEK_CUR);
|
||||
totalsize -= 2;
|
||||
ftruncate(fileno(fp), totalsize);
|
||||
int stat = ftruncate(fileno(fp), totalsize);
|
||||
UNUSED(stat);
|
||||
fclose(fp);
|
||||
line = strdup(buf);
|
||||
|
||||
@ -967,7 +1031,7 @@ void *decode_multi_part_request_data(void *data)
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("Cannot write file to :%s\n", file_path);
|
||||
ERROR("Cannot write file to :%s", file_path);
|
||||
}
|
||||
free(file_path);
|
||||
free(part_file);
|
||||
@ -978,7 +1042,7 @@ void *decode_multi_part_request_data(void *data)
|
||||
// check if end of request
|
||||
if (line && strstr(line, boundend))
|
||||
{
|
||||
LOG("End request %s\n", boundend);
|
||||
LOG("End request %s", boundend);
|
||||
free(line);
|
||||
free(boundend);
|
||||
return task;
|
||||
@ -1082,7 +1146,7 @@ void *execute_plugin(void *data, const char *pname)
|
||||
antd_request_t *rq = (antd_request_t *)data;
|
||||
antd_task_t *task = antd_create_task(NULL, (void *)rq, NULL, rq->client->last_io);
|
||||
task->priority++;
|
||||
LOG("Plugin name '%s'\n", pname);
|
||||
LOG("Plugin name '%s'", pname);
|
||||
|
||||
//load the plugin
|
||||
if ((plugin = plugin_lookup((char *)pname)) == NULL)
|
||||
@ -1106,7 +1170,7 @@ void *execute_plugin(void *data, const char *pname)
|
||||
fn = (void *(*)(void *))dlsym(plugin->handle, PLUGIN_HANDLER);
|
||||
if ((error = dlerror()) != NULL)
|
||||
{
|
||||
LOG("Problem when finding %s method from %s : %s \n", PLUGIN_HANDLER, pname, error);
|
||||
ERROR("Problem when finding %s method from %s : %s", PLUGIN_HANDLER, pname, error);
|
||||
unknow(rq->client);
|
||||
return task;
|
||||
}
|
||||
|
22
httpd.c
22
httpd.c
@ -3,14 +3,16 @@
|
||||
#include "http_server.h"
|
||||
#include "lib/ini.h"
|
||||
|
||||
// define the cipher suit used
|
||||
// dirty hack, this should be configured by the configuration file
|
||||
#define CIPHER_SUIT "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256"
|
||||
|
||||
static antd_scheduler_t scheduler;
|
||||
static int server_sock = -1;
|
||||
|
||||
#ifdef USE_OPENSSL
|
||||
|
||||
// define the cipher suit used
|
||||
// dirty hack, this should be configured by the configuration file
|
||||
#define CIPHER_SUIT "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256"
|
||||
|
||||
|
||||
static int ssl_session_ctx_id = 1;
|
||||
SSL_CTX *ctx;
|
||||
void init_openssl()
|
||||
@ -33,7 +35,7 @@ SSL_CTX *create_context()
|
||||
|
||||
ctx = SSL_CTX_new(method);
|
||||
if (!ctx) {
|
||||
perror("Unable to create SSL context");
|
||||
ERROR("Unable to create SSL context");
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
@ -75,7 +77,7 @@ void configure_context(SSL_CTX *ctx)
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (!SSL_CTX_check_private_key(ctx)) {
|
||||
LOG("Failed to validate cert \n");
|
||||
ERROR("Failed to validate cert");
|
||||
ERR_print_errors_fp(stderr);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
@ -95,7 +97,6 @@ void stop_serve(int dummy) {
|
||||
sigprocmask(SIG_BLOCK, &mask, NULL);
|
||||
antd_scheduler_destroy(&scheduler);
|
||||
unload_all_plugin();
|
||||
destroy_config();
|
||||
#ifdef USE_OPENSSL
|
||||
FIPS_mode_set(0);
|
||||
SSL_CTX_free(ctx);
|
||||
@ -110,6 +111,7 @@ void stop_serve(int dummy) {
|
||||
#endif
|
||||
if(server_sock != -1)
|
||||
close(server_sock);
|
||||
destroy_config();
|
||||
sigprocmask(SIG_UNBLOCK, &mask, NULL);
|
||||
}
|
||||
|
||||
@ -142,7 +144,7 @@ int main(int argc, char* argv[])
|
||||
|
||||
#endif
|
||||
server_sock = startup(&port);
|
||||
LOG("httpd running on port %d\n", port);
|
||||
LOG("httpd running on port %d", port);
|
||||
// default to 4 workers
|
||||
antd_scheduler_init(&scheduler, config()->n_workers);
|
||||
scheduler.validate_data = 1;
|
||||
@ -155,7 +157,7 @@ int main(int argc, char* argv[])
|
||||
pthread_t scheduler_th;
|
||||
if (pthread_create(&scheduler_th, NULL,(void *(*)(void *))antd_wait, (void*)&scheduler) != 0)
|
||||
{
|
||||
perror("pthread_create: cannot create worker\n");
|
||||
ERROR("pthread_create: cannot create worker");
|
||||
stop_serve(0);
|
||||
exit(1);
|
||||
}
|
||||
@ -185,7 +187,7 @@ int main(int argc, char* argv[])
|
||||
{
|
||||
client_ip = inet_ntoa(client_name.sin_addr);
|
||||
client->ip = strdup(client_ip);
|
||||
LOG("Client IP: %s\n", client_ip);
|
||||
LOG("Client IP: %s", client_ip);
|
||||
//LOG("socket: %d\n", client_sock);
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ sqlite3 * database(const char* file)
|
||||
sqlite3* db;
|
||||
int rc = sqlite3_open(file,&db);
|
||||
if (rc != SQLITE_OK) {
|
||||
LOG( "Cannot open database: %s %s\n",file, sqlite3_errmsg(db));
|
||||
ERROR( "Cannot open database: %s %s",file, sqlite3_errmsg(db));
|
||||
sqlite3_close(db);
|
||||
return NULL;
|
||||
}
|
||||
@ -23,7 +23,7 @@ int dbquery(sqlite3* db,const char* sql, int (*call_back)())
|
||||
sqlite3_mutex_leave(sqlite3_db_mutex(db));
|
||||
if(rc != SQLITE_OK)
|
||||
{
|
||||
LOG("Cannot query : '%s' [%s]\n", sql,err_msg);
|
||||
ERROR("Cannot query : '%s' [%s]", sql,err_msg);
|
||||
sqlite3_free(err_msg);
|
||||
return 0;
|
||||
}
|
||||
|
17
lib/handle.c
17
lib/handle.c
@ -111,7 +111,7 @@ int antd_send(void *src, const void* data, int len)
|
||||
case SSL_ERROR_ZERO_RETURN:
|
||||
{
|
||||
// peer disconnected...
|
||||
//printf("SSL_ERROR_ZERO_RETURN \n");
|
||||
ERROR("SSLWRITE: SSL_ERROR_ZERO_RETURN: peer disconected: %d", source->sock);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -132,6 +132,7 @@ int antd_send(void *src, const void* data, int len)
|
||||
//source->attempt++;
|
||||
continue; // more data to read...
|
||||
}
|
||||
ERROR("SSL WRITE: want read but select error on the socket %d: %s", source->sock, strerror(errno));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -152,12 +153,14 @@ int antd_send(void *src, const void* data, int len)
|
||||
//source->attempt++;
|
||||
continue; // can write more data now...
|
||||
}
|
||||
ERROR("SSL WRITE: want write but select error on the socket %d: %s", source->sock, strerror(errno));
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// other error
|
||||
// other error
|
||||
ERROR("SSLWRITE: Unknown error on %d: %s", source->sock, ERR_get_error());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -238,7 +241,7 @@ int antd_recv(void *src, void* data, int len)
|
||||
case SSL_ERROR_ZERO_RETURN:
|
||||
{
|
||||
// peer disconnected...
|
||||
//printf("SSL_ERROR_ZERO_RETURN \n");
|
||||
ERROR("SSL READ: SSL_ERROR_ZERO_RETURN, peer disconnected %d", source->sock);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -259,6 +262,7 @@ int antd_recv(void *src, void* data, int len)
|
||||
//source->attempt++;
|
||||
continue; // more data to read...
|
||||
}
|
||||
ERROR("SSL READ: want read but select error on the socket %d: %s", source->sock, strerror(errno));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -279,12 +283,14 @@ int antd_recv(void *src, void* data, int len)
|
||||
//source->attempt++;
|
||||
continue; // can write more data now...
|
||||
}
|
||||
ERROR("SSL READ: want write but select error on the socket %d: %s", source->sock, strerror(errno));
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
// other error
|
||||
ERROR("SSL READ: unkown error on %d: %s", source->sock, ERR_get_error());
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -479,13 +485,12 @@ int __b(void* client, const unsigned char* data, int size)
|
||||
}
|
||||
int __f(void* client, const char* file)
|
||||
{
|
||||
printf("Open file %s\n",file );
|
||||
unsigned char buffer[BUFFLEN];
|
||||
FILE *ptr;
|
||||
ptr = fopen(file,"rb");
|
||||
if(!ptr)
|
||||
{
|
||||
LOG("Cannot read : %s\n", file);
|
||||
LOG("Cannot read : %s", file);
|
||||
return 0;
|
||||
}
|
||||
size_t size;
|
||||
@ -642,8 +647,8 @@ void destroy_request(void *data)
|
||||
{
|
||||
if (!data)
|
||||
return;
|
||||
LOG("Close request\n");
|
||||
antd_request_t *rq = (antd_request_t *)data;
|
||||
LOG("Close request %d", rq->client->sock);
|
||||
// free all other thing
|
||||
if (rq->request)
|
||||
{
|
||||
|
@ -31,6 +31,10 @@
|
||||
#ifdef USE_OPENSSL
|
||||
int __attribute__((weak)) usessl();
|
||||
#endif
|
||||
void __attribute__((weak)) error_log(const char*, ...);
|
||||
#ifdef DEBUG
|
||||
void __attribute__((weak)) server_log(const char*, ...);
|
||||
#endif
|
||||
//extern config_t server_config;
|
||||
typedef struct{
|
||||
int sock;
|
||||
@ -61,6 +65,10 @@ typedef struct {
|
||||
int maxcon;
|
||||
int connection;
|
||||
int n_workers;
|
||||
FILE* errorfp;
|
||||
#ifdef DEBUG
|
||||
FILE* logfp;
|
||||
#endif
|
||||
#ifdef USE_OPENSSL
|
||||
int usessl;
|
||||
char* sslcert;
|
||||
|
@ -160,13 +160,13 @@ void antd_scheduler_init(antd_scheduler_t* scheduler, int n)
|
||||
scheduler->scheduler_sem = sem_open("scheduler", O_CREAT, 0600, 0);
|
||||
if (scheduler->scheduler_sem == SEM_FAILED)
|
||||
{
|
||||
LOG("Cannot open semaphore for scheduler\n");
|
||||
ERROR("Cannot open semaphore for scheduler");
|
||||
exit(-1);
|
||||
}
|
||||
scheduler->worker_sem = sem_open("worker", O_CREAT, 0600, 0);
|
||||
if (!scheduler->worker_sem)
|
||||
{
|
||||
LOG("Cannot open semaphore for workers\n");
|
||||
ERROR("Cannot open semaphore for workers");
|
||||
exit(-1);
|
||||
}
|
||||
// init lock
|
||||
@ -180,7 +180,7 @@ void antd_scheduler_init(antd_scheduler_t* scheduler, int n)
|
||||
scheduler->workers = (antd_worker_t*)malloc(n*(sizeof(antd_worker_t)));
|
||||
if(!scheduler->workers)
|
||||
{
|
||||
LOG("Cannot allocate memory for worker\n");
|
||||
ERROR("Cannot allocate memory for worker");
|
||||
exit(-1);
|
||||
}
|
||||
for(int i = 0; i < scheduler->n_workers;i++)
|
||||
@ -197,7 +197,7 @@ void antd_scheduler_init(antd_scheduler_t* scheduler, int n)
|
||||
}
|
||||
}
|
||||
}
|
||||
LOG("Antd scheduler initialized with %d worker\n", scheduler->n_workers);
|
||||
LOG("Antd scheduler initialized with %d worker", scheduler->n_workers);
|
||||
}
|
||||
/*
|
||||
destroy all pending task
|
||||
@ -207,7 +207,7 @@ void antd_scheduler_destroy(antd_scheduler_t* scheduler)
|
||||
{
|
||||
// free all the chains
|
||||
stop(scheduler);
|
||||
LOG("Destroy remaining queue\n");
|
||||
LOG("Destroy remaining queue");
|
||||
for(int i=0; i < N_PRIORITY; i++)
|
||||
{
|
||||
destroy_queue(scheduler->task_queue[i]);
|
||||
@ -324,7 +324,7 @@ int antd_task_schedule(antd_scheduler_t* scheduler)
|
||||
if(scheduler->validate_data && difftime( time(NULL), it->task->access_time) > MAX_VALIDITY_INTERVAL)
|
||||
{
|
||||
// data task is not valid
|
||||
LOG("Task data is not valid \n");
|
||||
LOG("Task data is not valid, task will be killed");
|
||||
if(scheduler->destroy_data)
|
||||
scheduler->destroy_data(it->task->data);
|
||||
if(it->task->callback)
|
||||
|
14
lib/utils.c
14
lib/utils.c
@ -191,7 +191,9 @@ char* mime(const char* file)
|
||||
if(!ex) return "application/octet-stream";
|
||||
mime_t m = mime_from_ext(ex);
|
||||
if(ex)
|
||||
{
|
||||
free(ex);
|
||||
}
|
||||
return (char*)m.type;
|
||||
}
|
||||
|
||||
@ -200,7 +202,9 @@ int is_bin(const char* file)
|
||||
char * ex = ext(file);
|
||||
mime_t m = mime_from_ext(ex);
|
||||
if(ex)
|
||||
{
|
||||
free(ex);
|
||||
}
|
||||
return m.bin;
|
||||
}
|
||||
|
||||
@ -228,9 +232,9 @@ int regex_match(const char* expr,const char* search, int msize, regmatch_t* matc
|
||||
/* Compile regular expression */
|
||||
reti = regcomp(®ex, expr, REG_ICASE | REG_EXTENDED);
|
||||
if( reti ){
|
||||
LOG("Could not compile regex: %s\n",expr);
|
||||
//ERROR("Could not compile regex: %s",expr);
|
||||
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
|
||||
LOG("Regex match failed: %s\n", msgbuf);
|
||||
//ERROR("Regex match failed: %s", msgbuf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -246,7 +250,7 @@ int regex_match(const char* expr,const char* search, int msize, regmatch_t* matc
|
||||
}
|
||||
else{
|
||||
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
|
||||
LOG("Regex match failed: %s\n", msgbuf);
|
||||
//ERROR("Regex match failed: %s\n", msgbuf);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
@ -256,7 +260,9 @@ int regex_match(const char* expr,const char* search, int msize, regmatch_t* matc
|
||||
}
|
||||
char *url_decode(const char *str) {
|
||||
if(!str)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
char *pstr = (char*)str, *buf = malloc(strlen(str) + 1), *pbuf = buf;
|
||||
|
||||
while (*pstr) {
|
||||
@ -468,4 +474,4 @@ void sha1(const char* text, char* out)
|
||||
SHA1_Update(&context, text, strlen(text));
|
||||
SHA1_Final(d, &context);
|
||||
digest_to_hex(d,out);
|
||||
}
|
||||
}
|
||||
|
@ -54,11 +54,13 @@ THE SOFTWARE.
|
||||
#define true 1
|
||||
#define false 0
|
||||
#ifdef DEBUG
|
||||
#define LOG(a,...) printf("%s:%d: " a, __FILE__, \
|
||||
#define LOG(a,...) server_log("%s:%d: " a "\n", __FILE__, \
|
||||
__LINE__, ##__VA_ARGS__)
|
||||
#else
|
||||
#define LOG(a,...) do{}while(0)
|
||||
#endif
|
||||
#define ERROR(a,...) error_log("%s:%d: " a "\n", __FILE__, \
|
||||
__LINE__, ##__VA_ARGS__)
|
||||
// add this to the utils
|
||||
#define UNUSED(x) (void)(x)
|
||||
|
||||
|
@ -45,7 +45,7 @@ struct plugin_entry *plugin_load(char *name)
|
||||
plugin_table[hashval] = np;
|
||||
} else /* already there */
|
||||
{
|
||||
LOG("The plugin %s id already loaded\n", name);
|
||||
LOG("The plugin %s id already loaded", name);
|
||||
}
|
||||
|
||||
return np;
|
||||
@ -64,7 +64,7 @@ void * plugin_from_file(char* name)
|
||||
lib_handle = dlopen(path, RTLD_NOW| RTLD_GLOBAL);
|
||||
if (!lib_handle)
|
||||
{
|
||||
LOG("Cannot load plugin '%s' : '%s'\n",name,dlerror());
|
||||
ERROR("Cannot load plugin '%s' : '%s'",name,dlerror());
|
||||
if(path)
|
||||
free(path);
|
||||
return NULL;
|
||||
@ -72,7 +72,7 @@ void * plugin_from_file(char* name)
|
||||
// set database path
|
||||
fn = (void (*)(const char *, config_t*))dlsym(lib_handle, "__init_plugin__");
|
||||
if ((error = dlerror()) != NULL)
|
||||
LOG("Problem when setting data path for %s : %s \n", name,error);
|
||||
ERROR("Problem when finding plugin init function for %s : %s", name,error);
|
||||
else
|
||||
(*fn)(name,config());
|
||||
if(path)
|
||||
@ -88,7 +88,7 @@ void unload_plugin(struct plugin_entry* np)
|
||||
fn = (void(*)()) dlsym(np->handle, "__release__");
|
||||
if ((error = dlerror()) != NULL)
|
||||
{
|
||||
LOG("Cant not release plugin %s : %s \n", np->pname,error);
|
||||
ERROR("Cant not release plugin %s : %s", np->pname,error);
|
||||
}
|
||||
if(fn)
|
||||
{
|
||||
@ -103,7 +103,6 @@ void unload_plugin(struct plugin_entry* np)
|
||||
*/
|
||||
void unload_plugin_by_name(const char* name)
|
||||
{
|
||||
LOG("%s\n","Unloading thing");
|
||||
struct plugin_entry *np;
|
||||
int hasval = hash(name, HASHSIZE);
|
||||
np = plugin_table[hasval];
|
||||
@ -114,9 +113,13 @@ void unload_plugin_by_name(const char* name)
|
||||
}
|
||||
else
|
||||
{
|
||||
for (; np != NULL; np = np->next)
|
||||
for (np ; np != NULL; np = np->next)
|
||||
{
|
||||
if (np->next != NULL && strcmp(name, np->next->pname) == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(np == NULL) return; // the plugin is is not loaded
|
||||
unload_plugin(np->next);
|
||||
np->next = np->next->next;
|
||||
@ -127,7 +130,7 @@ void unload_plugin_by_name(const char* name)
|
||||
*/
|
||||
void unload_all_plugin()
|
||||
{
|
||||
LOG("Unload all plugins\n");
|
||||
LOG("Unload all plugins");
|
||||
for(int i=0;i<HASHSIZE;i++)
|
||||
{
|
||||
struct plugin_entry **np, *curr;
|
||||
|
Loading…
Reference in New Issue
Block a user