+++ /dev/null
-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(-)
-
---- a/pjsip/include/pjsip/sip_msg.h
-+++ b/pjsip/include/pjsip/sip_msg.h
-@@ -363,6 +363,59 @@ PJ_DECL(void*) pjsip_hdr_shallow_clone(
- 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);
-+
-+/**
- * @}
- */
-
---- a/pjsip/src/pjsip/sip_msg.c
-+++ b/pjsip/src/pjsip/sip_msg.c
-@@ -334,13 +334,13 @@ PJ_DEF(pjsip_msg*) pjsip_msg_clone( pj_p
- 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)
-@@ -349,14 +349,14 @@ PJ_DEF(void*) pjsip_msg_find_hdr( const
- 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)
-@@ -365,15 +365,15 @@ PJ_DEF(void*) pjsip_msg_find_hdr_by_nam
- 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)
-@@ -384,6 +384,27 @@ PJ_DEF(void*) pjsip_msg_find_hdr_by_nam
- 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)
- {