1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.jetty.rewrite.handler;
20
21 import java.io.IOException;
22
23 import javax.servlet.http.HttpServletRequest;
24 import javax.servlet.http.HttpServletResponse;
25
26 import org.eclipse.jetty.http.HttpHeader;
27 import org.eclipse.jetty.http.HttpHeaderValue;
28 import org.eclipse.jetty.util.StringMap;
29
30
31
32
33
34
35
36
37 public class MsieSslRule extends Rule
38 {
39 private static final int IEv5 = '5';
40 private static final int IEv6 = '6';
41 private static StringMap __IE6_BadOS = new StringMap();
42 {
43 __IE6_BadOS.put("NT 5.01", Boolean.TRUE);
44 __IE6_BadOS.put("NT 5.0",Boolean.TRUE);
45 __IE6_BadOS.put("NT 4.0",Boolean.TRUE);
46 __IE6_BadOS.put("98",Boolean.TRUE);
47 __IE6_BadOS.put("98; Win 9x 4.90",Boolean.TRUE);
48 __IE6_BadOS.put("95",Boolean.TRUE);
49 __IE6_BadOS.put("CE",Boolean.TRUE);
50 }
51
52 public MsieSslRule()
53 {
54 _handling = false;
55 _terminating = false;
56 }
57
58 @Override
59 public String matchAndApply(String target, HttpServletRequest request, HttpServletResponse response) throws IOException
60 {
61 if (request.isSecure())
62 {
63 String user_agent = request.getHeader(HttpHeader.USER_AGENT.asString());
64
65 if (user_agent!=null)
66 {
67 int msie=user_agent.indexOf("MSIE");
68 if (msie>0 && user_agent.length()-msie>5)
69 {
70
71 int ieVersion = user_agent.charAt(msie+5);
72
73 if ( ieVersion<=IEv5)
74 {
75 response.setHeader(HttpHeader.CONNECTION.asString(), HttpHeaderValue.CLOSE.asString());
76 return target;
77 }
78
79 if (ieVersion==IEv6)
80 {
81 int windows = user_agent.indexOf("Windows",msie+5);
82 if (windows>0)
83 {
84 int end=user_agent.indexOf(')',windows+8);
85 if(end<0 || __IE6_BadOS.get(user_agent,windows+8,end-windows-8)!=null)
86 {
87 response.setHeader(HttpHeader.CONNECTION.asString(), HttpHeaderValue.CLOSE.asString());
88 return target;
89 }
90 }
91 }
92 }
93 }
94 }
95 return null;
96 }
97 }