20#ifndef FREERDP_LIB_CORE_GATEWAY_HTTP_H 
   21#define FREERDP_LIB_CORE_GATEWAY_HTTP_H 
   23#include <winpr/stream.h> 
   25#include <freerdp/api.h> 
   26#include <freerdp/utils/http.h> 
   28#include "../../crypto/tls.h" 
   32  TransferEncodingUnknown,
 
   33  TransferEncodingIdentity,
 
   34  TransferEncodingChunked
 
   39  ChunkStateLenghHeader,
 
   48  size_t headerFooterPos;
 
 
   54typedef struct s_http_context HttpContext;
 
   56FREERDP_LOCAL 
void http_context_free(HttpContext* context);
 
   58WINPR_ATTR_MALLOC(http_context_free, 1)
 
   59FREERDP_LOCAL HttpContext* http_context_new(
void);
 
   61FREERDP_LOCAL BOOL http_context_set_method(HttpContext* context, const 
char* Method);
 
   62FREERDP_LOCAL const 
char* http_context_get_uri(HttpContext* context);
 
   63FREERDP_LOCAL BOOL http_context_set_uri(HttpContext* context, const 
char* URI);
 
   64FREERDP_LOCAL BOOL http_context_set_user_agent(HttpContext* context, const 
char* UserAgent);
 
   65FREERDP_LOCAL BOOL http_context_set_x_ms_user_agent(HttpContext* context, const 
char* UserAgent);
 
   66FREERDP_LOCAL BOOL http_context_set_host(HttpContext* context, const 
char* Host);
 
   67FREERDP_LOCAL BOOL http_context_set_accept(HttpContext* context, const 
char* Accept);
 
   68FREERDP_LOCAL BOOL http_context_set_cache_control(HttpContext* context, const 
char* CacheControl);
 
   69FREERDP_LOCAL BOOL http_context_set_connection(HttpContext* context, const 
char* Connection);
 
   70FREERDP_LOCAL BOOL http_context_set_pragma(HttpContext* context,
 
   71                                           WINPR_FORMAT_ARG const 
char* Pragma, ...);
 
   72FREERDP_LOCAL BOOL http_context_append_pragma(HttpContext* context,
 
   73                                              WINPR_FORMAT_ARG const 
char* Pragma, ...);
 
   74FREERDP_LOCAL BOOL http_context_set_cookie(HttpContext* context, const 
char* CookieName,
 
   75                                           const 
char* CookieValue);
 
   76FREERDP_LOCAL BOOL http_context_set_rdg_connection_id(HttpContext* context,
 
   77                                                      const GUID* RdgConnectionId);
 
   78FREERDP_LOCAL BOOL http_context_set_rdg_correlation_id(HttpContext* context,
 
   79                                                       const GUID* RdgConnectionId);
 
   80FREERDP_LOCAL BOOL http_context_set_rdg_auth_scheme(HttpContext* context,
 
   81                                                    const 
char* RdgAuthScheme);
 
   82FREERDP_LOCAL BOOL http_context_enable_websocket_upgrade(HttpContext* context, BOOL enable);
 
   83FREERDP_LOCAL BOOL http_context_is_websocket_upgrade_enabled(HttpContext* context);
 
   86typedef struct s_http_request HttpRequest;
 
   88FREERDP_LOCAL 
void http_request_free(HttpRequest* request);
 
   90WINPR_ATTR_MALLOC(http_request_free, 1)
 
   91FREERDP_LOCAL HttpRequest* http_request_new(
void);
 
   93FREERDP_LOCAL BOOL http_request_set_method(HttpRequest* request, const 
char* Method);
 
   94FREERDP_LOCAL BOOL http_request_set_content_type(HttpRequest* request, const 
char* ContentType);
 
   95FREERDP_LOCAL SSIZE_T http_request_get_content_length(HttpRequest* request);
 
   96FREERDP_LOCAL BOOL http_request_set_content_length(HttpRequest* request, 
size_t length);
 
   98FREERDP_LOCAL const 
char* http_request_get_uri(HttpRequest* request);
 
   99FREERDP_LOCAL BOOL http_request_set_uri(HttpRequest* request, const 
char* URI);
 
  100FREERDP_LOCAL BOOL http_request_set_auth_scheme(HttpRequest* request, const 
char* AuthScheme);
 
  101FREERDP_LOCAL BOOL http_request_set_auth_param(HttpRequest* request, const 
char* AuthParam);
 
  102FREERDP_LOCAL BOOL http_request_set_transfer_encoding(HttpRequest* request,
 
  103                                                      TRANSFER_ENCODING TransferEncoding);
 
  105FREERDP_LOCAL 
wStream* http_request_write(HttpContext* context, HttpRequest* request);
 
  107WINPR_ATTR_FORMAT_ARG(3, 4)
 
  108FREERDP_LOCAL BOOL http_request_append_header(
wStream* stream, const 
char* param,
 
  109                                              WINPR_FORMAT_ARG const 
char* value, ...);
 
  112typedef struct s_http_response HttpResponse;
 
  114FREERDP_LOCAL 
void http_response_free(HttpResponse* response);
 
  116WINPR_ATTR_MALLOC(http_response_free, 1)
 
  117FREERDP_LOCAL HttpResponse* http_response_new(
void);
 
  119FREERDP_LOCAL HttpResponse* http_response_recv(rdpTls* tls, BOOL readContentLength);
 
  121FREERDP_LOCAL UINT16 http_response_get_status_code(const HttpResponse* response);
 
  122FREERDP_LOCAL 
size_t http_response_get_body_length(const HttpResponse* response);
 
  123FREERDP_LOCAL const BYTE* http_response_get_body(const HttpResponse* response);
 
  124FREERDP_LOCAL const 
char* http_response_get_auth_token(const HttpResponse* response,
 
  126FREERDP_LOCAL const 
char* http_response_get_setcookie(const HttpResponse* response,
 
  128FREERDP_LOCAL TRANSFER_ENCODING http_response_get_transfer_encoding(const HttpResponse* response);
 
  129FREERDP_LOCAL BOOL http_response_is_websocket(const HttpContext* http,
 
  130                                              const HttpResponse* response);
 
  132#define http_response_log_error_status(log, level, response) \ 
  133  http_response_log_error_status_((log), (level), (response), __FILE__, __LINE__, __func__) 
  134FREERDP_LOCAL 
void http_response_log_error_status_(wLog* log, DWORD level,
 
  135                                                   const HttpResponse* response, 
const char* file,
 
  136                                                   size_t line, 
const char* fkt);
 
  139FREERDP_LOCAL 
int http_chuncked_read(BIO* bio, BYTE* pBuffer, 
size_t size,