Lines Matching refs:connection
99 static int ndmp_recv_msg(ndmp_connection_t *connection);
100 static int ndmp_process_messages(ndmp_connection_t *connection,
102 static ndmp_msg_handler_t *ndmp_get_handler(ndmp_connection_t *connection,
137 ndmp_connection_t *connection; in ndmp_create_connection() local
139 connection = ndmp_malloc(sizeof (ndmp_connection_t)); in ndmp_create_connection()
140 if (connection == NULL) in ndmp_create_connection()
143 connection->conn_sock = -1; in ndmp_create_connection()
144 connection->conn_my_sequence = 0; in ndmp_create_connection()
145 connection->conn_authorized = FALSE; in ndmp_create_connection()
146 connection->conn_eof = FALSE; in ndmp_create_connection()
147 connection->conn_msginfo.mi_body = 0; in ndmp_create_connection()
148 connection->conn_version = ndmp_ver; in ndmp_create_connection()
149 connection->conn_client_data = 0; in ndmp_create_connection()
150 (void) mutex_init(&connection->conn_lock, 0, NULL); in ndmp_create_connection()
151 connection->conn_xdrs.x_ops = 0; in ndmp_create_connection()
153 xdrrec_create(&connection->conn_xdrs, 0, 0, (caddr_t)connection, in ndmp_create_connection()
156 if (connection->conn_xdrs.x_ops == 0) { in ndmp_create_connection()
158 (void) mutex_destroy(&connection->conn_lock); in ndmp_create_connection()
159 (void) close(connection->conn_sock); in ndmp_create_connection()
160 free(connection); in ndmp_create_connection()
163 return ((ndmp_connection_t *)connection); in ndmp_create_connection()
180 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_destroy_connection() local
182 if (connection->conn_sock >= 0) { in ndmp_destroy_connection()
183 (void) mutex_destroy(&connection->conn_lock); in ndmp_destroy_connection()
184 (void) close(connection->conn_sock); in ndmp_destroy_connection()
185 connection->conn_sock = -1; in ndmp_destroy_connection()
187 xdr_destroy(&connection->conn_xdrs); in ndmp_destroy_connection()
188 free(connection); in ndmp_destroy_connection()
206 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_close() local
208 ndmpd_audit_disconnect(connection); in ndmp_close()
209 if (connection->conn_sock >= 0) { in ndmp_close()
210 (void) mutex_destroy(&connection->conn_lock); in ndmp_close()
211 (void) close(connection->conn_sock); in ndmp_close()
212 connection->conn_sock = -1; in ndmp_close()
214 connection->conn_eof = TRUE; in ndmp_close()
332 ndmp_connection_t *connection; in ndmpd_worker() local
341 if ((connection = ndmp_create_connection()) == NULL) { in ndmpd_worker()
348 if (adt_start_session(&connection->conn_ah, NULL, 0) != 0) { in ndmpd_worker()
353 ((ndmp_connection_t *)connection)->conn_sock = sock; in ndmpd_worker()
354 (*argp->nw_con_handler_func)(connection); in ndmpd_worker()
355 (void) adt_end_session(connection->conn_ah); in ndmpd_worker()
356 ndmp_destroy_connection(connection); in ndmpd_worker()
380 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_process_requests() local
382 (void) mutex_lock(&connection->conn_lock); in ndmp_process_requests()
384 if (ndmp_process_messages(connection, FALSE) < 0) in ndmp_process_requests()
387 (void) mutex_unlock(&connection->conn_lock); in ndmp_process_requests()
417 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_send_request() local
424 if (!(handler = ndmp_get_handler(connection, message))) { in ndmp_send_request()
431 header.sequence = ++(connection->conn_my_sequence); in ndmp_send_request()
438 connection->conn_xdrs.x_op = XDR_ENCODE; in ndmp_send_request()
439 if (!xdr_ndmp_header(&connection->conn_xdrs, &header)) { in ndmp_send_request()
442 (void) xdrrec_endofrecord(&connection->conn_xdrs, 1); in ndmp_send_request()
446 if (!(*handler->mh_xdr_request)(&connection->conn_xdrs, in ndmp_send_request()
451 (void) xdrrec_endofrecord(&connection->conn_xdrs, 1); in ndmp_send_request()
455 (void) xdrrec_endofrecord(&connection->conn_xdrs, 1); in ndmp_send_request()
467 r = ndmp_process_messages(connection, TRUE); in ndmp_send_request()
480 connection->conn_msginfo.mi_hdr.message) { in ndmp_send_request()
483 connection->conn_msginfo.mi_hdr.message); in ndmp_send_request()
488 *reply = connection->conn_msginfo.mi_body; in ndmp_send_request()
492 return (connection->conn_msginfo.mi_hdr.error); in ndmp_send_request()
527 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_send_request_lock() local
529 (void) mutex_lock(&connection->conn_lock); in ndmp_send_request_lock()
533 (void) mutex_unlock(&connection->conn_lock); in ndmp_send_request_lock()
559 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_send_response() local
565 header.sequence = ++(connection->conn_my_sequence); in ndmp_send_response()
568 header.message = connection->conn_msginfo.mi_hdr.message; in ndmp_send_response()
569 header.reply_sequence = connection->conn_msginfo.mi_hdr.sequence; in ndmp_send_response()
572 connection->conn_xdrs.x_op = XDR_ENCODE; in ndmp_send_response()
573 if (!xdr_ndmp_header(&connection->conn_xdrs, &header)) { in ndmp_send_response()
577 (void) xdrrec_endofrecord(&connection->conn_xdrs, 1); in ndmp_send_response()
581 connection->conn_msginfo.mi_handler->mh_xdr_reply && in ndmp_send_response()
583 if (!(*connection->conn_msginfo.mi_handler->mh_xdr_reply)( in ndmp_send_response()
584 &connection->conn_xdrs, reply)) { in ndmp_send_response()
588 (void) xdrrec_endofrecord(&connection->conn_xdrs, 1); in ndmp_send_response()
592 (void) xdrrec_endofrecord(&connection->conn_xdrs, 1); in ndmp_send_response()
611 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_free_message() local
613 if (connection->conn_msginfo.mi_handler == NULL || in ndmp_free_message()
614 connection->conn_msginfo.mi_body == NULL) in ndmp_free_message()
617 connection->conn_xdrs.x_op = XDR_FREE; in ndmp_free_message()
618 if (connection->conn_msginfo.mi_hdr.message_type == in ndmp_free_message()
620 if (connection->conn_msginfo.mi_handler->mh_xdr_request) in ndmp_free_message()
621 (*connection->conn_msginfo.mi_handler->mh_xdr_request)( in ndmp_free_message()
622 &connection->conn_xdrs, in ndmp_free_message()
623 connection->conn_msginfo.mi_body); in ndmp_free_message()
625 if (connection->conn_msginfo.mi_handler->mh_xdr_reply) in ndmp_free_message()
626 (*connection->conn_msginfo.mi_handler->mh_xdr_reply)( in ndmp_free_message()
627 &connection->conn_xdrs, in ndmp_free_message()
628 connection->conn_msginfo.mi_body); in ndmp_free_message()
631 (void) free(connection->conn_msginfo.mi_body); in ndmp_free_message()
632 connection->conn_msginfo.mi_body = 0; in ndmp_free_message()
803 connection_handler(ndmp_connection_t *connection) in connection_handler() argument
811 session.ns_connection = connection; in connection_handler()
853 ndmp_set_client_data(connection, (void *)&session); in connection_handler()
859 if (ndmp_send_request_lock(connection, NDMP_NOTIFY_CONNECTION_STATUS, in connection_handler()
864 connection_fd = ndmp_get_fd(connection); in connection_handler()
880 if (ndmp_connect_list_add(connection, &conn_id) != 0) { in connection_handler()
916 (void) ndmp_connect_list_del(connection); in connection_handler()
965 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_readit() local
967 len = read(connection->conn_sock, buf, len); in ndmp_readit()
970 connection->conn_eof = TRUE; in ndmp_readit()
993 ndmp_connection_t *connection = (ndmp_connection_t *)connection_handle; in ndmp_writeit() local
998 if ((n = write(connection->conn_sock, buf, cnt)) < 0) { in ndmp_writeit()
999 connection->conn_eof = TRUE; in ndmp_writeit()
1023 ndmp_recv_msg(ndmp_connection_t *connection) in ndmp_recv_msg() argument
1028 connection->conn_xdrs.x_op = XDR_DECODE; in ndmp_recv_msg()
1029 (void) xdrrec_skiprecord(&connection->conn_xdrs); in ndmp_recv_msg()
1030 if (!xdr_ndmp_header(&connection->conn_xdrs, in ndmp_recv_msg()
1031 &connection->conn_msginfo.mi_hdr)) in ndmp_recv_msg()
1035 if ((connection->conn_msginfo.mi_handler = ndmp_get_handler(connection, in ndmp_recv_msg()
1036 connection->conn_msginfo.mi_hdr.message)) == 0) { in ndmp_recv_msg()
1038 connection->conn_msginfo.mi_hdr.message); in ndmp_recv_msg()
1041 connection->conn_msginfo.mi_body = 0; in ndmp_recv_msg()
1043 if (connection->conn_msginfo.mi_hdr.error != NDMP_NO_ERR) in ndmp_recv_msg()
1047 if (connection->conn_msginfo.mi_hdr.message_type == in ndmp_recv_msg()
1050 connection->conn_msginfo.mi_hdr.message) && in ndmp_recv_msg()
1051 !connection->conn_authorized) { in ndmp_recv_msg()
1054 connection->conn_msginfo.mi_hdr.message); in ndmp_recv_msg()
1057 if (connection->conn_msginfo.mi_handler->mh_sizeof_request > in ndmp_recv_msg()
1060 connection->conn_msginfo.mi_handler->mh_xdr_request; in ndmp_recv_msg()
1065 connection->conn_msginfo.mi_hdr.message); in ndmp_recv_msg()
1068 connection->conn_msginfo.mi_body = ndmp_malloc( in ndmp_recv_msg()
1069 connection->conn_msginfo.mi_handler-> in ndmp_recv_msg()
1071 if (connection->conn_msginfo.mi_body == NULL) in ndmp_recv_msg()
1074 (void) memset(connection->conn_msginfo.mi_body, 0, in ndmp_recv_msg()
1075 connection->conn_msginfo.mi_handler-> in ndmp_recv_msg()
1079 if (connection->conn_msginfo.mi_handler->mh_sizeof_reply > 0) { in ndmp_recv_msg()
1081 connection->conn_msginfo.mi_handler->mh_xdr_reply; in ndmp_recv_msg()
1086 connection->conn_msginfo.mi_hdr.message); in ndmp_recv_msg()
1089 connection->conn_msginfo.mi_body = ndmp_malloc( in ndmp_recv_msg()
1090 connection->conn_msginfo.mi_handler-> in ndmp_recv_msg()
1092 if (connection->conn_msginfo.mi_body == NULL) in ndmp_recv_msg()
1095 (void) memset(connection->conn_msginfo.mi_body, 0, in ndmp_recv_msg()
1096 connection->conn_msginfo.mi_handler-> in ndmp_recv_msg()
1103 if (!(*xdr_func)(&connection->conn_xdrs, in ndmp_recv_msg()
1104 connection->conn_msginfo.mi_body)) { in ndmp_recv_msg()
1107 connection->conn_msginfo.mi_hdr.message); in ndmp_recv_msg()
1108 free(connection->conn_msginfo.mi_body); in ndmp_recv_msg()
1109 connection->conn_msginfo.mi_body = 0; in ndmp_recv_msg()
1164 ndmp_process_messages(ndmp_connection_t *connection, boolean_t reply_expected) in ndmp_process_messages() argument
1177 (void) memset((void *)&connection->conn_msginfo, 0, in ndmp_process_messages()
1180 if ((err = ndmp_recv_msg(connection)) != NDMP_NO_ERR) { in ndmp_process_messages()
1181 if (connection->conn_eof) { in ndmp_process_messages()
1205 if (connection->conn_msginfo.mi_hdr.message_type in ndmp_process_messages()
1208 connection->conn_msginfo.mi_hdr.message); in ndmp_process_messages()
1214 connection->conn_msginfo.mi_hdr. in ndmp_process_messages()
1218 connection); in ndmp_process_messages()
1227 connection->conn_msginfo.mi_hdr.message); in ndmp_process_messages()
1230 connection, err, NULL); in ndmp_process_messages()
1231 ndmp_free_message((ndmp_connection_t *)connection); in ndmp_process_messages()
1234 if (connection->conn_msginfo.mi_hdr.message_type in ndmp_process_messages()
1237 connection->conn_msginfo.mi_hdr.message); in ndmp_process_messages()
1242 connection->conn_msginfo.mi_hdr.message); in ndmp_process_messages()
1244 connection); in ndmp_process_messages()
1248 reply_msginfo = connection->conn_msginfo; in ndmp_process_messages()
1252 connection->conn_msginfo.mi_hdr.message); in ndmp_process_messages()
1259 if (connection->conn_msginfo.mi_handler->mh_func == NULL) { in ndmp_process_messages()
1261 connection->conn_msginfo.mi_hdr.message); in ndmp_process_messages()
1264 connection, NDMP_NOT_SUPPORTED_ERR, NULL); in ndmp_process_messages()
1265 ndmp_free_message((ndmp_connection_t *)connection); in ndmp_process_messages()
1272 (*connection->conn_msginfo.mi_handler->mh_func) (connection, in ndmp_process_messages()
1273 connection->conn_msginfo.mi_body); in ndmp_process_messages()
1275 ndmp_free_message((ndmp_connection_t *)connection); in ndmp_process_messages()
1277 } while (xdrrec_eof(&connection->conn_xdrs) == FALSE && in ndmp_process_messages()
1278 connection->conn_eof == FALSE); in ndmp_process_messages()
1282 if (connection->conn_eof == TRUE) { in ndmp_process_messages()
1293 connection->conn_msginfo = reply_msginfo; in ndmp_process_messages()
1342 ndmp_get_handler(ndmp_connection_t *connection, ndmp_message message) in ndmp_get_handler() argument
1347 int ver = connection->conn_version; in ndmp_get_handler()