/*
 * proxy-polarssl.h - PolarSSL layer for transparent proxy connections
 *
 * Based on proxy-bio.c - Original copyright (c) 2012 The Chromium OS Authors.
 * 
 * This file was adapted by Paul Bakker <p.j.bakker@offspark.com>
 * All rights reserved.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef PROXY_POLARSSL_H
#define PROXY_POLARSSL_H

#include <stdint.h>

typedef struct _proxy_polarssl_ctx proxy_polarssl_ctx;

struct _proxy_polarssl_ctx {
  char *host;
  uint16_t port;
  int connected;

  int (*f_recv)(void *, unsigned char *, size_t);
  int (*f_send)(void *, const unsigned char *, size_t);
  int (*f_connect)(proxy_polarssl_ctx *);

  void *p_recv;               /*!< context for reading operations   */
  void *p_send;               /*!< context for writing operations   */
};

int proxy_polarssl_init(proxy_polarssl_ctx *proxy);
int proxy_polarssl_free(proxy_polarssl_ctx *ctx);

void proxy_polarssl_set_bio(proxy_polarssl_ctx *ctx,
                       int (*f_recv)(void *, unsigned char *, size_t), void *p_recv,
                       int (*f_send)(void *, const unsigned char *, size_t), void *p_send);
int proxy_polarssl_set_scheme(proxy_polarssl_ctx *ctx, const char *scheme);
int proxy_polarssl_set_host(proxy_polarssl_ctx *ctx, const char *host);
void proxy_polarssl_set_port(proxy_polarssl_ctx *ctx, uint16_t port);

int proxy_polarssl_recv(void *ctx, unsigned char *data, size_t len);
int proxy_polarssl_send(void *ctx, const unsigned char *data, size_t len);

#endif /* !PROXY_POLARSSL_H */