@@ -74,7 +74,7 @@ ${RAGEL_version_error}") | |||
"INPUTS;DEPENDS;COMPILE_FLAGS" ${ARGN}) | |||
add_custom_command(OUTPUT ${RAGEL_OUTPUT} | |||
COMMAND ${RAGEL_EXECUTABLE} | |||
ARGS ${RAGEL_EXECUTABLE_opts} -o${RAGEL_OUTPUT} ${RAGEL_INPUTS} | |||
ARGS ${RAGEL_COMPILE_FLAGS} -o${RAGEL_OUTPUT} ${RAGEL_INPUTS} | |||
DEPENDS ${RAGEL_INPUTS} ${RAGEL_DEPENDS} | |||
COMMENT | |||
"[RAGEL][${Name}] Compiling state machine with Ragel ${RAGEL_VERSION}" | |||
@@ -83,7 +83,7 @@ ${RAGEL_version_error}") | |||
set(RAGEL_${Name}_DEFINED TRUE) | |||
set(RAGEL_${Name}_OUTPUTS ${RAGEL_OUTPUT}) | |||
set(RAGEL_${Name}_INPUT ${RAGEL_INPUTS}) | |||
set(RAGEL_${Name}_COMPILE_FLAGS ${RAGEL_EXECUTABLE_opts}) | |||
set(RAGEL_${Name}_COMPILE_FLAGS ${RAGEL_COMPILE_FLAGS}) | |||
endmacro() | |||
endif() |
@@ -110,10 +110,12 @@ SET(RAGEL_DEPENDS "${CMAKE_SOURCE_DIR}/src/ragel/smtp_address.rl" | |||
RAGEL_TARGET(ragel_smtp_addr | |||
INPUTS ragel/smtp_addr_parser.rl | |||
DEPENDS ${RAGEL_DEPENDS} | |||
COMPILE_FLAGS -T1 | |||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/smtp_addr_parser.rl.c) | |||
RAGEL_TARGET(ragel_smtp_received | |||
INPUTS ragel/smtp_received_parser.rl | |||
DEPENDS ${RAGEL_DEPENDS} | |||
COMPILE_FLAGS -T1 | |||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/smtp_received_parser.rl.c) | |||
######################### LINK SECTION ############################### | |||
@@ -1,5 +1,6 @@ | |||
SET(UTILSERVERSRC rspamd_http_server.c) | |||
SET(UTILBENCHSRC rspamd_http_bench.c) | |||
SET(RECVBENCHSRC received_parser_bench.c) | |||
ADD_EXECUTABLE(rspamd-http-server ${UTILSERVERSRC}) | |||
SET_TARGET_PROPERTIES(rspamd-http-server PROPERTIES LINKER_LANGUAGE C) | |||
@@ -9,13 +10,25 @@ TARGET_LINK_LIBRARIES(rspamd-http-server ${RSPAMD_REQUIRED_LIBRARIES}) | |||
ADD_EXECUTABLE(rspamd-http-bench ${UTILBENCHSRC}) | |||
SET_TARGET_PROPERTIES(rspamd-http-bench PROPERTIES LINKER_LANGUAGE C) | |||
TARGET_LINK_LIBRARIES(rspamd-http-bench rspamd-server) | |||
TARGET_LINK_LIBRARIES(rspamd-http-bench rspamd-http-parser) | |||
TARGET_LINK_LIBRARIES(rspamd-http-bench rspamd-server) | |||
TARGET_LINK_LIBRARIES(rspamd-http-bench ${RSPAMD_REQUIRED_LIBRARIES}) | |||
ADD_EXECUTABLE(rspamd-received-bench ${RECVBENCHSRC}) | |||
SET_TARGET_PROPERTIES(rspamd-received-bench PROPERTIES LINKER_LANGUAGE C) | |||
TARGET_LINK_LIBRARIES(rspamd-received-bench rspamd-server) | |||
IF (ENABLE_SNOWBALL MATCHES "ON") | |||
TARGET_LINK_LIBRARIES(rspamd-received-bench stemmer) | |||
ENDIF() | |||
IF(ENABLE_HIREDIS MATCHES "ON") | |||
TARGET_LINK_LIBRARIES(rspamd-received-bench rspamd-hiredis) | |||
ENDIF() | |||
TARGET_LINK_LIBRARIES(rspamd-received-bench ${RSPAMD_REQUIRED_LIBRARIES}) | |||
IF (ENABLE_HYPERSCAN MATCHES "ON") | |||
SET_TARGET_PROPERTIES(rspamd-http-bench PROPERTIES LINKER_LANGUAGE CXX) | |||
SET_TARGET_PROPERTIES(rspamd-http-server PROPERTIES LINKER_LANGUAGE CXX) | |||
SET_TARGET_PROPERTIES(rspamd-received-bench PROPERTIES LINKER_LANGUAGE CXX) | |||
ENDIF() | |||
# Redirector |
@@ -0,0 +1,90 @@ | |||
/*- | |||
* Copyright 2016 Vsevolod Stakhov | |||
* | |||
* Licensed under the Apache License, Version 2.0 (the "License"); | |||
* you may not use this file except in compliance with the License. | |||
* You may obtain a copy of the License at | |||
* | |||
* http://www.apache.org/licenses/LICENSE-2.0 | |||
* | |||
* Unless required by applicable law or agreed to in writing, software | |||
* distributed under the License is distributed on an "AS IS" BASIS, | |||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
* See the License for the specific language governing permissions and | |||
* limitations under the License. | |||
*/ | |||
#include "config.h" | |||
#include "printf.h" | |||
#include "message.h" | |||
#include "smtp_parsers.h" | |||
static gdouble total_time = 0; | |||
static gint total_parsed = 0; | |||
static void | |||
rspamd_process_file (const gchar *fname) | |||
{ | |||
struct rspamd_task *task; | |||
GIOChannel *f; | |||
GError *err = NULL; | |||
GString *buf; | |||
struct received_header rh; | |||
gdouble t1, t2; | |||
f = g_io_channel_new_file (fname, "r", &err); | |||
if (!f) { | |||
rspamd_fprintf (stderr, "cannot open %s: %e\n", fname, err); | |||
g_error_free (err); | |||
return; | |||
} | |||
g_io_channel_set_encoding (f, NULL, NULL); | |||
buf = g_string_sized_new (8192); | |||
task = g_malloc0 (sizeof (task)); | |||
task->task_pool = rspamd_mempool_new (rspamd_mempool_suggest_size (), "test"); | |||
while (g_io_channel_read_line_string (f, buf, NULL, &err) | |||
== G_IO_STATUS_NORMAL) { | |||
while (buf->len > 0 && g_ascii_isspace (buf->str[buf->len - 1])) { | |||
buf->len --; | |||
} | |||
t1 = rspamd_get_virtual_ticks (); | |||
rspamd_smtp_recieved_parse (task, buf->str, buf->len, &rh); | |||
t2 = rspamd_get_virtual_ticks (); | |||
total_time += t2 - t1; | |||
total_parsed ++; | |||
} | |||
if (err) { | |||
rspamd_fprintf (stderr, "cannot read %s: %e\n", fname, err); | |||
g_error_free (err); | |||
} | |||
g_io_channel_unref (f); | |||
g_string_free (buf, TRUE); | |||
rspamd_mempool_delete (task->task_pool); | |||
g_free (task); | |||
} | |||
int | |||
main (int argc, char **argv) | |||
{ | |||
gint i; | |||
for (i = 1; i < argc; i ++) { | |||
if (argv[i]) { | |||
rspamd_process_file (argv[i]); | |||
} | |||
} | |||
rspamd_printf ("Parsed %d received headers in %.3f seconds\n", | |||
total_parsed, total_time); | |||
return 0; | |||
} |