openssl之BIO系列之20---缓冲(buffer)类型BIO
缓冲(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的更多相关文章
- openssl之BIO系列之18---接受(accept)类型BIO
接受(accept)类型BIO ---依据openssl doc\crypto\bio_s_accept.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.n ...
- openssl之BIO系列之24---SSL类型的BIO
SSL类型的BIO ---依据openssl doc\crypto\bio_f_ssl.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net ,公布于:h ...
- openssl之BIO系列之9---BIO对的创建和应用
BIO对的创建和应用 ---依据openssl doc/crypto/bio/bio_new_bio_pair.pod翻译和自己的理解写成 (作者:DragonKing Mail:wzhah@263. ...
- openssl之BIO系列之22---Cipher类型的BIO
Cipher类型BIO ---依据openssl doc\crypto\bio_f_cipher.pod翻译和自己的理解写成 (作者:DragonKing, Mail: wzhah@263.net , ...
- openssl之BIO系列之12---文件描写叙述符(fd)类型BIO
文件描写叙述符(fd)类型BIO ---依据openssl doc\crypto\bio_s_fd.pod翻译和自己的理解写成 (作者:DragonKing Mailwzhah@263.net 公布于 ...
- openssl之EVP系列之8---EVP_Digest系列函数具体解释
openssl之EVP系列之8---EVP_Digest系列函数具体解释 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作 ...
- openssl之EVP系列之7---信息摘要算法结构概述
openssl之EVP系列之7---信息摘要算法结构概述 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作者:Dragon ...
- openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例
openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例 ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...
- openssl之EVP系列之2---对称加密算法概述
openssl之EVP系列之2---对称加密算法概述 ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay.txt cipher.doc ...
随机推荐
- Android 禁止状态栏下拉status bar
如果你有这样的需求:用户进入你的app以后,所有的操作都是你的app中设定的,用户不可以拥有系统设置等行为的能力.然而,Android系统,可以通过从顶部往下拉,从而得到一个通知和快速系统设置的页面: ...
- LeetCode OJ——Word Ladder
http://oj.leetcode.com/problems/word-ladder/ 图的最短路径问题,可以用最短路径算法,也可以深搜,也可以广搜. 深搜版本: 第一次写的时候,把sum和visi ...
- AC日记——爱情之路 codevs 2070
2070 爱情之路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description yh非常想念他的女朋友小y,于是他 ...
- (五)github删除仓库
一.一直学习怎么创建仓库,创建了太多仓库,一直不知道咋删除,有点懵,其实很简单,就是对英文不太习惯,要加深英文水平. 找到setting,然后再下面找到danger Zone
- 网络入侵检测规避工具fragrouter
网络入侵检测规避工具fragrouter 网络入侵检测系统可以通过拦截数据包,获取内容进而判断是否为恶意数据包.对于传输较大的数据包,通常会采用分片的方式,将大数据包拆分为小数据包进行传输.如果入 ...
- Kalendae使用总结
2019-03-06 16:50:18 git官方教程:https://github.com/Twipped/Kalendae js.css:https://pan.baidu.com/s/1Ye-d ...
- GDKOI賽前總結
@(賽前總結)[GDKOI2017] 提一些比賽時要注意的事項: 賽前先把讀入優化/輸出優化的模板調試好, 加入缺省源中. 注意不要出錯, 輸出為0或者負數的情況要特盤; 讀入輸出文件名不要搞錯; 由 ...
- python导入sklearn模块出现DLL load failed的解决办法
笔者安装的python版本是2.7.6,最近在导入sklearn(版本:0.16.1)的模块时,经常出现DLL load failed的报错,具体截图如下: 解决办法与步骤如下: 由于sklearn的 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律十六:IT人交友之道-單純
元曲知名的作家 白樸,曾在沉醉東風﹒漁夫一文創作中,寫道:「雖無刎頸交,卻有忘機友」.IT人交朋友應首重在單純而非廣泛,因為實際上越複雜的朋友圈,只會為你的工作以及生活帶來許多不必要的麻煩.至於男女朋 ...
- 邁向IT專家成功之路的三十則鐵律 鐵律三:IT人長久之道–站對邊
這一回來談談IT人對於技術的學習.對於一位專業的IT人來說,在自己有興趣的技術領域之中,究竟要如何來正確選擇學習的方向呢?關於這個問題的答案,筆者個人深深體會到這確實會成為一位專業IT人士的長久經營之 ...