1977Smax.romanov@gmail.com package nginx.unit; 2977Smax.romanov@gmail.com 3977Smax.romanov@gmail.com import java.io.BufferedReader; 41121Smax.romanov@nginx.com import java.io.ByteArrayOutputStream; 51121Smax.romanov@nginx.com import java.io.File; 6977Smax.romanov@gmail.com import java.io.InputStreamReader; 7977Smax.romanov@gmail.com import java.io.IOException; 8977Smax.romanov@gmail.com import java.io.UnsupportedEncodingException; 9977Smax.romanov@gmail.com 10977Smax.romanov@gmail.com import java.lang.IllegalArgumentException; 11977Smax.romanov@gmail.com import java.lang.IllegalStateException; 12977Smax.romanov@gmail.com import java.lang.Object; 13977Smax.romanov@gmail.com import java.lang.String; 14977Smax.romanov@gmail.com import java.lang.StringBuffer; 15977Smax.romanov@gmail.com 16977Smax.romanov@gmail.com import java.net.URI; 17977Smax.romanov@gmail.com import java.net.URISyntaxException; 18977Smax.romanov@gmail.com 19*1157Smax.romanov@nginx.com import java.nio.ByteBuffer; 201121Smax.romanov@nginx.com import java.nio.charset.Charset; 211121Smax.romanov@nginx.com import java.nio.charset.StandardCharsets; 221121Smax.romanov@nginx.com 23977Smax.romanov@gmail.com import java.text.ParseException; 24977Smax.romanov@gmail.com import java.text.SimpleDateFormat; 25977Smax.romanov@gmail.com 26977Smax.romanov@gmail.com import java.util.Collection; 27977Smax.romanov@gmail.com import java.util.Collections; 28977Smax.romanov@gmail.com import java.util.Date; 29977Smax.romanov@gmail.com import java.util.Enumeration; 30977Smax.romanov@gmail.com import java.util.HashMap; 31977Smax.romanov@gmail.com import java.util.HashSet; 32977Smax.romanov@gmail.com import java.util.List; 33977Smax.romanov@gmail.com import java.util.Locale; 34977Smax.romanov@gmail.com import java.util.Map; 35977Smax.romanov@gmail.com import java.util.Set; 36977Smax.romanov@gmail.com 37977Smax.romanov@gmail.com import java.security.Principal; 38977Smax.romanov@gmail.com 39977Smax.romanov@gmail.com import javax.servlet.AsyncContext; 40977Smax.romanov@gmail.com import javax.servlet.DispatcherType; 411121Smax.romanov@nginx.com import javax.servlet.MultipartConfigElement; 42977Smax.romanov@gmail.com import javax.servlet.RequestDispatcher; 43977Smax.romanov@gmail.com import javax.servlet.ServletContext; 44977Smax.romanov@gmail.com import javax.servlet.ServletException; 45977Smax.romanov@gmail.com import javax.servlet.ServletInputStream; 46977Smax.romanov@gmail.com import javax.servlet.ServletRequest; 47977Smax.romanov@gmail.com import javax.servlet.ServletRequestAttributeEvent; 48977Smax.romanov@gmail.com import javax.servlet.ServletRequestAttributeListener; 49977Smax.romanov@gmail.com import javax.servlet.ServletResponse; 50977Smax.romanov@gmail.com import javax.servlet.SessionTrackingMode; 51977Smax.romanov@gmail.com import javax.servlet.SessionCookieConfig; 52977Smax.romanov@gmail.com import javax.servlet.http.Cookie; 53977Smax.romanov@gmail.com import javax.servlet.http.HttpSession; 54977Smax.romanov@gmail.com import javax.servlet.http.HttpServletRequest; 55977Smax.romanov@gmail.com import javax.servlet.http.HttpServletResponse; 56977Smax.romanov@gmail.com import javax.servlet.http.HttpUpgradeHandler; 57977Smax.romanov@gmail.com import javax.servlet.http.Part; 58977Smax.romanov@gmail.com 591121Smax.romanov@nginx.com import org.eclipse.jetty.util.IO; 60977Smax.romanov@gmail.com import org.eclipse.jetty.util.MultiMap; 61977Smax.romanov@gmail.com import org.eclipse.jetty.util.UrlEncoded; 62977Smax.romanov@gmail.com import org.eclipse.jetty.util.StringUtil; 63977Smax.romanov@gmail.com 64977Smax.romanov@gmail.com import org.eclipse.jetty.server.CookieCutter; 651121Smax.romanov@nginx.com import org.eclipse.jetty.http.MultiPartFormInputStream; 661121Smax.romanov@nginx.com import org.eclipse.jetty.http.HttpFields; 67977Smax.romanov@gmail.com import org.eclipse.jetty.http.MimeTypes; 68977Smax.romanov@gmail.com 69*1157Smax.romanov@nginx.com import nginx.unit.websocket.WsSession; 70*1157Smax.romanov@nginx.com import nginx.unit.websocket.WsIOException; 71*1157Smax.romanov@nginx.com 72977Smax.romanov@gmail.com public class Request implements HttpServletRequest, DynamicPathRequest 73977Smax.romanov@gmail.com { 74977Smax.romanov@gmail.com private final Context context; 75977Smax.romanov@gmail.com private final long req_info_ptr; 76977Smax.romanov@gmail.com private final long req_ptr; 77977Smax.romanov@gmail.com 78977Smax.romanov@gmail.com protected String authType = null; 79977Smax.romanov@gmail.com 80977Smax.romanov@gmail.com protected boolean cookiesParsed = false; 81977Smax.romanov@gmail.com 82977Smax.romanov@gmail.com protected CookieCutter cookies = null; 83977Smax.romanov@gmail.com 84977Smax.romanov@gmail.com private final Map<String, Object> attributes = new HashMap<>(); 85977Smax.romanov@gmail.com 86977Smax.romanov@gmail.com private MultiMap<String> parameters = null; 87977Smax.romanov@gmail.com 88977Smax.romanov@gmail.com private final String context_path; 89977Smax.romanov@gmail.com private String filter_path = null; 90977Smax.romanov@gmail.com private String servlet_path = null; 91977Smax.romanov@gmail.com private String path_info = null; 92977Smax.romanov@gmail.com private String request_uri = null; 93977Smax.romanov@gmail.com private String query_string = null; 94977Smax.romanov@gmail.com private boolean query_string_valid = false; 95977Smax.romanov@gmail.com 96977Smax.romanov@gmail.com private DispatcherType dispatcher_type = DispatcherType.REQUEST; 97977Smax.romanov@gmail.com 98977Smax.romanov@gmail.com private String characterEncoding = null; 99977Smax.romanov@gmail.com 100977Smax.romanov@gmail.com /** 101977Smax.romanov@gmail.com * The only date format permitted when generating HTTP headers. 102977Smax.romanov@gmail.com */ 103977Smax.romanov@gmail.com public static final String RFC1123_DATE = 104977Smax.romanov@gmail.com "EEE, dd MMM yyyy HH:mm:ss zzz"; 105977Smax.romanov@gmail.com 106977Smax.romanov@gmail.com private static final SimpleDateFormat formats[] = { 107977Smax.romanov@gmail.com new SimpleDateFormat(RFC1123_DATE, Locale.US), 108977Smax.romanov@gmail.com new SimpleDateFormat("EEEEEE, dd-MMM-yy HH:mm:ss zzz", Locale.US), 109977Smax.romanov@gmail.com new SimpleDateFormat("EEE MMMM d HH:mm:ss yyyy", Locale.US) 110977Smax.romanov@gmail.com }; 111977Smax.romanov@gmail.com 112977Smax.romanov@gmail.com private InputStream inputStream = null; 113977Smax.romanov@gmail.com private BufferedReader reader = null; 114977Smax.romanov@gmail.com 115977Smax.romanov@gmail.com private boolean request_session_id_parsed = false; 116977Smax.romanov@gmail.com private String request_session_id = null; 117977Smax.romanov@gmail.com private boolean request_session_id_from_cookie = false; 118977Smax.romanov@gmail.com private boolean request_session_id_from_url = false; 119977Smax.romanov@gmail.com private Session session = null; 120977Smax.romanov@gmail.com 121*1157Smax.romanov@nginx.com private WsSession wsSession = null; 122*1157Smax.romanov@nginx.com private boolean skip_close_ws = false; 123*1157Smax.romanov@nginx.com 124977Smax.romanov@gmail.com private final ServletRequestAttributeListener attr_listener; 125977Smax.romanov@gmail.com 126977Smax.romanov@gmail.com public static final String BARE = "nginx.unit.request.bare"; 127977Smax.romanov@gmail.com 1281121Smax.romanov@nginx.com private MultiPartFormInputStream multi_parts; 1291121Smax.romanov@nginx.com private MultipartConfigElement multipart_config; 1301121Smax.romanov@nginx.com Request(Context ctx, long req_info, long req)131977Smax.romanov@gmail.com public Request(Context ctx, long req_info, long req) { 132977Smax.romanov@gmail.com context = ctx; 133977Smax.romanov@gmail.com req_info_ptr = req_info; 134977Smax.romanov@gmail.com req_ptr = req; 135977Smax.romanov@gmail.com 136977Smax.romanov@gmail.com attr_listener = context.getRequestAttributeListener(); 137977Smax.romanov@gmail.com context_path = context.getContextPath(); 138977Smax.romanov@gmail.com } 139977Smax.romanov@gmail.com 140977Smax.romanov@gmail.com @Override authenticate(HttpServletResponse response)141977Smax.romanov@gmail.com public boolean authenticate(HttpServletResponse response) 142977Smax.romanov@gmail.com throws IOException, ServletException 143977Smax.romanov@gmail.com { 144977Smax.romanov@gmail.com log("authenticate"); 145977Smax.romanov@gmail.com 146977Smax.romanov@gmail.com if (response.isCommitted()) { 147977Smax.romanov@gmail.com throw new IllegalStateException(); 148977Smax.romanov@gmail.com } 149977Smax.romanov@gmail.com 150977Smax.romanov@gmail.com return false; 151977Smax.romanov@gmail.com } 152977Smax.romanov@gmail.com 153977Smax.romanov@gmail.com @Override getAuthType()154977Smax.romanov@gmail.com public String getAuthType() 155977Smax.romanov@gmail.com { 156977Smax.romanov@gmail.com log("getAuthType"); 157977Smax.romanov@gmail.com 158977Smax.romanov@gmail.com return authType; 159977Smax.romanov@gmail.com } 160977Smax.romanov@gmail.com 161977Smax.romanov@gmail.com @Override getContextPath()162977Smax.romanov@gmail.com public String getContextPath() 163977Smax.romanov@gmail.com { 164977Smax.romanov@gmail.com trace("getContextPath: " + context_path); 165977Smax.romanov@gmail.com 166977Smax.romanov@gmail.com return context_path; 167977Smax.romanov@gmail.com } 168977Smax.romanov@gmail.com 169977Smax.romanov@gmail.com @Override getCookies()170977Smax.romanov@gmail.com public Cookie[] getCookies() 171977Smax.romanov@gmail.com { 172977Smax.romanov@gmail.com trace("getCookies"); 173977Smax.romanov@gmail.com 174977Smax.romanov@gmail.com if (!cookiesParsed) { 175977Smax.romanov@gmail.com parseCookies(); 176977Smax.romanov@gmail.com } 177977Smax.romanov@gmail.com 178977Smax.romanov@gmail.com //Javadoc for Request.getCookies() stipulates null for no cookies 179977Smax.romanov@gmail.com if (cookies == null || cookies.getCookies().length == 0) { 180977Smax.romanov@gmail.com return null; 181977Smax.romanov@gmail.com } 182977Smax.romanov@gmail.com 183977Smax.romanov@gmail.com return cookies.getCookies(); 184977Smax.romanov@gmail.com } 185977Smax.romanov@gmail.com parseCookies()186977Smax.romanov@gmail.com protected void parseCookies() 187977Smax.romanov@gmail.com { 188977Smax.romanov@gmail.com cookiesParsed = true; 189977Smax.romanov@gmail.com 190977Smax.romanov@gmail.com cookies = new CookieCutter(); 191977Smax.romanov@gmail.com 192977Smax.romanov@gmail.com Enumeration<String> cookie_headers = getHeaders("Cookie"); 193977Smax.romanov@gmail.com 194977Smax.romanov@gmail.com while (cookie_headers.hasMoreElements()) { 195977Smax.romanov@gmail.com cookies.addCookieField(cookie_headers.nextElement()); 196977Smax.romanov@gmail.com } 197977Smax.romanov@gmail.com } 198977Smax.romanov@gmail.com 199977Smax.romanov@gmail.com @Override getDateHeader(String name)200977Smax.romanov@gmail.com public long getDateHeader(String name) 201977Smax.romanov@gmail.com { 202977Smax.romanov@gmail.com trace("getDateHeader: " + name); 203977Smax.romanov@gmail.com 204977Smax.romanov@gmail.com String value = getHeader(name); 205977Smax.romanov@gmail.com if (value == null) { 206977Smax.romanov@gmail.com return -1L; 207977Smax.romanov@gmail.com } 208977Smax.romanov@gmail.com 209977Smax.romanov@gmail.com long res = parseDate(value); 210977Smax.romanov@gmail.com if (res == -1L) { 211977Smax.romanov@gmail.com throw new IllegalArgumentException(value); 212977Smax.romanov@gmail.com } 213977Smax.romanov@gmail.com 214977Smax.romanov@gmail.com return res; 215977Smax.romanov@gmail.com } 216977Smax.romanov@gmail.com parseDate(String value)217977Smax.romanov@gmail.com protected long parseDate(String value) 218977Smax.romanov@gmail.com { 219977Smax.romanov@gmail.com Date date = null; 220977Smax.romanov@gmail.com for (int i = 0; (date == null) && (i < formats.length); i++) { 221977Smax.romanov@gmail.com try { 222977Smax.romanov@gmail.com date = formats[i].parse(value); 223977Smax.romanov@gmail.com } catch (ParseException e) { 224977Smax.romanov@gmail.com // Ignore 225977Smax.romanov@gmail.com } 226977Smax.romanov@gmail.com } 227977Smax.romanov@gmail.com if (date == null) { 228977Smax.romanov@gmail.com return -1L; 229977Smax.romanov@gmail.com } 230977Smax.romanov@gmail.com return date.getTime(); 231977Smax.romanov@gmail.com } 232977Smax.romanov@gmail.com 233977Smax.romanov@gmail.com @Override getHeader(String name)234977Smax.romanov@gmail.com public String getHeader(String name) 235977Smax.romanov@gmail.com { 236977Smax.romanov@gmail.com String res = getHeader(req_ptr, name, name.length()); 237977Smax.romanov@gmail.com 238977Smax.romanov@gmail.com trace("getHeader: " + name + " = '" + res + "'"); 239977Smax.romanov@gmail.com 240977Smax.romanov@gmail.com return res; 241977Smax.romanov@gmail.com } 242977Smax.romanov@gmail.com getHeader(long req_ptr, String name, int name_len)243977Smax.romanov@gmail.com private static native String getHeader(long req_ptr, String name, int name_len); 244977Smax.romanov@gmail.com 245977Smax.romanov@gmail.com 246977Smax.romanov@gmail.com @Override getHeaderNames()247977Smax.romanov@gmail.com public Enumeration<String> getHeaderNames() 248977Smax.romanov@gmail.com { 249977Smax.romanov@gmail.com trace("getHeaderNames"); 250977Smax.romanov@gmail.com 251977Smax.romanov@gmail.com return getHeaderNames(req_ptr); 252977Smax.romanov@gmail.com } 253977Smax.romanov@gmail.com getHeaderNames(long req_ptr)254977Smax.romanov@gmail.com private static native Enumeration<String> getHeaderNames(long req_ptr); 255977Smax.romanov@gmail.com 256977Smax.romanov@gmail.com 257977Smax.romanov@gmail.com @Override getHeaders(String name)258977Smax.romanov@gmail.com public Enumeration<String> getHeaders(String name) 259977Smax.romanov@gmail.com { 260977Smax.romanov@gmail.com trace("getHeaders: " + name); 261977Smax.romanov@gmail.com 262977Smax.romanov@gmail.com return getHeaders(req_ptr, name, name.length()); 263977Smax.romanov@gmail.com } 264977Smax.romanov@gmail.com getHeaders(long req_ptr, String name, int name_len)265977Smax.romanov@gmail.com private static native Enumeration<String> getHeaders(long req_ptr, String name, int name_len); 266977Smax.romanov@gmail.com 267977Smax.romanov@gmail.com 268977Smax.romanov@gmail.com @Override getIntHeader(String name)269977Smax.romanov@gmail.com public int getIntHeader(String name) 270977Smax.romanov@gmail.com { 271977Smax.romanov@gmail.com trace("getIntHeader: " + name); 272977Smax.romanov@gmail.com 273977Smax.romanov@gmail.com return getIntHeader(req_ptr, name, name.length()); 274977Smax.romanov@gmail.com } 275977Smax.romanov@gmail.com getIntHeader(long req_ptr, String name, int name_len)276977Smax.romanov@gmail.com private static native int getIntHeader(long req_ptr, String name, int name_len); 277977Smax.romanov@gmail.com 278977Smax.romanov@gmail.com 279977Smax.romanov@gmail.com @Override getMethod()280977Smax.romanov@gmail.com public String getMethod() 281977Smax.romanov@gmail.com { 282977Smax.romanov@gmail.com trace("getMethod"); 283977Smax.romanov@gmail.com 284977Smax.romanov@gmail.com return getMethod(req_ptr); 285977Smax.romanov@gmail.com } 286977Smax.romanov@gmail.com getMethod(long req_ptr)287977Smax.romanov@gmail.com private static native String getMethod(long req_ptr); 288977Smax.romanov@gmail.com 289977Smax.romanov@gmail.com 290977Smax.romanov@gmail.com @Override getPart(String name)291977Smax.romanov@gmail.com public Part getPart(String name) throws IOException, ServletException 292977Smax.romanov@gmail.com { 2931121Smax.romanov@nginx.com trace("getPart: " + name); 294977Smax.romanov@gmail.com 2951121Smax.romanov@nginx.com if (multi_parts == null) { 2961121Smax.romanov@nginx.com parseMultiParts(); 2971121Smax.romanov@nginx.com } 2981121Smax.romanov@nginx.com 2991121Smax.romanov@nginx.com return multi_parts.getPart(name); 300977Smax.romanov@gmail.com } 301977Smax.romanov@gmail.com 302977Smax.romanov@gmail.com @Override getParts()303977Smax.romanov@gmail.com public Collection<Part> getParts() throws IOException, ServletException 304977Smax.romanov@gmail.com { 3051121Smax.romanov@nginx.com trace("getParts"); 3061121Smax.romanov@nginx.com 3071121Smax.romanov@nginx.com if (multi_parts == null) { 3081121Smax.romanov@nginx.com parseMultiParts(); 3091121Smax.romanov@nginx.com } 3101121Smax.romanov@nginx.com 3111121Smax.romanov@nginx.com return multi_parts.getParts(); 3121121Smax.romanov@nginx.com } 3131121Smax.romanov@nginx.com checkMultiPart(String content_type)3141121Smax.romanov@nginx.com private boolean checkMultiPart(String content_type) 3151121Smax.romanov@nginx.com { 3161121Smax.romanov@nginx.com return content_type != null 3171121Smax.romanov@nginx.com && MimeTypes.Type.MULTIPART_FORM_DATA.is(HttpFields.valueParameters(content_type, null)); 3181121Smax.romanov@nginx.com } 3191121Smax.romanov@nginx.com parseMultiParts()3201121Smax.romanov@nginx.com private void parseMultiParts() throws IOException, ServletException, IllegalStateException 3211121Smax.romanov@nginx.com { 3221121Smax.romanov@nginx.com String content_type = getContentType(); 3231121Smax.romanov@nginx.com 3241121Smax.romanov@nginx.com if (!checkMultiPart(content_type)) { 3251121Smax.romanov@nginx.com throw new ServletException("Content-Type != multipart/form-data"); 3261121Smax.romanov@nginx.com } 327977Smax.romanov@gmail.com 3281121Smax.romanov@nginx.com if (multipart_config == null) { 3291121Smax.romanov@nginx.com throw new IllegalStateException("No multipart config for servlet"); 3301121Smax.romanov@nginx.com } 3311121Smax.romanov@nginx.com 3321121Smax.romanov@nginx.com parseMultiParts(content_type); 3331121Smax.romanov@nginx.com } 3341121Smax.romanov@nginx.com parseMultiParts(String content_type)3351121Smax.romanov@nginx.com private void parseMultiParts(String content_type) throws IOException 3361121Smax.romanov@nginx.com { 3371121Smax.romanov@nginx.com File tmpDir = (File) context.getAttribute(ServletContext.TEMPDIR); 3381121Smax.romanov@nginx.com 3391121Smax.romanov@nginx.com multi_parts = new MultiPartFormInputStream(getInputStream(), 3401121Smax.romanov@nginx.com content_type, multipart_config, tmpDir); 3411121Smax.romanov@nginx.com } 3421121Smax.romanov@nginx.com setMultipartConfig(MultipartConfigElement mce)3431121Smax.romanov@nginx.com public void setMultipartConfig(MultipartConfigElement mce) 3441121Smax.romanov@nginx.com { 3451121Smax.romanov@nginx.com multipart_config = mce; 3461121Smax.romanov@nginx.com } 3471121Smax.romanov@nginx.com getMultipartConfig()3481121Smax.romanov@nginx.com public MultipartConfigElement getMultipartConfig() 3491121Smax.romanov@nginx.com { 3501121Smax.romanov@nginx.com return multipart_config; 351977Smax.romanov@gmail.com } 352977Smax.romanov@gmail.com 353977Smax.romanov@gmail.com @Override getPathInfo()354977Smax.romanov@gmail.com public String getPathInfo() 355977Smax.romanov@gmail.com { 356977Smax.romanov@gmail.com trace("getPathInfo: " + path_info); 357977Smax.romanov@gmail.com 358977Smax.romanov@gmail.com return path_info; 359977Smax.romanov@gmail.com } 360977Smax.romanov@gmail.com 361977Smax.romanov@gmail.com @Override getPathTranslated()362977Smax.romanov@gmail.com public String getPathTranslated() 363977Smax.romanov@gmail.com { 364977Smax.romanov@gmail.com trace("getPathTranslated"); 365977Smax.romanov@gmail.com 366977Smax.romanov@gmail.com if (path_info == null) { 367977Smax.romanov@gmail.com return null; 368977Smax.romanov@gmail.com } 369977Smax.romanov@gmail.com 370977Smax.romanov@gmail.com return context.getRealPath(path_info); 371977Smax.romanov@gmail.com } 372977Smax.romanov@gmail.com 373977Smax.romanov@gmail.com @Override getQueryString()374977Smax.romanov@gmail.com public String getQueryString() 375977Smax.romanov@gmail.com { 376977Smax.romanov@gmail.com if (!query_string_valid) { 377977Smax.romanov@gmail.com query_string = getQueryString(req_ptr); 378977Smax.romanov@gmail.com query_string_valid = true; 379977Smax.romanov@gmail.com } 380977Smax.romanov@gmail.com 381977Smax.romanov@gmail.com trace("getQueryString: " + query_string); 382977Smax.romanov@gmail.com 383977Smax.romanov@gmail.com return query_string; 384977Smax.romanov@gmail.com } 385977Smax.romanov@gmail.com getQueryString(long req_ptr)386977Smax.romanov@gmail.com private static native String getQueryString(long req_ptr); 387977Smax.romanov@gmail.com 388977Smax.romanov@gmail.com @Override setQueryString(String query)389977Smax.romanov@gmail.com public void setQueryString(String query) 390977Smax.romanov@gmail.com { 391977Smax.romanov@gmail.com trace("setQueryString: " + query); 392977Smax.romanov@gmail.com 393977Smax.romanov@gmail.com query_string = query; 394977Smax.romanov@gmail.com query_string_valid = true; 395977Smax.romanov@gmail.com } 396977Smax.romanov@gmail.com 397977Smax.romanov@gmail.com @Override getRemoteUser()398977Smax.romanov@gmail.com public String getRemoteUser() 399977Smax.romanov@gmail.com { 400977Smax.romanov@gmail.com log("getRemoteUser"); 401977Smax.romanov@gmail.com 402977Smax.romanov@gmail.com /* TODO */ 403977Smax.romanov@gmail.com return null; 404977Smax.romanov@gmail.com } 405977Smax.romanov@gmail.com 406977Smax.romanov@gmail.com @Override getRequestedSessionId()407977Smax.romanov@gmail.com public String getRequestedSessionId() 408977Smax.romanov@gmail.com { 409977Smax.romanov@gmail.com trace("getRequestedSessionId"); 410977Smax.romanov@gmail.com 411977Smax.romanov@gmail.com if (!request_session_id_parsed) { 412977Smax.romanov@gmail.com parseRequestSessionId(); 413977Smax.romanov@gmail.com } 414977Smax.romanov@gmail.com 415977Smax.romanov@gmail.com return request_session_id; 416977Smax.romanov@gmail.com } 417977Smax.romanov@gmail.com parseRequestSessionId()418977Smax.romanov@gmail.com private void parseRequestSessionId() 419977Smax.romanov@gmail.com { 420977Smax.romanov@gmail.com request_session_id_parsed = true; 421977Smax.romanov@gmail.com 422977Smax.romanov@gmail.com Cookie[] cookies = getCookies(); 423977Smax.romanov@gmail.com if (cookies == null) { 424977Smax.romanov@gmail.com return; 425977Smax.romanov@gmail.com } 426977Smax.romanov@gmail.com 427977Smax.romanov@gmail.com if (context.getEffectiveSessionTrackingModes().contains( 428977Smax.romanov@gmail.com SessionTrackingMode.COOKIE)) 429977Smax.romanov@gmail.com { 430977Smax.romanov@gmail.com final String name = context.getSessionCookieConfig().getName(); 431977Smax.romanov@gmail.com 432977Smax.romanov@gmail.com for (Cookie c : cookies) { 433977Smax.romanov@gmail.com if (c.getName().equals(name)) { 434977Smax.romanov@gmail.com request_session_id = c.getValue(); 435977Smax.romanov@gmail.com request_session_id_from_cookie = true; 436977Smax.romanov@gmail.com 437977Smax.romanov@gmail.com return; 438977Smax.romanov@gmail.com } 439977Smax.romanov@gmail.com } 440977Smax.romanov@gmail.com } 441977Smax.romanov@gmail.com } 442977Smax.romanov@gmail.com 443977Smax.romanov@gmail.com @Override getRequestURI()444977Smax.romanov@gmail.com public String getRequestURI() 445977Smax.romanov@gmail.com { 446977Smax.romanov@gmail.com if (request_uri == null) { 447977Smax.romanov@gmail.com request_uri = getRequestURI(req_ptr); 448977Smax.romanov@gmail.com } 449977Smax.romanov@gmail.com 450977Smax.romanov@gmail.com trace("getRequestURI: " + request_uri); 451977Smax.romanov@gmail.com 452977Smax.romanov@gmail.com return request_uri; 453977Smax.romanov@gmail.com } 454977Smax.romanov@gmail.com getRequestURI(long req_ptr)455977Smax.romanov@gmail.com private static native String getRequestURI(long req_ptr); 456977Smax.romanov@gmail.com 457977Smax.romanov@gmail.com 458977Smax.romanov@gmail.com @Override setRequestURI(String uri)459977Smax.romanov@gmail.com public void setRequestURI(String uri) 460977Smax.romanov@gmail.com { 461977Smax.romanov@gmail.com trace("setRequestURI: " + uri); 462977Smax.romanov@gmail.com 463977Smax.romanov@gmail.com request_uri = uri; 464977Smax.romanov@gmail.com } 465977Smax.romanov@gmail.com 466977Smax.romanov@gmail.com 467977Smax.romanov@gmail.com @Override getRequestURL()468977Smax.romanov@gmail.com public StringBuffer getRequestURL() 469977Smax.romanov@gmail.com { 470977Smax.romanov@gmail.com String host = getHeader("Host"); 471977Smax.romanov@gmail.com String uri = getRequestURI(); 472977Smax.romanov@gmail.com StringBuffer res = new StringBuffer("http://" + host + uri); 473977Smax.romanov@gmail.com 474977Smax.romanov@gmail.com trace("getRequestURL: " + res); 475977Smax.romanov@gmail.com 476977Smax.romanov@gmail.com return res; 477977Smax.romanov@gmail.com } 478977Smax.romanov@gmail.com 479977Smax.romanov@gmail.com @Override getServletPath()480977Smax.romanov@gmail.com public String getServletPath() 481977Smax.romanov@gmail.com { 482977Smax.romanov@gmail.com trace("getServletPath: " + servlet_path); 483977Smax.romanov@gmail.com 484977Smax.romanov@gmail.com return servlet_path; 485977Smax.romanov@gmail.com } 486977Smax.romanov@gmail.com 487977Smax.romanov@gmail.com @Override setServletPath(String servlet_path, String path_info)488977Smax.romanov@gmail.com public void setServletPath(String servlet_path, String path_info) 489977Smax.romanov@gmail.com { 490977Smax.romanov@gmail.com trace("setServletPath: " + servlet_path); 491977Smax.romanov@gmail.com 492977Smax.romanov@gmail.com this.filter_path = servlet_path; 493977Smax.romanov@gmail.com this.servlet_path = servlet_path; 494977Smax.romanov@gmail.com this.path_info = path_info; 495977Smax.romanov@gmail.com } 496977Smax.romanov@gmail.com 497977Smax.romanov@gmail.com @Override setServletPath(String filter_path, String servlet_path, String path_info)498977Smax.romanov@gmail.com public void setServletPath(String filter_path, String servlet_path, String path_info) 499977Smax.romanov@gmail.com { 500977Smax.romanov@gmail.com trace("setServletPath: " + filter_path + ", " + servlet_path); 501977Smax.romanov@gmail.com 502977Smax.romanov@gmail.com this.filter_path = filter_path; 503977Smax.romanov@gmail.com this.servlet_path = servlet_path; 504977Smax.romanov@gmail.com this.path_info = path_info; 505977Smax.romanov@gmail.com } 506977Smax.romanov@gmail.com 507977Smax.romanov@gmail.com @Override getFilterPath()508977Smax.romanov@gmail.com public String getFilterPath() 509977Smax.romanov@gmail.com { 510977Smax.romanov@gmail.com return filter_path; 511977Smax.romanov@gmail.com } 512977Smax.romanov@gmail.com 513977Smax.romanov@gmail.com @Override getSession()514977Smax.romanov@gmail.com public HttpSession getSession() 515977Smax.romanov@gmail.com { 516977Smax.romanov@gmail.com return getSession(true); 517977Smax.romanov@gmail.com } 518977Smax.romanov@gmail.com 519977Smax.romanov@gmail.com @Override getSession(boolean create)520977Smax.romanov@gmail.com public HttpSession getSession(boolean create) 521977Smax.romanov@gmail.com { 522977Smax.romanov@gmail.com if (session != null) { 523977Smax.romanov@gmail.com if (context.isSessionIdValid(session.getId())) { 524977Smax.romanov@gmail.com trace("getSession(" + create + "): " + session.getId()); 525977Smax.romanov@gmail.com 526977Smax.romanov@gmail.com return session; 527977Smax.romanov@gmail.com } 528977Smax.romanov@gmail.com 529977Smax.romanov@gmail.com session = null; 530977Smax.romanov@gmail.com } 531977Smax.romanov@gmail.com 532977Smax.romanov@gmail.com if (!request_session_id_parsed) { 533977Smax.romanov@gmail.com parseRequestSessionId(); 534977Smax.romanov@gmail.com 535977Smax.romanov@gmail.com session = context.getSession(request_session_id); 536977Smax.romanov@gmail.com } 537977Smax.romanov@gmail.com 538977Smax.romanov@gmail.com if (session != null || !create) { 539977Smax.romanov@gmail.com trace("getSession(" + create + "): " + (session != null ? session.getId() : "null")); 540977Smax.romanov@gmail.com 541977Smax.romanov@gmail.com return session; 542977Smax.romanov@gmail.com } 543977Smax.romanov@gmail.com 544977Smax.romanov@gmail.com session = context.createSession(); 545977Smax.romanov@gmail.com 546977Smax.romanov@gmail.com if (context.getEffectiveSessionTrackingModes().contains( 547977Smax.romanov@gmail.com SessionTrackingMode.COOKIE)) 548977Smax.romanov@gmail.com { 549977Smax.romanov@gmail.com setSessionIdCookie(); 550977Smax.romanov@gmail.com } 551977Smax.romanov@gmail.com 552977Smax.romanov@gmail.com trace("getSession(" + create + "): " + session.getId()); 553977Smax.romanov@gmail.com 554977Smax.romanov@gmail.com return session; 555977Smax.romanov@gmail.com } 556977Smax.romanov@gmail.com setSessionIdCookie()557977Smax.romanov@gmail.com private void setSessionIdCookie() 558977Smax.romanov@gmail.com { 559977Smax.romanov@gmail.com SessionCookieConfig config = context.getSessionCookieConfig(); 560977Smax.romanov@gmail.com 561977Smax.romanov@gmail.com Cookie c = new Cookie(config.getName(), session.getId()); 562977Smax.romanov@gmail.com 563977Smax.romanov@gmail.com c.setComment(config.getComment()); 564977Smax.romanov@gmail.com if (!StringUtil.isBlank(config.getDomain())) { 565977Smax.romanov@gmail.com c.setDomain(config.getDomain()); 566977Smax.romanov@gmail.com } 567977Smax.romanov@gmail.com 568977Smax.romanov@gmail.com c.setHttpOnly(config.isHttpOnly()); 569977Smax.romanov@gmail.com if (!StringUtil.isBlank(config.getPath())) { 570977Smax.romanov@gmail.com c.setPath(config.getPath()); 571977Smax.romanov@gmail.com } 572977Smax.romanov@gmail.com 573977Smax.romanov@gmail.com c.setMaxAge(config.getMaxAge()); 574977Smax.romanov@gmail.com 575977Smax.romanov@gmail.com getResponse(req_info_ptr).addSessionIdCookie(c); 576977Smax.romanov@gmail.com } 577977Smax.romanov@gmail.com 578977Smax.romanov@gmail.com @Override getUserPrincipal()579977Smax.romanov@gmail.com public Principal getUserPrincipal() 580977Smax.romanov@gmail.com { 581977Smax.romanov@gmail.com log("getUserPrincipal"); 582977Smax.romanov@gmail.com 583977Smax.romanov@gmail.com return null; 584977Smax.romanov@gmail.com } 585977Smax.romanov@gmail.com 586977Smax.romanov@gmail.com @Override isRequestedSessionIdFromCookie()587977Smax.romanov@gmail.com public boolean isRequestedSessionIdFromCookie() 588977Smax.romanov@gmail.com { 589977Smax.romanov@gmail.com trace("isRequestedSessionIdFromCookie"); 590977Smax.romanov@gmail.com 591977Smax.romanov@gmail.com if (!request_session_id_parsed) { 592977Smax.romanov@gmail.com parseRequestSessionId(); 593977Smax.romanov@gmail.com } 594977Smax.romanov@gmail.com 595977Smax.romanov@gmail.com return request_session_id_from_cookie; 596977Smax.romanov@gmail.com } 597977Smax.romanov@gmail.com 598977Smax.romanov@gmail.com @Override 599977Smax.romanov@gmail.com @Deprecated isRequestedSessionIdFromUrl()600977Smax.romanov@gmail.com public boolean isRequestedSessionIdFromUrl() 601977Smax.romanov@gmail.com { 602977Smax.romanov@gmail.com trace("isRequestedSessionIdFromUrl"); 603977Smax.romanov@gmail.com 604977Smax.romanov@gmail.com if (!request_session_id_parsed) { 605977Smax.romanov@gmail.com parseRequestSessionId(); 606977Smax.romanov@gmail.com } 607977Smax.romanov@gmail.com 608977Smax.romanov@gmail.com return request_session_id_from_url; 609977Smax.romanov@gmail.com } 610977Smax.romanov@gmail.com 611977Smax.romanov@gmail.com @Override isRequestedSessionIdFromURL()612977Smax.romanov@gmail.com public boolean isRequestedSessionIdFromURL() 613977Smax.romanov@gmail.com { 614977Smax.romanov@gmail.com trace("isRequestedSessionIdFromURL"); 615977Smax.romanov@gmail.com 616977Smax.romanov@gmail.com if (!request_session_id_parsed) { 617977Smax.romanov@gmail.com parseRequestSessionId(); 618977Smax.romanov@gmail.com } 619977Smax.romanov@gmail.com 620977Smax.romanov@gmail.com return request_session_id_from_url; 621977Smax.romanov@gmail.com } 622977Smax.romanov@gmail.com 623977Smax.romanov@gmail.com @Override isRequestedSessionIdValid()624977Smax.romanov@gmail.com public boolean isRequestedSessionIdValid() 625977Smax.romanov@gmail.com { 626977Smax.romanov@gmail.com trace("isRequestedSessionIdValid"); 627977Smax.romanov@gmail.com 628977Smax.romanov@gmail.com if (!request_session_id_parsed) { 629977Smax.romanov@gmail.com parseRequestSessionId(); 630977Smax.romanov@gmail.com } 631977Smax.romanov@gmail.com 632977Smax.romanov@gmail.com return context.isSessionIdValid(request_session_id); 633977Smax.romanov@gmail.com } 634977Smax.romanov@gmail.com 635977Smax.romanov@gmail.com @Override isUserInRole(String role)636977Smax.romanov@gmail.com public boolean isUserInRole(String role) 637977Smax.romanov@gmail.com { 638977Smax.romanov@gmail.com log("isUserInRole: " + role); 639977Smax.romanov@gmail.com 640977Smax.romanov@gmail.com return false; 641977Smax.romanov@gmail.com } 642977Smax.romanov@gmail.com 643977Smax.romanov@gmail.com @Override login(String username, String password)644977Smax.romanov@gmail.com public void login(String username, String password) throws ServletException 645977Smax.romanov@gmail.com { 646977Smax.romanov@gmail.com log("login: " + username + "," + password); 647977Smax.romanov@gmail.com } 648977Smax.romanov@gmail.com 649977Smax.romanov@gmail.com @Override logout()650977Smax.romanov@gmail.com public void logout() throws ServletException 651977Smax.romanov@gmail.com { 652977Smax.romanov@gmail.com log("logout"); 653977Smax.romanov@gmail.com } 654977Smax.romanov@gmail.com 655977Smax.romanov@gmail.com 656977Smax.romanov@gmail.com @Override getAsyncContext()657977Smax.romanov@gmail.com public AsyncContext getAsyncContext() 658977Smax.romanov@gmail.com { 659977Smax.romanov@gmail.com log("getAsyncContext"); 660977Smax.romanov@gmail.com 661977Smax.romanov@gmail.com return null; 662977Smax.romanov@gmail.com } 663977Smax.romanov@gmail.com 664977Smax.romanov@gmail.com @Override getAttribute(String name)665977Smax.romanov@gmail.com public Object getAttribute(String name) 666977Smax.romanov@gmail.com { 667977Smax.romanov@gmail.com if (BARE.equals(name)) { 668977Smax.romanov@gmail.com return this; 669977Smax.romanov@gmail.com } 670977Smax.romanov@gmail.com 671977Smax.romanov@gmail.com Object o = attributes.get(name); 672977Smax.romanov@gmail.com 673977Smax.romanov@gmail.com trace("getAttribute: " + name + " = " + o); 674977Smax.romanov@gmail.com 675977Smax.romanov@gmail.com return o; 676977Smax.romanov@gmail.com } 677977Smax.romanov@gmail.com 678977Smax.romanov@gmail.com @Override getAttributeNames()679977Smax.romanov@gmail.com public Enumeration<String> getAttributeNames() 680977Smax.romanov@gmail.com { 681977Smax.romanov@gmail.com trace("getAttributeNames"); 682977Smax.romanov@gmail.com 683977Smax.romanov@gmail.com Set<String> names = attributes.keySet(); 684977Smax.romanov@gmail.com return Collections.enumeration(names); 685977Smax.romanov@gmail.com } 686977Smax.romanov@gmail.com 687977Smax.romanov@gmail.com @Override getCharacterEncoding()688977Smax.romanov@gmail.com public String getCharacterEncoding() 689977Smax.romanov@gmail.com { 690977Smax.romanov@gmail.com trace("getCharacterEncoding"); 691977Smax.romanov@gmail.com 692977Smax.romanov@gmail.com if (characterEncoding != null) { 693977Smax.romanov@gmail.com return characterEncoding; 694977Smax.romanov@gmail.com } 695977Smax.romanov@gmail.com 696977Smax.romanov@gmail.com getContentType(); 697977Smax.romanov@gmail.com 698977Smax.romanov@gmail.com return characterEncoding; 699977Smax.romanov@gmail.com } 700977Smax.romanov@gmail.com 701977Smax.romanov@gmail.com @Override getContentLength()702977Smax.romanov@gmail.com public int getContentLength() 703977Smax.romanov@gmail.com { 704977Smax.romanov@gmail.com trace("getContentLength"); 705977Smax.romanov@gmail.com 706977Smax.romanov@gmail.com return (int) getContentLength(req_ptr); 707977Smax.romanov@gmail.com } 708977Smax.romanov@gmail.com getContentLength(long req_ptr)709977Smax.romanov@gmail.com private static native long getContentLength(long req_ptr); 710977Smax.romanov@gmail.com 711977Smax.romanov@gmail.com @Override getContentLengthLong()712977Smax.romanov@gmail.com public long getContentLengthLong() 713977Smax.romanov@gmail.com { 714977Smax.romanov@gmail.com trace("getContentLengthLong"); 715977Smax.romanov@gmail.com 716977Smax.romanov@gmail.com return getContentLength(req_ptr); 717977Smax.romanov@gmail.com } 718977Smax.romanov@gmail.com 719977Smax.romanov@gmail.com @Override getContentType()720977Smax.romanov@gmail.com public String getContentType() 721977Smax.romanov@gmail.com { 722977Smax.romanov@gmail.com trace("getContentType"); 723977Smax.romanov@gmail.com 724977Smax.romanov@gmail.com String content_type = getContentType(req_ptr); 725977Smax.romanov@gmail.com 726977Smax.romanov@gmail.com if (characterEncoding == null && content_type != null) { 727977Smax.romanov@gmail.com MimeTypes.Type mime = MimeTypes.CACHE.get(content_type); 728977Smax.romanov@gmail.com String charset = (mime == null || mime.getCharset() == null) ? MimeTypes.getCharsetFromContentType(content_type) : mime.getCharset().toString(); 729977Smax.romanov@gmail.com if (charset != null) { 730977Smax.romanov@gmail.com characterEncoding = charset; 731977Smax.romanov@gmail.com } 732977Smax.romanov@gmail.com } 733977Smax.romanov@gmail.com 734977Smax.romanov@gmail.com return content_type; 735977Smax.romanov@gmail.com } 736977Smax.romanov@gmail.com getContentType(long req_ptr)737977Smax.romanov@gmail.com private static native String getContentType(long req_ptr); 738977Smax.romanov@gmail.com 739977Smax.romanov@gmail.com 740977Smax.romanov@gmail.com @Override getDispatcherType()741977Smax.romanov@gmail.com public DispatcherType getDispatcherType() 742977Smax.romanov@gmail.com { 743977Smax.romanov@gmail.com trace("getDispatcherType: " + dispatcher_type); 744977Smax.romanov@gmail.com 745977Smax.romanov@gmail.com return dispatcher_type; 746977Smax.romanov@gmail.com } 747977Smax.romanov@gmail.com 748977Smax.romanov@gmail.com @Override setDispatcherType(DispatcherType type)749977Smax.romanov@gmail.com public void setDispatcherType(DispatcherType type) 750977Smax.romanov@gmail.com { 751977Smax.romanov@gmail.com trace("setDispatcherType: " + type); 752977Smax.romanov@gmail.com 753977Smax.romanov@gmail.com dispatcher_type = type; 754977Smax.romanov@gmail.com } 755977Smax.romanov@gmail.com 756977Smax.romanov@gmail.com @Override getInputStream()757977Smax.romanov@gmail.com public ServletInputStream getInputStream() throws IOException 758977Smax.romanov@gmail.com { 759977Smax.romanov@gmail.com trace("getInputStream"); 760977Smax.romanov@gmail.com 761977Smax.romanov@gmail.com if (reader != null) { 762977Smax.romanov@gmail.com throw new IllegalStateException("getInputStream: getReader() already used"); 763977Smax.romanov@gmail.com } 764977Smax.romanov@gmail.com 765977Smax.romanov@gmail.com if (inputStream == null) { 766977Smax.romanov@gmail.com inputStream = new InputStream(req_info_ptr); 767977Smax.romanov@gmail.com } 768977Smax.romanov@gmail.com 769977Smax.romanov@gmail.com return inputStream; 770977Smax.romanov@gmail.com } 771977Smax.romanov@gmail.com 772977Smax.romanov@gmail.com @Override getLocalAddr()773977Smax.romanov@gmail.com public String getLocalAddr() 774977Smax.romanov@gmail.com { 775977Smax.romanov@gmail.com trace("getLocalAddr"); 776977Smax.romanov@gmail.com 777977Smax.romanov@gmail.com return getLocalAddr(req_ptr); 778977Smax.romanov@gmail.com } 779977Smax.romanov@gmail.com getLocalAddr(long req_ptr)780977Smax.romanov@gmail.com private static native String getLocalAddr(long req_ptr); 781977Smax.romanov@gmail.com 782977Smax.romanov@gmail.com 783977Smax.romanov@gmail.com @Override getLocale()784977Smax.romanov@gmail.com public Locale getLocale() 785977Smax.romanov@gmail.com { 786977Smax.romanov@gmail.com log("getLocale"); 787977Smax.romanov@gmail.com 788977Smax.romanov@gmail.com return Locale.getDefault(); 789977Smax.romanov@gmail.com } 790977Smax.romanov@gmail.com 791977Smax.romanov@gmail.com @Override getLocales()792977Smax.romanov@gmail.com public Enumeration<Locale> getLocales() 793977Smax.romanov@gmail.com { 794977Smax.romanov@gmail.com log("getLocales"); 795977Smax.romanov@gmail.com 796977Smax.romanov@gmail.com return Collections.emptyEnumeration(); 797977Smax.romanov@gmail.com } 798977Smax.romanov@gmail.com 799977Smax.romanov@gmail.com @Override getLocalName()800977Smax.romanov@gmail.com public String getLocalName() 801977Smax.romanov@gmail.com { 802977Smax.romanov@gmail.com trace("getLocalName"); 803977Smax.romanov@gmail.com 804977Smax.romanov@gmail.com return getLocalName(req_ptr); 805977Smax.romanov@gmail.com } 806977Smax.romanov@gmail.com getLocalName(long req_ptr)807977Smax.romanov@gmail.com private static native String getLocalName(long req_ptr); 808977Smax.romanov@gmail.com 809977Smax.romanov@gmail.com 810977Smax.romanov@gmail.com @Override getLocalPort()811977Smax.romanov@gmail.com public int getLocalPort() 812977Smax.romanov@gmail.com { 813977Smax.romanov@gmail.com trace("getLocalPort"); 814977Smax.romanov@gmail.com 815977Smax.romanov@gmail.com return getLocalPort(req_ptr); 816977Smax.romanov@gmail.com } 817977Smax.romanov@gmail.com getLocalPort(long req_ptr)818977Smax.romanov@gmail.com private static native int getLocalPort(long req_ptr); 819977Smax.romanov@gmail.com 820977Smax.romanov@gmail.com getParameters()821977Smax.romanov@gmail.com public MultiMap<String> getParameters() 822977Smax.romanov@gmail.com { 823977Smax.romanov@gmail.com if (parameters != null) { 824977Smax.romanov@gmail.com return parameters; 825977Smax.romanov@gmail.com } 826977Smax.romanov@gmail.com 827977Smax.romanov@gmail.com parameters = new MultiMap<>(); 828977Smax.romanov@gmail.com 829977Smax.romanov@gmail.com String query = getQueryString(); 830977Smax.romanov@gmail.com 831977Smax.romanov@gmail.com if (query != null) { 832977Smax.romanov@gmail.com UrlEncoded.decodeUtf8To(query, parameters); 833977Smax.romanov@gmail.com } 834977Smax.romanov@gmail.com 8351121Smax.romanov@nginx.com int content_length = getContentLength(); 8361121Smax.romanov@nginx.com 8371121Smax.romanov@nginx.com if (content_length == 0 || !getMethod().equals("POST")) { 8381121Smax.romanov@nginx.com return parameters; 8391121Smax.romanov@nginx.com } 8401121Smax.romanov@nginx.com 8411121Smax.romanov@nginx.com String content_type = getContentType(); 8421121Smax.romanov@nginx.com 8431121Smax.romanov@nginx.com try { 8441121Smax.romanov@nginx.com if (content_type.startsWith("application/x-www-form-urlencoded")) { 845977Smax.romanov@gmail.com UrlEncoded.decodeUtf8To(new InputStream(req_info_ptr), 8461121Smax.romanov@nginx.com parameters, content_length, -1); 8471121Smax.romanov@nginx.com } else if (checkMultiPart(content_type) && multipart_config != null) { 8481121Smax.romanov@nginx.com if (multi_parts == null) { 8491121Smax.romanov@nginx.com parseMultiParts(content_type); 8501121Smax.romanov@nginx.com } 8511121Smax.romanov@nginx.com 8521121Smax.romanov@nginx.com if (multi_parts != null) { 8531121Smax.romanov@nginx.com Collection<Part> parts = multi_parts.getParts(); 8541121Smax.romanov@nginx.com 8551121Smax.romanov@nginx.com String _charset_ = null; 8561121Smax.romanov@nginx.com Part charset_part = multi_parts.getPart("_charset_"); 8571121Smax.romanov@nginx.com if (charset_part != null) { 8581121Smax.romanov@nginx.com try (java.io.InputStream is = charset_part.getInputStream()) 8591121Smax.romanov@nginx.com { 8601121Smax.romanov@nginx.com ByteArrayOutputStream os = new ByteArrayOutputStream(); 8611121Smax.romanov@nginx.com IO.copy(is, os); 8621121Smax.romanov@nginx.com _charset_ = new String(os.toByteArray(),StandardCharsets.UTF_8); 8631121Smax.romanov@nginx.com } 8641121Smax.romanov@nginx.com } 8651121Smax.romanov@nginx.com 8661121Smax.romanov@nginx.com /* 8671121Smax.romanov@nginx.com Select Charset to use for this part. (NOTE: charset behavior is for the part value only and not the part header/field names) 8681121Smax.romanov@nginx.com 1. Use the part specific charset as provided in that part's Content-Type header; else 8691121Smax.romanov@nginx.com 2. Use the overall default charset. Determined by: 8701121Smax.romanov@nginx.com a. if part name _charset_ exists, use that part's value. 8711121Smax.romanov@nginx.com b. if the request.getCharacterEncoding() returns a value, use that. 8721121Smax.romanov@nginx.com (note, this can be either from the charset field on the request Content-Type 8731121Smax.romanov@nginx.com header, or from a manual call to request.setCharacterEncoding()) 8741121Smax.romanov@nginx.com c. use utf-8. 8751121Smax.romanov@nginx.com */ 8761121Smax.romanov@nginx.com Charset def_charset; 8771121Smax.romanov@nginx.com if (_charset_ != null) { 8781121Smax.romanov@nginx.com def_charset = Charset.forName(_charset_); 8791121Smax.romanov@nginx.com } else if (getCharacterEncoding() != null) { 8801121Smax.romanov@nginx.com def_charset = Charset.forName(getCharacterEncoding()); 8811121Smax.romanov@nginx.com } else { 8821121Smax.romanov@nginx.com def_charset = StandardCharsets.UTF_8; 8831121Smax.romanov@nginx.com } 8841121Smax.romanov@nginx.com 8851121Smax.romanov@nginx.com ByteArrayOutputStream os = null; 8861121Smax.romanov@nginx.com for (Part p : parts) { 8871121Smax.romanov@nginx.com if (p.getSubmittedFileName() != null) { 8881121Smax.romanov@nginx.com continue; 8891121Smax.romanov@nginx.com } 8901121Smax.romanov@nginx.com 8911121Smax.romanov@nginx.com // Servlet Spec 3.0 pg 23, parts without filename must be put into params. 8921121Smax.romanov@nginx.com String charset = null; 8931121Smax.romanov@nginx.com if (p.getContentType() != null) { 8941121Smax.romanov@nginx.com charset = MimeTypes.getCharsetFromContentType(p.getContentType()); 8951121Smax.romanov@nginx.com } 8961121Smax.romanov@nginx.com 8971121Smax.romanov@nginx.com try (java.io.InputStream is = p.getInputStream()) 8981121Smax.romanov@nginx.com { 8991121Smax.romanov@nginx.com if (os == null) { 9001121Smax.romanov@nginx.com os = new ByteArrayOutputStream(); 9011121Smax.romanov@nginx.com } 9021121Smax.romanov@nginx.com IO.copy(is, os); 9031121Smax.romanov@nginx.com 9041121Smax.romanov@nginx.com String content = new String(os.toByteArray(), charset == null ? def_charset : Charset.forName(charset)); 9051121Smax.romanov@nginx.com parameters.add(p.getName(), content); 9061121Smax.romanov@nginx.com } 9071121Smax.romanov@nginx.com os.reset(); 9081121Smax.romanov@nginx.com } 9091121Smax.romanov@nginx.com } 910977Smax.romanov@gmail.com } 9111121Smax.romanov@nginx.com } catch (IOException e) { 9121121Smax.romanov@nginx.com log("Unhandled IOException: " + e); 913977Smax.romanov@gmail.com } 914977Smax.romanov@gmail.com 915977Smax.romanov@gmail.com return parameters; 916977Smax.romanov@gmail.com } 917977Smax.romanov@gmail.com setParameters(MultiMap<String> p)918977Smax.romanov@gmail.com public void setParameters(MultiMap<String> p) 919977Smax.romanov@gmail.com { 920977Smax.romanov@gmail.com parameters = p; 921977Smax.romanov@gmail.com } 922977Smax.romanov@gmail.com 923977Smax.romanov@gmail.com @Override getParameter(String name)924977Smax.romanov@gmail.com public String getParameter(String name) 925977Smax.romanov@gmail.com { 926977Smax.romanov@gmail.com trace("getParameter: " + name); 927977Smax.romanov@gmail.com 928977Smax.romanov@gmail.com return getParameters().getValue(name, 0); 929977Smax.romanov@gmail.com } 930977Smax.romanov@gmail.com 931977Smax.romanov@gmail.com @Override getParameterMap()932977Smax.romanov@gmail.com public Map<String,String[]> getParameterMap() 933977Smax.romanov@gmail.com { 934977Smax.romanov@gmail.com trace("getParameterMap"); 935977Smax.romanov@gmail.com 936977Smax.romanov@gmail.com return Collections.unmodifiableMap(getParameters().toStringArrayMap()); 937977Smax.romanov@gmail.com } 938977Smax.romanov@gmail.com 939977Smax.romanov@gmail.com @Override getParameterNames()940977Smax.romanov@gmail.com public Enumeration<String> getParameterNames() 941977Smax.romanov@gmail.com { 942977Smax.romanov@gmail.com trace("getParameterNames"); 943977Smax.romanov@gmail.com 944977Smax.romanov@gmail.com return Collections.enumeration(getParameters().keySet()); 945977Smax.romanov@gmail.com } 946977Smax.romanov@gmail.com 947977Smax.romanov@gmail.com @Override getParameterValues(String name)948977Smax.romanov@gmail.com public String[] getParameterValues(String name) 949977Smax.romanov@gmail.com { 950977Smax.romanov@gmail.com trace("getParameterValues: " + name); 951977Smax.romanov@gmail.com 952977Smax.romanov@gmail.com List<String> vals = getParameters().getValues(name); 953977Smax.romanov@gmail.com if (vals == null) 954977Smax.romanov@gmail.com return null; 955977Smax.romanov@gmail.com return vals.toArray(new String[vals.size()]); 956977Smax.romanov@gmail.com } 957977Smax.romanov@gmail.com 958977Smax.romanov@gmail.com @Override getProtocol()959977Smax.romanov@gmail.com public String getProtocol() 960977Smax.romanov@gmail.com { 961977Smax.romanov@gmail.com trace("getProtocol"); 962977Smax.romanov@gmail.com 963977Smax.romanov@gmail.com return getProtocol(req_ptr); 964977Smax.romanov@gmail.com } 965977Smax.romanov@gmail.com getProtocol(long req_ptr)966977Smax.romanov@gmail.com private static native String getProtocol(long req_ptr); 967977Smax.romanov@gmail.com 968977Smax.romanov@gmail.com @Override getReader()969977Smax.romanov@gmail.com public BufferedReader getReader() throws IOException 970977Smax.romanov@gmail.com { 971977Smax.romanov@gmail.com trace("getReader"); 972977Smax.romanov@gmail.com 973977Smax.romanov@gmail.com if (inputStream != null) { 974977Smax.romanov@gmail.com throw new IllegalStateException("getReader: getInputStream() already used"); 975977Smax.romanov@gmail.com } 976977Smax.romanov@gmail.com 977977Smax.romanov@gmail.com if (reader == null) { 978977Smax.romanov@gmail.com reader = new BufferedReader(new InputStreamReader(new InputStream(req_info_ptr))); 979977Smax.romanov@gmail.com } 980977Smax.romanov@gmail.com 981977Smax.romanov@gmail.com return reader; 982977Smax.romanov@gmail.com } 983977Smax.romanov@gmail.com 984977Smax.romanov@gmail.com @Override 985977Smax.romanov@gmail.com @Deprecated getRealPath(String path)986977Smax.romanov@gmail.com public String getRealPath(String path) 987977Smax.romanov@gmail.com { 988977Smax.romanov@gmail.com trace("getRealPath: " + path); 989977Smax.romanov@gmail.com 990977Smax.romanov@gmail.com return context.getRealPath(path); 991977Smax.romanov@gmail.com } 992977Smax.romanov@gmail.com 993977Smax.romanov@gmail.com @Override getRemoteAddr()994977Smax.romanov@gmail.com public String getRemoteAddr() 995977Smax.romanov@gmail.com { 996977Smax.romanov@gmail.com String res = getRemoteAddr(req_ptr); 997977Smax.romanov@gmail.com 998977Smax.romanov@gmail.com trace("getRemoteAddr: " + res); 999977Smax.romanov@gmail.com 1000977Smax.romanov@gmail.com return res; 1001977Smax.romanov@gmail.com } 1002977Smax.romanov@gmail.com getRemoteAddr(long req_ptr)1003977Smax.romanov@gmail.com private static native String getRemoteAddr(long req_ptr); 1004977Smax.romanov@gmail.com 1005977Smax.romanov@gmail.com 1006977Smax.romanov@gmail.com @Override getRemoteHost()1007977Smax.romanov@gmail.com public String getRemoteHost() 1008977Smax.romanov@gmail.com { 1009977Smax.romanov@gmail.com String res = getRemoteHost(req_ptr); 1010977Smax.romanov@gmail.com 1011977Smax.romanov@gmail.com trace("getRemoteHost: " + res); 1012977Smax.romanov@gmail.com 1013977Smax.romanov@gmail.com return res; 1014977Smax.romanov@gmail.com } 1015977Smax.romanov@gmail.com getRemoteHost(long req_ptr)1016977Smax.romanov@gmail.com private static native String getRemoteHost(long req_ptr); 1017977Smax.romanov@gmail.com 1018977Smax.romanov@gmail.com 1019977Smax.romanov@gmail.com @Override getRemotePort()1020977Smax.romanov@gmail.com public int getRemotePort() 1021977Smax.romanov@gmail.com { 1022977Smax.romanov@gmail.com int res = getRemotePort(req_ptr); 1023977Smax.romanov@gmail.com 1024977Smax.romanov@gmail.com trace("getRemotePort: " + res); 1025977Smax.romanov@gmail.com 1026977Smax.romanov@gmail.com return res; 1027977Smax.romanov@gmail.com } 1028977Smax.romanov@gmail.com getRemotePort(long req_ptr)1029977Smax.romanov@gmail.com private static native int getRemotePort(long req_ptr); 1030977Smax.romanov@gmail.com 1031977Smax.romanov@gmail.com 1032977Smax.romanov@gmail.com @Override getRequestDispatcher(String path)1033977Smax.romanov@gmail.com public RequestDispatcher getRequestDispatcher(String path) 1034977Smax.romanov@gmail.com { 1035977Smax.romanov@gmail.com trace("getRequestDispatcher: " + path); 1036977Smax.romanov@gmail.com 1037977Smax.romanov@gmail.com if (path.startsWith("/")) { 1038977Smax.romanov@gmail.com return context.getRequestDispatcher(path); 1039977Smax.romanov@gmail.com } 1040977Smax.romanov@gmail.com 1041977Smax.romanov@gmail.com try { 1042977Smax.romanov@gmail.com URI uri = new URI(getRequestURI()); 1043977Smax.romanov@gmail.com uri = uri.resolve(path); 1044977Smax.romanov@gmail.com 1045977Smax.romanov@gmail.com return context.getRequestDispatcher(uri); 1046977Smax.romanov@gmail.com } catch (URISyntaxException e) { 1047977Smax.romanov@gmail.com log("getRequestDispatcher: failed to create dispatcher: " + e); 1048977Smax.romanov@gmail.com } 1049977Smax.romanov@gmail.com 1050977Smax.romanov@gmail.com return null; 1051977Smax.romanov@gmail.com } 1052977Smax.romanov@gmail.com 1053977Smax.romanov@gmail.com 1054977Smax.romanov@gmail.com @Override getScheme()1055977Smax.romanov@gmail.com public String getScheme() 1056977Smax.romanov@gmail.com { 10571054Smax.romanov@nginx.com trace("getScheme"); 1058977Smax.romanov@gmail.com 1059977Smax.romanov@gmail.com return getScheme(req_ptr); 1060977Smax.romanov@gmail.com } 1061977Smax.romanov@gmail.com getScheme(long req_ptr)1062977Smax.romanov@gmail.com private static native String getScheme(long req_ptr); 1063977Smax.romanov@gmail.com 1064977Smax.romanov@gmail.com 1065977Smax.romanov@gmail.com @Override getServerName()1066977Smax.romanov@gmail.com public String getServerName() 1067977Smax.romanov@gmail.com { 1068977Smax.romanov@gmail.com String res = getServerName(req_ptr); 1069977Smax.romanov@gmail.com 1070977Smax.romanov@gmail.com trace("getServerName: " + res); 1071977Smax.romanov@gmail.com 1072977Smax.romanov@gmail.com return res; 1073977Smax.romanov@gmail.com } 1074977Smax.romanov@gmail.com getServerName(long req_ptr)1075977Smax.romanov@gmail.com private static native String getServerName(long req_ptr); 1076977Smax.romanov@gmail.com 1077977Smax.romanov@gmail.com 1078977Smax.romanov@gmail.com @Override getServerPort()1079977Smax.romanov@gmail.com public int getServerPort() 1080977Smax.romanov@gmail.com { 1081977Smax.romanov@gmail.com int res = getServerPort(req_ptr); 1082977Smax.romanov@gmail.com 1083977Smax.romanov@gmail.com trace("getServerPort: " + res); 1084977Smax.romanov@gmail.com 1085977Smax.romanov@gmail.com return res; 1086977Smax.romanov@gmail.com } 1087977Smax.romanov@gmail.com getServerPort(long req_ptr)1088977Smax.romanov@gmail.com private static native int getServerPort(long req_ptr); 1089977Smax.romanov@gmail.com 1090977Smax.romanov@gmail.com @Override getServletContext()1091977Smax.romanov@gmail.com public ServletContext getServletContext() 1092977Smax.romanov@gmail.com { 1093977Smax.romanov@gmail.com trace("getServletContext"); 1094977Smax.romanov@gmail.com 1095977Smax.romanov@gmail.com return context; 1096977Smax.romanov@gmail.com } 1097977Smax.romanov@gmail.com 1098977Smax.romanov@gmail.com @Override isAsyncStarted()1099977Smax.romanov@gmail.com public boolean isAsyncStarted() 1100977Smax.romanov@gmail.com { 1101977Smax.romanov@gmail.com log("isAsyncStarted"); 1102977Smax.romanov@gmail.com 1103977Smax.romanov@gmail.com return false; 1104977Smax.romanov@gmail.com } 1105977Smax.romanov@gmail.com 1106977Smax.romanov@gmail.com @Override isAsyncSupported()1107977Smax.romanov@gmail.com public boolean isAsyncSupported() 1108977Smax.romanov@gmail.com { 1109977Smax.romanov@gmail.com log("isAsyncSupported"); 1110977Smax.romanov@gmail.com 1111977Smax.romanov@gmail.com return false; 1112977Smax.romanov@gmail.com } 1113977Smax.romanov@gmail.com 1114977Smax.romanov@gmail.com @Override isSecure()1115977Smax.romanov@gmail.com public boolean isSecure() 1116977Smax.romanov@gmail.com { 11171011Smax.romanov@nginx.com trace("isSecure"); 1118977Smax.romanov@gmail.com 11191011Smax.romanov@nginx.com return isSecure(req_ptr); 1120977Smax.romanov@gmail.com } 1121977Smax.romanov@gmail.com isSecure(long req_ptr)11221011Smax.romanov@nginx.com private static native boolean isSecure(long req_ptr); 11231011Smax.romanov@nginx.com 1124977Smax.romanov@gmail.com @Override removeAttribute(String name)1125977Smax.romanov@gmail.com public void removeAttribute(String name) 1126977Smax.romanov@gmail.com { 1127977Smax.romanov@gmail.com trace("removeAttribute: " + name); 1128977Smax.romanov@gmail.com 1129977Smax.romanov@gmail.com Object prev = attributes.remove(name); 1130977Smax.romanov@gmail.com 1131977Smax.romanov@gmail.com if (attr_listener == null || prev == null) { 1132977Smax.romanov@gmail.com return; 1133977Smax.romanov@gmail.com } 1134977Smax.romanov@gmail.com 1135977Smax.romanov@gmail.com attr_listener.attributeRemoved( 1136977Smax.romanov@gmail.com new ServletRequestAttributeEvent(context, this, name, prev)); 1137977Smax.romanov@gmail.com } 1138977Smax.romanov@gmail.com 1139977Smax.romanov@gmail.com @Override setAttribute(String name, Object o)1140977Smax.romanov@gmail.com public void setAttribute(String name, Object o) 1141977Smax.romanov@gmail.com { 1142977Smax.romanov@gmail.com trace("setAttribute: " + name + ", " + o); 1143977Smax.romanov@gmail.com 1144977Smax.romanov@gmail.com Object prev; 1145977Smax.romanov@gmail.com 1146977Smax.romanov@gmail.com if (o != null) { 1147977Smax.romanov@gmail.com prev = attributes.put(name, o); 1148977Smax.romanov@gmail.com } else { 1149977Smax.romanov@gmail.com prev = attributes.remove(name); 1150977Smax.romanov@gmail.com } 1151977Smax.romanov@gmail.com 1152977Smax.romanov@gmail.com if (attr_listener == null) { 1153977Smax.romanov@gmail.com return; 1154977Smax.romanov@gmail.com } 1155977Smax.romanov@gmail.com 1156977Smax.romanov@gmail.com if (prev == null) { 1157977Smax.romanov@gmail.com if (o == null) { 1158977Smax.romanov@gmail.com return; 1159977Smax.romanov@gmail.com } 1160977Smax.romanov@gmail.com 1161977Smax.romanov@gmail.com attr_listener.attributeAdded(new ServletRequestAttributeEvent( 1162977Smax.romanov@gmail.com context, this, name, o)); 1163977Smax.romanov@gmail.com } else { 1164977Smax.romanov@gmail.com if (o != null) { 1165977Smax.romanov@gmail.com attr_listener.attributeReplaced( 1166977Smax.romanov@gmail.com new ServletRequestAttributeEvent(context, this, name, prev)); 1167977Smax.romanov@gmail.com } else { 1168977Smax.romanov@gmail.com attr_listener.attributeRemoved( 1169977Smax.romanov@gmail.com new ServletRequestAttributeEvent(context, this, name, prev)); 1170977Smax.romanov@gmail.com } 1171977Smax.romanov@gmail.com } 1172977Smax.romanov@gmail.com } 1173977Smax.romanov@gmail.com setAttribute_(String name, Object o)1174977Smax.romanov@gmail.com public void setAttribute_(String name, Object o) 1175977Smax.romanov@gmail.com { 1176977Smax.romanov@gmail.com trace("setAttribute_: " + name + ", " + o); 1177977Smax.romanov@gmail.com 1178977Smax.romanov@gmail.com if (o != null) { 1179977Smax.romanov@gmail.com attributes.put(name, o); 1180977Smax.romanov@gmail.com } else { 1181977Smax.romanov@gmail.com attributes.remove(name); 1182977Smax.romanov@gmail.com } 1183977Smax.romanov@gmail.com } 1184977Smax.romanov@gmail.com 1185977Smax.romanov@gmail.com @Override setCharacterEncoding(String env)1186977Smax.romanov@gmail.com public void setCharacterEncoding(String env) throws UnsupportedEncodingException 1187977Smax.romanov@gmail.com { 1188977Smax.romanov@gmail.com trace("setCharacterEncoding: " + env); 1189977Smax.romanov@gmail.com 1190977Smax.romanov@gmail.com characterEncoding = env; 1191977Smax.romanov@gmail.com } 1192977Smax.romanov@gmail.com 1193977Smax.romanov@gmail.com @Override startAsync()1194977Smax.romanov@gmail.com public AsyncContext startAsync() throws IllegalStateException 1195977Smax.romanov@gmail.com { 1196977Smax.romanov@gmail.com log("startAsync"); 1197977Smax.romanov@gmail.com 1198977Smax.romanov@gmail.com return null; 1199977Smax.romanov@gmail.com } 1200977Smax.romanov@gmail.com 1201977Smax.romanov@gmail.com @Override startAsync(ServletRequest servletRequest, ServletResponse servletResponse)1202977Smax.romanov@gmail.com public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException 1203977Smax.romanov@gmail.com { 1204977Smax.romanov@gmail.com log("startAsync(Req, resp)"); 1205977Smax.romanov@gmail.com 1206977Smax.romanov@gmail.com return null; 1207977Smax.romanov@gmail.com } 1208977Smax.romanov@gmail.com 1209977Smax.romanov@gmail.com @Override upgrade( Class<T> httpUpgradeHandlerClass)1210977Smax.romanov@gmail.com public <T extends HttpUpgradeHandler> T upgrade( 1211977Smax.romanov@gmail.com Class<T> httpUpgradeHandlerClass) throws java.io.IOException, ServletException 1212977Smax.romanov@gmail.com { 1213*1157Smax.romanov@nginx.com trace("upgrade: " + httpUpgradeHandlerClass.getName()); 1214*1157Smax.romanov@nginx.com 1215*1157Smax.romanov@nginx.com T handler; 1216*1157Smax.romanov@nginx.com 1217*1157Smax.romanov@nginx.com try { 1218*1157Smax.romanov@nginx.com handler = httpUpgradeHandlerClass.getConstructor().newInstance(); 1219*1157Smax.romanov@nginx.com } catch (Exception e) { 1220*1157Smax.romanov@nginx.com throw new ServletException(e); 1221*1157Smax.romanov@nginx.com } 1222*1157Smax.romanov@nginx.com 1223*1157Smax.romanov@nginx.com upgrade(req_info_ptr); 1224977Smax.romanov@gmail.com 1225*1157Smax.romanov@nginx.com return handler; 1226977Smax.romanov@gmail.com } 1227977Smax.romanov@gmail.com upgrade(long req_info_ptr)1228*1157Smax.romanov@nginx.com private static native void upgrade(long req_info_ptr); 1229*1157Smax.romanov@nginx.com isUpgrade()1230*1157Smax.romanov@nginx.com public boolean isUpgrade() 1231*1157Smax.romanov@nginx.com { 1232*1157Smax.romanov@nginx.com return isUpgrade(req_info_ptr); 1233*1157Smax.romanov@nginx.com } 1234*1157Smax.romanov@nginx.com isUpgrade(long req_info_ptr)1235*1157Smax.romanov@nginx.com private static native boolean isUpgrade(long req_info_ptr); 1236*1157Smax.romanov@nginx.com 1237977Smax.romanov@gmail.com @Override changeSessionId()1238977Smax.romanov@gmail.com public String changeSessionId() 1239977Smax.romanov@gmail.com { 1240977Smax.romanov@gmail.com trace("changeSessionId"); 1241977Smax.romanov@gmail.com 1242977Smax.romanov@gmail.com getSession(false); 1243977Smax.romanov@gmail.com 1244977Smax.romanov@gmail.com if (session == null) { 1245977Smax.romanov@gmail.com return null; 1246977Smax.romanov@gmail.com } 1247977Smax.romanov@gmail.com 1248977Smax.romanov@gmail.com context.changeSessionId(session); 1249977Smax.romanov@gmail.com 1250977Smax.romanov@gmail.com if (context.getEffectiveSessionTrackingModes().contains( 1251977Smax.romanov@gmail.com SessionTrackingMode.COOKIE)) 1252977Smax.romanov@gmail.com { 1253977Smax.romanov@gmail.com setSessionIdCookie(); 1254977Smax.romanov@gmail.com } 1255977Smax.romanov@gmail.com 1256977Smax.romanov@gmail.com return session.getId(); 1257977Smax.romanov@gmail.com } 1258977Smax.romanov@gmail.com log(String msg)1259977Smax.romanov@gmail.com private void log(String msg) 1260977Smax.romanov@gmail.com { 1261977Smax.romanov@gmail.com msg = "Request." + msg; 1262977Smax.romanov@gmail.com log(req_info_ptr, msg, msg.length()); 1263977Smax.romanov@gmail.com } 1264977Smax.romanov@gmail.com log(long req_info_ptr, String msg, int msg_len)1265977Smax.romanov@gmail.com public static native void log(long req_info_ptr, String msg, int msg_len); 1266977Smax.romanov@gmail.com 1267977Smax.romanov@gmail.com trace(String msg)1268977Smax.romanov@gmail.com private void trace(String msg) 1269977Smax.romanov@gmail.com { 1270977Smax.romanov@gmail.com msg = "Request." + msg; 1271977Smax.romanov@gmail.com trace(req_info_ptr, msg, msg.length()); 1272977Smax.romanov@gmail.com } 1273977Smax.romanov@gmail.com trace(long req_info_ptr, String msg, int msg_len)1274977Smax.romanov@gmail.com public static native void trace(long req_info_ptr, String msg, int msg_len); 1275977Smax.romanov@gmail.com getResponse(long req_info_ptr)1276977Smax.romanov@gmail.com private static native Response getResponse(long req_info_ptr); 1277*1157Smax.romanov@nginx.com 1278*1157Smax.romanov@nginx.com setWsSession(WsSession s)1279*1157Smax.romanov@nginx.com public void setWsSession(WsSession s) 1280*1157Smax.romanov@nginx.com { 1281*1157Smax.romanov@nginx.com wsSession = s; 1282*1157Smax.romanov@nginx.com } 1283*1157Smax.romanov@nginx.com processWsFrame(ByteBuffer buf, byte opCode, boolean last)1284*1157Smax.romanov@nginx.com private void processWsFrame(ByteBuffer buf, byte opCode, boolean last) 1285*1157Smax.romanov@nginx.com throws IOException 1286*1157Smax.romanov@nginx.com { 1287*1157Smax.romanov@nginx.com trace("processWsFrame: " + opCode + ", [" + buf.position() + ", " + buf.limit() + "]"); 1288*1157Smax.romanov@nginx.com try { 1289*1157Smax.romanov@nginx.com wsSession.processFrame(buf, opCode, last); 1290*1157Smax.romanov@nginx.com } catch (WsIOException e) { 1291*1157Smax.romanov@nginx.com wsSession.onClose(e.getCloseReason()); 1292*1157Smax.romanov@nginx.com } 1293*1157Smax.romanov@nginx.com } 1294*1157Smax.romanov@nginx.com closeWsSession()1295*1157Smax.romanov@nginx.com private void closeWsSession() 1296*1157Smax.romanov@nginx.com { 1297*1157Smax.romanov@nginx.com trace("closeWsSession"); 1298*1157Smax.romanov@nginx.com skip_close_ws = true; 1299*1157Smax.romanov@nginx.com 1300*1157Smax.romanov@nginx.com wsSession.onClose(); 1301*1157Smax.romanov@nginx.com } 1302*1157Smax.romanov@nginx.com sendWsFrame(ByteBuffer payload, byte opCode, boolean last, long timeoutExpiry)1303*1157Smax.romanov@nginx.com public void sendWsFrame(ByteBuffer payload, byte opCode, boolean last, 1304*1157Smax.romanov@nginx.com long timeoutExpiry) throws IOException 1305*1157Smax.romanov@nginx.com { 1306*1157Smax.romanov@nginx.com trace("sendWsFrame: " + opCode + ", [" + payload.position() + 1307*1157Smax.romanov@nginx.com ", " + payload.limit() + "]"); 1308*1157Smax.romanov@nginx.com 1309*1157Smax.romanov@nginx.com if (payload.isDirect()) { 1310*1157Smax.romanov@nginx.com sendWsFrame(req_info_ptr, payload, payload.position(), 1311*1157Smax.romanov@nginx.com payload.limit() - payload.position(), opCode, last); 1312*1157Smax.romanov@nginx.com } else { 1313*1157Smax.romanov@nginx.com sendWsFrame(req_info_ptr, payload.array(), payload.position(), 1314*1157Smax.romanov@nginx.com payload.limit() - payload.position(), opCode, last); 1315*1157Smax.romanov@nginx.com } 1316*1157Smax.romanov@nginx.com } 1317*1157Smax.romanov@nginx.com sendWsFrame(long req_info_ptr, ByteBuffer buf, int pos, int len, byte opCode, boolean last)1318*1157Smax.romanov@nginx.com private static native void sendWsFrame(long req_info_ptr, 1319*1157Smax.romanov@nginx.com ByteBuffer buf, int pos, int len, byte opCode, boolean last); 1320*1157Smax.romanov@nginx.com sendWsFrame(long req_info_ptr, byte[] arr, int pos, int len, byte opCode, boolean last)1321*1157Smax.romanov@nginx.com private static native void sendWsFrame(long req_info_ptr, 1322*1157Smax.romanov@nginx.com byte[] arr, int pos, int len, byte opCode, boolean last); 1323*1157Smax.romanov@nginx.com 1324*1157Smax.romanov@nginx.com closeWs()1325*1157Smax.romanov@nginx.com public void closeWs() 1326*1157Smax.romanov@nginx.com { 1327*1157Smax.romanov@nginx.com if (skip_close_ws) { 1328*1157Smax.romanov@nginx.com return; 1329*1157Smax.romanov@nginx.com } 1330*1157Smax.romanov@nginx.com 1331*1157Smax.romanov@nginx.com trace("closeWs"); 1332*1157Smax.romanov@nginx.com 1333*1157Smax.romanov@nginx.com closeWs(req_info_ptr); 1334*1157Smax.romanov@nginx.com } 1335*1157Smax.romanov@nginx.com closeWs(long req_info_ptr)1336*1157Smax.romanov@nginx.com private static native void closeWs(long req_info_ptr); 1337977Smax.romanov@gmail.com } 1338977Smax.romanov@gmail.com 1339