From b70faf32a72ec37dbd96f200e437c632ec90a54e Mon Sep 17 00:00:00 2001 From: Pedro Sanders Date: Sun, 7 Apr 2024 19:21:44 -0400 Subject: [PATCH] fix: support repeatable extension headers --- .../java/io/routr/headers/ExtensionConverter.java | 2 +- .../main/java/io/routr/headers/MessageConverter.java | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/mods/edgeport/src/main/java/io/routr/headers/ExtensionConverter.java b/mods/edgeport/src/main/java/io/routr/headers/ExtensionConverter.java index 69bcc5836..b142b198b 100644 --- a/mods/edgeport/src/main/java/io/routr/headers/ExtensionConverter.java +++ b/mods/edgeport/src/main/java/io/routr/headers/ExtensionConverter.java @@ -26,7 +26,7 @@ import javax.sip.header.HeaderFactory; import java.text.ParseException; -@ProtoMapping(header = ExtensionHeader.class, field = "extensions", repeatable = false, extension = true) +@ProtoMapping(header = ExtensionHeader.class, field = "extensions", repeatable = true, extension = true) public class ExtensionConverter implements Converter { @Override public io.routr.message.Extension fromHeader(Header header) { diff --git a/mods/edgeport/src/main/java/io/routr/headers/MessageConverter.java b/mods/edgeport/src/main/java/io/routr/headers/MessageConverter.java index 80c5cc209..5d65d8068 100644 --- a/mods/edgeport/src/main/java/io/routr/headers/MessageConverter.java +++ b/mods/edgeport/src/main/java/io/routr/headers/MessageConverter.java @@ -87,8 +87,15 @@ public static SIPMessage convertToMessageDTO(final Message message) { ProtoMapping mapping = converter.getClass().getAnnotation(ProtoMapping.class); FieldDescriptor descriptor = SIPMessage.getDescriptor().findFieldByName(fieldName); - // Takes care of headers that might appear more than once - if (mapping.repeatable()) { + // Takes care of headers that might appear more than once and are custom + if (mapping.repeatable() && mapping.extension()) { + ListIterator
headers = (ListIterator
) message.getHeaders(header.getName()); + while (headers.hasNext()) { + Header currentHeader = headers.next(); + FieldDescriptor extDescriptor = SIPMessage.getDescriptor().findFieldByName(mapping.field()); + sipMessageBuilder.addRepeatedField(extDescriptor, converter.fromHeader(currentHeader)); + } + } else if (mapping.repeatable()) { ListIterator
headers = (ListIterator
) message.getHeaders(header.getName()); while (headers.hasNext()) { Header currentHeader = headers.next();