1909 lines
212 KiB
HTML
1909 lines
212 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
<title>Coverage Report</title>
|
|
<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
|
|
<script type="text/javascript" src="js/popup.js"></script>
|
|
</head>
|
|
<body>
|
|
<h5>Coverage Report - org.apache.commons.fileupload.MultipartStream</h5>
|
|
<div class="separator"> </div>
|
|
<table class="report">
|
|
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
|
|
<tr><td><a href="org.apache.commons.fileupload.MultipartStream.html">MultipartStream</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">77%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">108/140</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">77%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:77px"><span class="text">37/48</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.210526315789474;</span>3.211</td></tr>
|
|
<tr><td><a href="org.apache.commons.fileupload.MultipartStream.html">MultipartStream$IllegalBoundaryException</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">0%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:0px"><span class="text">0/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.210526315789474;</span>3.211</td></tr>
|
|
<tr><td><a href="org.apache.commons.fileupload.MultipartStream.html">MultipartStream$ItemInputStream</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">80%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:80px"><span class="text">65/81</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">73%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:73px"><span class="text">34/46</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.210526315789474;</span>3.211</td></tr>
|
|
<tr><td><a href="org.apache.commons.fileupload.MultipartStream.html">MultipartStream$MalformedStreamException</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">50%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:50px"><span class="text">2/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.210526315789474;</span>3.211</td></tr>
|
|
<tr><td><a href="org.apache.commons.fileupload.MultipartStream.html">MultipartStream$ProgressNotifier</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">100%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">13/13</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">100%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">2/2</span></div></div></td></tr></table></td><td class="value"><span class="hidden">3.210526315789474;</span>3.211</td></tr>
|
|
|
|
</table>
|
|
<div class="separator"> </div>
|
|
<table cellspacing="0" cellpadding="0" class="src">
|
|
<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Licensed to the Apache Software Foundation (ASF) under one or more</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * contributor license agreements. See the NOTICE file distributed with</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * this work for additional information regarding copyright ownership.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The ASF licenses this file to You under the Apache License, Version 2.0</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * (the "License"); you may not use this file except in compliance with</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the License. You may obtain a copy of the License at</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * limitations under the License.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">package</span> org.apache.commons.fileupload;</pre></td></tr>
|
|
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> <span class="keyword">static</span> java.lang.String.format;</pre></td></tr>
|
|
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.ByteArrayOutputStream;</pre></td></tr>
|
|
<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.InputStream;</pre></td></tr>
|
|
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.OutputStream;</pre></td></tr>
|
|
<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.UnsupportedEncodingException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.commons.fileupload.FileUploadBase.FileUploadIOException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.commons.fileupload.util.Closeable;</pre></td></tr>
|
|
<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.commons.fileupload.util.Streams;</pre></td></tr>
|
|
<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Low level API for processing file uploads.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> This class can be used to process data streams conforming to MIME</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * 'multipart' format as defined in</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <a href="http://www.ietf.org/rfc/rfc1867.txt">RFC 1867</a>. Arbitrarily</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * large amounts of data in the stream can be processed under constant</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * memory usage.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> The format of the stream is defined in the following way:<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * multipart-body := preamble 1*encapsulation close-delimiter epilogue<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * encapsulation := delimiter body CRLF<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * delimiter := "--" boundary CRLF<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * close-delimiter := "--" boundary "--"<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * preamble := &lt;ignore&gt;<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * epilogue := &lt;ignore&gt;<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * body := header-part CRLF body-part<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * header-part := 1*header CRLF<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * header := header-name ":" header-value<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * header-name := &lt;printable ascii characters except ":"&gt;<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * header-value := &lt;any ascii characters except CR &amp; LF&gt;<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * body-data := &lt;arbitrary data&gt;<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * </code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Note that body-data can contain another mulipart entity. There</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * is limited support for single pass processing of such nested</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * streams. The nested stream is <strong>required</strong> to have a</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 60</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * boundary token of the same length as the parent stream (see {@link</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * #setBoundary(byte[])}).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Here is an example of usage of this class.<br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 65</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <pre></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * try {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * MultipartStream multipartStream = new MultipartStream(input, boundary);</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * boolean nextPart = multipartStream.skipPreamble();</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * OutputStream output;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * while(nextPart) {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * String header = multipartStream.readHeaders();</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * // process headers</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * // create some output stream</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * multipartStream.readBodyData(output);</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * nextPart = multipartStream.readBoundary();</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * } catch(MultipartStream.MalformedStreamException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * // the stream failed to follow required syntax</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * } catch(IOException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * // a read or write error occurred</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * </pre></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 84</td> <td class="nbHitsCovered"> 66303156</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> MultipartStream {</pre></td></tr>
|
|
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Internal class, which is used to invoke the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * {@link ProgressListener}.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> ProgressNotifier {</pre></td></tr>
|
|
<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The listener to invoke.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ProgressListener listener;</pre></td></tr>
|
|
<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Number of expected bytes, if known, or -1.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">long</span> contentLength;</pre></td></tr>
|
|
<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Number of bytes, which have been read so far.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> bytesRead;</pre></td></tr>
|
|
<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Number of items, which have been read so far.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 110</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> items;</pre></td></tr>
|
|
<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Creates a new instance with the given listener</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * and content length.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pListener The listener to invoke.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pContentLength The expected content length.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 119</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> ProgressNotifier(ProgressListener pListener, <span class="keyword">long</span> pContentLength) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> listener = pListener;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 121</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> contentLength = pContentLength;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 122</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Called to indicate that bytes have been read.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pBytes Number of bytes, which have been read.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">void</span> noteBytesRead(<span class="keyword">int</span> pBytes) {</pre></td></tr>
|
|
<tr> <td class="numLine"> 130</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/* Indicates, that the given number of bytes have been read from</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 131</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the input stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 133</td> <td class="nbHitsCovered"> 8507</td> <td class="src"><pre class="src"> bytesRead += pBytes;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 134</td> <td class="nbHitsCovered"> 8507</td> <td class="src"><pre class="src"> notifyListener();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 135</td> <td class="nbHitsCovered"> 8507</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Called to indicate, that a new file item has been detected.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">void</span> noteItem() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 141</td> <td class="nbHitsCovered"> 3190</td> <td class="src"><pre class="src"> ++items;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 142</td> <td class="nbHitsCovered"> 3190</td> <td class="src"><pre class="src"> notifyListener();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 3190</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 144</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 145</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Called for notifying the listener.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 147</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 148</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> notifyListener() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"><a title="Line 149: Conditional coverage 100% (2/2)."> 11697</a></td> <td class="src"><pre class="src"> <a title="Line 149: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (listener != <span class="keyword">null</span>) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 5212</td> <td class="src"><pre class="src"> listener.update(bytesRead, contentLength, items);</pre></td></tr>
|
|
<tr> <td class="numLine"> 151</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 152</td> <td class="nbHitsCovered"> 11697</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 153</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 154</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 156</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// ----------------------------------------------------- Manifest constants</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The Carriage Return ASCII character value.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span> CR = 0x0D;</pre></td></tr>
|
|
<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 163</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 164</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The Line Feed ASCII character value.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 165</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span> LF = 0x0A;</pre></td></tr>
|
|
<tr> <td class="numLine"> 167</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 168</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 169</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The dash (-) ASCII character value.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 171</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span> DASH = 0x2D;</pre></td></tr>
|
|
<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 174</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The maximum length of <code>header-part</code> that will be</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * processed (10 kilobytes = 10240 bytes.).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> HEADER_PART_SIZE_MAX = 10240;</pre></td></tr>
|
|
<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The default length of the buffer used for processing a request.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> DEFAULT_BUFSIZE = 4096;</pre></td></tr>
|
|
<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A byte sequence that marks the end of <code>header-part</code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * (<code>CRLFCRLF</code>).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 188</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] HEADER_SEPARATOR = {CR, LF, CR, LF};</pre></td></tr>
|
|
<tr> <td class="numLine"> 189</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 190</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 191</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A byte sequence that that follows a delimiter that will be</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 192</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * followed by an encapsulation (<code>CRLF</code>).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 193</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] FIELD_SEPARATOR = {CR, LF};</pre></td></tr>
|
|
<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 196</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 197</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A byte sequence that that follows a delimiter of the last</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 198</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * encapsulation in the stream (<code>--</code>).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 200</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] STREAM_TERMINATOR = {DASH, DASH};</pre></td></tr>
|
|
<tr> <td class="numLine"> 201</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 202</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 203</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A byte sequence that precedes a boundary (<code>CRLF--</code>).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 204</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 205</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] BOUNDARY_PREFIX = {CR, LF, DASH, DASH};</pre></td></tr>
|
|
<tr> <td class="numLine"> 206</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 207</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// ----------------------------------------------------------- Data members</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 208</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 209</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 210</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The input stream from which data is read.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 211</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 212</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> InputStream input;</pre></td></tr>
|
|
<tr> <td class="numLine"> 213</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 215</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The length of the boundary token plus the leading <code>CRLF--</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 216</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 217</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> boundaryLength;</pre></td></tr>
|
|
<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The amount of data, in bytes, that must be kept in the buffer in order</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 221</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * to detect delimiters reliably.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> keepRegion;</pre></td></tr>
|
|
<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The byte sequence that partitions the stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] boundary;</pre></td></tr>
|
|
<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The table for Knuth-Morris-Pratt search algorithm.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span>[] boundaryTable;</pre></td></tr>
|
|
<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 235</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 236</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The length of the buffer used for processing the request.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 237</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 238</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">int</span> bufSize;</pre></td></tr>
|
|
<tr> <td class="numLine"> 239</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The buffer used for processing the request.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 243</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> <span class="keyword">byte</span>[] buffer;</pre></td></tr>
|
|
<tr> <td class="numLine"> 244</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 246</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The index of first valid character in the buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 247</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * 0 <= head < bufSize</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 249</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 250</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> head;</pre></td></tr>
|
|
<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 252</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 253</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The index of last valid character in the buffer + 1.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <br></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * 0 <= tail <= bufSize</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> tail;</pre></td></tr>
|
|
<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The content encoding to use when reading headers.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> String headerEncoding;</pre></td></tr>
|
|
<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The progress notifier, if any, or null.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">final</span> ProgressNotifier notifier;</pre></td></tr>
|
|
<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// ----------------------------------------------------------- Constructors</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Creates a new instance.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @deprecated 1.2.1 Use {@link #MultipartStream(InputStream, byte[], int,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * ProgressNotifier)}</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 276</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Deprecated</pre></td></tr>
|
|
<tr> <td class="numLine"> 278</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> MultipartStream() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 279</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>(<span class="keyword">null</span>, <span class="keyword">null</span>, <span class="keyword">null</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 280</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 283</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Constructs a <code>MultipartStream</code> with a custom size buffer</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 284</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * and no progress notifier.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 285</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 286</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Note that the buffer must be at least big enough to contain the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 287</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * boundary string, plus 4 characters for CR/LF and double dash, plus at</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 288</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * least one byte of data. Too small a buffer size setting will degrade</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 289</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * performance.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 290</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 291</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param input The <code>InputStream</code> to serve as a data source.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 292</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param boundary The token used for dividing the stream into</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulations</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param bufSize The size of the buffer to be used, in bytes.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 296</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @deprecated 1.2.1 Use {@link #MultipartStream(InputStream, byte[], int,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 297</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * ProgressNotifier)}.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 298</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 299</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Deprecated</pre></td></tr>
|
|
<tr> <td class="numLine"> 300</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> MultipartStream(InputStream input, <span class="keyword">byte</span>[] boundary, <span class="keyword">int</span> bufSize) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 301</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>(input, boundary, bufSize, <span class="keyword">null</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 302</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 303</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 304</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Constructs a <code>MultipartStream</code> with a custom size buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Note that the buffer must be at least big enough to contain the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * boundary string, plus 4 characters for CR/LF and double dash, plus at</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * least one byte of data. Too small a buffer size setting will degrade</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * performance.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 311</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param input The <code>InputStream</code> to serve as a data source.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param boundary The token used for dividing the stream into</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulations</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param bufSize The size of the buffer to be used, in bytes.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pNotifier The notifier, which is used for calling the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * progress listener, if any.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IllegalArgumentException If the buffer size is too small</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @since 1.3.1</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 323</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> MultipartStream(InputStream input,</pre></td></tr>
|
|
<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">byte</span>[] boundary,</pre></td></tr>
|
|
<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">int</span> bufSize,</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 326</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> ProgressNotifier pNotifier) {</pre></td></tr>
|
|
<tr> <td class="numLine"> 327</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 328</td> <td class="nbHitsUncovered"><a title="Line 328: Conditional coverage 50% (1/2)."> 39</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 328: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (boundary == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 329</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(<span class="string">"boundary may not be null"</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 330</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// We prepend CR/LF to the boundary to chop trailing CR/LF from</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 332</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// body-data tokens.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 333</td> <td class="nbHitsCovered"> 39</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.boundaryLength = boundary.length + BOUNDARY_PREFIX.length;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 334</td> <td class="nbHitsCovered"><a title="Line 334: Conditional coverage 100% (2/2)."> 39</a></td> <td class="src"><pre class="src"> <a title="Line 334: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bufSize < <span class="keyword">this</span>.boundaryLength + 1) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalArgumentException(</pre></td></tr>
|
|
<tr> <td class="numLine"> 336</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="string">"The buffer size specified for the MultipartStream is too small"</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 337</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 339</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.input = input;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 340</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.bufSize = Math.max(bufSize, boundaryLength * 2);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 341</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.buffer = <span class="keyword">new</span> <span class="keyword">byte</span>[<span class="keyword">this</span>.bufSize];</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 342</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.notifier = pNotifier;</pre></td></tr>
|
|
<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 344</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.boundary = <span class="keyword">new</span> <span class="keyword">byte</span>[<span class="keyword">this</span>.boundaryLength];</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 345</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.boundaryTable = <span class="keyword">new</span> <span class="keyword">int</span>[<span class="keyword">this</span>.boundaryLength + 1];</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 346</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.keepRegion = <span class="keyword">this</span>.boundary.length;</pre></td></tr>
|
|
<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 348</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> System.arraycopy(BOUNDARY_PREFIX, 0, <span class="keyword">this</span>.boundary, 0,</pre></td></tr>
|
|
<tr> <td class="numLine"> 349</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> BOUNDARY_PREFIX.length);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 350</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> System.arraycopy(boundary, 0, <span class="keyword">this</span>.boundary, BOUNDARY_PREFIX.length,</pre></td></tr>
|
|
<tr> <td class="numLine"> 351</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> boundary.length);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 352</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> computeBoundaryTable();</pre></td></tr>
|
|
<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 354</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> head = 0;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 355</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> tail = 0;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 356</td> <td class="nbHitsCovered"> 38</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 357</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 359</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Constructs a <code>MultipartStream</code> with a default size buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 360</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 361</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param input The <code>InputStream</code> to serve as a data source.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 362</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param boundary The token used for dividing the stream into</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulations</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pNotifier An object for calling the progress listener, if any.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 365</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 366</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @see #MultipartStream(InputStream, byte[], int, ProgressNotifier)</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 368</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 369</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> MultipartStream(InputStream input,</pre></td></tr>
|
|
<tr> <td class="numLine"> 370</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">byte</span>[] boundary,</pre></td></tr>
|
|
<tr> <td class="numLine"> 371</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> ProgressNotifier pNotifier) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> <span class="keyword">this</span>(input, boundary, DEFAULT_BUFSIZE, pNotifier);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 37</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 374</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 375</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 376</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Constructs a <code>MultipartStream</code> with a default size buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 377</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 378</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param input The <code>InputStream</code> to serve as a data source.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 379</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param boundary The token used for dividing the stream into</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 380</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulations</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 381</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @deprecated 1.2.1 Use {@link #MultipartStream(InputStream, byte[], int,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * ProgressNotifier)}.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 384</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 385</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Deprecated</pre></td></tr>
|
|
<tr> <td class="numLine"> 386</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> MultipartStream(InputStream input,</pre></td></tr>
|
|
<tr> <td class="numLine"> 387</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">byte</span>[] boundary) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 388</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>(input, boundary, DEFAULT_BUFSIZE, <span class="keyword">null</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 389</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 390</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// --------------------------------------------------------- Public methods</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 392</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 394</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Retrieves the character encoding used when reading the headers of an</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 395</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * individual part. When not specified, or <code>null</code>, the platform</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * default encoding is used.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The encoding used to read part headers.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> String getHeaderEncoding() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 401</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> headerEncoding;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Specifies the character encoding to be used when reading the headers of</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 406</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * individual parts. When not specified, or <code>null</code>, the platform</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * default encoding is used.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param encoding The encoding used to read part headers.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setHeaderEncoding(String encoding) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 412</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> headerEncoding = encoding;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 413</td> <td class="nbHitsCovered"> 36</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Reads a byte from the <code>buffer</code>, and refills it as</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * necessary.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 418</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 419</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The next byte from the input stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 421</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException if there is no more data available.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 422</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 423</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">byte</span> readByte() <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLine"> 424</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Buffer depleted ?</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 425</td> <td class="nbHitsCovered"><a title="Line 425: Conditional coverage 100% (2/2)."> 170498</a></td> <td class="src"><pre class="src"> <a title="Line 425: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (head == tail) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 426</td> <td class="nbHitsCovered"> 71</td> <td class="src"><pre class="src"> head = 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Refill.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 428</td> <td class="nbHitsCovered"> 71</td> <td class="src"><pre class="src"> tail = input.read(buffer, head, bufSize);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 429</td> <td class="nbHitsUncovered"><a title="Line 429: Conditional coverage 50% (1/2)."> 71</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 429: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (tail == -1) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// No more data available.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 431</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IOException(<span class="string">"No more data is available"</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 433</td> <td class="nbHitsUncovered"><a title="Line 433: Conditional coverage 50% (1/2)."> 71</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 433: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (notifier != <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 434</td> <td class="nbHitsCovered"> 71</td> <td class="src"><pre class="src"> notifier.noteBytesRead(tail);</pre></td></tr>
|
|
<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 170498</td> <td class="src"><pre class="src"> <span class="keyword">return</span> buffer[head++];</pre></td></tr>
|
|
<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 441</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Skips a <code>boundary</code> token, and checks whether more</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 442</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulations</code> are contained in the stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 444</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return <code>true</code> if there are more encapsulations in</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * this stream; <code>false</code> otherwise.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 446</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws FileUploadIOException if the bytes read from the stream exceeded the size limits</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws MalformedStreamException if the stream ends unexpectedly or</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * fails to follow required syntax.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 450</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> readBoundary()</pre></td></tr>
|
|
<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">throws</span> FileUploadIOException, MalformedStreamException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 453</td> <td class="nbHitsCovered"> 3228</td> <td class="src"><pre class="src"> <span class="keyword">byte</span>[] marker = <span class="keyword">new</span> <span class="keyword">byte</span>[2];</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 454</td> <td class="nbHitsCovered"> 3228</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> nextChunk = <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 456</td> <td class="nbHitsCovered"> 3228</td> <td class="src"><pre class="src"> head += boundaryLength;</pre></td></tr>
|
|
<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 458</td> <td class="nbHitsCovered"> 3228</td> <td class="src"><pre class="src"> marker[0] = readByte();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 459</td> <td class="nbHitsCovered"><a title="Line 459: Conditional coverage 100% (2/2)."> 3228</a></td> <td class="src"><pre class="src"> <a title="Line 459: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (marker[0] == LF) {</a></pre></td></tr>
|
|
<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Work around IE5 Mac bug with input type=image.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 461</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Because the boundary delimiter, not including the trailing</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 462</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// CRLF, must not appear within any file (RFC 2046, section</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 463</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// 5.1.1), we know the missing CR is due to a buggy browser</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 464</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// rather than a file containing something similar to a</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// boundary.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 466</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 469</td> <td class="nbHitsCovered"> 3224</td> <td class="src"><pre class="src"> marker[1] = readByte();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"><a title="Line 470: Conditional coverage 100% (2/2)."> 3224</a></td> <td class="src"><pre class="src"> <a title="Line 470: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (arrayequals(marker, STREAM_TERMINATOR, 2)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 471</td> <td class="nbHitsCovered"> 33</td> <td class="src"><pre class="src"> nextChunk = <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 472</td> <td class="nbHitsUncovered"><a title="Line 472: Conditional coverage 50% (1/2)."> 3191</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 472: Conditional coverage 50% (1/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (arrayequals(marker, FIELD_SEPARATOR, 2)) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 3191</td> <td class="src"><pre class="src"> nextChunk = <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 475</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> MalformedStreamException(</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="string">"Unexpected characters follow a boundary"</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 478</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (FileUploadIOException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 479</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// wraps a SizeException, re-throw as it will be unwrapped later</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 480</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> e;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 481</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 482</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> MalformedStreamException(<span class="string">"Stream ended unexpectedly"</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 483</td> <td class="nbHitsCovered"> 3224</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 484</td> <td class="nbHitsCovered"> 3224</td> <td class="src"><pre class="src"> <span class="keyword">return</span> nextChunk;</pre></td></tr>
|
|
<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 486</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 487</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Changes the boundary token used for partitioning the stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 489</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 490</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>This method allows single pass processing of nested multipart</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 491</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * streams.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 492</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 493</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>The boundary token of the nested stream is <code>required</code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * to be of the same length as the boundary token in parent stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 496</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Restoring the parent stream boundary token after processing of a</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * nested stream is left to the application.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 499</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param boundary The boundary to be used for parsing of the nested</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IllegalBoundaryException if the <code>boundary</code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * has a different length than the one</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * being currently parsed.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setBoundary(<span class="keyword">byte</span>[] boundary)</pre></td></tr>
|
|
<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">throws</span> IllegalBoundaryException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 508</td> <td class="nbHitsUncovered"><a title="Line 508: Conditional coverage 50% (1/2)."> 8</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 508: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (boundary.length != boundaryLength - BOUNDARY_PREFIX.length) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 509</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalBoundaryException(</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 510</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="string">"The length of a boundary token cannot be changed"</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 511</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 512</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> System.arraycopy(boundary, 0, <span class="keyword">this</span>.boundary, BOUNDARY_PREFIX.length,</pre></td></tr>
|
|
<tr> <td class="numLine"> 513</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> boundary.length);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 514</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> computeBoundaryTable();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 516</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 517</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Compute the table used for Knuth-Morris-Pratt search algorithm.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> computeBoundaryTable() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 521</td> <td class="nbHitsCovered"> 6504</td> <td class="src"><pre class="src"> <span class="keyword">int</span> position = 2;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 522</td> <td class="nbHitsCovered"> 6504</td> <td class="src"><pre class="src"> <span class="keyword">int</span> candidate = 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 524</td> <td class="nbHitsCovered"> 6504</td> <td class="src"><pre class="src"> boundaryTable[0] = -1;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 525</td> <td class="nbHitsCovered"> 6504</td> <td class="src"><pre class="src"> boundaryTable[1] = 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 526</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 527</td> <td class="nbHitsCovered"><a title="Line 527: Conditional coverage 100% (2/2)."> 77942</a></td> <td class="src"><pre class="src"> <a title="Line 527: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (position <= boundaryLength) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 528</td> <td class="nbHitsCovered"><a title="Line 528: Conditional coverage 100% (2/2)."> 71438</a></td> <td class="src"><pre class="src"> <a title="Line 528: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (boundary[position - 1] == boundary[candidate]) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 529</td> <td class="nbHitsCovered"> 12880</td> <td class="src"><pre class="src"> boundaryTable[position] = candidate + 1;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 530</td> <td class="nbHitsCovered"> 12880</td> <td class="src"><pre class="src"> candidate++;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 531</td> <td class="nbHitsCovered"> 12880</td> <td class="src"><pre class="src"> position++;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 532</td> <td class="nbHitsCovered"><a title="Line 532: Conditional coverage 100% (2/2)."> 58558</a></td> <td class="src"><pre class="src"> <a title="Line 532: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (candidate > 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 533</td> <td class="nbHitsCovered"> 12880</td> <td class="src"><pre class="src"> candidate = boundaryTable[candidate];</pre></td></tr>
|
|
<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 535</td> <td class="nbHitsCovered"> 45678</td> <td class="src"><pre class="src"> boundaryTable[position] = 0;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 536</td> <td class="nbHitsCovered"> 45678</td> <td class="src"><pre class="src"> position++;</pre></td></tr>
|
|
<tr> <td class="numLine"> 537</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 538</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 6504</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 540</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Reads the <code>header-part</code> of the current</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulation</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 545</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Headers are returned verbatim to the input stream, including the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 546</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * trailing <code>CRLF</code> marker. Parsing is left to the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 547</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * application.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 548</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 549</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p><strong>TODO</strong> allow limiting maximum header size to</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 550</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * protect against abuse.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 551</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The <code>header-part</code> of the current encapsulation.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 553</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 554</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws FileUploadIOException if the bytes read from the stream exceeded the size limits.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws MalformedStreamException if the stream ends unexpectedly.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 556</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> String readHeaders() <span class="keyword">throws</span> FileUploadIOException, MalformedStreamException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 558</td> <td class="nbHitsCovered"> 3195</td> <td class="src"><pre class="src"> <span class="keyword">int</span> i = 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 559</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">byte</span> b;</pre></td></tr>
|
|
<tr> <td class="numLine"> 560</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// to support multi-byte characters</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 561</td> <td class="nbHitsCovered"> 3195</td> <td class="src"><pre class="src"> ByteArrayOutputStream baos = <span class="keyword">new</span> ByteArrayOutputStream();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 562</td> <td class="nbHitsCovered"> 3195</td> <td class="src"><pre class="src"> <span class="keyword">int</span> size = 0;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 563</td> <td class="nbHitsCovered"><a title="Line 563: Conditional coverage 100% (2/2)."> 167241</a></td> <td class="src"><pre class="src"> <a title="Line 563: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (i < HEADER_SEPARATOR.length) {</a></pre></td></tr>
|
|
<tr> <td class="numLine"> 564</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"> 164046</td> <td class="src"><pre class="src"> b = readByte();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 566</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (FileUploadIOException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 567</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// wraps a SizeException, re-throw as it will be unwrapped later</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 568</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> e;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 569</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 570</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> MalformedStreamException(<span class="string">"Stream ended unexpectedly"</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 571</td> <td class="nbHitsCovered"> 164046</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 572</td> <td class="nbHitsUncovered"><a title="Line 572: Conditional coverage 50% (1/2)."> 164046</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 572: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (++size > HEADER_PART_SIZE_MAX) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 573</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> MalformedStreamException(</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 574</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> format(<span class="string">"Header section has more than %s bytes (maybe it is not properly terminated)"</span>,</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 575</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> Integer.valueOf(HEADER_PART_SIZE_MAX)));</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"><a title="Line 577: Conditional coverage 100% (2/2)."> 164046</a></td> <td class="src"><pre class="src"> <a title="Line 577: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (b == HEADER_SEPARATOR[i]) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 578</td> <td class="nbHitsCovered"> 12888</td> <td class="src"><pre class="src"> i++;</pre></td></tr>
|
|
<tr> <td class="numLine"> 579</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 151158</td> <td class="src"><pre class="src"> i = 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 581</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 582</td> <td class="nbHitsCovered"> 164046</td> <td class="src"><pre class="src"> baos.write(b);</pre></td></tr>
|
|
<tr> <td class="numLine"> 583</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 584</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 585</td> <td class="nbHitsCovered"> 3195</td> <td class="src"><pre class="src"> String headers = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 586</td> <td class="nbHitsUncovered"><a title="Line 586: Conditional coverage 50% (1/2)."> 3195</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 586: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (headerEncoding != <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 587</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 588</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> headers = baos.toString(headerEncoding);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 589</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (UnsupportedEncodingException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 590</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Fall back to platform default if specified encoding is not</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// supported.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 592</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> headers = baos.toString();</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 593</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 595</td> <td class="nbHitsCovered"> 3195</td> <td class="src"><pre class="src"> headers = baos.toString();</pre></td></tr>
|
|
<tr> <td class="numLine"> 596</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 598</td> <td class="nbHitsCovered"> 3195</td> <td class="src"><pre class="src"> <span class="keyword">return</span> headers;</pre></td></tr>
|
|
<tr> <td class="numLine"> 599</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 600</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 601</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 602</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Reads <code>body-data</code> from the current</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 603</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulation</code> and writes its contents into the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 604</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * output <code>Stream</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 605</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 606</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Arbitrary large amounts of data can be processed by this</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 607</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * method using a constant size buffer. (see {@link</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * #MultipartStream(InputStream,byte[],int,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 609</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * MultipartStream.ProgressNotifier) constructor}).</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 611</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param output The <code>Stream</code> to write data into. May</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 612</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * be null, in which case this method is equivalent</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 613</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * to {@link #discardBodyData()}.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 614</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 615</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the amount of data written.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws MalformedStreamException if the stream ends unexpectedly.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 618</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException if an i/o error occurs.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 619</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 620</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> readBodyData(OutputStream output)</pre></td></tr>
|
|
<tr> <td class="numLine"> 621</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">throws</span> MalformedStreamException, IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 622</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> <span class="keyword">return</span> (<span class="keyword">int</span>) Streams.copy(newInputStream(), output, <span class="keyword">false</span>); <span class="comment">// N.B. Streams.copy closes the input stream</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 623</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 624</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 625</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 626</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Creates a new {@link ItemInputStream}.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 627</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return A new instance of {@link ItemInputStream}.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 628</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 629</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> ItemInputStream newInputStream() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 630</td> <td class="nbHitsCovered"> 6419</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">new</span> ItemInputStream();</pre></td></tr>
|
|
<tr> <td class="numLine"> 631</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 632</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 633</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 634</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p> Reads <code>body-data</code> from the current</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 635</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>encapsulation</code> and discards it.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 636</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 637</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p>Use this method to skip encapsulations you don't need or don't</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 638</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * understand.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 639</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 640</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The amount of data discarded.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 641</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws MalformedStreamException if the stream ends unexpectedly.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 643</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException if an i/o error occurs.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 644</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> discardBodyData() <span class="keyword">throws</span> MalformedStreamException, IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 646</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> <span class="keyword">return</span> readBodyData(<span class="keyword">null</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 647</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 648</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 649</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Finds the beginning of the first <code>encapsulation</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 652</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return <code>true</code> if an <code>encapsulation</code> was found in</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 653</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException if an i/o error occurs.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 656</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 657</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> skipPreamble() <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLine"> 658</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// First delimiter may be not preceeded with a CRLF.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 659</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> System.arraycopy(boundary, 2, boundary, 0, boundary.length - 2);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 660</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> boundaryLength = boundary.length - 2;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 661</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> computeBoundaryTable();</pre></td></tr>
|
|
<tr> <td class="numLine"> 662</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLine"> 663</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Discard all data up to the delimiter.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 664</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> discardBodyData();</pre></td></tr>
|
|
<tr> <td class="numLine"> 665</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 666</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Read boundary - if succeeded, the stream contains an</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 667</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// encapsulation.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 668</td> <td class="nbHitsCovered"> 6456</td> <td class="src"><pre class="src"> <span class="keyword">return</span> readBoundary();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 669</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (MalformedStreamException e) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 670</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 671</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">finally</span> {</pre></td></tr>
|
|
<tr> <td class="numLine"> 672</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Restore delimiter.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 673</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> System.arraycopy(boundary, 0, boundary, 2, boundary.length - 2);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 674</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> boundaryLength = boundary.length;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 675</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> boundary[0] = CR;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 676</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> boundary[1] = LF;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 677</td> <td class="nbHitsCovered"> 3229</td> <td class="src"><pre class="src"> computeBoundaryTable();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 678</td> <td class="nbHitsCovered"> 1</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 679</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 680</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 681</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 682</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Compares <code>count</code> first bytes in the arrays</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 683</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>a</code> and <code>b</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 684</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 685</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param a The first array to compare.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param b The second array to compare.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 687</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param count How many bytes should be compared.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 688</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 689</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return <code>true</code> if <code>count</code> first bytes in arrays</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 690</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>a</code> and <code>b</code> are equal.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 691</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 692</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">boolean</span> arrayequals(<span class="keyword">byte</span>[] a,</pre></td></tr>
|
|
<tr> <td class="numLine"> 693</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">byte</span>[] b,</pre></td></tr>
|
|
<tr> <td class="numLine"> 694</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">int</span> count) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 695</td> <td class="nbHitsCovered"><a title="Line 695: Conditional coverage 100% (2/2)."> 12863</a></td> <td class="src"><pre class="src"> <a title="Line 695: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = 0; i < count; i++) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 696</td> <td class="nbHitsCovered"><a title="Line 696: Conditional coverage 100% (2/2)."> 9639</a></td> <td class="src"><pre class="src"> <a title="Line 696: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (a[i] != b[i]) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 697</td> <td class="nbHitsCovered"> 3191</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 698</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 699</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 700</td> <td class="nbHitsCovered"> 3224</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 701</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 703</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 704</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Searches for a byte of specified value in the <code>buffer</code>,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 705</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * starting at the specified <code>position</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 706</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 707</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param value The value to find.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 708</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pos The starting position for searching.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 709</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 710</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The position of byte found, counting from beginning of the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 711</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <code>buffer</code>, or <code>-1</code> if not found.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 712</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 713</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">int</span> findByte(<span class="keyword">byte</span> value,</pre></td></tr>
|
|
<tr> <td class="numLine"> 714</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">int</span> pos) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 715</td> <td class="nbHitsUncovered"><a title="Line 715: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 715: Conditional coverage 0% (0/2)."> <span class="keyword">for</span> (<span class="keyword">int</span> i = pos; i < tail; i++) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 716</td> <td class="nbHitsUncovered"><a title="Line 716: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 716: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (buffer[i] == value) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 717</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> i;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 718</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 719</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 721</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> -1;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 723</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 724</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 725</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Searches for the <code>boundary</code> in the <code>buffer</code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 726</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * region delimited by <code>head</code> and <code>tail</code>.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 727</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 728</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The position of the boundary found, counting from the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 729</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * beginning of the <code>buffer</code>, or <code>-1</code> if</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 730</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * not found.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 731</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 732</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">int</span> findSeparator() {</pre></td></tr>
|
|
<tr> <td class="numLine"> 733</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 734</td> <td class="nbHitsCovered"> 14855</td> <td class="src"><pre class="src"> <span class="keyword">int</span> bufferPos = <span class="keyword">this</span>.head;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 735</td> <td class="nbHitsCovered"> 14855</td> <td class="src"><pre class="src"> <span class="keyword">int</span> tablePos = 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 736</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 737</td> <td class="nbHitsCovered"><a title="Line 737: Conditional coverage 100% (2/2)."> 34380763</a></td> <td class="src"><pre class="src"> <a title="Line 737: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (bufferPos < <span class="keyword">this</span>.tail) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 738</td> <td class="nbHitsCovered"><a title="Line 738: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 68680474</a></td> <td class="src"><pre class="src"> <a title="Line 738: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">while</span> (tablePos >= 0 && buffer[bufferPos] != boundary[tablePos]) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 739</td> <td class="nbHitsCovered"> 34308150</td> <td class="src"><pre class="src"> tablePos = boundaryTable[tablePos];</pre></td></tr>
|
|
<tr> <td class="numLine"> 740</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 741</td> <td class="nbHitsCovered"> 34372324</td> <td class="src"><pre class="src"> bufferPos++;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 742</td> <td class="nbHitsCovered"> 34372324</td> <td class="src"><pre class="src"> tablePos++;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 743</td> <td class="nbHitsCovered"><a title="Line 743: Conditional coverage 100% (2/2)."> 34372324</a></td> <td class="src"><pre class="src"> <a title="Line 743: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (tablePos == boundaryLength) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 744</td> <td class="nbHitsCovered"> 6416</td> <td class="src"><pre class="src"> <span class="keyword">return</span> bufferPos - boundaryLength;</pre></td></tr>
|
|
<tr> <td class="numLine"> 745</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 746</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 747</td> <td class="nbHitsCovered"> 8439</td> <td class="src"><pre class="src"> <span class="keyword">return</span> -1;</pre></td></tr>
|
|
<tr> <td class="numLine"> 748</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 749</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 750</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 751</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Thrown to indicate that the input stream fails to follow the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 752</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * required syntax.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 753</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 754</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> MalformedStreamException <span class="keyword">extends</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLine"> 755</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 756</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The UID to use when serializing this instance.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 758</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 759</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">long</span> serialVersionUID = 6466926458059796677L;</pre></td></tr>
|
|
<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Constructs a <code>MalformedStreamException</code> with no</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 763</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * detail message.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 764</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 765</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> MalformedStreamException() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 766</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>();</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 767</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 768</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 769</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 770</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Constructs an <code>MalformedStreamException</code> with</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 771</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the specified detail message.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 772</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 773</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param message The detail message.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 774</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 775</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> MalformedStreamException(String message) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 776</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">super</span>(message);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 777</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 778</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 780</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 781</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 782</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Thrown upon attempt of setting an invalid boundary token.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 783</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 784</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">class</span> IllegalBoundaryException <span class="keyword">extends</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLine"> 785</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 786</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 787</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The UID to use when serializing this instance.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 788</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 789</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">long</span> serialVersionUID = -161533165102632918L;</pre></td></tr>
|
|
<tr> <td class="numLine"> 790</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 792</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Constructs an <code>IllegalBoundaryException</code> with no</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 793</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * detail message.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 794</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 795</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> IllegalBoundaryException() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 796</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>();</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 797</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 798</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 799</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 800</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Constructs an <code>IllegalBoundaryException</code> with</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 801</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the specified detail message.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 802</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 803</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param message The detail message.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 804</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 805</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> IllegalBoundaryException(String message) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 806</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">super</span>(message);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 807</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 808</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 809</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 810</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 811</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 812</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * An {@link InputStream} for reading an items contents.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 813</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 814</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> ItemInputStream <span class="keyword">extends</span> InputStream <span class="keyword">implements</span> Closeable {</pre></td></tr>
|
|
<tr> <td class="numLine"> 815</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 816</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 817</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The number of bytes, which have been read so far.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 818</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 819</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">long</span> total;</pre></td></tr>
|
|
<tr> <td class="numLine"> 820</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 821</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 822</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The number of bytes, which must be hold, because</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 823</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * they might be a part of the boundary.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 824</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 825</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> pad;</pre></td></tr>
|
|
<tr> <td class="numLine"> 826</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 827</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 828</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The current offset in the buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 829</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 830</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> pos;</pre></td></tr>
|
|
<tr> <td class="numLine"> 831</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 832</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 833</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Whether the stream is already closed.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 834</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 835</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> closed;</pre></td></tr>
|
|
<tr> <td class="numLine"> 836</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 837</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 838</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Creates a new instance.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 839</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 840</td> <td class="nbHitsCovered"> 6419</td> <td class="src"><pre class="src"> ItemInputStream() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 841</td> <td class="nbHitsCovered"> 6419</td> <td class="src"><pre class="src"> findSeparator();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 842</td> <td class="nbHitsCovered"> 6419</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 843</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 844</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 845</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Called for finding the separator.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 846</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 847</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">void</span> findSeparator() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 848</td> <td class="nbHitsCovered"> 14855</td> <td class="src"><pre class="src"> pos = MultipartStream.<span class="keyword">this</span>.findSeparator();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 849</td> <td class="nbHitsCovered"><a title="Line 849: Conditional coverage 100% (2/2)."> 14855</a></td> <td class="src"><pre class="src"> <a title="Line 849: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pos == -1) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 850</td> <td class="nbHitsCovered"><a title="Line 850: Conditional coverage 100% (2/2)."> 8439</a></td> <td class="src"><pre class="src"> <a title="Line 850: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (tail - head > keepRegion) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 851</td> <td class="nbHitsCovered"> 8374</td> <td class="src"><pre class="src"> pad = keepRegion;</pre></td></tr>
|
|
<tr> <td class="numLine"> 852</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 853</td> <td class="nbHitsCovered"> 65</td> <td class="src"><pre class="src"> pad = tail - head;</pre></td></tr>
|
|
<tr> <td class="numLine"> 854</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 855</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 856</td> <td class="nbHitsCovered"> 14855</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 857</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 858</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 859</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns the number of bytes, which have been read</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 860</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * by the stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 861</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 862</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return Number of bytes, which have been read so far.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 863</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 864</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">long</span> getBytesRead() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 865</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> total;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 866</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 867</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 868</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 869</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns the number of bytes, which are currently</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 870</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * available, without blocking.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 871</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 872</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurs.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 873</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return Number of bytes in the buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 874</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 875</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 876</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> available() <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 877</td> <td class="nbHitsCovered"><a title="Line 877: Conditional coverage 100% (2/2)."> 17069673</a></td> <td class="src"><pre class="src"> <a title="Line 877: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pos == -1) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 878</td> <td class="nbHitsCovered"> 14948730</td> <td class="src"><pre class="src"> <span class="keyword">return</span> tail - head - pad;</pre></td></tr>
|
|
<tr> <td class="numLine"> 879</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 880</td> <td class="nbHitsCovered"> 2120943</td> <td class="src"><pre class="src"> <span class="keyword">return</span> pos - head;</pre></td></tr>
|
|
<tr> <td class="numLine"> 881</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 882</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 883</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 884</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Offset when converting negative bytes to integers.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 885</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 886</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> BYTE_POSITIVE_OFFSET = 256;</pre></td></tr>
|
|
<tr> <td class="numLine"> 887</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 888</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 889</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns the next byte in the stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 890</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 891</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The next byte in the stream, as a non-negative</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 892</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * integer, or -1 for EOF.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 893</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurred.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 894</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 895</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 896</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> read() <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 897</td> <td class="nbHitsUncovered"><a title="Line 897: Conditional coverage 50% (1/2)."> 17039872</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 897: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (closed) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 898</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> FileItemStream.ItemSkippedException();</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 899</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 900</td> <td class="nbHitsCovered"><a title="Line 900: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 17039872</a></td> <td class="src"><pre class="src"> <a title="Line 900: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (available() == 0 && makeAvailable() == 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 901</td> <td class="nbHitsCovered"> 1024</td> <td class="src"><pre class="src"> <span class="keyword">return</span> -1;</pre></td></tr>
|
|
<tr> <td class="numLine"> 902</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 903</td> <td class="nbHitsCovered"> 17038848</td> <td class="src"><pre class="src"> ++total;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 904</td> <td class="nbHitsCovered"> 17038848</td> <td class="src"><pre class="src"> <span class="keyword">int</span> b = buffer[head++];</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 905</td> <td class="nbHitsCovered"><a title="Line 905: Conditional coverage 100% (2/2)."> 17038848</a></td> <td class="src"><pre class="src"> <a title="Line 905: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (b >= 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 906</td> <td class="nbHitsCovered"> 8552192</td> <td class="src"><pre class="src"> <span class="keyword">return</span> b;</pre></td></tr>
|
|
<tr> <td class="numLine"> 907</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 908</td> <td class="nbHitsCovered"> 8486656</td> <td class="src"><pre class="src"> <span class="keyword">return</span> b + BYTE_POSITIVE_OFFSET;</pre></td></tr>
|
|
<tr> <td class="numLine"> 909</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 910</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 911</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 912</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Reads bytes into the given buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 913</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 914</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param b The destination buffer, where to write to.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 915</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param off Offset of the first byte in the buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 916</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param len Maximum number of bytes to read.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 917</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return Number of bytes, which have been actually read,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 918</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * or -1 for EOF.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 919</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurred.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 920</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 921</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 922</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> read(<span class="keyword">byte</span>[] b, <span class="keyword">int</span> off, <span class="keyword">int</span> len) <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 923</td> <td class="nbHitsUncovered"><a title="Line 923: Conditional coverage 50% (1/2)."> 14949</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 923: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (closed) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 924</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> FileItemStream.ItemSkippedException();</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 925</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 926</td> <td class="nbHitsUncovered"><a title="Line 926: Conditional coverage 50% (1/2)."> 14949</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 926: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (len == 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 927</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> 0;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 928</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 929</td> <td class="nbHitsCovered"> 14949</td> <td class="src"><pre class="src"> <span class="keyword">int</span> res = available();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 930</td> <td class="nbHitsCovered"><a title="Line 930: Conditional coverage 100% (2/2)."> 14949</a></td> <td class="src"><pre class="src"> <a title="Line 930: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (res == 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 931</td> <td class="nbHitsCovered"> 9615</td> <td class="src"><pre class="src"> res = makeAvailable();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 932</td> <td class="nbHitsCovered"><a title="Line 932: Conditional coverage 100% (2/2)."> 9612</a></td> <td class="src"><pre class="src"> <a title="Line 932: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (res == 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 933</td> <td class="nbHitsCovered"> 5389</td> <td class="src"><pre class="src"> <span class="keyword">return</span> -1;</pre></td></tr>
|
|
<tr> <td class="numLine"> 934</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 935</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 936</td> <td class="nbHitsCovered"> 9557</td> <td class="src"><pre class="src"> res = Math.min(res, len);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 937</td> <td class="nbHitsCovered"> 9557</td> <td class="src"><pre class="src"> System.arraycopy(buffer, head, b, off, res);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 938</td> <td class="nbHitsCovered"> 9557</td> <td class="src"><pre class="src"> head += res;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 939</td> <td class="nbHitsCovered"> 9557</td> <td class="src"><pre class="src"> total += res;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 940</td> <td class="nbHitsCovered"> 9557</td> <td class="src"><pre class="src"> <span class="keyword">return</span> res;</pre></td></tr>
|
|
<tr> <td class="numLine"> 941</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 942</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 943</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 944</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Closes the input stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 945</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 946</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurred.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 947</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 948</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 949</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> close() <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 950</td> <td class="nbHitsCovered"> 9603</td> <td class="src"><pre class="src"> close(<span class="keyword">false</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 951</td> <td class="nbHitsCovered"> 9600</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 952</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 953</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 954</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Closes the input stream.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 955</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 956</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param pCloseUnderlying Whether to close the underlying stream</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 957</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * (hard close)</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 958</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurred.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 959</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 960</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> close(<span class="keyword">boolean</span> pCloseUnderlying) <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 961</td> <td class="nbHitsCovered"><a title="Line 961: Conditional coverage 100% (2/2)."> 9605</a></td> <td class="src"><pre class="src"> <a title="Line 961: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (closed) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 962</td> <td class="nbHitsCovered"> 3187</td> <td class="src"><pre class="src"> <span class="keyword">return</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 963</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 964</td> <td class="nbHitsCovered"><a title="Line 964: Conditional coverage 100% (2/2)."> 6418</a></td> <td class="src"><pre class="src"> <a title="Line 964: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pCloseUnderlying) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 965</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> closed = <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 966</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> input.close();</pre></td></tr>
|
|
<tr> <td class="numLine"> 967</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLine"> 968</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">for</span> (;;) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 969</td> <td class="nbHitsCovered"> 6416</td> <td class="src"><pre class="src"> <span class="keyword">int</span> av = available();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 970</td> <td class="nbHitsUncovered"><a title="Line 970: Conditional coverage 50% (1/2)."> 6416</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 970: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (av == 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 971</td> <td class="nbHitsCovered"> 6416</td> <td class="src"><pre class="src"> av = makeAvailable();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 972</td> <td class="nbHitsUncovered"><a title="Line 972: Conditional coverage 50% (1/2)."> 6413</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 972: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (av == 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 973</td> <td class="nbHitsCovered"> 6413</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 974</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 975</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 976</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> skip(av);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 977</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 978</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 979</td> <td class="nbHitsCovered"> 6415</td> <td class="src"><pre class="src"> closed = <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 980</td> <td class="nbHitsCovered"> 6415</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 981</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 982</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 983</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Skips the given number of bytes.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 984</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 985</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param bytes Number of bytes to skip.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 986</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return The number of bytes, which have actually been</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 987</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * skipped.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 988</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurred.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 989</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 990</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 991</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">long</span> skip(<span class="keyword">long</span> bytes) <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 992</td> <td class="nbHitsUncovered"><a title="Line 992: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 992: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (closed) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 993</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> FileItemStream.ItemSkippedException();</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 994</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 995</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> av = available();</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 996</td> <td class="nbHitsUncovered"><a title="Line 996: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 996: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (av == 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 997</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> av = makeAvailable();</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 998</td> <td class="nbHitsUncovered"><a title="Line 998: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 998: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (av == 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 999</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> 0;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1000</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1001</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1002</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">long</span> res = Math.min(av, bytes);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1003</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> head += res;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1004</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> res;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1005</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1006</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1007</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1008</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Attempts to read more data.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1009</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1010</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return Number of available bytes</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1011</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException An I/O error occurred.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1012</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1013</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">int</span> makeAvailable() <span class="keyword">throws</span> IOException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1014</td> <td class="nbHitsCovered"><a title="Line 1014: Conditional coverage 100% (2/2)."> 21227</a></td> <td class="src"><pre class="src"> <a title="Line 1014: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (pos != -1) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1015</td> <td class="nbHitsCovered"> 12791</td> <td class="src"><pre class="src"> <span class="keyword">return</span> 0;</pre></td></tr>
|
|
<tr> <td class="numLine"> 1016</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1017</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1018</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Move the data to the beginning of the buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1019</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> total += tail - head - pad;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1020</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> System.arraycopy(buffer, tail - pad, buffer, 0, pad);</pre></td></tr>
|
|
<tr> <td class="numLine"> 1021</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1022</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Refill buffer with new data.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1023</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> head = 0;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1024</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> tail = pad;</pre></td></tr>
|
|
<tr> <td class="numLine"> 1025</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1026</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">for</span> (;;) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1027</td> <td class="nbHitsCovered"> 8442</td> <td class="src"><pre class="src"> <span class="keyword">int</span> bytesRead = input.read(buffer, tail, bufSize - tail);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1028</td> <td class="nbHitsCovered"><a title="Line 1028: Conditional coverage 100% (2/2)."> 8438</a></td> <td class="src"><pre class="src"> <a title="Line 1028: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bytesRead == -1) {</a></pre></td></tr>
|
|
<tr> <td class="numLine"> 1029</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// The last pad amount is left in the buffer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1030</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// Boundary can't be in there so signal an error</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1031</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// condition.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1032</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String msg = <span class="string">"Stream ended unexpectedly"</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1033</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">throw</span> <span class="keyword">new</span> MalformedStreamException(msg);</pre></td></tr>
|
|
<tr> <td class="numLine"> 1034</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1035</td> <td class="nbHitsUncovered"><a title="Line 1035: Conditional coverage 50% (1/2)."> 8436</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 1035: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (notifier != <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1036</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> notifier.noteBytesRead(bytesRead);</pre></td></tr>
|
|
<tr> <td class="numLine"> 1037</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1038</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> tail += bytesRead;</pre></td></tr>
|
|
<tr> <td class="numLine"> 1039</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1040</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> findSeparator();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1041</td> <td class="nbHitsCovered"> 8436</td> <td class="src"><pre class="src"> <span class="keyword">int</span> av = available();</pre></td></tr>
|
|
<tr> <td class="numLine"> 1042</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1043</td> <td class="nbHitsCovered"><a title="Line 1043: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> 8436</a></td> <td class="src"><pre class="src"> <a title="Line 1043: Conditional coverage 100% (4/4) [each condition: 100%, 100%]."> <span class="keyword">if</span> (av > 0 || pos != -1) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1044</td> <td class="nbHitsCovered"> 8430</td> <td class="src"><pre class="src"> <span class="keyword">return</span> av;</pre></td></tr>
|
|
<tr> <td class="numLine"> 1045</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1046</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1047</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1048</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1049</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1050</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns, whether the stream is closed.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1051</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1052</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return True, if the stream is closed, otherwise false.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1053</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 1054</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 1055</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isClosed() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 1056</td> <td class="nbHitsCovered"> 3185</td> <td class="src"><pre class="src"> <span class="keyword">return</span> closed;</pre></td></tr>
|
|
<tr> <td class="numLine"> 1057</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1058</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1059</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 1060</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 1061</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
</table>
|
|
|
|
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 2.1.1 on 12/24/18 2:06 AM.</div>
|
|
</body>
|
|
</html>
|