📄 cms_srv.hh
字号:
/********************************************************************* Description: cms_srv.hh* C++ Header file for server that reads and writes to a local CMS* buffer for remote processes.** Derived from a work by Fred Proctor & Will Shackleford** Author:* License: LGPL Version 2* System: Linux* * Copyright (c) 2004 All rights reserved.** Last change: * $Revision: 1.5 $* $Author: paul_c $* $Date: 2005/05/23 16:34:11 $********************************************************************//************************************************************************** File:cms_srv.hh* Authors: Fred Proctor, Will Shackleford* Purpose: * Includes:* 1. class CMS_SERVER* 2. class CMS_SERVER_LOCAL_PORT*************************************************************************/#ifndef CMS_SERVER_HH#define CMS_SERVER_HH#include "cms_user.hh" /* class CMS, CMS_STATUS */#include "cms_cfg.hh" /* CMS_CONFIG_LINELEN */#include "linklist.hh" /* class LinkedList */#include "rem_msg.hh" /* struct REMOTE_READ_REQUEST, */ /* struct REMOTE_WRITE_REQUEST, */extern int cms_server_count;extern void wait_for_servers(int);extern LinkedList *cms_server_list;class CMS_SERVER;class CMS_DIAG_PROC_INFO;class CMS_SERVER_LOCAL_PORT:public virtual CMS_USER { protected: long buffer_number; int list_id; friend class CMS_SERVER; CMS_DIAG_PROC_INFO *orig_info; /* virtual functions for accessing local buffer. */ virtual REMOTE_READ_REPLY *reader(REMOTE_READ_REQUEST * req); virtual REMOTE_READ_REPLY *blocking_read(REMOTE_READ_REQUEST * req); virtual REMOTE_WRITE_REPLY *writer(REMOTE_WRITE_REQUEST * buf); virtual REMOTE_SET_DIAG_INFO_REPLY * set_diag_info(REMOTE_SET_DIAG_INFO_REQUEST * buf); virtual REMOTE_GET_DIAG_INFO_REPLY * get_diag_info(REMOTE_GET_DIAG_INFO_REQUEST * buf); virtual REMOTE_GET_MSG_COUNT_REPLY * get_msg_count(REMOTE_GET_DIAG_INFO_REQUEST * buf); virtual void reset_diag_info(); REMOTE_READ_REPLY read_reply; REMOTE_WRITE_REPLY write_reply; REMOTE_GET_BUF_NAME_REPLY namereply; REMOTE_GET_DIAG_INFO_REPLY get_diag_info_reply; public: CMS_SERVER_LOCAL_PORT(CMS * _cms); virtual ~ CMS_SERVER_LOCAL_PORT(); int local_channel_reused;};class CMS_USER_INFO;struct CMS_USER_CONNECT_STRUCT { CMS_USER_CONNECT_STRUCT(); CMS_USER_INFO *user_info; int fd;};class CMS_SERVER_REMOTE_PORT { public: CMS_SERVER_REMOTE_PORT(CMS_SERVER *); virtual ~ CMS_SERVER_REMOTE_PORT(); virtual void run() = 0; virtual void register_port(); virtual void unregister_port(); virtual int accept_local_port_cms(CMS * cms); int port_registered; CMS_USER_INFO *current_user_info; CMS_USER_INFO *get_connected_user(int); void add_connected_user(int); protected: LinkedList * connected_users; CMS_USER_CONNECT_STRUCT *current_connected_user_struct; CMS_SERVER *cms_server_parent; static CMS_SERVER *find_server(long _pid, long _tid = 0); static void print_servers(); friend class CMS_SERVER; double min_compatible_version; int confirm_write; public: int running; int max_total_subdivisions; int port_num; int max_clients; int current_clients;};class CMS_SERVER { public: REMOTE_CMS_REQUEST *request; int server_spawned; int server_registered; int list_id; LinkedList *cms_local_ports; CMS_SERVER_LOCAL_PORT *find_local_port(long _buffer_num); REMOTE_CHECK_IF_READ_REPLY cir_reply; REMOTE_GET_MSG_COUNT_REPLY gmc_reply; REMOTE_GET_QUEUE_LENGTH_REPLY gql_reply; REMOTE_GET_SPACE_AVAILABLE_REPLY gsa_reply; REMOTE_CLEAR_REPLY clear_reply_struct; int using_passwd_file; int get_access_type(); long get_message_type(); const char *get_buffer_name(int _buf_num); int requests_processed;// void read_passwd_file(); public: int get_total_subdivisions(long _buffer_num); CMS_SERVER_REMOTE_PORT *remote_port; void gen_random_key(char key[], int len); int security_check(CMS_USER_INFO * user_info, int _buf_num); int is_using_passwd_file(); CMS_USER_INFO *get_user_info(const char *name, const char *passwd);// int get_user_keys(const char *name, char *key1, char *key2); static void clean(int); long current_pid; long current_tid; long creator_pid; long creator_tid; long spawner_pid; long spawner_tid; long server_pid; long server_tid; long maximum_cms_size; REMOTE_CMS_REPLY *process_request(REMOTE_CMS_REQUEST *); void register_server(int setup_CC_signal_handler = 1); void unregister_server(); void run(int setup_CC_signal_handler = 1); int spawn(); void kill_server(); CMS_SERVER(); void add_local_port(CMS_SERVER_LOCAL_PORT *); void delete_all_local_ports(); virtual void delete_from_list(); virtual ~ CMS_SERVER(); virtual void initialize_write_request_space(); virtual int accept_local_port_cms(CMS *); REMOTE_READ_REQUEST read_req; REMOTE_WRITE_REQUEST write_req; REMOTE_GET_KEYS_REQUEST get_keys_req; REMOTE_LOGIN_REQUEST login_req; REMOTE_SET_SUBSCRIPTION_REQUEST set_subscription_req; REMOTE_CHECK_IF_READ_REQUEST check_if_read_req; REMOTE_GET_MSG_COUNT_REQUEST get_msg_count_req; REMOTE_GET_QUEUE_LENGTH_REQUEST get_queue_length_req; REMOTE_GET_SPACE_AVAILABLE_REQUEST get_space_available_req; REMOTE_CLEAR_REQUEST clear_req; REMOTE_SET_DIAG_INFO_REQUEST set_diag_info_req; REMOTE_GET_DIAG_INFO_REQUEST get_diag_info_req; REMOTE_READ_REPLY *read_reply; REMOTE_WRITE_REPLY *write_reply; REMOTE_GET_KEYS_REPLY *get_keys_reply; REMOTE_GET_KEYS_REPLY perm_get_keys_reply; REMOTE_LOGIN_REPLY *login_reply; REMOTE_LOGIN_REPLY perm_login_reply; REMOTE_SET_SUBSCRIPTION_REPLY *set_subscription_reply; REMOTE_SET_SUBSCRIPTION_REPLY perm_set_subscription_reply; REMOTE_CHECK_IF_READ_REPLY *check_if_read_reply; REMOTE_GET_MSG_COUNT_REPLY *get_msg_count_reply; REMOTE_GET_QUEUE_LENGTH_REPLY *get_queue_length_reply; REMOTE_GET_SPACE_AVAILABLE_REPLY *get_space_available_reply; REMOTE_CLEAR_REPLY *clear_reply; REMOTE_SET_DIAG_INFO_REPLY *set_diag_info_reply; REMOTE_GET_DIAG_INFO_REPLY *get_diag_info_reply; CMS_SERVER_LOCAL_PORT *last_local_port_used; int diag_enabled; char set_diag_info_buf[0x400]; int max_total_subdivisions; virtual void set_diag_info(REMOTE_SET_DIAG_INFO_REQUEST * _diag_info); virtual void reset_diag_info(int buffer_number); private: double time_of_last_key_request; LinkedList *known_users; char passwd_file[256]; CMS_USER_INFO *find_user(const char *); int guest_can_read; int guest_can_write;};extern int (*detailed_security_check) (const char *user_name, const char *buffer_name, long msg_type, int access_type);#endif /* !CMS_SERVER_HH */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -