From aeb80aaf5bda55baf74c7c9a65a9519942dd25d2 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Fri, 19 Feb 2010 16:55:34 -0300 Subject: [PATCH] Add some TRACE messages Remove old socket_timeout function Code cleanup --- palm/lib/child.py | 2 +- src/connection.c | 15 ++++++++++++++ src/epoll.c | 13 ++++++++++++ src/http.c | 14 +++++++------ src/include/iov.h | 2 ++ src/include/plugin.h | 1 + src/plugin.c | 37 +++++++++++++++++++++++++-------- src/request.c | 4 ++++ src/socket.c | 58 ++++++++++------------------------------------------ 9 files changed, 83 insertions(+), 63 deletions(-) diff --git a/palm/lib/child.py b/palm/lib/child.py index 6393006..578c01a 100644 --- a/palm/lib/child.py +++ b/palm/lib/child.py @@ -119,7 +119,7 @@ class Child: remote, info = self._s.accept() # print "Got connection! I won! ->", os.getpid() buf = self.read(remote) - print "reading, ", buf + #print "reading, ", buf request = self.parse_request(buf) diff --git a/src/connection.c b/src/connection.c index 43da346..4bf825d 100644 --- a/src/connection.c +++ b/src/connection.c @@ -40,6 +40,9 @@ int mk_conn_read(int socket) /* Plugin hook */ ret = mk_plugin_event_read(socket); +#ifdef TRACE + MK_TRACE("Check plugin hook | ret = %i", ret); +#endif if (ret != MK_PLUGIN_RET_EVENT_NOT_ME) { return ret; } @@ -169,6 +172,10 @@ int mk_conn_error(int socket) struct client_request *cr; struct sched_list_node *sched; +#ifdef TRACE + MK_TRACE("Connection Handler, error on FD %i", socket); +#endif + sched = mk_sched_get_thread_conf(); mk_sched_remove_client(NULL, socket); cr = mk_request_client_get(socket); @@ -183,6 +190,10 @@ int mk_conn_close(int socket) { struct sched_list_node *sched; +#ifdef TRACE + MK_TRACE("Connection Handler, closed on FD %i", socket); +#endif + sched = mk_sched_get_thread_conf(); mk_sched_remove_client(sched, socket); @@ -193,6 +204,10 @@ int mk_conn_timeout(int socket) { struct sched_list_node *sched; +#ifdef TRACE + MK_TRACE("Connection Handler, timeout on FD %i", socket); +#endif + sched = mk_sched_get_thread_conf(); mk_sched_check_timeouts(sched); diff --git a/src/epoll.c b/src/epoll.c index e992f45..c17bc96 100644 --- a/src/epoll.c +++ b/src/epoll.c @@ -171,14 +171,27 @@ int mk_epoll_socket_change_mode(int efd, int socket, int mode) event.events = EPOLLET | EPOLLERR | EPOLLHUP; event.data.fd = socket; +#ifdef TRACE + MK_TRACE("EPoll, changing FD %i mode", socket); +#endif + switch (mode) { case MK_EPOLL_READ: +#ifdef TRACE + MK_TRACE("EPoll, changing mode to READ"); +#endif event.events |= EPOLLIN; break; case MK_EPOLL_WRITE: +#ifdef TRACE + MK_TRACE("EPoll, changing mode to WRITE"); +#endif event.events |= EPOLLOUT; break; case MK_EPOLL_RW: +#ifdef TRACE + MK_TRACE("Epoll, changing mode to READ/WRITE"); +#endif event.events |= EPOLLIN | EPOLLOUT; break; } diff --git a/src/http.c b/src/http.c index 9011797..9476885 100644 --- a/src/http.c +++ b/src/http.c @@ -126,6 +126,7 @@ mk_pointer mk_http_protocol_check_str(int protocol) int mk_http_init(struct client_request *cr, struct request *sr) { + int ret; int debug_error = 0, bytes = 0; struct mimetype *mime; mk_pointer gmt_file_unix_time; // gmt time of server file (unix time) @@ -229,12 +230,6 @@ int mk_http_init(struct client_request *cr, struct request *sr) return -1; } - /* Plugin Stage 40: look for handlers for this request */ - if (mk_plugin_stage_run(MK_PLUGIN_STAGE_40, cr->socket, NULL, cr, sr) == - 0) { - return -1; - } - /* Matching MimeType */ mime = mk_mimetype_find(&sr->real_path); if (!mime) { @@ -246,6 +241,13 @@ int mk_http_init(struct client_request *cr, struct request *sr) return -1; } + /* Plugin Stage 40: look for handlers for this request */ + ret = mk_plugin_stage_run(MK_PLUGIN_STAGE_40, cr->socket, NULL, cr, sr); + MK_TRACE("STAGE 40 RETURNED: %i", ret); + if (ret == MK_PLUGIN_RET_CONTINUE) { + return ret; + } + /* get file size */ if (sr->file_info->size < 0) { mk_request_error(M_CLIENT_NOT_FOUND, cr, sr, 1, sr->log); diff --git a/src/include/iov.h b/src/include/iov.h index 307f329..ab1741c 100644 --- a/src/include/iov.h +++ b/src/include/iov.h @@ -29,6 +29,7 @@ /* iov separators */ #define MK_IOV_CRLF "\r\n" +#define MK_IOV_CRLFCRLF "\r\n\r\n" #define MK_IOV_LF "\n" #define MK_IOV_SPACE " " #define MK_IOV_HEADER_VALUE ": " @@ -42,6 +43,7 @@ #include "memory.h" mk_pointer mk_iov_crlf; +mk_pointer mk_iov_crlfcrlf; mk_pointer mk_iov_lf; mk_pointer mk_iov_space; mk_pointer mk_iov_header_value; diff --git a/src/include/plugin.h b/src/include/plugin.h index beaecb4..1f61f22 100644 --- a/src/include/plugin.h +++ b/src/include/plugin.h @@ -125,6 +125,7 @@ struct plugin_api void *(*socket_cork_flag) (int, int); void *(*socket_set_tcp_nodelay) (int); void *(*socket_connect) (int, char *, int); + void *(*socket_set_nonblocking) (int); void *(*socket_create) (); void *(*config_create) (char *); void *(*config_free) (struct mk_config *); diff --git a/src/plugin.c b/src/plugin.c index b019612..f4f5ff8 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -229,6 +229,7 @@ void mk_plugin_init() api->socket_cork_flag = (void *) mk_socket_set_cork_flag; api->socket_connect = (void *) mk_socket_connect; api->socket_set_tcp_nodelay = (void *) mk_socket_set_tcp_nodelay; + api->socket_set_nonblocking = (void *) mk_socket_set_nonblocking; api->socket_create = (void *) mk_socket_create; api->config_create = (void *) mk_config_create; api->config_free = (void *) mk_config_free; @@ -281,7 +282,6 @@ int mk_plugin_stage_run(mk_plugin_stage_t stage, struct client_request *cr, struct request *sr) { int ret; - int ret_loop = -1; struct plugin *p; if (stage & MK_PLUGIN_STAGE_10) { @@ -346,8 +346,7 @@ int mk_plugin_stage_run(mk_plugin_stage_t stage, case MK_PLUGIN_RET_NOT_ME: break; case MK_PLUGIN_RET_CONTINUE: - /* Register plugin for next loops */ - return ret_loop; + return MK_PLUGIN_RET_CONTINUE; } p = p->next; } @@ -520,11 +519,19 @@ int mk_plugin_event_read(int socket) { struct plugin_event *event; +#ifdef TRACE + MK_TRACE("Plugin, event read"); +#endif + event = mk_plugin_event_get(socket); if (!event) { return MK_PLUGIN_RET_EVENT_NOT_ME; } + if (event->handler->call_stage_40_event_read) { + event->handler->call_stage_40_event_read(event->cr, event->sr); + } + return MK_PLUGIN_RET_CONTINUE; } @@ -532,6 +539,10 @@ int mk_plugin_event_write(int socket) { struct plugin_event *event; +#ifdef TRACE + MK_TRACE("Plugin, event write fd %i", socket); +#endif + event = mk_plugin_event_get(socket); if (!event) { return MK_PLUGIN_RET_EVENT_NOT_ME; @@ -546,21 +557,29 @@ int mk_plugin_event_write(int socket) int mk_plugin_event_error(int socket) { - printf("\nplugin event error: %i", socket); - fflush(stdout); +#ifdef TRACE + MK_TRACE("Plugin, event error fd %i", socket); +#endif + return 0; } int mk_plugin_event_close(int socket) { - printf("\nplugin event close: %i", socket); - fflush(stdout); + +#ifdef TRACE + MK_TRACE("Plugin, event close fd %i", socket); +#endif + return 0; } int mk_plugin_event_timeout(int socket) { - printf("\nplugin event timeout: %i", socket); - fflush(stdout); + +#ifdef TRACE + MK_TRACE("Plugin, event timeout fd %i", socket); +#endif + return 0; } diff --git a/src/request.c b/src/request.c index d5466c0..72e8744 100644 --- a/src/request.c +++ b/src/request.c @@ -332,6 +332,10 @@ int mk_request_process(struct client_request *cr, struct request *s_request) status = mk_http_init(cr, s_request); +#ifdef TRACE + MK_TRACE("HTTP Init returning %i", status); +#endif + return status; } diff --git a/src/socket.c b/src/socket.c index ff3368f..327cd31 100644 --- a/src/socket.c +++ b/src/socket.c @@ -32,6 +32,7 @@ #include "socket.h" #include "memory.h" +#include "utils.h" /* * Example from: @@ -39,11 +40,21 @@ */ int mk_socket_set_cork_flag(int fd, int state) { + +#ifdef TRACE + MK_TRACE("Socket, set Cork Flag FD %i to %s", fd, (state ? "ON" : "FALSE")); +#endif + return setsockopt(fd, SOL_TCP, TCP_CORK, &state, sizeof(state)); } int mk_socket_set_nonblocking(int sockfd) { + +#ifdef TRACE + MK_TRACE("Socket, set FD %i to non-blocking", sockfd); +#endif + if (fcntl(sockfd, F_SETFL, fcntl(sockfd, F_GETFD, 0) | O_NONBLOCK) == -1) { perror("fcntl"); return -1; @@ -75,53 +86,6 @@ int mk_socket_close(int socket) return close(socket); } -int mk_socket_timeout(int s, char *buf, int len, int timeout, int recv_send) -{ - fd_set fds; - time_t init_time, max_time; - int n = 0, status; - struct timeval tv; - - init_time = time(NULL); - max_time = init_time + timeout; - - FD_ZERO(&fds); - FD_SET(s, &fds); - - tv.tv_sec = timeout; - tv.tv_usec = 0; - - if (recv_send == ST_RECV) - n = select(s + 1, &fds, NULL, NULL, &tv); // recv - else { - n = select(s + 1, NULL, &fds, NULL, &tv); // send - } - - switch (n) { - case 0: - return -2; - break; - case -1: - //pthread_kill(pthread_self(), SIGPIPE); - return -1; - } - - if (recv_send == ST_RECV) { - status = recv(s, buf, len, 0); - } - else { - status = send(s, buf, len, 0); - } - - if (status < 0) { - if (time(NULL) >= max_time) { - //pthread_kill(pthread_self(), SIGPIPE); - } - } - - return status; -} - int mk_socket_create() { int sockfd; -- 2.11.4.GIT