PageRenderTime 39ms CodeModel.GetById 9ms RepoModel.GetById 1ms app.codeStats 0ms

/JAVA_APPENGINE/src/APJP/HTTP11/HTTPRequestMessage.java

http://apjp.googlecode.com/
Java | 226 lines | 169 code | 39 blank | 18 comment | 35 complexity | 771724c80ccd18de93900792e3309088 MD5 | raw file
  1. /*
  2. APJP, A PHP/JAVA PROXY
  3. Copyright (C) 2009-2011 Jeroen Van Steirteghem
  4. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
  5. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
  6. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  7. */
  8. package APJP.HTTP11;
  9. import java.io.InputStream;
  10. import java.io.OutputStream;
  11. import java.util.Arrays;
  12. public class HTTPRequestMessage extends HTTPMessage
  13. {
  14. protected InputStream inputStream;
  15. public HTTPRequestMessage(InputStream inputStream)
  16. {
  17. super();
  18. this.inputStream = inputStream;
  19. }
  20. public void read() throws HTTPMessageException
  21. {
  22. try
  23. {
  24. byte[] byteArray1;
  25. byte[] byteArray2;
  26. int byteArray2Length;
  27. byteArray1 = new byte[1];
  28. byteArray2 = new byte[1024];
  29. byteArray2Length = 0;
  30. while((inputStream.read(byteArray1)) > 0)
  31. {
  32. if(byteArray2Length == byteArray2.length)
  33. {
  34. byteArray2 = Arrays.copyOf(byteArray2, byteArray2Length + byteArray2Length);
  35. }
  36. byteArray2[byteArray2Length] = byteArray1[0];
  37. byteArray2Length = byteArray2Length + 1;
  38. if(byteArray2Length >= 4)
  39. {
  40. if
  41. (
  42. byteArray2[byteArray2Length - 4] == '\r' &&
  43. byteArray2[byteArray2Length - 3] == '\n' &&
  44. byteArray2[byteArray2Length - 2] == '\r' &&
  45. byteArray2[byteArray2Length - 1] == '\n'
  46. )
  47. {
  48. break;
  49. }
  50. }
  51. }
  52. String httpRequestMessageHeader1Value1 = new String(byteArray2, 0, byteArray2Length);
  53. String[] httpRequestMessageHeader1Values1 = httpRequestMessageHeader1Value1.split("\r\n");
  54. String httpRequestMessageHeader1Value2 = httpRequestMessageHeader1Values1[0];
  55. addHTTPMessageHeader(new HTTPMessageHeader("", httpRequestMessageHeader1Value2));
  56. for(int i = 1; i < httpRequestMessageHeader1Values1.length; i = i + 1)
  57. {
  58. String httpRequestMessageHeader1Value3 = httpRequestMessageHeader1Values1[i];
  59. String[] httpRequestMessageHeader1Values3 = httpRequestMessageHeader1Value3.split(": ");
  60. String httpRequestMessageHeader1Value4 = httpRequestMessageHeader1Values3[0];
  61. String httpRequestMessageHeader1Value5 = "";
  62. if(httpRequestMessageHeader1Values3.length == 2)
  63. {
  64. httpRequestMessageHeader1Value5 = httpRequestMessageHeader1Values3[1];
  65. }
  66. addHTTPMessageHeader(new HTTPMessageHeader(httpRequestMessageHeader1Value4, httpRequestMessageHeader1Value5));
  67. }
  68. }
  69. catch(Exception e)
  70. {
  71. throw new HTTPMessageException("HTTP_REQUEST_MESSAGE/READ", e);
  72. }
  73. }
  74. public void read(OutputStream outputStream) throws HTTPMessageException
  75. {
  76. try
  77. {
  78. HTTPMessageHeader httpRequestMessageHeader1 = getHTTPMessageHeader("");
  79. String httpRequestMessageHeader1Value1 = httpRequestMessageHeader1.getValue();
  80. String[] httpRequestMessageHeader1Values1 = httpRequestMessageHeader1Value1.split(" ");
  81. String httpRequestMessageHeader1Value2 = httpRequestMessageHeader1Values1[0];
  82. // 1.1
  83. if(httpRequestMessageHeader1Value2.equalsIgnoreCase("OPTIONS"))
  84. {
  85. return;
  86. }
  87. // 1.0
  88. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("GET"))
  89. {
  90. return;
  91. }
  92. // 1.0
  93. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("HEAD"))
  94. {
  95. return;
  96. }
  97. // 1.0
  98. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("POST"))
  99. {
  100. }
  101. // 1.1
  102. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("PUT"))
  103. {
  104. }
  105. // 1.1
  106. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("DELETE"))
  107. {
  108. return;
  109. }
  110. // 1.1
  111. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("TRACE"))
  112. {
  113. return;
  114. }
  115. // 1.1
  116. else if(httpRequestMessageHeader1Value2.equalsIgnoreCase("CONNECT"))
  117. {
  118. return;
  119. }
  120. HTTPMessageHeader httpRequestMessageHeader2 = getHTTPMessageHeader("Content-Length");
  121. int httpRequestMessageHeader2Value1 = 0;
  122. if(httpRequestMessageHeader2 != null)
  123. {
  124. try
  125. {
  126. httpRequestMessageHeader2Value1 = new Integer(httpRequestMessageHeader2.getValue());
  127. }
  128. catch(Exception e)
  129. {
  130. }
  131. }
  132. else
  133. {
  134. httpRequestMessageHeader2Value1 = -1;
  135. }
  136. byte[] byteArray1;
  137. int byteArray1Length1;
  138. int byteArray1Length2;
  139. int byteArray1Length3;
  140. byteArray1 = new byte[5120];
  141. byteArray1Length1 = 0;
  142. byteArray1Length2 = 0;
  143. byteArray1Length3 = httpRequestMessageHeader2Value1;
  144. if(byteArray1Length3 > 0)
  145. {
  146. if(byteArray1Length3 >= byteArray1.length)
  147. {
  148. byteArray1Length2 = byteArray1.length;
  149. }
  150. else
  151. {
  152. byteArray1Length2 = byteArray1Length3;
  153. }
  154. while(byteArray1Length2 > 0 && (byteArray1Length1 = inputStream.read(byteArray1, 0, byteArray1Length2)) > 0)
  155. {
  156. outputStream.write(byteArray1, 0, byteArray1Length1);
  157. byteArray1Length3 = byteArray1Length3 - byteArray1Length1;
  158. if(byteArray1Length3 >= byteArray1.length)
  159. {
  160. byteArray1Length2 = byteArray1.length;
  161. }
  162. else
  163. {
  164. byteArray1Length2 = byteArray1Length3;
  165. }
  166. }
  167. }
  168. else
  169. {
  170. if(byteArray1Length3 < 0)
  171. {
  172. while((byteArray1Length1 = inputStream.read(byteArray1)) > 0)
  173. {
  174. outputStream.write(byteArray1, 0, byteArray1Length1);
  175. }
  176. }
  177. }
  178. }
  179. catch(Exception e)
  180. {
  181. throw new HTTPMessageException("HTTP_REQUEST_MESSAGE/READ", e);
  182. }
  183. }
  184. }