@Override public void formatParameters( final CharArrayBuffer buffer, final NameValuePair[] nvps, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(nvps, "Header parameter array"); for (int i = 0; i < nvps.length; i++) { if (i > 0) { buffer.append("; "); } formatNameValuePair(buffer, nvps[i], quote); } }
@Override public void formatElements( final CharArrayBuffer buffer, final HeaderElement[] elems, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(elems, "Header element array"); for (int i = 0; i < elems.length; i++) { if (i > 0) { buffer.append(", "); } formatHeaderElement(buffer, elems[i], quote); } }
void formatValue(final CharArrayBuffer buffer, final String value, final boolean quote) { boolean quoteFlag = quote; if (!quoteFlag) { for (int i = 0; (i < value.length()) && !quoteFlag; i++) { quoteFlag = isSeparator(value.charAt(i)); } } if (quoteFlag) { buffer.append('"'); } for (int i = 0; i < value.length(); i++) { final char ch = value.charAt(i); if (isUnsafe(ch)) { buffer.append('\\'); } buffer.append(ch); } if (quoteFlag) { buffer.append('"'); } }
this.formatter.formatNameValuePair(null, param, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatNameValuePair(buf, null, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatParameters(null, params, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatParameters(buf, null, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatHeaderElement(null, element, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatHeaderElement(buf, null, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatElements(null, elements, false); Assert.fail("IllegalArgumentException should habe been thrown"); } catch (final IllegalArgumentException ex) { this.formatter.formatElements(buf, null, false);
@Override public void formatHeaderElement( final CharArrayBuffer buffer, final HeaderElement elem, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(elem, "Header element"); buffer.append(elem.getName()); final String value = elem.getValue(); if (value != null) { buffer.append('='); formatValue(buffer, value, quote); } final int c = elem.getParameterCount(); if (c > 0) { for (int i = 0; i < c; i++) { buffer.append("; "); formatNameValuePair(buffer, elem.getParameter(i), quote); } } }
/** * Generates textual representation of this content type which can be used as the value * of a {@code Content-Type} header. */ @Override public String toString() { final CharArrayBuffer buf = new CharArrayBuffer(64); buf.append(this.mimeType); if (this.params != null) { buf.append("; "); BasicHeaderValueFormatter.INSTANCE.formatParameters(buf, this.params, false); } else if (this.charset != null) { buf.append("; charset="); buf.append(this.charset.name()); } return buf.toString(); }
@Override public void formatNameValuePair( final CharArrayBuffer buffer, final NameValuePair nvp, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(nvp, "Name / value pair"); buffer.append(nvp.getName()); final String value = nvp.getValue(); if (value != null) { buffer.append('='); formatValue(buffer, value, quote); } }
@Test public void testElementsFormatting() throws Exception { final NameValuePair param1 = new BasicNameValuePair("param", "regular_stuff"); final NameValuePair param2 = new BasicNameValuePair("param", "this\\that"); final NameValuePair param3 = new BasicNameValuePair("param", "this,that"); final NameValuePair param4 = new BasicNameValuePair("param", null); final HeaderElement element1 = new BasicHeaderElement("name1", "value1", new NameValuePair[] {param1}); final HeaderElement element2 = new BasicHeaderElement("name2", "value2", new NameValuePair[] {param2}); final HeaderElement element3 = new BasicHeaderElement("name3", "value3", new NameValuePair[] {param3}); final HeaderElement element4 = new BasicHeaderElement("name4", "value4", new NameValuePair[] {param4}); final HeaderElement element5 = new BasicHeaderElement("name5", null); final HeaderElement[] elements = new HeaderElement[] {element1, element2, element3, element4, element5}; final CharArrayBuffer buf = new CharArrayBuffer(64); this.formatter.formatElements(buf, elements, false); Assert.assertEquals("name1=value1; param=regular_stuff, name2=value2; " + "param=\"this\\\\that\", name3=value3; param=\"this,that\", " + "name4=value4; param, name5", buf.toString()); }
@Override public void formatHeaderElement( final CharArrayBuffer buffer, final HeaderElement elem, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(elem, "Header element"); buffer.append(elem.getName()); final String value = elem.getValue(); if (value != null) { buffer.append('='); formatValue(buffer, value, quote); } final int c = elem.getParameterCount(); if (c > 0) { for (int i = 0; i < c; i++) { buffer.append("; "); formatNameValuePair(buffer, elem.getParameter(i), quote); } } }
/** * Generates textual representation of this content type which can be used as the value * of a {@code Content-Type} header. */ @Override public String toString() { final CharArrayBuffer buf = new CharArrayBuffer(64); buf.append(this.mimeType); if (this.params != null) { buf.append("; "); BasicHeaderValueFormatter.INSTANCE.formatParameters(buf, this.params, false); } else if (this.charset != null) { buf.append("; charset="); buf.append(this.charset.name()); } return buf.toString(); }
@Override public void formatNameValuePair( final CharArrayBuffer buffer, final NameValuePair nvp, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(nvp, "Name / value pair"); buffer.append(nvp.getName()); final String value = nvp.getValue(); if (value != null) { buffer.append('='); formatValue(buffer, value, quote); } }
@Override public void formatParameters( final CharArrayBuffer buffer, final NameValuePair[] nvps, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(nvps, "Header parameter array"); for (int i = 0; i < nvps.length; i++) { if (i > 0) { buffer.append("; "); } formatNameValuePair(buffer, nvps[i], quote); } }
@Override public void formatElements( final CharArrayBuffer buffer, final HeaderElement[] elems, final boolean quote) { Args.notNull(buffer, "Char array buffer"); Args.notNull(elems, "Header element array"); for (int i = 0; i < elems.length; i++) { if (i > 0) { buffer.append(", "); } formatHeaderElement(buffer, elems[i], quote); } }
@Test public void testParamsFormatting() throws Exception { final NameValuePair param1 = new BasicNameValuePair("param", "regular_stuff"); final NameValuePair param2 = new BasicNameValuePair("param", "this\\that"); final NameValuePair param3 = new BasicNameValuePair("param", "this,that"); final NameValuePair[] params = new NameValuePair[] {param1, param2, param3}; final CharArrayBuffer buf = new CharArrayBuffer(64); buf.clear(); this.formatter.formatParameters(buf, params, false); Assert.assertEquals("param=regular_stuff; param=\"this\\\\that\"; param=\"this,that\"", buf.toString()); buf.clear(); this.formatter.formatParameters(buf, params, true); Assert.assertEquals("param=\"regular_stuff\"; param=\"this\\\\that\"; param=\"this,that\"", buf.toString()); }
void formatValue(final CharArrayBuffer buffer, final String value, final boolean quote) { boolean quoteFlag = quote; if (!quoteFlag) { for (int i = 0; (i < value.length()) && !quoteFlag; i++) { quoteFlag = isSeparator(value.charAt(i)); } } if (quoteFlag) { buffer.append('"'); } for (int i = 0; i < value.length(); i++) { final char ch = value.charAt(i); if (isUnsafe(ch)) { buffer.append('\\'); } buffer.append(ch); } if (quoteFlag) { buffer.append('"'); } }
final boolean noQuotes = ("nc".equals(name) || "qop".equals(name) || "algorithm".equals(name)); BasicHeaderValueFormatter.INSTANCE.formatNameValuePair(buffer, param, !noQuotes);
@Test public void testHEFormatting() throws Exception { final NameValuePair param1 = new BasicNameValuePair("param", "regular_stuff"); final NameValuePair param2 = new BasicNameValuePair("param", "this\\that"); final NameValuePair param3 = new BasicNameValuePair("param", "this,that"); final NameValuePair param4 = new BasicNameValuePair("param", null); final NameValuePair[] params = new NameValuePair[] {param1, param2, param3, param4}; final HeaderElement element = new BasicHeaderElement("name", "value", params); final CharArrayBuffer buf = new CharArrayBuffer(64); this.formatter.formatHeaderElement(buf, element, false); Assert.assertEquals("name=value; param=regular_stuff; param=\"this\\\\that\"; param=\"this,that\"; param", buf.toString()); }
this.formatter.formatNameValuePair(buf, param1, false); Assert.assertEquals("param=regular_stuff", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param2, false); Assert.assertEquals("param=\"this\\\\that\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param3, false); Assert.assertEquals("param=\"this,that\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param4, false); Assert.assertEquals("param=\"quote marks (\\\") must be escaped\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param5, false); Assert.assertEquals("param=\"back slash (\\\\) must be escaped too\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param6, false); Assert.assertEquals("param=\"values with\tblanks must always be quoted\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param7, false); Assert.assertEquals("param", buf.toString()); this.formatter.formatNameValuePair(buf, param1, true); Assert.assertEquals("param=\"regular_stuff\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param2, true); Assert.assertEquals("param=\"this\\\\that\"", buf.toString()); buf.clear(); this.formatter.formatNameValuePair(buf, param3, true); Assert.assertEquals("param=\"this,that\"", buf.toString());