FFmpeg
Data Structures | Macros | Functions | Variables
tls_gnutls.c File Reference
#include <errno.h>
#include <gnutls/gnutls.h>
#include <gnutls/dtls.h>
#include <gnutls/x509.h>
#include "avformat.h"
#include "network.h"
#include "os_support.h"
#include "url.h"
#include "tls.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "libavutil/thread.h"
#include "libavutil/random_seed.h"

Go to the source code of this file.

Data Structures

struct  TLSContext
 

Macros

#define GNUTLS_VERSION_NUMBER   LIBGNUTLS_VERSION_NUMBER
 
#define MAX_MD_SIZE   64
 

Functions

static int pkey_to_pem_string (gnutls_x509_privkey_t key, char *out, size_t out_sz)
 
static int crt_to_pem_string (gnutls_x509_crt_t crt, char *out, size_t out_sz)
 
static int gnutls_x509_fingerprint (gnutls_x509_crt_t cert, char **fingerprint)
 
int ff_ssl_read_key_cert (char *key_url, char *crt_url, char *key_buf, size_t key_sz, char *crt_buf, size_t crt_sz, char **fingerprint)
 
static int gnutls_gen_private_key (gnutls_x509_privkey_t *key)
 
static int gnutls_gen_certificate (gnutls_x509_privkey_t key, gnutls_x509_crt_t *crt, char **fingerprint)
 
int ff_ssl_gen_key_cert (char *key_buf, size_t key_sz, char *cert_buf, size_t cert_sz, char **fingerprint)
 
void ff_gnutls_init (void)
 
void ff_gnutls_deinit (void)
 
int ff_tls_set_external_socket (URLContext *h, URLContext *sock)
 
int ff_dtls_export_materials (URLContext *h, char *dtls_srtp_materials, size_t materials_sz)
 
static int print_tls_error (URLContext *h, int ret)
 
static int tls_close (URLContext *h)
 
static ssize_t gnutls_url_pull (gnutls_transport_ptr_t transport, void *buf, size_t len)
 
static ssize_t gnutls_url_push (gnutls_transport_ptr_t transport, const void *buf, size_t len)
 
static int gnutls_pull_timeout (gnutls_transport_ptr_t ptr, unsigned int ms)
 
static int tls_handshake (URLContext *h)
 
static int tls_open (URLContext *h, const char *uri, int flags, AVDictionary **options)
 
static int dtls_open (URLContext *h, const char *uri, int flags, AVDictionary **options)
 
static int tls_read (URLContext *h, uint8_t *buf, int size)
 
static int tls_write (URLContext *h, const uint8_t *buf, int size)
 
static int tls_get_file_handle (URLContext *h)
 
static int tls_get_short_seek (URLContext *h)
 

Variables

static AVMutex gnutls_mutex = AV_MUTEX_INITIALIZER
 
static const AVOption options []
 
static const AVClass tls_class
 
const URLProtocol ff_tls_protocol
 
static const AVClass dtls_class
 
const URLProtocol ff_dtls_protocol
 

Macro Definition Documentation

◆ GNUTLS_VERSION_NUMBER

#define GNUTLS_VERSION_NUMBER   LIBGNUTLS_VERSION_NUMBER

Definition at line 39 of file tls_gnutls.c.

◆ MAX_MD_SIZE

#define MAX_MD_SIZE   64

Definition at line 47 of file tls_gnutls.c.

Function Documentation

◆ pkey_to_pem_string()

static int pkey_to_pem_string ( gnutls_x509_privkey_t  key,
char *  out,
size_t  out_sz 
)
static

Definition at line 49 of file tls_gnutls.c.

Referenced by ff_ssl_gen_key_cert(), and ff_ssl_read_key_cert().

◆ crt_to_pem_string()

static int crt_to_pem_string ( gnutls_x509_crt_t  crt,
char *  out,
size_t  out_sz 
)
static

Definition at line 69 of file tls_gnutls.c.

Referenced by ff_ssl_gen_key_cert(), and ff_ssl_read_key_cert().

◆ gnutls_x509_fingerprint()

