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"); |
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); |