From d27505040326aa0231afa38823450c153175556c Mon Sep 17 00:00:00 2001 From: Vladimir Ralev Date: Tue, 29 Nov 2016 18:39:40 +0200 Subject: [PATCH 1/5] Test for ext info https://github.com/usnistgov/jsip/issues/20 --- .../javax/sip/parser/ims/PAccessNetworkInfoParserTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java index df19323cc..99c67f69c 100644 --- a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java +++ b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java @@ -33,6 +33,9 @@ public void testParser() { // TODO Auto-generated method stub String[] accessNetworkInfo = { + "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]\n", + "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\"ip=123.123.123.123\"\n", + "P-Access-Network-Info: IEEE-802.11\n", From 6bc7f59baf9dd1d4036e3ebd3e3df6a98e531283 Mon Sep 17 00:00:00 2001 From: Vladimir Ralev Date: Wed, 30 Nov 2016 18:29:41 +0200 Subject: [PATCH 2/5] Test for ext info https://github.com/usnistgov/jsip/issues/20 --- .../javax/sip/parser/ims/PAccessNetworkInfoParserTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java index 99c67f69c..22f31481b 100644 --- a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java +++ b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java @@ -33,8 +33,12 @@ public void testParser() { // TODO Auto-generated method stub String[] accessNetworkInfo = { - "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]\n", + + "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]; rand=l\n", + "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\"\"\n", "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\"ip=123.123.123.123\"\n", + "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd];rand=l\n", + "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]\n", "P-Access-Network-Info: IEEE-802.11\n", From a61055a0d07b1a1f8237e5c39f02ed3bf7c70788 Mon Sep 17 00:00:00 2001 From: Vladimir Ralev Date: Wed, 30 Nov 2016 18:31:06 +0200 Subject: [PATCH 3/5] Fix for ext info https://github.com/usnistgov/jsip/issues/20 --- src/gov/nist/core/LexerCore.java | 50 +++++++++++++++++++ .../parser/ims/PAccessNetworkInfoParser.java | 32 ++++++++++-- 2 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/gov/nist/core/LexerCore.java b/src/gov/nist/core/LexerCore.java index 81b61f197..86d99f7d0 100755 --- a/src/gov/nist/core/LexerCore.java +++ b/src/gov/nist/core/LexerCore.java @@ -479,6 +479,56 @@ public String ttokenSafe() { return null; } } + + public String ttokenGenValue() { + int startIdx = ptr; + try { + while (hasMoreChars()) { + char nextChar = lookAhead(0); + if (isAlphaDigit(nextChar)) { + consume(1); + } + else { + boolean isValidChar = false; + switch (nextChar) { + case '_': + case '+': + case '-': + case '!': + case '`': + case '\'': + case '.': + case '/': + case '}': + case '{': + case ']': + case '[': + case '^': + case '|': + case '~': + case '%': // bug fix by Bruno Konik, JvB copied here + case '#': + case '@': + case '$': + case ':': + case '?': + case '\"': + case '*': + isValidChar = true; + } + if (isValidChar) { + consume(1); + } + else { + break; + } + } + } + return String.valueOf(buffer, startIdx, ptr - startIdx); + } catch (ParseException ex) { + return null; + } + } static final char ALPHA_VALID_CHARS = Character.MAX_VALUE; static final char DIGIT_VALID_CHARS = Character.MAX_VALUE - 1; diff --git a/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java b/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java index 7c1c6d94c..aac42d905 100644 --- a/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java +++ b/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java @@ -49,7 +49,7 @@ *

RFC 3455 - Private Header (P-Header) Extensions to the Session Initiation * Protocol (SIP) for the 3rd-Generation Partnership Project (3GPP)

* - *

Sintax (RFC 3455):

+ *

Syntax (RFC 3455):

*
  * P-Access-Network-Info  = "P-Access-Network-Info" HCOLON access-net-spec
  * access-net-spec        = access-type *(SEMI access-info)
@@ -60,7 +60,22 @@
  * extension-access-info  = gen-value
  * cgi-3gpp               = "cgi-3gpp" EQUAL (token / quoted-string)
  * utran-cell-id-3gpp     = "utran-cell-id-3gpp" EQUAL (token / quoted-string)
+ * gen-value              = token / host / quoted-string
  * 
+ * + *

https://tools.ietf.org/html/rfc7913

