mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	bundled_pjproject: Create generic pjsip_hdr_find functions
pjsip_msg_find_hdr(), pjsip_msg_find_hdr_by_name(), and pjsip_msg_find_hdr_by_names() require a pjsip_msg to be passed in so if you need to search a header list that's not in a pjsip_msg, you have to do it yourself. This commit adds generic versions of those 3 functions that take in the actual header list head instead of a pjsip_msg so if you need to search a list of headers in something like a pjsip_multipart_part, you can do so easily. Change-Id: I6f2c127170eafda48e5e0d5d4d187bcd52b4df07
This commit is contained in:
		
				
					committed by
					
						 Friendly Automation
						Friendly Automation
					
				
			
			
				
	
			
			
			
						parent
						
							101a72d048
						
					
				
				
					commit
					1ce57621de
				
			
							
								
								
									
										176
									
								
								third-party/pjproject/patches/0150-Create-generic-pjsip_hdr_find-functions.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								third-party/pjproject/patches/0150-Create-generic-pjsip_hdr_find-functions.patch
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,176 @@ | ||||
| From 7e3dfd8a15fd0f98dbf0e04d2d7a5bded90ee401 Mon Sep 17 00:00:00 2001 | ||||
| From: George Joseph <gjoseph@sangoma.com> | ||||
| Date: Tue, 11 Jan 2022 09:27:23 -0700 | ||||
| Subject: [PATCH] Create generic pjsip_hdr_find functions | ||||
|  | ||||
| pjsip_msg_find_hdr(), pjsip_msg_find_hdr_by_name(), and | ||||
| pjsip_msg_find_hdr_by_names() require a pjsip_msg to be passed in | ||||
| so if you need to search a header list that's not in a pjsip_msg, | ||||
| you have to do it yourself.  This commit adds generic versions of | ||||
| those 3 functions that take in the actual header list head instead | ||||
| of a pjsip_msg so if you need to search a list of headers in | ||||
| something like a pjsip_multipart_part, you can do so easily. | ||||
| --- | ||||
|  pjsip/include/pjsip/sip_msg.h | 53 +++++++++++++++++++++++++++++++++++ | ||||
|  pjsip/src/pjsip/sip_msg.c     | 51 +++++++++++++++++++++++---------- | ||||
|  2 files changed, 89 insertions(+), 15 deletions(-) | ||||
|  | ||||
| diff --git a/pjsip/include/pjsip/sip_msg.h b/pjsip/include/pjsip/sip_msg.h | ||||
| index 4c9100d39..e3502e94e 100644 | ||||
| --- a/pjsip/include/pjsip/sip_msg.h | ||||
| +++ b/pjsip/include/pjsip/sip_msg.h | ||||
| @@ -362,6 +362,59 @@ PJ_DECL(void*) pjsip_hdr_shallow_clone( pj_pool_t *pool, const void *hdr ); | ||||
|   */ | ||||
|  PJ_DECL(int) pjsip_hdr_print_on( void *hdr, char *buf, pj_size_t len); | ||||
|   | ||||
| +/** | ||||
| + * Find a header in a header list by the header type. | ||||
| + * | ||||
| + * @param hdr_list  The "head" of the header list. | ||||
| + * @param type      The header type to find. | ||||
| + * @param start     The first header field where the search should begin. | ||||
| + *                  If NULL is specified, then the search will begin from the | ||||
| + *                  first header, otherwise the search will begin at the | ||||
| + *                  specified header. | ||||
| + * | ||||
| + * @return          The header field, or NULL if no header with the specified | ||||
| + *                  type is found. | ||||
| + */ | ||||
| +PJ_DECL(void*)  pjsip_hdr_find( const void *hdr_list, | ||||
| +				pjsip_hdr_e type, | ||||
| +				const void *start); | ||||
| + | ||||
| +/** | ||||
| + * Find a header in a header list by its name. | ||||
| + * | ||||
| + * @param hdr_list  The "head" of the header list. | ||||
| + * @param name      The header name to find. | ||||
| + * @param start     The first header field where the search should begin. | ||||
| + *                  If NULL is specified, then the search will begin from the | ||||
| + *                  first header, otherwise the search will begin at the | ||||
| + *                  specified header. | ||||
| + * | ||||
| + * @return          The header field, or NULL if no header with the specified | ||||
| + *                  type is found. | ||||
| + */ | ||||
| +PJ_DECL(void*)  pjsip_hdr_find_by_name( const void *hdr_list, | ||||
| +					const pj_str_t *name, | ||||
| +					const void *start); | ||||
| + | ||||
| +/** | ||||
| + * Find a header in a header list by its name and short name version. | ||||
| + * | ||||
| + * @param hdr_list  The "head" of the header list. | ||||
| + * @param name      The header name to find. | ||||
| + * @param sname     The short name version of the header name. | ||||
| + * @param start     The first header field where the search should begin. | ||||
| + *                  If NULL is specified, then the search will begin from the | ||||
| + *                  first header, otherwise the search will begin at the | ||||
| + *                  specified header. | ||||
| + * | ||||
| + * @return	    The header field, or NULL if no header with the specified | ||||
| + *		    type is found. | ||||
| + */ | ||||
| +PJ_DECL(void*)  pjsip_hdr_find_by_names( const void *hdr_list, | ||||
| +					 const pj_str_t *name, | ||||
| +					 const pj_str_t *sname, | ||||
| +					 const void *start); | ||||
| + | ||||
|  /** | ||||
|   * @} | ||||
|   */ | ||||
| diff --git a/pjsip/src/pjsip/sip_msg.c b/pjsip/src/pjsip/sip_msg.c | ||||
| index 6ba3054da..2a6a96af0 100644 | ||||
| --- a/pjsip/src/pjsip/sip_msg.c | ||||
| +++ b/pjsip/src/pjsip/sip_msg.c | ||||
| @@ -356,13 +356,13 @@ PJ_DEF(pjsip_msg*) pjsip_msg_clone( pj_pool_t *pool, const pjsip_msg *src) | ||||
|      return dst; | ||||
|  } | ||||
|   | ||||
| -PJ_DEF(void*)  pjsip_msg_find_hdr( const pjsip_msg *msg,  | ||||
| -				   pjsip_hdr_e hdr_type, const void *start) | ||||
| +PJ_DEF(void*)  pjsip_hdr_find( const void *hdr_list, | ||||
| +			       pjsip_hdr_e hdr_type, const void *start) | ||||
|  { | ||||
| -    const pjsip_hdr *hdr=(const pjsip_hdr*) start, *end=&msg->hdr; | ||||
| +    const pjsip_hdr *hdr=(const pjsip_hdr*) start, *end=hdr_list; | ||||
|   | ||||
|      if (hdr == NULL) { | ||||
| -	hdr = msg->hdr.next; | ||||
| +	hdr = end->next; | ||||
|      } | ||||
|      for (; hdr!=end; hdr = hdr->next) { | ||||
|  	if (hdr->type == hdr_type) | ||||
| @@ -371,14 +371,14 @@ PJ_DEF(void*)  pjsip_msg_find_hdr( const pjsip_msg *msg, | ||||
|      return NULL; | ||||
|  } | ||||
|   | ||||
| -PJ_DEF(void*)  pjsip_msg_find_hdr_by_name( const pjsip_msg *msg,  | ||||
| -					   const pj_str_t *name,  | ||||
| -					   const void *start) | ||||
| +PJ_DEF(void*)  pjsip_hdr_find_by_name( const void *hdr_list, | ||||
| +				       const pj_str_t *name, | ||||
| +				       const void *start) | ||||
|  { | ||||
| -    const pjsip_hdr *hdr=(const pjsip_hdr*)start, *end=&msg->hdr; | ||||
| +    const pjsip_hdr *hdr=(const pjsip_hdr*) start, *end=hdr_list; | ||||
|   | ||||
|      if (hdr == NULL) { | ||||
| -	hdr = msg->hdr.next; | ||||
| +	hdr = end->next; | ||||
|      } | ||||
|      for (; hdr!=end; hdr = hdr->next) { | ||||
|  	if (pj_stricmp(&hdr->name, name) == 0) | ||||
| @@ -387,15 +387,15 @@ PJ_DEF(void*)  pjsip_msg_find_hdr_by_name( const pjsip_msg *msg, | ||||
|      return NULL; | ||||
|  } | ||||
|   | ||||
| -PJ_DEF(void*)  pjsip_msg_find_hdr_by_names( const pjsip_msg *msg,  | ||||
| -					    const pj_str_t *name,  | ||||
| -					    const pj_str_t *sname, | ||||
| -					    const void *start) | ||||
| +PJ_DEF(void*)  pjsip_hdr_find_by_names( const void *hdr_list, | ||||
| +					const pj_str_t *name, | ||||
| +					const pj_str_t *sname, | ||||
| +					const void *start) | ||||
|  { | ||||
| -    const pjsip_hdr *hdr=(const pjsip_hdr*)start, *end=&msg->hdr; | ||||
| +    const pjsip_hdr *hdr=(const pjsip_hdr*) start, *end=hdr_list; | ||||
|   | ||||
|      if (hdr == NULL) { | ||||
| -	hdr = msg->hdr.next; | ||||
| +	hdr = end->next; | ||||
|      } | ||||
|      for (; hdr!=end; hdr = hdr->next) { | ||||
|  	if (pj_stricmp(&hdr->name, name) == 0) | ||||
| @@ -406,6 +406,27 @@ PJ_DEF(void*)  pjsip_msg_find_hdr_by_names( const pjsip_msg *msg, | ||||
|      return NULL; | ||||
|  } | ||||
|   | ||||
| +PJ_DEF(void*)  pjsip_msg_find_hdr( const pjsip_msg *msg, | ||||
| +				   pjsip_hdr_e hdr_type, const void *start) | ||||
| +{ | ||||
| +    return pjsip_hdr_find(&msg->hdr, hdr_type, start); | ||||
| +} | ||||
| + | ||||
| +PJ_DEF(void*)  pjsip_msg_find_hdr_by_name( const pjsip_msg *msg, | ||||
| +					   const pj_str_t *name, | ||||
| +					   const void *start) | ||||
| +{ | ||||
| +    return pjsip_hdr_find_by_name(&msg->hdr, name, start); | ||||
| +} | ||||
| + | ||||
| +PJ_DEF(void*)  pjsip_msg_find_hdr_by_names( const pjsip_msg *msg, | ||||
| +					    const pj_str_t *name, | ||||
| +					    const pj_str_t *sname, | ||||
| +					    const void *start) | ||||
| +{ | ||||
| +    return pjsip_hdr_find_by_names(&msg->hdr, name, sname, start); | ||||
| +} | ||||
| + | ||||
|  PJ_DEF(void*) pjsip_msg_find_remove_hdr( pjsip_msg *msg,  | ||||
|  				         pjsip_hdr_e hdr_type, void *start) | ||||
|  { | ||||
| --  | ||||
| 2.34.1 | ||||
|  | ||||
		Reference in New Issue
	
	Block a user