http_tls.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #if defined(CONFIG_USING_TLS)
  2. #include "http_tls.h"
  3. #include "http_parser.h"
  4. static int get_port(const char *url, struct http_parser_url *u)
  5. {
  6. if (u->field_data[UF_PORT].len) {
  7. return strtol(&url[u->field_data[UF_PORT].off], NULL, 10);
  8. } else {
  9. if (strncasecmp(&url[u->field_data[UF_SCHEMA].off], "http", u->field_data[UF_SCHEMA].len) == 0) {
  10. return 80;
  11. } else if (strncasecmp(&url[u->field_data[UF_SCHEMA].off], "https", u->field_data[UF_SCHEMA].len) == 0) {
  12. return 443;
  13. }
  14. }
  15. return 0;
  16. }
  17. /**
  18. * @brief Create a new TLS/SSL connection with a given "HTTP" url
  19. */
  20. tls_t *tls_conn_http_new(const char *url, const tls_cfg_t *cfg)
  21. {
  22. /* Parse URI */
  23. struct http_parser_url u;
  24. http_parser_url_init(&u);
  25. http_parser_parse_url(url, strlen(url), 0, &u);
  26. /* Connect to host */
  27. return tls_conn_new(&url[u.field_data[UF_HOST].off], u.field_data[UF_HOST].len,
  28. get_port(url, &u), cfg);
  29. }
  30. /**
  31. * @brief Create a new non-blocking TLS/SSL connection with a given "HTTP" url
  32. */
  33. int tls_conn_http_new_async(const char *url, const tls_cfg_t *cfg, tls_t *tls)
  34. {
  35. /* Parse URI */
  36. struct http_parser_url u;
  37. http_parser_url_init(&u);
  38. http_parser_parse_url(url, strlen(url), 0, &u);
  39. /* Connect to host */
  40. return tls_conn_new_async(&url[u.field_data[UF_HOST].off], u.field_data[UF_HOST].len,
  41. get_port(url, &u), cfg, tls);
  42. }
  43. #endif