uint8_t test_response_write ( ) { Response *response = response_create(0); response->write = test_write; response_write(response, (uint8_t *) "Hello"); check((response->headers_sent == 1), "headers are sent"); check((response->code == 200), "response code is set to 200"); const char *expected = "HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\nHello"; check((strcmp((char *) write_buffer, expected) == 0), "output is correct"); reset_write(); response = response_create(0); response->write = test_write; check((response->headers_sent == 0), "response_create returns a clean response"); response_set_content_type(response, (uint8_t *) "test/foo"); check((strcmp((char *) response->content_type, "test/foo") == 0), "the content_type is set correctly"); response_write(response, (uint8_t *) "Hello"); check((response->headers_sent == 1), "headers are sent"); check((response->code == 200), "response code is set to 200"); const char *expected2 = "HTTP/1.1 200 OK\r\nContent-type: test/foo\r\n\r\nHello"; check((strcmp((char *) write_buffer, expected2) == 0), "output is correct"); reset_write(); response = response_create(0); response->write = test_write; response->code = 404; check((response->code == 404), "the response code is set correctly"); response_write(response, (uint8_t *) "Hello"); check((response->headers_sent == 1), "headers are sent"); check((response->code == 404), "response code is still set to 404"); const char *expected3 = "HTTP/1.1 404 NOT FOUND\r\nContent-type: text/html\r\n\r\nHello"; check((strcmp((char *) write_buffer, expected3) == 0), "output is correct"); done(); }
void cmd_adduser(void) { Ceo__AddUser *in_proto; Ceo__AddUserResponse *out_proto = response_create(); struct strbuf in = STRBUF_INIT; struct strbuf out = STRBUF_INIT; if (strbuf_read(&in, STDIN_FILENO, 0) < 0) fatalpe("read"); in_proto = ceo__add_user__unpack(&protobuf_c_default_allocator, in.len, (uint8_t *)in.buf); if (!in_proto) fatal("malformed add user message"); char *client = getenv("CEO_USER"); if (!client) fatal("environment variable CEO_USER is not set"); adduser(in_proto, out_proto, client); strbuf_grow(&out, ceo__add_user_response__get_packed_size(out_proto)); strbuf_setlen(&out, ceo__add_user_response__pack(out_proto, (uint8_t *)out.buf)); if (full_write(STDOUT_FILENO, out.buf, out.len)) fatalpe("write: stdout"); ceo__add_user__free_unpacked(in_proto, &protobuf_c_default_allocator); response_delete(out_proto); strbuf_release(&in); strbuf_release(&out); }
void route (WiFiClient socket, Router *router, uint8_t *req) { #else void route (uint8_t socket, Router *router, uint8_t *req) { #endif Request *request; Response *response; request = parse_request(req); response = response_create(socket); if (router->write) { response->write = router->write; } if (request->method == HTTP_ERROR) { five_hundred(request, response); } else { int8_t found = find_route(router, request->path); if (found != -1) { router->routes[found].method(request, response); } else { four_oh_four(request, response); } } }
/* * utilities */ static void test_setup(void) { req = request_create(); rsp = response_create(); buf = buf_create(); }
HttpClient *httpclient_create(char *host, char *port){ HttpClient *httpClient; //request_init(); httpClient = (HttpClient *)malloc(sizeof(HttpClient)); if(httpClient == NULL){ printf("failed to create httpClient instance\n"); return NULL; } httpClient->request = request_create(host, port);; httpClient->response = response_create(); return httpClient; }