Browse Source

H2O: Code clean-up (#4540)

Test implementations are now mostly in separate files.
Anton Kirilov 6 years ago
parent
commit
5fe9a2d81b

+ 3 - 0
frameworks/C/h2o/src/cache.c

@@ -18,6 +18,9 @@
 */
 */
 
 
 #include <assert.h>
 #include <assert.h>
+#include <pthread.h>
+#include <stdint.h>
+#include <stdlib.h>
 #include <string.h>
 #include <string.h>
 #include <h2o/cache.h>
 #include <h2o/cache.h>
 
 

+ 2 - 0
frameworks/C/h2o/src/cache.h

@@ -21,6 +21,8 @@
 
 
 #define CACHE_H_
 #define CACHE_H_
 
 
+#include <pthread.h>
+#include <stdint.h>
 #include <h2o/cache.h>
 #include <h2o/cache.h>
 
 
 typedef struct {
 typedef struct {

+ 0 - 1
frameworks/C/h2o/src/fortune.h

@@ -22,7 +22,6 @@
 #define FORTUNE_H_
 #define FORTUNE_H_
 
 
 #include <h2o.h>
 #include <h2o.h>
-#include <postgresql/libpq-fe.h>
 
 
 #include "list.h"
 #include "list.h"
 
 

+ 68 - 0
frameworks/C/h2o/src/json_serializer.c

@@ -0,0 +1,68 @@
+/*
+ Copyright (c) 2019 Anton Valentinov Kirilov
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+ associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include <h2o.h>
+#include <stdbool.h>
+#include <string.h>
+#include <yajl/yajl_gen.h>
+
+#include "error.h"
+#include "json_serializer.h"
+#include "plaintext.h"
+#include "request_handler.h"
+#include "thread.h"
+#include "utility.h"
+
+int json_serializer(struct st_h2o_handler_t *self, h2o_req_t *req)
+{
+	IGNORE_FUNCTION_PARAMETER(self);
+
+	thread_context_t * const ctx = H2O_STRUCT_FROM_MEMBER(thread_context_t,
+	                                                      event_loop.h2o_ctx,
+	                                                      req->conn->ctx);
+	json_generator_t * const gen = get_json_generator(&ctx->json_generator,
+	                                                  &ctx->json_generator_num);
+	// volatile is used to ensure that the object is instantiated every time
+	// the function is called.
+	const volatile struct {
+		const char *message;
+	} object = {HELLO_RESPONSE};
+
+	if (gen) {
+		CHECK_YAJL_STATUS(yajl_gen_map_open, gen->gen);
+		CHECK_YAJL_STATUS(yajl_gen_string, gen->gen, YAJL_STRLIT("message"));
+		CHECK_YAJL_STATUS(yajl_gen_string,
+		                  gen->gen,
+		                  (const unsigned char *) object.message,
+		                  strlen(object.message));
+		CHECK_YAJL_STATUS(yajl_gen_map_close, gen->gen);
+
+		// The response is small enough, so that it is simpler to copy it
+		// instead of doing a delayed deallocation of the JSON generator.
+		if (!send_json_response(gen, true, req))
+			return 0;
+
+error_yajl:
+		// If there is a problem with the generator, don't reuse it.
+		free_json_generator(gen, NULL, NULL, 0);
+	}
+
+	send_error(INTERNAL_SERVER_ERROR, REQ_ERROR, req);
+	return 0;
+}

+ 28 - 0
frameworks/C/h2o/src/json_serializer.h

@@ -0,0 +1,28 @@
+/*
+ Copyright (c) 2019 Anton Valentinov Kirilov
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+ associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef JSON_SERIALIZER_H_
+
+#define JSON_SERIALIZER_H_
+
+#include <h2o.h>
+
+int json_serializer(struct st_h2o_handler_t *self, h2o_req_t *req);
+
+#endif // JSON_SERIALIZER_H_

+ 39 - 0
frameworks/C/h2o/src/plaintext.c

@@ -0,0 +1,39 @@
+/*
+ Copyright (c) 2019 Anton Valentinov Kirilov
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+ associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#include <h2o.h>
+#include <string.h>
+
+#include "plaintext.h"
+#include "request_handler.h"
+#include "utility.h"
+
+int plaintext(struct st_h2o_handler_t *self, h2o_req_t *req)
+{
+	IGNORE_FUNCTION_PARAMETER(self);
+
+	h2o_generator_t generator;
+	h2o_iovec_t body = {.base = HELLO_RESPONSE, .len = sizeof(HELLO_RESPONSE) - 1};
+
+	memset(&generator, 0, sizeof(generator));
+	set_default_response_param(PLAIN, sizeof(HELLO_RESPONSE) - 1, req);
+	h2o_start_response(req, &generator);
+	h2o_send(req, &body, 1, H2O_SEND_STATE_FINAL);
+	return 0;
+}

+ 30 - 0
frameworks/C/h2o/src/plaintext.h

@@ -0,0 +1,30 @@
+/*
+ Copyright (c) 2019 Anton Valentinov Kirilov
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+ associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef PLAINTEXT_H_
+
+#define PLAINTEXT_H_
+
+#include <h2o.h>
+
+#define HELLO_RESPONSE "Hello, World!"
+
+int plaintext(struct st_h2o_handler_t *self, h2o_req_t *req);
+
+#endif // PLAINTEXT_H_

+ 2 - 62
frameworks/C/h2o/src/request_handler.c

@@ -17,79 +17,19 @@
  OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 */
 
 
-#include <assert.h>
 #include <h2o.h>
 #include <h2o.h>
-#include <stdalign.h>
 #include <stdbool.h>
 #include <stdbool.h>
-#include <stdint.h>
 #include <string.h>
 #include <string.h>
 #include <yajl/yajl_gen.h>
 #include <yajl/yajl_gen.h>
 
 
-#include "error.h"
 #include "fortune.h"
 #include "fortune.h"
+#include "json_serializer.h"
+#include "plaintext.h"
 #include "request_handler.h"
 #include "request_handler.h"
 #include "thread.h"
 #include "thread.h"
 #include "utility.h"
 #include "utility.h"
 #include "world.h"
 #include "world.h"
 
 
-#define HELLO_RESPONSE "Hello, World!"
-
-static int json_serializer(struct st_h2o_handler_t *self, h2o_req_t *req);
-static int plaintext(struct st_h2o_handler_t *self, h2o_req_t *req);
-static const char *status_code_to_string(http_status_code_t status_code);
-
-static int json_serializer(struct st_h2o_handler_t *self, h2o_req_t *req)
-{
-	IGNORE_FUNCTION_PARAMETER(self);
-
-	thread_context_t * const ctx = H2O_STRUCT_FROM_MEMBER(thread_context_t,
-	                                                      event_loop.h2o_ctx,
-	                                                      req->conn->ctx);
-	json_generator_t * const gen = get_json_generator(&ctx->json_generator,
-	                                                  &ctx->json_generator_num);
-	// volatile is used to ensure that the object is instantiated every time
-	// the function is called.
-	const volatile struct {
-		const char *message;
-	} object = {HELLO_RESPONSE};
-
-	if (gen) {
-		CHECK_YAJL_STATUS(yajl_gen_map_open, gen->gen);
-		CHECK_YAJL_STATUS(yajl_gen_string, gen->gen, YAJL_STRLIT("message"));
-		CHECK_YAJL_STATUS(yajl_gen_string,
-		                  gen->gen,
-		                  (const unsigned char *) object.message,
-		                  strlen(object.message));
-		CHECK_YAJL_STATUS(yajl_gen_map_close, gen->gen);
-
-		// The response is small enough, so that it is simpler to copy it
-		// instead of doing a delayed deallocation of the JSON generator.
-		if (!send_json_response(gen, true, req))
-			return 0;
-
-error_yajl:
-		// If there is a problem with the generator, don't reuse it.
-		free_json_generator(gen, NULL, NULL, 0);
-	}
-
-	send_error(INTERNAL_SERVER_ERROR, REQ_ERROR, req);
-	return 0;
-}
-
-static int plaintext(struct st_h2o_handler_t *self, h2o_req_t *req)
-{
-	IGNORE_FUNCTION_PARAMETER(self);
-
-	h2o_generator_t generator;
-	h2o_iovec_t body = {.base = HELLO_RESPONSE, .len = sizeof(HELLO_RESPONSE) - 1};
-
-	memset(&generator, 0, sizeof(generator));
-	set_default_response_param(PLAIN, sizeof(HELLO_RESPONSE) - 1, req);
-	h2o_start_response(req, &generator);
-	h2o_send(req, &body, 1, H2O_SEND_STATE_FINAL);
-	return 0;
-}
-
 static const char *status_code_to_string(http_status_code_t status_code)
 static const char *status_code_to_string(http_status_code_t status_code)
 {
 {
 	const char *ret;
 	const char *ret;

+ 3 - 4
frameworks/C/h2o/src/request_handler.h

@@ -17,13 +17,12 @@
  OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 */
 
 
-#ifndef REQUEST_H_
+#ifndef REQUEST_HANDLER_H_
 
 
-#define REQUEST_H_
+#define REQUEST_HANDLER_H_
 
 
 #include <h2o.h>
 #include <h2o.h>
 #include <stdbool.h>
 #include <stdbool.h>
-#include <yajl/yajl_gen.h>
 
 
 #include "utility.h"
 #include "utility.h"
 
 
@@ -55,4 +54,4 @@ void set_default_response_param(content_type_t content_type,
                                 size_t content_length,
                                 size_t content_length,
                                 h2o_req_t *req);
                                 h2o_req_t *req);
 
 
-#endif // REQUEST_H_
+#endif // REQUEST_HANDLER_H_