Making the URL buffer allocation more explicit by storing it as
an HTTP_String. This provides both the pointer and length, making
the code clearer and more self-documenting.
Use url.scheme.ptr directly for freeing the allocated URL string,
since the scheme is always at the start of a URL. This saves 8 bytes
per connection and simplifies the code.
The previous implementation stored parsed_url which contained pointers
into the user's string literal that could be invalidated. This fix:
1. Allocates a copy of the URL string (url_buffer)
2. Parses the copy so all pointers reference owned memory
3. Removes redundant domain and path fields from HTTP_ClientConn
4. Updates save_cookies to use url.authority.host.text and url.path
5. Updates cleanup code to free url_buffer instead of domain.ptr
This ensures the URL and all its components remain valid for the
lifetime of the connection.
This commit fixes multiple compilation errors introduced by the refactoring:
1. Added missing http_client_conn_free() helper function
2. Fixed cookie_jar reference (cookie_jar->count to client->cookie_jar.count)
3. Restored missing HTTP_ClientConn fields: handle, client, and url
4. Fixed undefined 'conn' variable in http_client_get_builder (changed to 'i')
5. Fixed incorrect field reference (entry.domain.len to domain.len)
6. Added missing closing parenthesis in should_send_cookie
7. Removed duplicate 'path' variable declaration
8. Fixed cookie jar access to use builder.client instead of conn->client
9. Fixed byte_queue_write calls to use .ptr and .len instead of HTTP_String structs
10. Fixed missing -> operators in url_to_connect_target
11. Fixed undefined 'url' variable by using conn->url
12. Fixed headers[i].value to set_cookie.value in save_one_cookie
13. Fixed typo: antry to entry
14. Fixed save_one_cookie parameter type (headers[i] instead of headers[i].value)
15. Fixed print_bytes calls to create HTTP_String structs
16. Added logic to store socket handle when connection is established
17. Updated http_client_get_builder signature to return HTTP_RequestBuilder
18. Updated simple_client.c example to match new API
Implemented missing functionality in the Set-Cookie parser:
1. Completed is_cookie_octet() function to properly validate cookie characters
according to RFC 6265 (excludes CTLs, whitespace, DQUOTE, comma, semicolon, backslash)
2. Fixed http_parse_set_cookie() return type from void to int to properly
report parsing errors
3. Implemented Path attribute parsing to extract cookie path restrictions
4. Fixed HttpOnly attribute bug where it was incorrectly set to false instead of true
5. Added path field to HTTP_SetCookie struct with have_path flag
6. Added missing return 0 statement for successful parsing
7. Exported Set-Cookie parser types and function to public API:
- HTTP_WeekDay, HTTP_Month, HTTP_Date enums/struct
- HTTP_SetCookie struct
- http_parse_set_cookie() function
All changes follow RFC 6265 specification for Set-Cookie header parsing.