缓冲(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. 46深入理解C指针之---内存分析

    一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...

  2. 三、 java运算符与流程控制

    赋值运算 赋值运算符:=,+=,-=,×=,/=,%= class fuzhiyunsuan{ public static void main(String[] args){ int i1 = 10; ...

  3. 浅谈HookSSDT和和Resume(恢复)SSDT

     最近在学HookSSDT和针对Hook的ResumeSSDT,避免自己理解有所偏差,把它们写出来,希望大家不吝赐教.(虽然已经是过时了的技术,但是最起码了解其中的原理,嘿嘿嘿.) 转载注明出处:ht ...

  4. babel6的babel-plugin-add-module-exports插件

    干什么的 在 babel 5 时代, export default {}; 除了会被转译成 exports.default = {};,还会加一句 module.exports = exports.d ...

  5. 饼系列—圈饼 doughnut

    chartControl属性 ApplicationSettings: Name:控件名字 AccessibleDescription: ??? AccessibleName:??? Accessib ...

  6. Codechef Black Nodes in Subgraphs(树型背包)

    题目链接 Black Nodes in Subgraphs 题目意思就是在一棵树中所有点标记为两种颜色(黑和白) 然后询问是否存在大小为X恰好有Y个黑点的连通块 这题我们可以用树型背包的方法 设$f[ ...

  7. [原创][FPGA][IP-Core]altlvds_tx & altlvds_rx

    1. 概述 Alter公司的QuartusII软件提供了LVDS发送和接收的IP核供我们使用,其在本质上可以理解为并行-串行数据的转换器.其在官方文档(见附件)上也这样说过.其中的应用场景有告诉AD/ ...

  8. 快速上手 Echarts

    最近使用到了 百度的 Echarts 数据可视化工具,这里简单介绍如何快速上手. 一.下载 这里选择目前最新版本,4.2.1 地址:https://github.com/apache/incubato ...

  9. 洛谷——P2737 [USACO4.1]麦香牛块Beef McNuggets

    https://www.luogu.org/problemnew/show/P2737 题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办 ...

  10. [ONTAK2010]Peaks

    题目大意: 一个图上有$n(n\leq100000)$个带权点,$m(m\leq500000)$条带权边.有$q(q\leq500000)$组询问,每次询问从点$v$出发,只经过权值小于等于$x$的边 ...