📄 negociationhandler.java
字号:
/* * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * [Additional notices, if required by prior licensing conditions] * */package org.apache.ajp;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.util.Enumeration;import java.security.*;import org.apache.tomcat.util.http.*;import org.apache.tomcat.util.buf.*;/** * Handler for the protocol negotiation. It will authenticate and * exchange information about supported messages on each end. * * * @author Henri Gomez [hgomez@slib.fr] * @author Dan Milstein [danmil@shore.net] * @author Keith Wannamaker [Keith@Wannamaker.org] * @author Costin Manolache */public class NegociationHandler extends AjpHandler{ public static final byte JK_AJP13_SHUTDOWN=7; // Initial Login Phase (web server -> servlet engine) public static final byte JK_AJP14_LOGINIT_CMD=0x10; // Second Login Phase (servlet engine -> web server), md5 seed is received public static final byte JK_AJP14_LOGSEED_CMD=0x11; // Third Login Phase (web server -> servlet engine), // md5 of seed + secret is sent public static final byte JK_AJP14_LOGCOMP_CMD=0x12; // Login Accepted (servlet engine -> web server) public static final byte JK_AJP14_LOGOK_CMD=0x13; // Login Rejected (servlet engine -> web server), will be logged public static final byte JK_AJP14_LOGNOK_CMD=0x14; // Context Query (web server -> servlet engine), // which URI are handled by servlet engine ? public static final byte JK_AJP14_CONTEXT_QRY_CMD=0x15; // Context Info (servlet engine -> web server), URI handled response public static final byte JK_AJP14_CONTEXT_INFO_CMD= 0x16; // Context Update (servlet engine -> web server), status of context changed public static final byte JK_AJP14_CONTEXT_UPDATE_CMD= 0x17; // Servlet Engine Status (web server -> servlet engine), // what's the status of the servlet engine ? public static final byte JK_AJP14_STATUS_CMD= 0x18; // Secure Shutdown command (web server -> servlet engine), //please servlet stop yourself. public static final byte JK_AJP14_SHUTDOWN_CMD= 0x19; // Secure Shutdown command Accepted (servlet engine -> web server) public static final byte JK_AJP14_SHUTOK_CMD= 0x1A; // Secure Shutdown Rejected (servlet engine -> web server) public static final byte JK_AJP14_SHUTNOK_CMD= 0x1B; // Context Status (web server -> servlet engine), //what's the status of the context ? public static final byte JK_AJP14_CONTEXT_STATE_CMD= 0x1C; // Context Status Reply (servlet engine -> web server), status of context public static final byte JK_AJP14_CONTEXT_STATE_REP_CMD = 0x1D; // Unknown Packet Reply (web server <-> servlet engine), //when a packet couldn't be decoded public static final byte JK_AJP14_UNKNOW_PACKET_CMD = 0x1E; // -------------------- Other constants -------------------- // Entropy Packet Size public static final int AJP14_ENTROPY_SEED_LEN= 32; public static final int AJP14_COMPUTED_KEY_LEN= 32; // web-server want context info after login public static final int AJP14_CONTEXT_INFO_NEG= 0x80000000; // web-server want context updates public static final int AJP14_CONTEXT_UPDATE_NEG= 0x40000000; // web-server want compressed stream public static final int AJP14_GZIP_STREAM_NEG= 0x20000000; // web-server want crypted DES56 stream with secret key public static final int AJP14_DES56_STREAM_NEG= 0x10000000; // Extended info on server SSL vars public static final int AJP14_SSL_VSERVER_NEG= 0x08000000; // Extended info on client SSL vars public static final int AJP14_SSL_VCLIENT_NEG= 0x04000000; // Extended info on crypto SSL vars public static final int AJP14_SSL_VCRYPTO_NEG= 0x02000000; // Extended info on misc SSL vars public static final int AJP14_SSL_VMISC_NEG= 0x01000000; // mask of protocol supported public static final int AJP14_PROTO_SUPPORT_AJPXX_NEG=0x00FF0000; // communication could use AJP14 public static final int AJP14_PROTO_SUPPORT_AJP14_NEG=0x00010000; // communication could use AJP15 public static final int AJP14_PROTO_SUPPORT_AJP15_NEG=0x00020000; // communication could use AJP16 public static final int AJP14_PROTO_SUPPORT_AJP16_NEG=0x00040000; // Some failure codes public static final int AJP14_BAD_KEY_ERR= 0xFFFFFFFF; public static final int AJP14_ENGINE_DOWN_ERR = 0xFFFFFFFE; public static final int AJP14_RETRY_LATER_ERR = 0xFFFFFFFD; public static final int AJP14_SHUT_AUTHOR_FAILED_ERR = 0xFFFFFFFC; // Some status codes public static final byte AJP14_CONTEXT_DOWN= 0x01; public static final byte AJP14_CONTEXT_UP= 0x02; public static final byte AJP14_CONTEXT_OK= 0x03; // -------------------- Parameters -------------------- String containerSignature="Ajp14-based container"; String seed="seed";// will use random String password; int webserverNegociation=0; // String webserverName; public NegociationHandler() { setSeed("myveryrandomentropy"); setPassword("myverysecretkey"); } public void setContainerSignature( String s ) { containerSignature=s; } // -------------------- State -------------------- // public String getWebserverName() { // return webserverName; // } // -------------------- Parameters -------------------- /** * Set the original entropy seed */ public void setSeed(String pseed) { String[] credentials = new String[1]; credentials[0] = pseed; seed = digest(credentials, "md5"); } /** * Get the original entropy seed */ public String getSeed() { return seed; } /** * Set the secret password */ public void setPassword(String ppwd) { password = ppwd; } /** * Get the secret password */ public String getPassword() { return password; } // -------------------- Initialization -------------------- public void init( Ajp13 ajp14 ) { super.init(ajp14); // register incoming message handlers ajp14.registerMessageType( JK_AJP14_LOGINIT_CMD,"JK_AJP14_LOGINIT_CMD", this, null); // ajp14.registerMessageType( JK_AJP14_LOGCOMP_CMD,"JK_AJP14_LOGCOMP_CMD", this, null); // ajp14.registerMessageType( JK_AJP13_SHUTDOWN,"JK_AJP13_SHUTDOWN", this, null); // ajp14.registerMessageType( JK_AJP14_CONTEXT_QRY_CMD, "JK_AJP14_CONTEXT_QRY_CMD", this, null); // ajp14.registerMessageType( JK_AJP14_STATUS_CMD,"JK_AJP14_STATUS_CMD", this, null); // ajp14.registerMessageType( JK_AJP14_SHUTDOWN_CMD, "JK_AJP14_SHUTDOWN_CMD", this, null); // ajp14.registerMessageType( JK_AJP14_CONTEXT_STATE_CMD, "JK_AJP14_CONTEXT_STATE_CMD", this, null); // ajp14.registerMessageType( JK_AJP14_UNKNOW_PACKET_CMD, "JK_AJP14_UNKNOW_PACKET_CMD", this, null); // // register outgoing messages handler ajp14.registerMessageType( JK_AJP14_LOGNOK_CMD,"JK_AJP14_LOGNOK_CMD", this,null ); } // -------------------- Dispatch -------------------- public int handleAjpMessage( int type, Ajp13 ch, Ajp13Packet hBuf,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -