mirror of https://github.com/openssl/openssl.git
				
				
				
			Add docs for BIO_find_type() and friends.
Added function BIO_next() otherwise you can't traverse a chain without accessing BIO internals.
This commit is contained in:
		
							parent
							
								
									62ab514e98
								
							
						
					
					
						commit
						cfd3bb1785
					
				|  | @ -524,6 +524,7 @@ BIO *	BIO_push(BIO *b,BIO *append); | ||||||
| BIO *	BIO_pop(BIO *b); | BIO *	BIO_pop(BIO *b); | ||||||
| void	BIO_free_all(BIO *a); | void	BIO_free_all(BIO *a); | ||||||
| BIO *	BIO_find_type(BIO *b,int bio_type); | BIO *	BIO_find_type(BIO *b,int bio_type); | ||||||
|  | BIO *	BIO_next(BIO *b); | ||||||
| BIO *	BIO_get_retry_BIO(BIO *bio, int *reason); | BIO *	BIO_get_retry_BIO(BIO *bio, int *reason); | ||||||
| int	BIO_get_retry_reason(BIO *bio); | int	BIO_get_retry_reason(BIO *bio); | ||||||
| BIO *	BIO_dup_chain(BIO *in); | BIO *	BIO_dup_chain(BIO *in); | ||||||
|  |  | ||||||
|  | @ -436,6 +436,12 @@ BIO *BIO_find_type(BIO *bio, int type) | ||||||
| 	return(NULL); | 	return(NULL); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | BIO *BIO_next(BIO *b) | ||||||
|  | 	{ | ||||||
|  | 	if(!b) return NULL; | ||||||
|  | 	return b->next_bio; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| void BIO_free_all(BIO *bio) | void BIO_free_all(BIO *bio) | ||||||
| 	{ | 	{ | ||||||
| 	BIO *b; | 	BIO *b; | ||||||
|  |  | ||||||
|  | @ -534,7 +534,7 @@ int PKCS7_dataFinal(PKCS7 *p7, BIO *bio) | ||||||
| 				if (EVP_MD_CTX_type(mdc) == j) | 				if (EVP_MD_CTX_type(mdc) == j) | ||||||
| 					break; | 					break; | ||||||
| 				else | 				else | ||||||
| 					btmp=btmp->next_bio; | 					btmp=BIO_next(btmp); | ||||||
| 				} | 				} | ||||||
| 			 | 			 | ||||||
| 			/* We now have the EVP_MD_CTX, lets do the
 | 			/* We now have the EVP_MD_CTX, lets do the
 | ||||||
|  | @ -726,7 +726,7 @@ int PKCS7_signatureVerify(BIO *bio, PKCS7 *p7, PKCS7_SIGNER_INFO *si, | ||||||
| 			} | 			} | ||||||
| 		if (EVP_MD_CTX_type(mdc) == md_type) | 		if (EVP_MD_CTX_type(mdc) == md_type) | ||||||
| 			break; | 			break; | ||||||
| 		btmp=btmp->next_bio;	 | 		btmp=BIO_next(btmp); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 	/* mdc is the digest ctx that we want, unless there are attributes,
 | 	/* mdc is the digest ctx that we want, unless there are attributes,
 | ||||||
|  |  | ||||||
|  | @ -0,0 +1,93 @@ | ||||||
|  | =pod | ||||||
|  | 
 | ||||||
|  | =head1 NAME | ||||||
|  | 
 | ||||||
|  | 	BIO_find_type, BIO_next - BIO chain traversal | ||||||
|  | 
 | ||||||
|  | =head1 SYNOPSIS | ||||||
|  | 
 | ||||||
|  |  #include <openssl/bio.h> | ||||||
|  | 
 | ||||||
|  |  BIO *	BIO_find_type(BIO *b,int bio_type); | ||||||
|  |  BIO *	BIO_next(BIO *b); | ||||||
|  | 
 | ||||||
|  |  #define BIO_method_type(b)		((b)->method->type) | ||||||
|  | 
 | ||||||
|  |  #define BIO_TYPE_NONE		0 | ||||||
|  |  #define BIO_TYPE_MEM		(1|0x0400) | ||||||
|  |  #define BIO_TYPE_FILE		(2|0x0400) | ||||||
|  | 
 | ||||||
|  |  #define BIO_TYPE_FD		(4|0x0400|0x0100) | ||||||
|  |  #define BIO_TYPE_SOCKET		(5|0x0400|0x0100) | ||||||
|  |  #define BIO_TYPE_NULL		(6|0x0400) | ||||||
|  |  #define BIO_TYPE_SSL		(7|0x0200) | ||||||
|  |  #define BIO_TYPE_MD		(8|0x0200) | ||||||
|  |  #define BIO_TYPE_BUFFER		(9|0x0200) | ||||||
|  |  #define BIO_TYPE_CIPHER		(10|0x0200) | ||||||
|  |  #define BIO_TYPE_BASE64		(11|0x0200) | ||||||
|  |  #define BIO_TYPE_CONNECT	(12|0x0400|0x0100) | ||||||
|  |  #define BIO_TYPE_ACCEPT		(13|0x0400|0x0100) | ||||||
|  |  #define BIO_TYPE_PROXY_CLIENT	(14|0x0200) | ||||||
|  |  #define BIO_TYPE_PROXY_SERVER	(15|0x0200) | ||||||
|  |  #define BIO_TYPE_NBIO_TEST	(16|0x0200) | ||||||
|  |  #define BIO_TYPE_NULL_FILTER	(17|0x0200) | ||||||
|  |  #define BIO_TYPE_BER		(18|0x0200) | ||||||
|  |  #define BIO_TYPE_BIO		(19|0x0400) | ||||||
|  | 
 | ||||||
|  |  #define BIO_TYPE_DESCRIPTOR	0x0100 | ||||||
|  |  #define BIO_TYPE_FILTER		0x0200 | ||||||
|  |  #define BIO_TYPE_SOURCE_SINK	0x0400 | ||||||
|  | 
 | ||||||
|  | =head1 DESCRIPTION | ||||||
|  | 
 | ||||||
|  | The BIO_find_type() searches for a BIO of a given type in a chain, starting | ||||||
|  | at BIO B<b>. If B<type> is a specific type (such as BIO_TYPE_MEM) then a search | ||||||
|  | is made for a BIO of that type. If B<type> is a general type (such as | ||||||
|  | B<BIO_TYPE_SOURCE_SINK>) then the next matching BIO of the given general type is | ||||||
|  | searched for. BIO_find_type() returns the next matching BIO or NULL if none is | ||||||
|  | found. | ||||||
|  | 
 | ||||||
|  | Note: not all the B<BIO_TYPE_*> types above have corresponding BIO implementations. | ||||||
|  | 
 | ||||||
|  | BIO_next() returns the next BIO in a chain. It can be used to traverse all BIOs | ||||||
|  | in a chain or used in conjunction with BIO_find_type() to find all BIOs of a | ||||||
|  | certain type. | ||||||
|  | 
 | ||||||
|  | BIO_method_type() returns the type of a BIO. | ||||||
|  | 
 | ||||||
|  | =head1 RETURN VALUES | ||||||
|  | 
 | ||||||
|  | BIO_find_type() returns a matching BIO or NULL for no match. | ||||||
|  | 
 | ||||||
|  | BIO_next() returns the next BIO in a chain. | ||||||
|  | 
 | ||||||
|  | BIO_method_type() returns the type of the BIO B<b>. | ||||||
|  | 
 | ||||||
|  | =head1 NOTES | ||||||
|  | 
 | ||||||
|  | BIO_next() was added to OpenSSL 0.9.6 to provide a 'clean' way to traverse a BIO | ||||||
|  | chain or find multiple matches using BIO_find_type(). Previous versions had to | ||||||
|  | use: | ||||||
|  | 
 | ||||||
|  |  next = bio->next_bio; | ||||||
|  | 
 | ||||||
|  | =head1 EXAMPLE | ||||||
|  | 
 | ||||||
|  | Traverse a chain looking for digest BIOs: | ||||||
|  | 
 | ||||||
|  |  BIO *btmp; | ||||||
|  |  btmp = in_bio;	/* in_bio is chain to search through */ | ||||||
|  | 
 | ||||||
|  |  for(;;) { | ||||||
|  |  	btmp = BIO_find_type(btmp, BIO_TYPE_MD); | ||||||
|  | 	if(btmp == NULL) break;	/* Not found */ | ||||||
|  | 	/* btmp is a digest BIO, do something with it ...*/ | ||||||
|  |    	... | ||||||
|  | 
 | ||||||
|  | 	btmp = BIO_next(btmp); | ||||||
|  |  }  | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | =head1 SEE ALSO | ||||||
|  | 
 | ||||||
|  | TBA | ||||||
		Loading…
	
		Reference in New Issue