1 4 package gnu.kawa.servlet; 5 import javax.servlet.*; 6 import javax.servlet.http.*; 7 import java.util.*; 8 import java.io.*; 9 import java.net.*; 10 11 18 19 public class CGIServletWrapper extends ServletOutputStream 20 implements HttpServletRequest, HttpServletResponse, 21 ServletConfig, ServletContext 22 { 23 byte buffer[] = null; 24 int bufpos = 0; 25 PrintStream out = System.out; 26 Vector headers = new Vector(); 27 String sawContentType; 28 int statusCode = 0; 29 String statusString; 30 String servletName; 31 32 public static void main(String [] args) 33 { 34 try 35 { 36 CGIServletWrapper wrapper = new CGIServletWrapper(); 37 Class servClass = Class.forName(args[0]); 38 wrapper.servletName = args[0]; 39 HttpServlet servlet = (HttpServlet) servClass.newInstance(); 40 servlet.init(wrapper); 41 servlet.service(wrapper, wrapper); 42 wrapper.flushBuffer(); 43 } 44 catch (Throwable ex) 45 { 46 ex.printStackTrace(); 47 System.exit(-1); 48 } 49 } 50 51 private static final int defaultBufferSize = 2048; 52 53 private void allocateBuffer() 54 { 55 if (buffer == null) 56 buffer = new byte[defaultBufferSize]; 57 } 58 59 public void write(int c) 60 throws java.io.IOException 61 { 62 allocateBuffer(); 63 int bufsize = buffer.length; 64 if (buffer.length == 0) 65 { 66 committ(); 67 out.write(c); 68 } 69 else 70 { 71 if (bufpos >= buffer.length) 72 flushBuffer(); 73 buffer[bufpos++] = (byte) c; 74 } 75 } 76 77 public String getCgiEnvVar(String name) 78 { 79 return System.getProperty(name); 80 } 81 82 public ServletOutputStream getOutputStream() 83 { 84 return this; 85 } 86 87 PrintWriter writer; 88 89 public java.io.PrintWriter getWriter() 90 { 91 if (writer == null) 92 writer = new PrintWriter(out); 93 return writer; 94 } 95 96 public java.util.Map getParameterMap() 97 { 98 return null; } 100 101 public void setBufferSize(int size) 102 { 103 if (bufpos > 0 || committed) 104 throw new IllegalStateException (); 105 buffer = new byte[size]; 106 } 107 108 public int getBufferSize() 109 { 110 111 return buffer == null ? defaultBufferSize : buffer.length; 112 } 113 114 public void setLocale (java.util.Locale locale) 115 { 116 } 118 119 private void committ() 120 throws IOException 121 { 122 if (! committed) 123 { 124 printHeaders(); 125 committed = true; 126 } 127 } 128 129 public void flushBuffer() 130 throws IOException 131 { 132 committ(); 133 if (bufpos > 0) 134 out.write(buffer, 0, bufpos); 135 bufpos = 0; 136 } 137 138 public void resetBuffer() 139 { 140 bufpos = 0; 141 } 142 143 public void reset() 144 { 145 resetBuffer(); 147 } 148 149 java.util.Hashtable attributes; 150 151 public Object getAttribute(String name) 152 { 153 return attributes == null ? null : attributes.get(name); 154 } 155 156 public void setAttribute(String name, Object value) 157 { 158 if (value == null) 159 removeAttribute(name); 160 else 161 { 162 if (attributes == null) 163 attributes = new java.util.Hashtable (); 164 attributes.put(name, value); 165 } 166 } 167 168 public void removeAttribute(String name) 169 { 170 if (attributes != null) 171 attributes.remove(name); 172 } 173 174 public Enumeration getAttributeNames() 175 { 176 return attributes.keys(); 177 } 178 179 public String getContentType() 180 { 181 return getCgiEnvVar("CONTENT_TYPE"); 182 } 183 184 185 public String getPathInfo() 186 { 187 return getCgiEnvVar("PATH_INFO"); 188 } 189 190 public String getPathTranslated() 191 { 192 return getCgiEnvVar("PATH_TRANSLATED"); 193 } 194 195 public String getRequestURI() 196 { 197 String script = getServletPath(); 198 String path = getPathInfo(); 199 if (script == null) 200 return path; 201 if (path == null) 202 return script; 203 return script + '/' + path; 204 } 205 206 public StringBuffer getRequestURL() 207 { 208 210 StringBuffer url = new StringBuffer (100); 211 String scheme = getScheme(); 212 int port = getServerPort(); 213 if (port < 0) 214 port = 80; url.append(scheme); 216 url.append("://"); 217 url.append(getServerName()); 218 if ((scheme.equals("http") && (port != 80)) 219 || (scheme.equals("https") && (port != 443))) 220 { 221 url.append(':'); 222 url.append(port); 223 } 224 url.append('/'); 225 url.append(getRequestURI()); 226 return url; 227 } 228 229 public String getProtocol() 230 { 231 return getCgiEnvVar("SERVER_PROTOCOL"); 232 } 233 234 public int getServerPort() 235 { 236 String port = getCgiEnvVar("SERVER_PORT"); 237 if (port != null) 238 { 239 try 240 { 241 return Integer.parseInt(port); 242 } 243 catch (Throwable ex) 244 { 245 } 246 } 247 return -1; 248 } 249 250 public int getLocalPort() 251 { 252 return getServerPort(); } 254 255 public String getLocalAddr () 256 { 257 try 258 { 259 return InetAddress.getByName(getLocalName()).getHostAddress(); 260 } 261 catch (UnknownHostException ex) 262 { 263 return "127.0.0.1"; 264 } 265 } 266 267 public String getLocalName () 268 { 269 return getServerName(); } 271 272 public int getRemotePort() 273 { 274 return -1; } 276 277 public boolean isSecure() 278 { 279 return getServerPort() == 443; } 281 282 public String getServerName() 283 { 284 return getCgiEnvVar("SERVER_NAME"); 285 } 286 287 public String getMethod() 288 { 289 String method = getCgiEnvVar("REQUEST_METHOD"); 290 return method == null ? "GET" : method; 291 } 292 293 boolean committed; 294 String characterEncoding; 295 296 public boolean isCommitted() 297 { 298 return committed; 299 } 300 301 public String getCharacterEncoding () { return characterEncoding; } 302 303 public void setCharacterEncoding(String enc) 304 { 305 characterEncoding = enc; 306 } 307 308 public void setContentType(String type) 309 { 310 setHeader("Content-Type", type); 311 } 312 313 public void setContentLength (int len) 314 { 315 setIntHeader("Content-Length", len); 316 } 317 318 public void addCookie(Cookie cookie) 319 { 320 } 322 323 public boolean containsHeader(String str) 324 { 325 int num = headers.size(); 326 for (int i = 0; i < num; i += 2) 327 if (headers.elementAt(i).equals(str)) 328 return true; 329 return false; 330 } 331 332 public String encodeURL(String str) 333 { 334 return null; } 336 337 public String encodeUrl(String str) 338 { 339 return null; } 341 342 public String encodeRedirectURL(String str) 343 { 344 return null; } 346 347 public String encodeRedirectUrl(String str) 348 { 349 return null; } 351 352 public void sendError(int i, String str) 353 { 354 statusCode = i; 355 statusString = str; 356 } 357 358 public void sendError(int i) 359 { 360 statusCode = i; 361 statusString = null; 362 } 363 364 public void sendRedirect(String str) 365 { 366 } 368 369 private void printHeader(String label, String value) 370 { 371 out.print(label); 372 out.print(": "); 373 out.println(value); } 375 376 private void printHeaders() 377 { 378 if (statusCode != 0) 379 { 380 out.print("Status: "); 381 out.print(statusCode); 382 if (statusString != null) 383 { 384 out.print(' '); 385 out.print(statusString); 386 } 387 out.println(); 388 } 389 if (sawContentType == null) 390 setContentType("text/html"); int num = headers.size(); 392 for (int i = 0; i < num; i += 2) 393 printHeader(headers.elementAt(i).toString(), 394 headers.elementAt(i + 1).toString()); 395 out.println(); 397 } 398 399 public void setDateHeader(String str, long l) 400 { 401 } 403 404 public void addDateHeader(String str, long l) 405 { 406 } 408 409 public void setHeader(String label, String value) 410 { 411 int num = headers.size(); 412 for (int i = 0; i < num; i += 2) 413 if (headers.elementAt(i).equals(label)) 414 { 415 if (label.equalsIgnoreCase("Content-type")) 416 sawContentType = value; 417 headers.setElementAt(value, i+1); 418 break; 419 } 420 addHeader(label, value); 421 } 422 423 public void setIntHeader(String str, int i) 424 { 425 setHeader(str, Integer.toString(i)); 426 } 427 428 public void addHeader(String label, String value) 429 { 430 if (label.equalsIgnoreCase("Content-type")) 431 sawContentType = value; 432 headers.addElement(label); 433 headers.addElement(value); 434 } 435 436 public void addIntHeader(String str, int i) 437 { 438 addHeader(str, Integer.toString(i)); 439 } 440 441 public void setStatus(int i) 442 { 443 statusCode = i; 444 statusString = null; 445 } 446 447 public void setStatus(int i, String str) 448 { 449 statusCode = i; 450 statusString = str; 451 } 452 453 public String getScheme() 454 { 455 return getServerPort() == 443 ? "https" : "http"; } 457 458 public java.util.Enumeration getLocales() 459 { 460 return null; } 462 463 public String getRealPath(String path) 464 { 465 return null; } 467 468 public Locale getLocale() 469 { 470 return null; } 472 473 public RequestDispatcher getRequestDispatcher(String path) 474 { 475 return null; } 477 478 public String getRemoteAddr() 479 { 480 return getCgiEnvVar("REMOTE_ADDR"); 481 } 482 483 public String getRemoteHost() 484 { 485 String host = getCgiEnvVar("REMOTE_HOST"); 486 return host != null ? host : getRemoteAddr(); 487 } 488 489 public java.io.BufferedReader getReader() 490 { 491 return null; } 493 494 public ServletInputStream getInputStream() 495 { 496 return null; } 498 499 public String getParameter(String name) 500 { 501 return null; } 503 504 public Enumeration getParameterNames() 505 { 506 return null; } 508 509 public String [] getParameterValues(String name) 510 { 511 return null; } 513 514 public int getContentLength() 515 { 516 String length = getCgiEnvVar("CONTENT_LENGTH"); 517 if (length != null) 518 { 519 try 520 { 521 return Integer.parseInt(length); 522 } 523 catch (Throwable ex) 524 { 525 } 526 } 527 return 0; 528 } 529 530 public String getAuthType() 531 { 532 return getCgiEnvVar("AUTH_TYPE"); 533 } 534 535 public long getDateHeader(String str) 536 { 537 return -1; } 539 540 public String getHeader(String str) 541 { 542 return null; } 544 545 public Enumeration getHeaders(String str) 546 { 547 return null; } 549 550 public boolean isRequestedSessionIdValid() 551 { 552 return false; } 554 555 public boolean isRequestedSessionIdFromCookie() 556 { 557 return false; } 559 560 public boolean isRequestedSessionIdFromURL() 561 { 562 return false; } 564 565 public boolean isRequestedSessionIdFromUrl() 566 { 567 return false; } 569 570 public String getRequestedSessionId() 571 { 572 return null; } 574 575 public String getServletPath() 576 { 577 return getCgiEnvVar("SCRIPT_NAME"); 578 } 579 580 public HttpSession getSession(boolean b) 581 { 582 return null; } 584 585 public HttpSession getSession() 586 { 587 return null; } 589 590 public String getRemoteUser() 591 { 592 return getCgiEnvVar("REMOTE_USER"); 593 } 594 595 public boolean isUserInRole(String role) 596 { 597 return false; } 599 600 public java.security.Principal getUserPrincipal() 601 { 602 return null; } 604 605 public String getContextPath() 606 { 607 return ""; } 609 610 public String getQueryString() 611 { 612 return getCgiEnvVar("QUERY_STRING"); 613 } 614 615 public Enumeration getHeaderNames() 616 { 617 return null; } 619 620 public int getIntHeader(String str) 621 { 622 return -1; } 624 625 public javax.servlet.http.Cookie [] getCookies() 626 { 627 return null; } 629 630 632 public String getInitParameter(String name) 633 { 634 return null; } 636 637 public Enumeration getInitParameterNames() 638 { 639 return nullEnumeration; 640 } 641 642 public ServletContext getServletContext() 643 { 644 return this; 645 } 646 647 public String getServletName() 648 { 649 return servletName; 650 } 651 652 654 public ServletContext getContext (String path) { return null; } 655 656 public int getMajorVersion () { return 2; } 657 public int getMinorVersion () { return 3; } 658 public String getMimeType (String file) { return null; } 659 660 public java.util.Set getResourcePaths (String path) { return null; } 661 public java.net.URL getResource (String path) { return null; } 662 public java.io.InputStream getResourceAsStream (String path) { return null; } 663 664 public RequestDispatcher getNamedDispatcher (String path) { return null; } 665 public Servlet getServlet (String name) { return null; } 666 static final Enumeration nullEnumeration 667 = new gnu.lists.SeqPosition(gnu.lists.LList.Empty, 0, false); 668 public Enumeration getServlets () { return nullEnumeration; } 669 public Enumeration getServletNames () { return nullEnumeration; } 670 671 public void log (String message) { } 672 public void log (Exception ex, String mgs) { } 673 public void log (String msg, Throwable ex) { } 674 public String getServerInfo () { return "Kawa CGI/servlet wrapper";} 675 676 public java.lang.String getServletContextName () { return null; } 677 } 678 | Popular Tags |