File: cl_communication.h

package info (click to toggle)
gridengine 8.1.9%2Bdfsg-10
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 56,880 kB
  • sloc: ansic: 432,689; java: 87,068; cpp: 31,958; sh: 29,429; jsp: 7,757; perl: 6,336; xml: 5,828; makefile: 4,701; csh: 3,928; ruby: 2,221; tcl: 1,676; lisp: 669; yacc: 519; python: 503; lex: 361; javascript: 200
file content (194 lines) | stat: -rw-r--r-- 9,780 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#ifndef __CL_COMMUNICATION_H
#define __CL_COMMUNICATION_H

/*___INFO__MARK_BEGIN__*/
/*************************************************************************
 *
 *  The Contents of this file are made available subject to the terms of
 *  the Sun Industry Standards Source License Version 1.2
 *
 *  Sun Microsystems Inc., March, 2001
 *
 *
 *  Sun Industry Standards Source License Version 1.2
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.2 (the "License"); You may not use this file
 *  except in compliance with the License. You may obtain a copy of the
 *  License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2001 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 ************************************************************************/
/*___INFO__MARK_END__*/

#include "comm/lists/cl_list_types.h"
#include "comm/cl_data_types.h"
#include "comm/cl_xml_parsing.h"
#include "comm/cl_connection_list.h"

#define CL_DEFINE_READ_TIMEOUT                       30
#define CL_DEFINE_WRITE_TIMEOUT                      30
#define CL_DEFINE_ACK_TIMEOUT                        60
#define CL_DEFINE_MESSAGE_TIMEOUT                    3600 /* default timeout for trashing received but not application fetched messages */
#define CL_DEFINE_GET_CLIENT_CONNECTION_DATA_TIMEOUT 60   /* default timeout for accepting a connection */
#define CL_DEFINE_DELETE_MESSAGES_TIMEOUT_AFTER_CCRM 60   /* default timeout for unread message deletion after connection shutdown */
#define CL_DEFINE_SYNCHRON_RECEIVE_TIMEOUT           60   /* default timeout for synchron send messages */
#define CL_DEFINE_CLIENT_CONNECTION_LIFETIME         600  /* Cut off connection when client is not active for this time */
#define CL_DEFINE_MESSAGE_DUP_LOG_TIMEOUT            30   /* timeout for marking duplicate application error messages */


#define CL_DEFINE_DATA_BUFFER_SIZE                   1024 * 4           /* 4 KB buffer for reading/writing messages */
#if 0
/* TODO: enable this when application code is not using u_short with client ids !!! */
#define CL_DEFINE_MAX_MESSAGE_ID                     4294967295UL       /* max unsigned long value for a 32 bit system */
#else
#define CL_DEFINE_MAX_MESSAGE_ID                     65535              /* max unsigned short value */
#endif

#ifdef MAXHOSTNAMELEN
#define CL_MAXHOSTNAMELEN_LENGTH MAXHOSTNAMELEN
#else
#define CL_MAXHOSTNAMELEN_LENGTH 255
#endif


int  cl_com_compare_endpoints(cl_com_endpoint_t* endpoint1, cl_com_endpoint_t* endpoint2);
void cl_com_dump_endpoint(cl_com_endpoint_t* endpoint, const char* text);

int cl_com_endpoint_list_refresh(cl_raw_list_t* endpoint_list);

/* debug client functions */
int cl_com_add_debug_message(cl_com_connection_t* connection, const char* message, cl_com_message_t* ms);

int cl_com_gethostname(char **unique_hostname,struct in_addr *copy_addr,struct hostent **he_copy, int* system_error_value);
int cl_com_host_list_refresh(cl_raw_list_t* host_list);
int cl_com_cached_gethostbyname(const char *hostname, char **unique_hostname, struct in_addr *copy_addr,struct hostent **he_copy, int* system_error_value);
int cl_com_cached_gethostbyaddr( struct in_addr *addr, char **unique_hostname,struct hostent **he_copy,int* system_error_val );
char* cl_com_get_h_error_string(int h_error);
int cl_com_compare_hosts(const char* host1, const char* host2);
int cl_com_set_resolve_method(cl_host_resolve_method_t method, char* local_domain_name);

int cl_com_free_handle_statistic(cl_com_handle_statistic_t** statistic);
int cl_com_free_hostent(cl_com_hostent_t **hostent_p);                    /* CR check */
int cl_com_free_hostspec(cl_com_host_spec_t **hostspec);
int cl_com_print_host_info(cl_com_hostent_t *hostent_p );                 /* CR check */


int cl_com_create_debug_client_setup(cl_debug_client_setup_t** new_setup,
                                     cl_debug_client_t dc_mode,
                                     bool         dc_dump_flag,
                                     int               dc_app_log_level);

int cl_com_free_debug_client_setup(cl_debug_client_setup_t** new_setup);

int cl_com_create_ssl_setup(cl_ssl_setup_t** new_setup,
                            cl_ssl_cert_mode_t  ssl_cert_mode,
                            cl_ssl_method_t  ssl_method,
                            const char*            ssl_CA_cert_pem_file,
                            const char*            ssl_CA_key_pem_file,
                            const char*            ssl_cert_pem_file,
                            const char*            ssl_key_pem_file,
                            const char*            ssl_rand_file,
                            const char*            ssl_reconnect_file,
                            const char*            ssl_crl_file,
                            unsigned long    ssl_refresh_time,
                            const char*            ssl_password,
                            cl_ssl_verify_func_t  ssl_verify_func);

int cl_com_dup_ssl_setup(cl_ssl_setup_t** new_setup, cl_ssl_setup_t* source);
int cl_com_free_ssl_setup(cl_ssl_setup_t** del_setup);

const char* cl_com_get_framework_type(cl_com_connection_t* connection);
const char* cl_com_get_connection_type(cl_com_connection_t* connection);
const char* cl_com_get_service_handler_flag(cl_com_connection_t* connection);
const char* cl_com_get_data_write_flag(cl_com_connection_t* connection);
const char* cl_com_get_data_read_flag(cl_com_connection_t* connection);
const char* cl_com_get_connection_state(cl_com_connection_t* connection);
const char* cl_com_get_connection_sub_state(cl_com_connection_t* connection);
const char* cl_com_get_data_flow_type(cl_com_connection_t* connection);

/* This can be called by an signal handler to trigger abort of communications */
void cl_com_ignore_timeouts(bool flag); 
bool cl_com_get_ignore_timeouts_flag(void);


/* message functions */
int cl_com_setup_message(cl_com_message_t** message, cl_com_connection_t* connection, cl_byte_t* data,unsigned long size, cl_xml_ack_type_t ack_type, unsigned long response_id, unsigned long tag);   /* *message must be zero */
int cl_com_create_message(cl_com_message_t** message);
int cl_com_free_message(cl_com_message_t** message);

int cl_com_create_connection(cl_com_connection_t** connection);
/*
int cl_com_free_connection(cl_com_connection_t** connection);
   use cl_com_close_connection();
*/

/* after this line are the main functions used by lib user */
/* ======================================================= */


int cl_com_connection_complete_accept(cl_com_connection_t* connection,
                                      long timeout);

int cl_com_connection_complete_shutdown(cl_com_connection_t* connection);


int cl_com_open_connection(cl_com_connection_t* connection, 
                                            int timeout, 
                             cl_com_endpoint_t* remote_endpoint, 
                             cl_com_endpoint_t* local_endpoint);    /* CR check */

int cl_com_close_connection(cl_com_connection_t** connection);  /* CR check */

int cl_com_read_GMSH(cl_com_connection_t* connection, unsigned long *only_one_read);
int cl_com_read(cl_com_connection_t* connection, cl_byte_t* message, unsigned long size, unsigned long* only_one_read);
int cl_com_write(cl_com_connection_t* connection, cl_byte_t* message, unsigned long size, unsigned long *only_one_write);



/* This functions need service connection pointer = cl_com_connection_request_handler_setup */
/* ======================================================================================== */

int cl_com_connection_get_connect_port(cl_com_connection_t* connection, int* port);
int cl_com_connection_set_connect_port(cl_com_connection_t* connection, int port);

int cl_com_connection_get_service_port(cl_com_connection_t* connection, int* port);
int cl_com_connection_get_fd(cl_com_connection_t* connection, int* fd);
int cl_com_connection_get_client_socket_in_port(cl_com_connection_t* connection, int* port);


/* setup service */
int cl_com_connection_request_handler_setup(cl_com_connection_t* connection,
                                            cl_com_endpoint_t* local_endpoint );

/* check for new service connection clients */
int cl_com_connection_request_handler(cl_com_connection_t* connection,
                                      cl_com_connection_t** new_connection);
/* cleanup service */
int cl_com_connection_request_handler_cleanup(cl_com_connection_t* connection);
int cl_com_open_connection_request_handler(cl_com_poll_t* poll_handle,
                                           cl_com_handle_t* handle,
                                           int timeout_val_sec,
                                           int timeout_val_usec,
                                           cl_select_method_t select_mode );

int cl_com_free_poll_array(cl_com_poll_t* poll_handle);
int cl_com_malloc_poll_array(cl_com_poll_t* poll_handle, unsigned long nr_of_malloced_connections);

int cl_com_connection_complete_request(cl_raw_list_t* connection_list, cl_connection_list_elem_t* elem, long timeout, cl_select_method_t select_mode );


#endif /* __CL_COMMUNICATION_H */