Skip to content

LibWinHttp is a simplified WinHTTP wrapper designed as a Crystal Palace shared library for implant development. Its primary purpose is to facilitate the development of PICO modules that require HTTP/HTTPS transport layer communication.

License

Notifications You must be signed in to change notification settings

pard0p/LibWinHttp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LibWinHttp

LibWinHttp is a simplified WinHTTP wrapper designed as a Crystal Palace shared library for implant development. Its primary purpose is to facilitate the development of PICO modules that require HTTP/HTTPS transport layer communication.

The library provides a lightweight abstraction over Microsoft's WinHTTP API, hiding the complexity of session and connection management to enable straightforward HTTP/HTTPS operations with a simplified, easy-to-use interface.

Key Features

  • Simplified API: Easy-to-use functions for common HTTP operations (GET, POST, PUT, DELETE, HEAD, PATCH).
  • Flexible Headers & Body: Support for custom headers and request bodies in a structured format.
  • Configurable Client: Customizable timeout and User-Agent settings for each HTTP client instance.
  • Connection Reuse: Efficient connection reuse for multiple requests to the same host.

API Reference (HTTP.h)

Core Types

HttpHandle

HTTP client handle containing configuration and state.

  • response_timeout_ms: Response timeout in milliseconds (default: 30000ms).
  • user_agent: Custom User-Agent string (default: "LibHttp/1.0").

HttpMethod

HTTP method enumeration: GET, POST, PUT, DELETE, HEAD, PATCH.

HttpResponse

Response data structure containing:

  • status_code: HTTP status code (e.g., 200, 404, 500).
  • body: Response body as a null-terminated string.
  • body_size: Size of the response body in bytes.
  • content_type: Content-Type header from the response.

HttpHeader

Single header key-value pair:

  • name: Header name (e.g., "Content-Type").
  • value: Header value (e.g., "application/json").

HttpHeaders

Collection of headers:

  • headers: Array of HttpHeader structures.
  • count: Number of headers in the array.

HttpBody

Request body data:

  • data: Pointer to body bytes.
  • size: Size of body in bytes.

HttpURI

Request URI decomposed into components:

  • host: Hostname (e.g., "example.com").
  • port: Port number (e.g., 80 for HTTP, 443 for HTTPS).
  • path: Request path (e.g., "/api/endpoint").

Core Functions

HttpInit

Creates and initializes a new HTTP client handle.

  • Parameters:
    • https_enabled: 1 to enable HTTPS support, 0 to disable.
  • Returns: Pointer to a new HttpHandle structure, or NULL on failure.
  • Ownership: User owns the returned handle and must free it with HttpDestroy().

HttpDestroy

Destroys and cleans up an HTTP client handle.

  • Parameters:
    • handle: HTTP client handle from HttpInit().

HTTP Requests

HttpRequest

Performs an HTTP request.

  • Parameters:
    • handle: HTTP client handle from HttpInit.
    • method: HTTP method to use (GET, POST, PUT, DELETE, HEAD, PATCH).
    • uri: URI containing host, port, and path.
    • headers: Headers collection (can be NULL for no headers).
    • body: Request body (can be NULL for GET/HEAD/DELETE).
    • response: Pointer to HttpResponse structure (will be populated).
  • Returns: TRUE on success, FALSE on failure.

Design Notes

  • Connection Reuse: The same HTTP client can be reused for multiple requests to the same host. The connection is kept open and reused automatically.
  • SSL/TLS Configuration: When https_enabled is set to 1, SSL certificate verification is disabled (trust all certificates) for simplicity.
  • Memory Management: Response bodies and content-type strings are dynamically allocated and must be freed by the caller.

About

LibWinHttp is a simplified WinHTTP wrapper designed as a Crystal Palace shared library for implant development. Its primary purpose is to facilitate the development of PICO modules that require HTTP/HTTPS transport layer communication.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published