缓冲(buffer)类型BIO

---依据openssl doc\crypto\bio_f_buffer.pod翻译和自己的理解写成

(作者:DragonKing, Mail: wzhah@263.net ,公布于:http://gdwzh.126.com之o

penssl专业论坛)

缓冲(buffer)类型BIO是一种过滤(filter)型的BIO,其相关的一些函数定义如

下(openssl\bio.h):

BIO_METHOD * BIO_f_buffer(void);

#define BIO_get_buffer_num_lines(b) BIO_ctrl(b,BIO_C_GET_BUFF_NUM_LINES

,0,NULL)

#define BIO_set_read_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF_

SIZE,size,0)

#define BIO_set_write_buffer_size(b,size) BIO_int_ctrl(b,BIO_C_SET_BUFF

_SIZE,size,1)

#define BIO_set_buffer_size(b,size) BIO_ctrl(b,BIO_C_SET_BUFF_SIZE,size

,NULL)

#define BIO_set_buffer_read_data(b,buf,num) BIO_ctrl(b,BIO_C_SET_BUFF_R

EAD_DATA,num,buf)

【BIO_f_buffer】

该函数返回一个Buffer类型的BIO_METHOD结构。该结构定义例如以下(bf_buff.c):

static BIO_METHOD methods_buffer=

{

BIO_TYPE_BUFFER,

"buffer",

buffer_write,

buffer_read,

buffer_puts,

buffer_gets,

buffer_ctrl,

buffer_new,

buffer_free,

buffer_callback_ctrl,

};

由结构定义可见,该类型BIO支持全部BIO的I/O函数。

写入缓冲(buffer)BIO的数据

存储在缓冲区里面,定期写入到BIO链的下一个BIO中,其实,仅仅有缓冲区已满或者调

用了BIO_flush函数时。数据才会写入以下的BIO,所以。当不论什么存储在缓冲区的数据需

要写入的时候(如在使用BIO_pop函数从BIO链中删除一个buffer类型BIO之前),必须使

用BIO_flush函数,假设BIO链的末尾是一个非堵塞型的BIO。有时候调用BIO_flush可能

出现失败,须要重试的情况。

从该类型BIO读取数据时。数据从下一个BIO填充到该BIO的

内部缓冲区中,然后再读出来。

该类型BIO支持BIO_gets和BIO_puts方法,其实,BIO

_gets函数是通过在下一个BIO的BIO_read函数来实现的,所以,假设一个BIO不支持BIO

_gets方法(如SSL类型的BIO),能够通过预先附加一个buffer类型BIO来实现BIO_gets

的功能。

BIO_reset被调用的时候,该类型BIO里面的全部数据都会被清空。

【BIO_get_buffer_num_lines】

返回缓冲区中眼下数据的的行数。

【 BIO_set_read_buffer_size、BIO_set_write_buffer_size和 BIO_set_buffer_

size】

这三个函数分别设置缓冲类型BIO的读、写或者读写缓冲区的大小。初始的缓冲区大

小由宏定义DEFAULT_BUFFER_SIZE决定,默认的是1024。

假设设置的缓冲区大小小于DEF

AULT_BUFFER_SIZE。那么就会被忽略,也就是说缓冲区大小会保持为DEFAULT_BUFFER_S

IZE所定义的大小。当又一次设置缓冲区大小时,里面的数据会所有被清空。成功运行返回

1。否则返回0。

【BIO_set_buffer_read_data】

该函数清空缓冲区原有的数据,并使用num个buf中的数据填充该缓冲区,假设num的

大小大于眼下的缓冲区设定大小。那么缓冲区就会自己主动扩大。成功设置返回1,否则返回

0。

openssl之BIO系列之20---缓冲(buffer)类型BIO的更多相关文章

  1. openssl之BIO系列之18---接受(accept)类型BIO

    接受(accept)类型BIO ---依据openssl doc\crypto\bio_s_accept.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.n ...

  2. openssl之BIO系列之24---SSL类型的BIO

    SSL类型的BIO ---依据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net ,公布于:h ...

  3. openssl之BIO系列之9---BIO对的创建和应用

    BIO对的创建和应用 ---依据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成 (作者:DragonKing Mail:wzhah@263. ...

  4. openssl之BIO系列之22---Cipher类型的BIO

    Cipher类型BIO ---依据openssl doc\crypto\bio_f_cipher.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net , ...

  5. openssl之BIO系列之12---文件描写叙述符(fd)类型BIO

    文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing Mailwzhah@263.net 公布于 ...

  6. openssl之EVP系列之8---EVP_Digest系列函数具体解释

    openssl之EVP系列之8---EVP_Digest系列函数具体解释     ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成     (作 ...

  7. openssl之EVP系列之7---信息摘要算法结构概述

    openssl之EVP系列之7---信息摘要算法结构概述     ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成     (作者:Dragon ...

  8. openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例

    openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...

  9. openssl之EVP系列之2---对称加密算法概述

    openssl之EVP系列之2---对称加密算法概述     ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc ...

随机推荐

  1. 30深入理解C指针之---字符串和数组

    一.字符串与数组 1.定义:使用字符数组表示字符串 2.特征: 1).可以直接使用字符串字面量初始化字符数组 2).声明后,赋值就只能使用字符串操作函数strcpy函数赋值 3).可以使用数组的一一赋 ...

  2. Linux 之 文件搜索命令

    文件搜索命令 参考教程:[千峰教育] 文件搜索定位 grep: 作用:通用规则表达式分析程序,是一种强大的文本搜索工具, 它能使用正则表达式搜索文本,并把匹配的行打印出来. 格式:grep [选项] ...

  3. LeetCode OJ--Path Sum *

    https://oj.leetcode.com/problems/path-sum/ 树的深搜,求从根到叶子的路径. 记住深搜的样子 #include <iostream> using n ...

  4. iOS内购总结

    内购流程: 1. 用户先拿到购买产品的单子, 2. 拿着单子去苹果那里交钱,交完钱让苹果在单子上盖个章 3.拿着盖了章的单子传给自己的服务器来验证是否真的支付成功,服务器是跟苹果验证(我们客户端也是可 ...

  5. Codeforces 558E A Simple Task(权值线段树)

    题目链接  A Simple Task 题意  给出一个小写字母序列和若干操作.每个操作为对给定区间进行升序排序或降序排序. 考虑权值线段树. 建立26棵权值线段树.每次操作的时候先把26棵线段树上的 ...

  6. 洛谷—— P1375 小猫

    https://www.luogu.org/problemnew/show/1375 题目描述 有2n只小猫站成一圈,主人小明想把它们两两之间用绳子绑住尾巴连在一起.同时小明是个完美主义者,不容许看到 ...

  7. OS | Process

    linux多进程 1. fork()创建进程,创建一份父进程的拷贝:在父进程中返回的是子进程id,在子进程中返回的是0:失败时返回-1: 2. fork()经常和exec()结合,exec() 覆盖了 ...

  8. luogu U10783 名字被和谐了

    链接 https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是 ...

  9. AtCoder - 2581 Meaningful Mean

    Problem Statement You are given an integer sequence of length N, a= {a1,a2,…,aN}, and an integer K. ...

  10. Maven的构建配置文件(Build Profiles)

    在命令行使用构建配置文件时,是-P,比如:mvn -Pinput 注意:这里的构建配置文件并不是一个真正的文件,而是通过指定参数来做特定的事. 以下内容引用自https://ayayui.gitboo ...