httpd.c 1023 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /* snac - A simple, minimalistic ActivityPub instance */
  2. /* copyright (c) 2022 grunfink - MIT license */
  3. #include "xs.h"
  4. #include "xs_encdec.h"
  5. #include "xs_json.h"
  6. #include "xs_socket.h"
  7. #include "xs_httpd.h"
  8. #include "snac.h"
  9. void httpd_connection(int rs)
  10. /* the connection loop */
  11. {
  12. FILE *f;
  13. xs *req;
  14. f = xs_socket_accept(rs);
  15. req = xs_httpd_request(f);
  16. {
  17. xs *j = xs_json_dumps_pp(req, 4);
  18. printf("%s\n", j);
  19. }
  20. fclose(f);
  21. }
  22. void httpd(void)
  23. /* starts the server */
  24. {
  25. char *address;
  26. int port;
  27. int rs;
  28. address = xs_dict_get(srv_config, "address");
  29. port = xs_number_get(xs_dict_get(srv_config, "port"));
  30. if ((rs = xs_socket_server(address, port)) == -1) {
  31. srv_log(xs_fmt("cannot bind socket to %s:%d", address, port));
  32. return;
  33. }
  34. srv_running = 1;
  35. srv_log(xs_fmt("httpd start %s:%d", address, port));
  36. for (;;) {
  37. httpd_connection(rs);
  38. }
  39. srv_log(xs_fmt("httpd stop %s:%d", address, port));
  40. }