You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by mt...@apache.org on 2004/08/25 22:54:31 UTC

cvs commit: jakarta-tomcat-connectors/ajp/ajplib/src ajp_link.c

mturk       2004/08/25 13:54:31

  Added:       ajp/ajplib/src ajp_link.c
  Log:
  Not to bad :). Only the ajp_link.c has been lost during
  manual moving of ajplib files.
  
  Revision  Changes    Path
  1.1                  jakarta-tomcat-connectors/ajp/ajplib/src/ajp_link.c
  
  Index: ajp_link.c
  ===================================================================
  /* Copyright 1999-2004 The Apache Software Foundation
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  #include "ajp.h"
  
  
  apr_status_t ajp_ilink_send(apr_socket_t *sock, ajp_msg_t *msg)
  {
      char         *buf;
      apr_status_t status;
      apr_size_t   length;
  
      if (sock == NULL) {
          ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
                        "ajp_ilink_send(): NULL socket provided");
          return AJP_EINVAL;
      }
      
      ajp_msg_end(msg);
      
      length = msg->len;
      buf    = (char *)msg->buf;
  
      do {
          apr_size_t written = length;
  
          status = apr_socket_send(sock, buf, &written);
          if (status != APR_SUCCESS) {
              ap_log_error(APLOG_MARK, APLOG_ERR, status, NULL,
                            "ajp_ilink_send(): send failed");
              return status;
          }
          length -= written;
          buf    += written;
      } while (length);
  
      return APR_SUCCESS;
  }
  
  
  static apr_status_t ilink_read(apr_socket_t *sock, char * buf,
                                 apr_size_t len)
  {
      apr_size_t   length;
      apr_status_t status;
      apr_size_t   rdlen;
  
      if (sock == NULL) {
          ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
                        "ajp_ilink_readN(): NULL socket provided");
          return AJP_EINVAL;
      }
  
      rdlen  = 0;
      length = len;
      
      while (rdlen < len) {
  
          status = apr_socket_recv(sock, buf + rdlen, &length);
  
          if (status == APR_EOF)
              return status;          /* socket closed. */
          else if (APR_STATUS_IS_EAGAIN(status))
              continue;
          else if (status != APR_SUCCESS)
              return status;          /* any error. */
              
          rdlen += length;
          length = len - rdlen;
      }
      return APR_SUCCESS;
  }
  
  
  apr_status_t ajp_ilink_receive(apr_socket_t *sock, ajp_msg_t *msg)
  {
      apr_status_t status;
      apr_size_t   hlen;
      apr_size_t   blen;
  
      if (sock == NULL) {
          ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
                        "ajp_ilink_receive(): NULL socket provided");
          return AJP_EINVAL;
      }
  
      hlen = msg->header_len;
      
      status = ilink_read(sock, msg->buf, hlen);
      
      if (status != APR_SUCCESS) {
          ap_log_error(APLOG_MARK, APLOG_ERR, status, NULL,
                  "ajp_ilink_receive() can't receive header\n");
          return AJP_ENO_HEADER;
      }
      
      status = ajp_msg_check_header(msg, &blen);
  
      if (status != APR_SUCCESS) {
          ap_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
                        "ajp_ilink_receive() received bad header\n");
          return AJP_EBAD_HEADER;
      }
  
      status = ilink_read(sock, msg->buf + hlen, blen);
  
      if (status != APR_SUCCESS) {
          ap_log_error(APLOG_MARK, APLOG_ERR, status, NULL,
                        "ajp_ilink_receive() error while receiving message body %of length %d\n",
                        hlen);
          return AJP_EBAD_MESSAGE;
      }
  
      ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
                    "ajp_ilink_receive() received packet len=%d type=%d\n",
                    blen, (int)msg->buf[hlen]);
  
      return APR_SUCCESS;
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org