static int gnutls_x509_fingerprint ( gnutls_x509_crt_t  cert,
char **  fingerprint 
)
static

Definition at line 89 of file tls_gnutls.c.

Referenced by ff_ssl_read_key_cert(), and gnutls_gen_certificate().

◆ ff_ssl_read_key_cert()

int ff_ssl_read_key_cert ( char *  key_url,
char *  crt_url,
char *  key_buf,
size_t  key_sz,
char *  crt_buf,
size_t  crt_sz,
char **  fingerprint 
)

Definition at line 112 of file tls_gnutls.c.

◆ gnutls_gen_private_key()

static int gnutls_gen_private_key ( gnutls_x509_privkey_t *  key)
static

Definition at line 189 of file tls_gnutls.c.

Referenced by ff_ssl_gen_key_cert(), and tls_open().

◆ gnutls_gen_certificate()

static int gnutls_gen_certificate ( gnutls_x509_privkey_t  key,
gnutls_x509_crt_t *  crt,
char **  fingerprint 
)
static

See https://gnutls.org/manual/gnutls.html#gnutls_005fx509_005fcrt_005fset_005fserial-1 The provided serial should be a big-endian positive number (i.e. its leftmost bit should be zero).

Definition at line 215 of file tls_gnutls.c.

Referenced by ff_ssl_gen_key_cert(), and tls_open().

◆ ff_ssl_gen_key_cert()

int ff_ssl_gen_key_cert ( char *  key_buf,
size_t  key_sz,
char *  cert_buf,
size_t  cert_sz,
char **  fingerprint 
)

Definition at line 296 of file tls_gnutls.c.

◆ ff_gnutls_init()

void ff_gnutls_init ( void  )

Definition at line 345 of file tls_gnutls.c.

Referenced by ff_tls_init(), and tls_open().

◆ ff_gnutls_deinit()

void ff_gnutls_deinit ( void  )

Definition at line 356 of file tls_gnutls.c.

Referenced by ff_tls_deinit(), and tls_close().

◆ ff_tls_set_external_socket()

int ff_tls_set_external_socket ( URLContext h,
URLContext sock 
)

Definition at line 363 of file tls_gnutls.c.

◆ ff_dtls_export_materials()

int ff_dtls_export_materials ( URLContext h,
char *  dtls_srtp_materials,
size_t  materials_sz 
)

Definition at line 376 of file tls_gnutls.c.

◆ print_tls_error()

static int print_tls_error ( URLContext h,
int  ret 
)
static

Definition at line 389 of file tls_gnutls.c.

Referenced by tls_handshake(), tls_read(), and tls_write().

◆ tls_close()

static int tls_close ( URLContext h)
static

Definition at line 416 of file tls_gnutls.c.

Referenced by ff_tls_close(), and tls_open().

◆ gnutls_url_pull()

static ssize_t gnutls_url_pull ( gnutls_transport_ptr_t  transport,
void *  buf,
size_t  len 
)
static

Definition at line 432 of file tls_gnutls.c.

Referenced by tls_open().

◆ gnutls_url_push()

static ssize_t gnutls_url_push ( gnutls_transport_ptr_t  transport,
const void *  buf,
size_t  len 
)
static

Definition at line 464 of file tls_gnutls.c.

Referenced by tls_open().

◆ gnutls_pull_timeout()

static int gnutls_pull_timeout ( gnutls_transport_ptr_t  ptr,
unsigned int  ms 
)
static

Definition at line 484 of file tls_gnutls.c.

Referenced by tls_open().

◆ tls_handshake()

static int tls_handshake ( URLContext h)
static

Definition at line 501 of file tls_gnutls.c.

Referenced by tls_open().

◆ tls_open()

static int tls_open ( URLContext h,
const char *  uri,
int  flags,
AVDictionary **  options 
)
static

Definition at line 527 of file tls_gnutls.c.

Referenced by dtls_open().

◆ dtls_open()

static int dtls_open ( URLContext h,
const char *  uri,
int  flags,
AVDictionary **  options 
)
static

Definition at line 678 of file tls_gnutls.c.

