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 mbed-http by
source/http_parsed_url.h@14:5f9acddaa0a4, 2017-03-29 (annotated)
- Committer:
- Matthew Else
- Date:
- Wed Mar 29 17:26:14 2017 +0100
- Revision:
- 14:5f9acddaa0a4
- Parent:
- 9:1289162d9530
Tidy up chunked detection
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jan Jongboom |
0:910f5949759f | 1 | /* |
Jan Jongboom |
0:910f5949759f | 2 | * PackageLicenseDeclared: Apache-2.0 |
Jan Jongboom |
0:910f5949759f | 3 | * Copyright (c) 2017 ARM Limited |
Jan Jongboom |
0:910f5949759f | 4 | * |
Jan Jongboom |
0:910f5949759f | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Jan Jongboom |
0:910f5949759f | 6 | * you may not use this file except in compliance with the License. |
Jan Jongboom |
0:910f5949759f | 7 | * You may obtain a copy of the License at |
Jan Jongboom |
0:910f5949759f | 8 | * |
Jan Jongboom |
0:910f5949759f | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
Jan Jongboom |
0:910f5949759f | 10 | * |
Jan Jongboom |
0:910f5949759f | 11 | * Unless required by applicable law or agreed to in writing, software |
Jan Jongboom |
0:910f5949759f | 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
Jan Jongboom |
0:910f5949759f | 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Jan Jongboom |
0:910f5949759f | 14 | * See the License for the specific language governing permissions and |
Jan Jongboom |
0:910f5949759f | 15 | * limitations under the License. |
Jan Jongboom |
0:910f5949759f | 16 | */ |
Jan Jongboom |
0:910f5949759f | 17 | |
Jan Jongboom |
0:910f5949759f | 18 | #ifndef _MBED_HTTP_PARSED_URL_H_ |
Jan Jongboom |
0:910f5949759f | 19 | #define _MBED_HTTP_PARSED_URL_H_ |
Jan Jongboom |
0:910f5949759f | 20 | |
Jan Jongboom |
0:910f5949759f | 21 | #include "http_parser.h" |
Jan Jongboom |
0:910f5949759f | 22 | |
Jan Jongboom |
0:910f5949759f | 23 | class ParsedUrl { |
Jan Jongboom |
0:910f5949759f | 24 | public: |
Jan Jongboom |
0:910f5949759f | 25 | ParsedUrl(const char* url) { |
Jan Jongboom |
0:910f5949759f | 26 | struct http_parser_url parsed_url; |
Jan Jongboom |
0:910f5949759f | 27 | http_parser_parse_url(url, strlen(url), false, &parsed_url); |
Jan Jongboom |
0:910f5949759f | 28 | |
Jan Jongboom |
0:910f5949759f | 29 | for (size_t ix = 0; ix < UF_MAX; ix++) { |
Jan Jongboom |
9:1289162d9530 | 30 | char* value; |
Jan Jongboom |
0:910f5949759f | 31 | if (parsed_url.field_set & (1 << ix)) { |
Jan Jongboom |
9:1289162d9530 | 32 | value = (char*)calloc(parsed_url.field_data[ix].len + 1, 1); |
Jan Jongboom |
0:910f5949759f | 33 | memcpy((void*)value, url + parsed_url.field_data[ix].off, |
Jan Jongboom |
0:910f5949759f | 34 | parsed_url.field_data[ix].len); |
Jan Jongboom |
0:910f5949759f | 35 | } |
Jan Jongboom |
0:910f5949759f | 36 | else { |
Jan Jongboom |
9:1289162d9530 | 37 | value = (char*)calloc(1, 1); |
Jan Jongboom |
0:910f5949759f | 38 | } |
Jan Jongboom |
0:910f5949759f | 39 | |
Jan Jongboom |
0:910f5949759f | 40 | switch ((http_parser_url_fields)ix) { |
Jan Jongboom |
0:910f5949759f | 41 | case UF_SCHEMA: _schema = value; break; |
Jan Jongboom |
0:910f5949759f | 42 | case UF_HOST: _host = value; break; |
Jan Jongboom |
0:910f5949759f | 43 | case UF_PATH: _path = value; break; |
Jan Jongboom |
0:910f5949759f | 44 | case UF_QUERY: _query = value; break; |
Jan Jongboom |
0:910f5949759f | 45 | case UF_USERINFO: _userinfo = value; break; |
Jan Jongboom |
0:910f5949759f | 46 | default: |
Jan Jongboom |
0:910f5949759f | 47 | // PORT is already parsed, FRAGMENT is not relevant for HTTP requests |
Jan Jongboom |
0:910f5949759f | 48 | free((void*)value); |
Jan Jongboom |
0:910f5949759f | 49 | break; |
Jan Jongboom |
0:910f5949759f | 50 | } |
Jan Jongboom |
0:910f5949759f | 51 | } |
Jan Jongboom |
0:910f5949759f | 52 | |
Jan Jongboom |
0:910f5949759f | 53 | _port = parsed_url.port; |
Jan Jongboom |
0:910f5949759f | 54 | if (!_port) { |
Jan Jongboom |
0:910f5949759f | 55 | if (strcmp(_schema, "https") == 0) { |
Jan Jongboom |
0:910f5949759f | 56 | _port = 443; |
Jan Jongboom |
0:910f5949759f | 57 | } |
Jan Jongboom |
0:910f5949759f | 58 | else { |
Jan Jongboom |
0:910f5949759f | 59 | _port = 80; |
Jan Jongboom |
0:910f5949759f | 60 | } |
Jan Jongboom |
0:910f5949759f | 61 | } |
Jan Jongboom |
9:1289162d9530 | 62 | |
Jan Jongboom |
9:1289162d9530 | 63 | if (strcmp(_path, "") == 0) { |
Jan Jongboom |
9:1289162d9530 | 64 | _path = (char*)calloc(2, 1); |
Jan Jongboom |
9:1289162d9530 | 65 | _path[0] = '/'; |
Jan Jongboom |
9:1289162d9530 | 66 | } |
Jan Jongboom |
0:910f5949759f | 67 | } |
Jan Jongboom |
0:910f5949759f | 68 | |
Jan Jongboom |
0:910f5949759f | 69 | ~ParsedUrl() { |
Jan Jongboom |
0:910f5949759f | 70 | if (_schema) free((void*)_schema); |
Jan Jongboom |
0:910f5949759f | 71 | if (_host) free((void*)_host); |
Jan Jongboom |
0:910f5949759f | 72 | if (_path) free((void*)_path); |
Jan Jongboom |
0:910f5949759f | 73 | if (_query) free((void*)_query); |
Jan Jongboom |
0:910f5949759f | 74 | if (_userinfo) free((void*)_userinfo); |
Jan Jongboom |
0:910f5949759f | 75 | } |
Jan Jongboom |
0:910f5949759f | 76 | |
Jan Jongboom |
0:910f5949759f | 77 | uint16_t port() const { return _port; } |
Jan Jongboom |
9:1289162d9530 | 78 | char* schema() const { return _schema; } |
Jan Jongboom |
9:1289162d9530 | 79 | char* host() const { return _host; } |
Jan Jongboom |
9:1289162d9530 | 80 | char* path() const { return _path; } |
Jan Jongboom |
9:1289162d9530 | 81 | char* query() const { return _query; } |
Jan Jongboom |
9:1289162d9530 | 82 | char* userinfo() const { return _userinfo; } |
Jan Jongboom |
0:910f5949759f | 83 | |
Jan Jongboom |
0:910f5949759f | 84 | private: |
Jan Jongboom |
0:910f5949759f | 85 | uint16_t _port; |
Jan Jongboom |
9:1289162d9530 | 86 | char* _schema; |
Jan Jongboom |
9:1289162d9530 | 87 | char* _host; |
Jan Jongboom |
9:1289162d9530 | 88 | char* _path; |
Jan Jongboom |
9:1289162d9530 | 89 | char* _query; |
Jan Jongboom |
9:1289162d9530 | 90 | char* _userinfo; |
Jan Jongboom |
0:910f5949759f | 91 | }; |
Jan Jongboom |
0:910f5949759f | 92 | |
Jan Jongboom |
0:910f5949759f | 93 | #endif // _MBED_HTTP_PARSED_URL_H_ |