src/server/daemon/httplistener.c

changeset 19
d680536f8c2f
parent 15
cff9c4101dd7
child 20
7b235fa88008
equal deleted inserted replaced
18:73aacbf6e492 19:d680536f8c2f
48 48
49 #include "../ucx/map.h" 49 #include "../ucx/map.h"
50 #include "httplistener.h" 50 #include "httplistener.h"
51 51
52 #include "session.h" 52 #include "session.h"
53 53 #include "configmanager.h"
54 UcxMap *listener_map = NULL;
55 54
56 55
57 int start_all_listener() { 56 int start_all_listener() {
58 HttpListener *listener = get_http_listener("default"); 57 ServerConfiguration *conf = cfgmgr_get_server_config();
59 http_listener_start(listener); 58 UcxList *ls = conf->listeners;
59 while(ls) {
60 HttpListener *listener = ls->data;
61 http_listener_start(listener);
62 ls = ls->next;
63 }
60 64
61 return 0; 65 return 0;
62 }
63
64 HttpListener* get_http_listener(char *name) {
65 return ucx_map_cstr_get(listener_map, name);
66 } 66 }
67 67
68 68
69 HttpListener* http_listener_new(ListenerConfig *conf) { 69 HttpListener* http_listener_new(ListenerConfig *conf) {
70 HttpListener *listener = malloc(sizeof(HttpListener)); 70 HttpListener *listener = malloc(sizeof(HttpListener));
71 listener->name = conf->name;
71 listener->session_handler = create_basic_session_handler(); 72 listener->session_handler = create_basic_session_handler();
72 listener->nacceptors = conf->nacceptors; 73 listener->nacceptors = conf->nacceptors;
73 74
74 struct sockaddr_in servaddr; /* server address */ 75 struct sockaddr_in servaddr; /* server address */
75 76
102 listener->acceptors = calloc(listener->nacceptors, sizeof(void*)); 103 listener->acceptors = calloc(listener->nacceptors, sizeof(void*));
103 for (int i=0;i<listener->nacceptors;i++) { 104 for (int i=0;i<listener->nacceptors;i++) {
104 listener->acceptors[i] = acceptor_new(listener); 105 listener->acceptors[i] = acceptor_new(listener);
105 } 106 }
106 107
107 if(listener_map == NULL) {
108 listener_map = ucx_map_new(8);
109 }
110 ucx_map_cstr_put(listener_map, conf->name, listener);
111 return listener; 108 return listener;
112 } 109 }
113 110
114 int http_listener_start(HttpListener *listener) { 111 int http_listener_start(HttpListener *listener) {
115 printf("INFO: start listener\n"); 112 printf("INFO: start listener\n");
121 118
122 /* start acceptor threads */ 119 /* start acceptor threads */
123 for (int i=0;i<listener->nacceptors;i++) { 120 for (int i=0;i<listener->nacceptors;i++) {
124 acceptor_start(listener->acceptors[i]); 121 acceptor_start(listener->acceptors[i]);
125 } 122 }
123
124 return 0;
126 } 125 }
127 126
128 127
129 128
130 Acceptor* acceptor_new(HttpListener *listener) { 129 Acceptor* acceptor_new(HttpListener *listener) {
165 164
166 /* create Connection object */ 165 /* create Connection object */
167 Connection *conn = malloc(sizeof(Connection)); 166 Connection *conn = malloc(sizeof(Connection));
168 conn->address = ca; 167 conn->address = ca;
169 conn->fd = clientfd; 168 conn->fd = clientfd;
169 conn->listener = listener;
170 170
171 /* enqueue the connection */ 171 /* enqueue the connection */
172 listener->session_handler->enqueue_connection( 172 listener->session_handler->enqueue_connection(
173 listener->session_handler, 173 listener->session_handler,
174 conn); 174 conn);

mercurial