◆ tls_read()

static int tls_read ( URLContext h,
uint8_t *  buf,
int  size 
)
static

Definition at line 686 of file tls_gnutls.c.

Referenced by ff_tls_read().

◆ tls_write()

static int tls_write ( URLContext h,
const uint8_t *  buf,
int  size 
)
static

Definition at line 703 of file tls_gnutls.c.

Referenced by ff_tls_write().

◆ tls_get_file_handle()

static int tls_get_file_handle ( URLContext h)
static

Definition at line 720 of file tls_gnutls.c.

◆ tls_get_short_seek()

static int tls_get_short_seek ( URLContext h)
static

Definition at line 726 of file tls_gnutls.c.

Variable Documentation

◆ gnutls_mutex

AVMutex gnutls_mutex = AV_MUTEX_INITIALIZER
static

Definition at line 343 of file tls_gnutls.c.

Referenced by ff_gnutls_deinit(), and ff_gnutls_init().

◆ options

const AVOption options[]
static
Initial value:
= {
{ NULL }
}

Definition at line 732 of file tls_gnutls.c.

◆ tls_class

const AVClass tls_class
static
Initial value:
= {
.class_name = "tls",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 737 of file tls_gnutls.c.

◆ ff_tls_protocol

const URLProtocol ff_tls_protocol
Initial value:
= {
.name = "tls",
.url_open2 = tls_open,
.url_read = tls_read,
.url_write = tls_write,
.url_close = tls_close,
.url_get_file_handle = tls_get_file_handle,
.url_get_short_seek = tls_get_short_seek,
.priv_data_size = sizeof(TLSContext),
.priv_data_class = &tls_class,
}

Definition at line 744 of file tls_gnutls.c.

◆ dtls_class

const AVClass dtls_class
static
Initial value:
= {
.class_name = "dtls",
.item_name = av_default_item_name,
.option = options,
}

Definition at line 757 of file tls_gnutls.c.

◆ ff_dtls_protocol

const URLProtocol ff_dtls_protocol
Initial value:
= {
.name = "dtls",
.url_open2 = dtls_open,
.url_handshake = tls_handshake,
.url_read = tls_read,
.url_write = tls_write,
.url_close = tls_close,
.url_get_file_handle = tls_get_file_handle,
.url_get_short_seek = tls_get_short_seek,
.priv_data_size = sizeof(TLSContext),
.priv_data_class = &dtls_class,
}

Definition at line 764 of file tls_gnutls.c.

flags
const SwsFlags flags[]
Definition: swscale.c:61
TLSContext
Definition: tls_gnutls.c:333
URL_PROTOCOL_FLAG_NETWORK
#define URL_PROTOCOL_FLAG_NETWORK
Definition: url.h:33
tls_class
static const AVClass tls_class
Definition: tls_gnutls.c:737
tls_write
static int tls_write(URLContext *h, const uint8_t *buf, int size)
Definition: tls_gnutls.c:703
TLS_COMMON_OPTIONS
#define TLS_COMMON_OPTIONS(pstruct, options_field)
Definition: tls.h:88
tls_open
static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **options)
Definition: tls_gnutls.c:527
dtls_class
static const AVClass dtls_class
Definition: tls_gnutls.c:757
tls_close
static int tls_close(URLContext *h)
Definition: tls_gnutls.c:416
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
NULL
#define NULL
Definition: coverity.c:32
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:242
tls_get_file_handle
static int tls_get_file_handle(URLContext *h)
Definition: tls_gnutls.c:720
tls_handshake
static int tls_handshake(URLContext *h)
Definition: tls_gnutls.c:501
tls_get_short_seek
static int tls_get_short_seek(URLContext *h)
Definition: tls_gnutls.c:726
dtls_open
static int dtls_open(URLContext *h, const char *uri, int flags, AVDictionary **options)
Definition: tls_gnutls.c:678
options
static const AVOption options[]
Definition: tls_gnutls.c:732
tls_read
static int tls_read(URLContext *h, uint8_t *buf, int size)
Definition: tls_gnutls.c:686