+ *
+ *       access-info            = cgi-3gpp / utran-cell-id-3gpp /
+ *                                dsl-location / i-wlan-node-id /
+ *                                ci-3gpp2 / eth-location /
+ *                                ci-3gpp2-femto / fiber-location /
+ *                                np / gstn-location /local-time-zone /
+ *                                dvb-rcs2-node-id / operator-specific-GI /
+ *                                utran-sai-3gpp / extension-access-info
+ *       np                     = "network-provided"
+ *       extension-access-info  = generic-param
+ * 
+ * * * @author Miguel Freitas (IT) PT-Inovacao */ @@ -104,8 +119,19 @@ public SIPHeader parse() throws ParseException this.lexer.match(';'); this.lexer.SPorHT(); - NameValue nv = super.nameValue('='); - accessNetworkInfo.setParameter(nv); + try { + NameValue nv = super.nameValue('='); + accessNetworkInfo.setParameter(nv); + } catch (ParseException e) { + this.lexer.SPorHT(); + String ext = this.lexer.quotedString(); + if(ext == null) { + ext = this.lexer.ttokenGenValue(); + } else { + ext = "\"" + ext + "\""; + } + accessNetworkInfo.setExtensionAccessInfo(ext); + } this.lexer.SPorHT(); } this.lexer.SPorHT(); From 3cb6bd508f552db2829daad7efe2150f6dee2cb5 Mon Sep 17 00:00:00 2001 From: Vladimir Ralev Date: Thu, 1 Dec 2016 17:14:31 +0200 Subject: [PATCH 4/5] Fix for ext info https://github.com/usnistgov/jsip/issues/20 --- .../javax/sip/parser/ims/PAccessNetworkInfoParser.java | 7 +++++-- .../javax/sip/parser/ims/PAccessNetworkInfoParserTest.java | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java b/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java index aac42d905..db478ab1b 100644 --- a/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java +++ b/src/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParser.java @@ -63,7 +63,8 @@ * gen-value = token / host / quoted-string * * - *

https://tools.ietf.org/html/rfc7913

+ *

RFC 7913 - P-Access-Network-Info ABNF Update

+ *

Newer RFC https://tools.ietf.org/html/rfc7913

*
  *       access-info            = cgi-3gpp / utran-cell-id-3gpp /
  *                                dsl-location / i-wlan-node-id /
@@ -128,7 +129,9 @@ public SIPHeader parse() throws ParseException
                 	if(ext == null) {
                 		ext = this.lexer.ttokenGenValue();
                 	} else {
-                		ext = "\"" + ext + "\"";
+                		// avoids tokens such as "a=b" to be stripped of quotes and misinterpretend as
+                		// RFC 7913 generic-param when re-encoded
+                		ext = "\"" + ext + "\""; 
                 	}
                 	accessNetworkInfo.setExtensionAccessInfo(ext);
                 }
diff --git a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java
index 22f31481b..cb17f29b8 100644
--- a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java
+++ b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java
@@ -35,7 +35,10 @@ public void testParser() {
         String[] accessNetworkInfo =  {
 
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]; rand=l\n",
+        		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; a-b.c1; rand=l\n",
+        		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; 127.0.0.1; rand=l\n",
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\"\"\n",
+        		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\";\"\n",
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\"ip=123.123.123.123\"\n",
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd];rand=l\n",
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]\n",

From fe55ea98092a5cf057270744b117fcd6adba713c Mon Sep 17 00:00:00 2001
From: Vladimir Ralev 
Date: Thu, 1 Dec 2016 21:44:05 +0200
Subject: [PATCH 5/5] Fix for ext info
 https://github.com/usnistgov/jsip/issues/20

---
 .../javax/sip/parser/ims/PAccessNetworkInfoParserTest.java     | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java
index cb17f29b8..1fdd5dfbf 100644
--- a/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java
+++ b/src/test/unit/gov/nist/javax/sip/parser/ims/PAccessNetworkInfoParserTest.java
@@ -42,10 +42,7 @@ public void testParser() {
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE;\"ip=123.123.123.123\"\n",
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd];rand=l\n",
         		"P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE; [123:4::abcd]\n",
-
-
                 "P-Access-Network-Info: IEEE-802.11\n",
-
                 "P-Access-Network-Info: 3GPP-UTRAN-TDD; utran-cell-id-3gpp=23456789ABCDE\n"
 
         };