hgomez      01/05/18 09:47:06

  Added:       jk/src/native/common jk_ajp14.c jk_ajp14.h
  Log:
  AJP14 marshal/unmarshal initial
  
  Revision  Changes    Path
  1.1                  jakarta-tomcat-connectors/jk/src/native/common/jk_ajp14.c
  
  Index: jk_ajp14.c
  ===================================================================
  /*
   * Copyright (c) 1997-1999 The Java Apache Project.  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. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Java Apache 
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * 4. The names "Apache JServ", "Apache JServ Servlet Engine" and 
   *    "Java Apache Project" must not be used to endorse or promote products 
   *    derived from this software without prior written permission.
   *
   * 5. Products derived from this software may not be called "Apache JServ"
   *    nor may "Apache" nor "Apache JServ" appear in their names without 
   *    prior written permission of the Java Apache Project.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Java Apache 
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *    
   * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "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 JAVA APACHE PROJECT 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 Java Apache Group. For more information
   * on the Java Apache Project and the Apache JServ Servlet Engine project,
   * please see <http://java.apache.org/>.
   *
   */
  
  /***************************************************************************
   * Description: Next generation bi-directional protocol handler.           *
   * Author:      Henri Gomez <[EMAIL PROTECTED]>                               *
   * Version:     $Revision: 1.1 $                                           *
   ***************************************************************************/
  
  
  #include "jk_global.h"
  #include "jk_util.h"
  #include "jk_ajp14.h"
  
  /*
   * Compute the MD5 with ENTROPY / SECRET KEY
   */
  
  void ajp14_compute_md5(jk_login_service_t *s, jk_logger_t *l)
  {
        jk_md5(s->entropy, s->secret_key, s->computed_key);
  
        jk_log(l, JK_LOG_DEBUG, "Into ajp14_compute_md5 (%s)\n", s->computed_key);
  }
  
  /*
   * Build the Login Init Command
   *
   * 
+-------------------------+---------------------------+---------------------------+
   * | LOGIN INIT CMD (1 byte) | NEGOCIATION DATA (32bits) | WEB SERVER INFO (CString) 
|
   * 
+-------------------------+---------------------------+---------------------------+
   *
   */
  
  int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t       *msg,
                                         jk_login_service_t *s,
                                         jk_logger_t        *l)
  {
      jk_log(l, JK_LOG_DEBUG, "Into ajp14_marshal_login_init_into_msgb\n");
      
      /* To be on the safe side */
      jk_b_reset(msg);
  
      /*
       * LOGIN
       */
      if (jk_b_append_byte(msg, AJP14_LOGINIT_CMD)) 
          return JK_FALSE;
  
        /*
       * NEGOCIATION FLAGS
       */
       if (jk_b_append_long(msg, s->negociation))
                return JK_FALSE;
  
        /*
         * WEB-SERVER NAME
         */
       if (jk_b_append_string(msg, s->server_name)) {
          jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_login_init_into_msgb - Error 
appending the server_name string\n");
          return JK_FALSE;
      }
  
      return JK_TRUE;
  }
  
  /*
   * Build the Login Computed Command
   *
   * +-------------------------+---------------------------------------+
   * | LOGIN COMP CMD (1 byte) | MD5 of RANDOM + SECRET KEY (32 chars) |
   * +-------------------------+---------------------------------------+
   *
   */
  
  int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t       *msg,
                                         jk_login_service_t *s,
                                         jk_logger_t        *l)
  {
      jk_log(l, JK_LOG_DEBUG, "Into ajp14_marshal_login_comp_into_msgb\n");
      
      /* To be on the safe side */
      jk_b_reset(msg);
  
      /*
       * LOGIN
       */
      if (jk_b_append_byte(msg, AJP14_LOGCOMP_CMD)) 
          return JK_FALSE;
  
        /*
         * COMPUTED-SEED
         */
       if (jk_b_append_bytes(msg, s->computed_key, AJP14_COMPUTED_KEY_LEN)) {
          jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_login_comp_into_msgb - Error 
appending the COMPUTED MD5 bytes\n");
          return JK_FALSE;
      }
  
      return JK_TRUE;
  }
  
  
  /*
   * Build the Unknown Packet
   *
   * 
+-----------------------------+---------------------------------+------------------------------+
   * | UNKNOWN PACKET CMD (1 byte) | UNHANDLED MESSAGE SIZE (32bits) | UNHANDLED 
MESSAGE (bytes...) |
   * 
+-----------------------------+---------------------------------+------------------------------+
   *
   */
  
  int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t               *msg,
                                             jk_msg_buf_t               *unk,
                                             jk_logger_t        *l)
  {
        jk_log(l, JK_LOG_DEBUG, "Into ajp14_marshal_unknown_packet_into_msgb\n");
  
        /* To be on the safe side */
        jk_b_reset(msg);
  
        /*
         * UNKNOWN PACKET CMD
         */
        if (jk_b_append_byte(msg, AJP14_UNKNOW_PACKET_CMD))
                return JK_FALSE;
  
        /*
         * UNHANDLED MESSAGE SIZE
         */
        if (jk_b_append_long(msg, jk_b_get_len(unk)))
                return JK_FALSE;
  
        /*
         * UNHANDLED MESSAGE
         */
        if (jk_b_append_bytes(msg, jk_b_get_buff(unk), jk_b_get_len(unk))) {
          jk_log(l, JK_LOG_ERROR, "Error ajp14_marshal_unknown_packet_into_msgb - 
Error appending the UNHANDLED MESSAGE\n");
          return JK_FALSE;
      }
  
      return JK_TRUE;
  }
  
  
  
  1.1                  jakarta-tomcat-connectors/jk/src/native/common/jk_ajp14.h
  
  Index: jk_ajp14.h
  ===================================================================
  /*
   * Copyright (c) 1997-1999 The Java Apache Project.  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. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Java Apache 
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *
   * 4. The names "Apache JServ", "Apache JServ Servlet Engine" and 
   *    "Java Apache Project" must not be used to endorse or promote products 
   *    derived from this software without prior written permission.
   *
   * 5. Products derived from this software may not be called "Apache JServ"
   *    nor may "Apache" nor "Apache JServ" appear in their names without 
   *    prior written permission of the Java Apache Project.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Java Apache 
   *    Project for use in the Apache JServ servlet engine project
   *    <http://java.apache.org/>."
   *    
   * THIS SOFTWARE IS PROVIDED BY THE JAVA APACHE PROJECT "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 JAVA APACHE PROJECT 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 Java Apache Group. For more information
   * on the Java Apache Project and the Apache JServ Servlet Engine project,
   * please see <http://java.apache.org/>.
   *
   */
  
  /***************************************************************************
   * Description: Next generation bi-directional protocol handler.           *
   * Author:      Henri Gomez <[EMAIL PROTECTED]>                               *
   * Version:     $Revision: 1.1 $                                           *
   ***************************************************************************/
  #ifndef JK_AJP14_H
  #define JK_AJP14_H
  
  
  #include "jk_service.h"
  #include "jk_msg_buff.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif /* __cplusplus */
  
  #define AJP14_DEF_HOST                ("localhost")
  #define AJP14_DEF_PORT                (8010)
  #define AJP14_READ_BUF_SIZE         (8*1024)
  #define AJP14_DEF_RETRY_ATTEMPTS    (1)
  #define AJP14_DEF_CACHE_SZ            (1)
  #define AJP14_MAX_SEND_BODY_SZ        (DEF_BUFFER_SZ - 6)
  #define AJP14_HEADER_LEN              (4)
  #define AJP14_HEADER_SZ_LEN           (2)
  
  /*
   * Initial Login Phase (web server -> servlet engine)
   */
  #define AJP14_LOGINIT_CMD                     (unsigned char)0x10
  
  /*
   * Second Login Phase (servlet engine -> web server), md5 seed is received
   */
  #define AJP14_LOGSEED_CMD                     (unsigned char)0x11
  
  /*
   * Third Login Phase (web server -> servlet engine), md5 of seed + secret is sent
   */
  #define AJP14_LOGCOMP_CMD                     (unsigned char)0x12
  
  /*
   * Login Accepted (servlet engine -> web server)
   */
  #define AJP14_LOGOK_CMD                               (unsigned char)0x13
  
  /*
   * Login Rejected (servlet engine -> web server), will be logged
   */
  #define AJP14_LOGNOK_CMD                      (unsigned char)0x14
  
  /*
   * Context Query (web server -> servlet engine), which URI are handled by servlet 
engine ?
   */
  #define AJP14_CONTEXT_QRY_CMD         (unsigned char)0x15
  
  /*
   * Context Info (servlet engine -> web server), URI handled response
   */
  #define AJP14_CONTEXT_INFO_CMD                (unsigned char)0x16
  
  /* 
   * Context Update (servlet engine -> web server), status of context changed
   */
  #define AJP14_CONTEXT_UPDATE_CMD      (unsigned char)0x17
  
  /*
   * Servlet Engine Status (web server -> servlet engine), what's the status of the 
servlet engine ?
   */
  #define AJP14_STATUS_CMD                      (unsigned char)0x18
  
  /*
   * Secure Shutdown command (web server -> servlet engine), please servlet stop 
yourself.
   */
  #define AJP14_SHUTDOWN_CMD                    (unsigned char)0x19
  
  /*
   * Secure Shutdown command Accepted (servlet engine -> web server)
   */
  #define AJP14_SHUTOK_CMD                      (unsigned char)0x1A
  
  /*
   * Secure Shutdown Rejected (servlet engine -> web server)
   */
  #define AJP14_SHUTNOK_CMD                     (unsigned char)0x1B
  
  /*
   * Context Status (web server -> servlet engine), what's the status of the context ?
   */
  #define AJP14_CONTEXT_STATE_CMD               (unsigned char)0x1C
  
  /*
   * Context Status Reply (servlet engine -> web server), status of context
   */
  #define AJP14_CONTEXT_STATE_REP_CMD   (unsigned char)0x1D
  
  /*
   * Unknown Packet Reply (web server <-> servlet engine), when a packet couldn't be 
decoded
   */
  #define AJP14_UNKNOW_PACKET_CMD               (unsigned char)0x1E
  
  
  /*
   * Negociation flags 
   */
  
  /*
   * web-server want context info after login
   */
  #define AJP14_CONTEXT_INFO_NEG      0x80000000 
  
  /*
   * web-server want context updates
   */
  #define AJP14_CONTEXT_UPDATE_NEG    0x40000000 
  
  /*
   * web-server want compressed stream 
   */
  #define AJP14_GZIP_STREAM_NEG       0x20000000 
  
  /*
   * web-server want crypted DES56 stream with secret key
   */
  #define AJP14_DES56_STREAM_NEG      0x10000000 
  
  /*
   * Extended info on server SSL vars
   */
  #define AJP14_SSL_VSERVER_NEG       0x08000000 
  
  /*
   *Extended info on client SSL vars
   */
  #define AJP14_SSL_VCLIENT_NEG       0x04000000 
  
  /*
   * Extended info on crypto SSL vars
   */
  #define AJP14_SSL_VCRYPTO_NEG       0x02000000 
  
  /*
   * Extended info on misc SSL vars
   */
  #define AJP14_SSL_VMISC_NEG         0x01000000 
  
  /*
   * mask of protocol supported 
   */
  #define AJP14_PROTO_SUPPORT_AJPXX_NEG   0x00FF0000 
  
  /* 
   * communication could use AJP14 
   */
  #define AJP14_PROTO_SUPPORT_AJP14_NEG   0x00010000 
  
  /*
   * communication could use AJP15 
   */
  #define AJP14_PROTO_SUPPORT_AJP15_NEG   0x00020000 
  
  /*
   * communication could use AJP16
   */
  #define AJP14_PROTO_SUPPORT_AJP16_NEG   0x00040000 
  
  /*
   * Some failure codes
   */
  #define AJP14_BAD_KEY_ERR                             0xFFFFFFFF
  #define AJP14_ENGINE_DOWN_ERR                 0xFFFFFFFE
  #define AJP14_RETRY_LATER_ERR                 0xFFFFFFFD
  #define AJP14_SHUT_AUTHOR_FAILED_ERR    0xFFFFFFFC
  
  /*
   * Some status codes
   */
  #define AJP14_CONTEXT_DOWN       0x01
  #define AJP14_CONTEXT_UP         0x02
  #define AJP14_CONTEXT_OK         0x03
  
  /* 
   * Misc defines
   */
  #define AJP14_ENTROPY_SEED_LEN                32      /* we're using MD5 => 32 chars 
*/
  #define AJP14_COMPUTED_KEY_LEN                32  /* we're using MD5 also */
  
  /*
   * The login structure
   */
  typedef struct jk_login_service jk_login_service_t;
  
  struct jk_login_service {
  
      /*
         *  Pointer to web-server name
       */
      char * server_name;
  
        /*
         * Pointer to secret key
         */
        char * secret_key;
  
        /*
         * Received entropy seed
         */
        char entropy[AJP14_ENTROPY_SEED_LEN + 1];
  
        /*
         * Computed key
         */
        char computed_key[AJP14_COMPUTED_KEY_LEN + 1];
  
      /*
       *  What we want to negociate
       */
      unsigned long negociation;
  
        /*
         * What we received from servlet engine 
       */
        unsigned long negociated;
  };                                
  
  /*
   * functions defined here 
   */
  
  int ajp14_marshal_login_init_into_msgb(jk_msg_buf_t       *msg,
                                         jk_login_service_t *s,
                                         jk_logger_t        *l);
  
  int ajp14_marshal_login_comp_into_msgb(jk_msg_buf_t       *msg,
                                         jk_login_service_t *s,
                                         jk_logger_t        *l);
  
  int ajp14_marshal_unknown_packet_into_msgb(jk_msg_buf_t     *msg,
                                             jk_msg_buf_t     *unk,
                                             jk_logger_t      *l);
  
  
  #ifdef __cplusplus
  }
  #endif /* __cplusplus */
  
  #endif /* JK_AJP14_H */
  
  
  

Reply via email to