Skip to content

File connection_cl.h

File List > connection > connection_cl.h

Go to the documentation of this file

/*
 * Copyright 2008 Search Solution Corporation
 * Copyright 2016 CUBRID Corporation
 *
 *  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.
 *
 */


/*
 * connection_cl.h -
 */

#ifndef _CONNECTION_CL_H_
#define _CONNECTION_CL_H_

#ident "$Id$"

#include "connection_defs.h"
#include "connection_support.hpp"

/* the order to connect to db-hosts in databases.txt */
#define DB_CONNECT_ORDER_SEQ         0
#define DB_CONNECT_ORDER_RANDOM      1

/* abnormal DB host status */
#define DB_HS_NORMAL                    0x00000000
#define DB_HS_CONN_TIMEOUT              0x00000001
#define DB_HS_CONN_FAILURE              0x00000002
#define DB_HS_MISMATCHED_RW_MODE        0x00000004
#define DB_HS_HA_DELAYED                0x00000008
#define DB_HS_NON_PREFFERED_HOSTS       0x00000010
#define DB_HS_UNUSABLE_DATABASES        0x00000020

#define DB_HS_RECONNECT_INDICATOR \
  (DB_HS_MISMATCHED_RW_MODE | DB_HS_HA_DELAYED | DB_HS_NON_PREFFERED_HOSTS)



class connection_cl:public connection_support
{
protected:
  int m_service_port_id;

private:
  void css_initialize_conn (CSS_CONN_ENTRY * conn, SOCKET fd);
  void css_dealloc_conn (CSS_CONN_ENTRY * conn);

  int css_read_header (CSS_CONN_ENTRY * conn, NET_HEADER * local_header);
  CSS_CONN_ENTRY *css_server_connect (char *host_name, CSS_CONN_ENTRY * conn, char *server_name, unsigned short *rid);
  int css_return_queued_data (CSS_CONN_ENTRY * conn, unsigned short request_id, char **buffer, int *buffer_size,
                  int *rc);
  int css_return_queued_request (CSS_CONN_ENTRY * conn, unsigned short *rid, int *request, int *buffer_size);
  CSS_CONN_ENTRY *css_common_connect (const char *host_name, CSS_CONN_ENTRY * conn, int connect_type,
                      const char *server_name, int server_name_length, int port, int timeout,
                      unsigned short *rid, bool send_magic);
  bool css_is_valid_request_id (CSS_CONN_ENTRY * conn, unsigned short request_id);

public:
    connection_cl ();
   ~connection_cl () = default;

  CSS_CONN_ENTRY *css_make_conn (SOCKET fd);
  void css_free_conn (CSS_CONN_ENTRY * conn);
  CSS_CONN_ENTRY *css_find_exception_conn (void);

  CSS_CONN_ENTRY *css_connect_to_master_server (int master_port_id, const char *server_name, int name_length);
  int css_receive_error (CSS_CONN_ENTRY * conn, unsigned short req_id, char **buffer, int *buffer_size);
  CSS_CONN_ENTRY *css_connect_to_cubrid_server (char *host_name, char *server_name);
  CSS_CONN_ENTRY *css_connect_to_master_for_info (const char *host_name, int port_id, unsigned short *rid);
  CSS_CONN_ENTRY *css_connect_to_master_timeout (const char *host_name, int port_id, int timeout, unsigned short *rid);
  bool css_does_master_exist (int port_id);

  int css_receive_data (CSS_CONN_ENTRY * conn, unsigned short rid, char **buffer, int *size, int timeout);
  int css_receive_request (CSS_CONN_ENTRY * conn, unsigned short *rid, int *request, int *arg_buffer_size);
  int css_send_close_request (CSS_CONN_ENTRY * conn);
  unsigned short css_get_request_id (CSS_CONN_ENTRY * conn) override;
  char *css_return_data_buffer (CSS_CONN_ENTRY * conn, unsigned short request_id, int *buffer_size);
  int css_return_queued_error (CSS_CONN_ENTRY * conn, unsigned short request_id, char **buffer, int *buffer_size,
                   int *rc);
  void css_remove_all_unexpected_packets (CSS_CONN_ENTRY * conn);
  int css_read_one_request (CSS_CONN_ENTRY * conn, unsigned short *rid, int *request, int *buffer_size);
  void css_close_conn (CSS_CONN_ENTRY * conn);


  CSS_CONN_ENTRY *css_connect_to_log_server (const char *host_name, CSS_CONN_ENTRY * conn,
                         const char *server_name, int port, int timeout, unsigned short *rid);
  CSS_CONN_ENTRY *css_server_connect_part_two (char *host_name, CSS_CONN_ENTRY * conn, int port_id,
                           unsigned short *rid);
};

extern void css_shutdown_conn (CSS_CONN_ENTRY * conn);
extern CSS_CONN_ENTRY *css_find_conn_from_fd (SOCKET fd);

#endif /* _CONNECTION_CL_H_ */