Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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_ |
