a
Fork of http-example by
source/mbed-http/http_parsed_url.h@1:3bff14db67c7, 2017-02-16 (annotated)
- Committer:
- Jan Jongboom
- Date:
- Thu Feb 16 11:13:40 2017 +0100
- Revision:
- 1:3bff14db67c7
Add mbed-http
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Jan Jongboom |
1:3bff14db67c7 | 1 | #ifndef _MBED_HTTP_PARSED_URL_H_ |
| Jan Jongboom |
1:3bff14db67c7 | 2 | #define _MBED_HTTP_PARSED_URL_H_ |
| Jan Jongboom |
1:3bff14db67c7 | 3 | |
| Jan Jongboom |
1:3bff14db67c7 | 4 | #include "http_parser.h" |
| Jan Jongboom |
1:3bff14db67c7 | 5 | |
| Jan Jongboom |
1:3bff14db67c7 | 6 | class ParsedUrl { |
| Jan Jongboom |
1:3bff14db67c7 | 7 | public: |
| Jan Jongboom |
1:3bff14db67c7 | 8 | ParsedUrl(const char* url) { |
| Jan Jongboom |
1:3bff14db67c7 | 9 | struct http_parser_url parsed_url; |
| Jan Jongboom |
1:3bff14db67c7 | 10 | http_parser_parse_url(url, strlen(url), false, &parsed_url); |
| Jan Jongboom |
1:3bff14db67c7 | 11 | |
| Jan Jongboom |
1:3bff14db67c7 | 12 | for (size_t ix = 0; ix < UF_MAX; ix++) { |
| Jan Jongboom |
1:3bff14db67c7 | 13 | const char* value; |
| Jan Jongboom |
1:3bff14db67c7 | 14 | if (parsed_url.field_set & (1 << ix)) { |
| Jan Jongboom |
1:3bff14db67c7 | 15 | value = (const char*)calloc(parsed_url.field_data[ix].len + 1, 1); |
| Jan Jongboom |
1:3bff14db67c7 | 16 | memcpy((void*)value, url + parsed_url.field_data[ix].off, |
| Jan Jongboom |
1:3bff14db67c7 | 17 | parsed_url.field_data[ix].len); |
| Jan Jongboom |
1:3bff14db67c7 | 18 | } |
| Jan Jongboom |
1:3bff14db67c7 | 19 | else { |
| Jan Jongboom |
1:3bff14db67c7 | 20 | value = (const char*)calloc(1, 1); |
| Jan Jongboom |
1:3bff14db67c7 | 21 | } |
| Jan Jongboom |
1:3bff14db67c7 | 22 | |
| Jan Jongboom |
1:3bff14db67c7 | 23 | switch ((http_parser_url_fields)ix) { |
| Jan Jongboom |
1:3bff14db67c7 | 24 | case UF_SCHEMA: _schema = value; break; |
| Jan Jongboom |
1:3bff14db67c7 | 25 | case UF_HOST: _host = value; break; |
| Jan Jongboom |
1:3bff14db67c7 | 26 | case UF_PATH: _path = value; break; |
| Jan Jongboom |
1:3bff14db67c7 | 27 | case UF_QUERY: _query = value; break; |
| Jan Jongboom |
1:3bff14db67c7 | 28 | case UF_USERINFO: _userinfo = value; break; |
| Jan Jongboom |
1:3bff14db67c7 | 29 | default: |
| Jan Jongboom |
1:3bff14db67c7 | 30 | // PORT is already parsed, FRAGMENT is not relevant for HTTP requests |
| Jan Jongboom |
1:3bff14db67c7 | 31 | free((void*)value); |
| Jan Jongboom |
1:3bff14db67c7 | 32 | break; |
| Jan Jongboom |
1:3bff14db67c7 | 33 | } |
| Jan Jongboom |
1:3bff14db67c7 | 34 | } |
| Jan Jongboom |
1:3bff14db67c7 | 35 | |
| Jan Jongboom |
1:3bff14db67c7 | 36 | _port = parsed_url.port; |
| Jan Jongboom |
1:3bff14db67c7 | 37 | if (!_port) { |
| Jan Jongboom |
1:3bff14db67c7 | 38 | if (strcmp(_schema, "https") == 0) { |
| Jan Jongboom |
1:3bff14db67c7 | 39 | _port = 443; |
| Jan Jongboom |
1:3bff14db67c7 | 40 | } |
| Jan Jongboom |
1:3bff14db67c7 | 41 | else { |
| Jan Jongboom |
1:3bff14db67c7 | 42 | _port = 80; |
| Jan Jongboom |
1:3bff14db67c7 | 43 | } |
| Jan Jongboom |
1:3bff14db67c7 | 44 | } |
| Jan Jongboom |
1:3bff14db67c7 | 45 | } |
| Jan Jongboom |
1:3bff14db67c7 | 46 | |
| Jan Jongboom |
1:3bff14db67c7 | 47 | ~ParsedUrl() { |
| Jan Jongboom |
1:3bff14db67c7 | 48 | if (_schema) free((void*)_schema); |
| Jan Jongboom |
1:3bff14db67c7 | 49 | if (_host) free((void*)_host); |
| Jan Jongboom |
1:3bff14db67c7 | 50 | if (_path) free((void*)_path); |
| Jan Jongboom |
1:3bff14db67c7 | 51 | if (_query) free((void*)_query); |
| Jan Jongboom |
1:3bff14db67c7 | 52 | if (_userinfo) free((void*)_userinfo); |
| Jan Jongboom |
1:3bff14db67c7 | 53 | } |
| Jan Jongboom |
1:3bff14db67c7 | 54 | |
| Jan Jongboom |
1:3bff14db67c7 | 55 | uint16_t port() const { return _port; } |
| Jan Jongboom |
1:3bff14db67c7 | 56 | const char* schema() const { return _schema; } |
| Jan Jongboom |
1:3bff14db67c7 | 57 | const char* host() const { return _host; } |
| Jan Jongboom |
1:3bff14db67c7 | 58 | const char* path() const { return _path; } |
| Jan Jongboom |
1:3bff14db67c7 | 59 | const char* query() const { return _query; } |
| Jan Jongboom |
1:3bff14db67c7 | 60 | const char* userinfo() const { return _userinfo; } |
| Jan Jongboom |
1:3bff14db67c7 | 61 | |
| Jan Jongboom |
1:3bff14db67c7 | 62 | private: |
| Jan Jongboom |
1:3bff14db67c7 | 63 | uint16_t _port; |
| Jan Jongboom |
1:3bff14db67c7 | 64 | const char* _schema; |
| Jan Jongboom |
1:3bff14db67c7 | 65 | const char* _host; |
| Jan Jongboom |
1:3bff14db67c7 | 66 | const char* _path; |
| Jan Jongboom |
1:3bff14db67c7 | 67 | const char* _query; |
| Jan Jongboom |
1:3bff14db67c7 | 68 | const char* _userinfo; |
| Jan Jongboom |
1:3bff14db67c7 | 69 | }; |
| Jan Jongboom |
1:3bff14db67c7 | 70 | |
| Jan Jongboom |
1:3bff14db67c7 | 71 | #endif // _MBED_HTTP_PARSED_URL_H_ |
