/* Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT License. */ #pragma once #include #define HTTPS_PORT "443" // Returns address of new allocated ssl context, NULL on failure. // This should just be called once. // Context is stored globally inside library. Use retrun value just to check for success/failure checks. extern SSL_CTX* https_init(void); // Free ssl context extern void https_free(void); // Makes and returns ssl connection, NULL on failure. extern SSL* https_connect(int sockfd); // Free ssl connection void https_disconnect(SSL* conn); // Frees the connection extern void https_disconnect(SSL* conn); // Returns 0 on success, -1 on failure. // Params: // hostname - Something like "foo.com" // request_path - Somthing like "anything/really". Could also include query parameters like "?token=XXX extern int https_send_get(SSL *ssl, const char *hostname, const char *request_path); // Returns 0 on success, -1 on failure. // Params similar to https_send_get(). extern int https_send_post(SSL *ssl, const char *hostname, const char *request_path, const char *data, int data_len); // Returns a c string on success, NULL on failure. You are responsible for // freeing the returned c string. // // This function considers any HTTP response to be a success, even if the // response describes an HTTP error, eg a "404 Not Found" status code. Once this // function has succeeded, you will typically call http_get_status_code() // on the returned string. // // Params: // body_offset - On success will be set to the position in the returned // string of the start of the message body. extern char *https_fetch_response(SSL *ssl, int *body_offset);