📄 tcpmem.cc
字号:
serial_number++; if (recvn(socket_fd, temp_buffer, 12, 0, timeout, &recvd_bytes) < 0) { if (recvn_timedout) { timedout_request = REMOTE_CMS_CHECK_IF_READ_REQUEST_TYPE; consecutive_timeouts = 1; status = CMS_TIMED_OUT; reenable_sigpipe(); return 0; } else { recvd_bytes = 0; fatal_error_occurred = 1; status = CMS_MISC_ERROR; reenable_sigpipe(); return 0; } } recvd_bytes = 0; returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_REQUESTS, "TCPMEM recieved_reply: fd = %d, serial_number=%d, buffer_number=%d\n", socket_fd, returned_serial_number, buffer_number); if (returned_serial_number != serial_number) { rcs_print_error ("TCPMEM: Returned serial number(%d) does not match expected serial number(%d).\n", returned_serial_number, serial_number); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } status = (CMS_STATUS) ntohl(*((u_long *) temp_buffer + 1)); header.was_read = ntohl(*((u_long *) temp_buffer + 2)); reenable_sigpipe(); return (header.was_read);}int TCPMEM::get_queue_length(){ if (reconnect_needed && autoreconnect) { reconnect(); } if (reconnect_needed) { return (status = CMS_MISC_ERROR); } if (fatal_error_occurred) { if (status >= 0) { status = CMS_MISC_ERROR; } return (status); } disable_sigpipe(); if (socket_fd <= 0) { rcs_print_error ("TCPMEM::check_if_read: Invalid socket descriptor. (%d)\n", socket_fd); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } if (((int) handle_old_replies()) < 0) { reenable_sigpipe(); return 0; } set_socket_fds(write_socket_fd); *((u_long *) temp_buffer) = htonl((u_long) serial_number); *((u_long *) temp_buffer + 1) = htonl((u_long) REMOTE_CMS_GET_QUEUE_LENGTH_REQUEST_TYPE); *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number); int send_header_size = 20; if (total_subdivisions > 1) { *((u_long *) temp_buffer + 3) = htonl((u_long) current_subdivision); } if (sendn(socket_fd, temp_buffer, send_header_size, 0, timeout) < 0) { status = CMS_MISC_ERROR; reconnect_needed = 1; reenable_sigpipe(); return (0); } serial_number++; if (recvn(socket_fd, temp_buffer, 12, 0, timeout, &recvd_bytes) < 0) { if (recvn_timedout) { timedout_request = REMOTE_CMS_GET_QUEUE_LENGTH_REQUEST_TYPE; consecutive_timeouts = 1; status = CMS_TIMED_OUT; reenable_sigpipe(); return 0; } else { recvd_bytes = 0; fatal_error_occurred = 1; status = CMS_MISC_ERROR; reenable_sigpipe(); return 0; } } recvd_bytes = 0; returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_REQUESTS, "TCPMEM recieved_reply: fd = %d, serial_number=%d, buffer_number=%d\n", socket_fd, returned_serial_number, buffer_number); if (returned_serial_number != serial_number) { rcs_print_error ("TCPMEM: Returned serial number(%d) does not match expected serial number(%d).\n", returned_serial_number, serial_number); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } status = (CMS_STATUS) ntohl(*((u_long *) temp_buffer + 1)); queuing_header.queue_length = ntohl(*((u_long *) temp_buffer + 2)); reenable_sigpipe(); return (queuing_header.queue_length);}int TCPMEM::get_msg_count(){ if (reconnect_needed && autoreconnect) { reconnect(); } if (reconnect_needed) { return (status = CMS_MISC_ERROR); } if (fatal_error_occurred) { if (status >= 0) { status = CMS_MISC_ERROR; } return (status); } disable_sigpipe(); if (socket_fd <= 0) { rcs_print_error ("TCPMEM::check_if_read: Invalid socket descriptor. (%d)\n", socket_fd); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } if (((int) handle_old_replies()) < 0) { reenable_sigpipe(); return 0; } set_socket_fds(write_socket_fd); *((u_long *) temp_buffer) = htonl((u_long) serial_number); *((u_long *) temp_buffer + 1) = htonl((u_long) REMOTE_CMS_GET_MSG_COUNT_REQUEST_TYPE); *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number); int send_header_size = 20; if (total_subdivisions > 1) { *((u_long *) temp_buffer + 3) = htonl((u_long) current_subdivision); } if (sendn(socket_fd, temp_buffer, send_header_size, 0, timeout) < 0) { status = CMS_MISC_ERROR; reconnect_needed = 1; reenable_sigpipe(); return (0); } serial_number++; if (recvn(socket_fd, temp_buffer, 12, 0, timeout, &recvd_bytes) < 0) { if (recvn_timedout) { timedout_request = REMOTE_CMS_GET_MSG_COUNT_REQUEST_TYPE; consecutive_timeouts = 1; status = CMS_TIMED_OUT; reenable_sigpipe(); return 0; } else { recvd_bytes = 0; fatal_error_occurred = 1; status = CMS_MISC_ERROR; reenable_sigpipe(); return 0; } } recvd_bytes = 0; returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_REQUESTS, "TCPMEM recieved_reply: fd = %d, serial_number=%d, buffer_number=%d\n", socket_fd, returned_serial_number, buffer_number); if (returned_serial_number != serial_number) { rcs_print_error ("TCPMEM: Returned serial number(%d) does not match expected serial number(%d).\n", returned_serial_number, serial_number); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } status = (CMS_STATUS) ntohl(*((u_long *) temp_buffer + 1)); header.write_id = ntohl(*((u_long *) temp_buffer + 2)); reenable_sigpipe(); return (header.write_id);}int TCPMEM::get_space_available(){ if (reconnect_needed && autoreconnect) { reconnect(); } if (reconnect_needed) { return (status = CMS_MISC_ERROR); } if (fatal_error_occurred) { if (status >= 0) { status = CMS_MISC_ERROR; } return (status); } disable_sigpipe(); if (socket_fd <= 0) { rcs_print_error ("TCPMEM::check_if_read: Invalid socket descriptor. (%d)\n", socket_fd); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } if (((int) handle_old_replies()) < 0) { reenable_sigpipe(); return 0; } set_socket_fds(write_socket_fd); *((u_long *) temp_buffer) = htonl((u_long) serial_number); *((u_long *) temp_buffer + 1) = htonl((u_long) REMOTE_CMS_GET_SPACE_AVAILABLE_REQUEST_TYPE); *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number); int send_header_size = 20; if (total_subdivisions > 1) { *((u_long *) temp_buffer + 3) = htonl((u_long) current_subdivision); } if (sendn(socket_fd, temp_buffer, send_header_size, 0, timeout) < 0) { status = CMS_MISC_ERROR; reconnect_needed = 1; reenable_sigpipe(); return (0); } serial_number++; if (recvn(socket_fd, temp_buffer, 12, 0, timeout, &recvd_bytes) < 0) { if (recvn_timedout) { timedout_request = REMOTE_CMS_GET_SPACE_AVAILABLE_REQUEST_TYPE; consecutive_timeouts = 1; status = CMS_TIMED_OUT; reenable_sigpipe(); return 0; } else { recvd_bytes = 0; fatal_error_occurred = 1; status = CMS_MISC_ERROR; reenable_sigpipe(); return 0; } } recvd_bytes = 0; returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_REQUESTS, "TCPMEM recieved_reply: fd = %d, serial_number=%d, buffer_number=%d\n", socket_fd, returned_serial_number, buffer_number); if (returned_serial_number != serial_number) { rcs_print_error ("TCPMEM: Returned serial number(%d) does not match expected serial number(%d).\n", returned_serial_number, serial_number); reenable_sigpipe(); return (status = CMS_MISC_ERROR); } status = (CMS_STATUS) ntohl(*((u_long *) temp_buffer + 1)); free_space = ntohl(*((u_long *) temp_buffer + 2)); reenable_sigpipe(); return (free_space);}CMS_STATUS TCPMEM::clear(){ if (reconnect_needed && autoreconnect) { reconnect(); } if (reconnect_needed) { return (status = CMS_MISC_ERROR); } if (fatal_error_occurred) { if (status >= 0) { status = CMS_MISC_ERROR; } return (status); } if (socket_fd <= 0) { rcs_print_error("TCPMEM::clear: Invalid socket descriptor. (%d)\n", socket_fd); reconnect_needed = 1; return (status = CMS_MISC_ERROR); } if (((int) handle_old_replies()) < 0) { return status; } set_socket_fds(write_socket_fd); *((u_long *) temp_buffer) = htonl((u_long) serial_number); *((u_long *) temp_buffer + 1) = htonl((u_long) REMOTE_CMS_CLEAR_REQUEST_TYPE); *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number); *((u_long *) temp_buffer + 3) = htonl((u_long) current_subdivision); if (sendn(socket_fd, temp_buffer, 20, 0, timeout) < 0) { reconnect_needed = 1; return (status = CMS_MISC_ERROR); } serial_number++; if (recvn(socket_fd, temp_buffer, 8, 0, timeout, &recvd_bytes) < 0) { if (recvn_timedout) { timedout_request = REMOTE_CMS_CLEAR_REQUEST_TYPE; consecutive_timeouts = 1; return (status = CMS_TIMED_OUT); } else { fatal_error_occurred = 1; reconnect_needed = 1; return (status = CMS_MISC_ERROR); } } returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_REQUESTS, "TCPMEM recieved_reply: fd = %d, serial_number=%d, buffer_number=%d\n", socket_fd, returned_serial_number, buffer_number); if (returned_serial_number != serial_number) { rcs_print_error ("TCPMEM: Returned serial number(%d) does not match expected serial number(%d).\n", returned_serial_number, serial_number); reconnect_needed = 1; return (status = CMS_MISC_ERROR); } status = (CMS_STATUS) ntohl(*((u_long *) temp_buffer + 1)); header.was_read = ntohl(*((u_long *) temp_buffer + 2)); return (status);}/*! \todo Another #if 0 */#if 0int TCPMEM::login(const char *name, const char *passwd){ if (fatal_error_occurred) { if (status >= 0) { status = CMS_MISC_ERROR; } return (status); } if (socket_fd <= 0) { rcs_print_error("TCPMEM::write: Invalid socket descriptor. (%d)\n", socket_fd); return (status = CMS_MISC_ERROR); } int handle_old_reply_ret = 0; while (timedout_request != NO_REMOTE_CMS_REQUEST && !handle_old_reply_ret) { handle_old_reply_ret = handle_old_replies(); } if (handle_old_reply_ret < 0) { return 0; } set_socket_fds(write_socket_fd); *((u_long *) temp_buffer) = htonl((u_long) serial_number); *((u_long *) temp_buffer + 1) = htonl((u_long) REMOTE_CMS_GET_KEYS_REQUEST_TYPE); *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number); if (sendn(socket_fd, temp_buffer, 20, 0, 30.0) < 0) { return 0; } memset(temp_buffer, 0, 20); strncpy(((char *) temp_buffer), name, 16); if (sendn(socket_fd, temp_buffer, 16, 0, 30.0) < 0) { return (status = CMS_MISC_ERROR); } serial_number++; if (recvn(socket_fd, temp_buffer, 20, 0, 30.0, &recvd_bytes) < 0) { return 0; } recvd_bytes = 0; returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_REQUESTS, "TCPMEM recieved_reply: fd = %d, serial_number=%d, buffer_number=%d\n", socket_fd, returned_serial_number, buffer_number); if (returned_serial_number != serial_number) { rcs_print_error ("TCPMEM: Returned serial number(%d) does not match expected serial number(%d).\n", returned_serial_number, serial_number); return (0); } char *crypt1_ret = crypt(passwd, ((char *) temp_buffer) + 4); if (NULL == crypt1_ret) { rcs_print_error("TCPMEM::login() crypt function failed.\n"); return 0; } char passwd_pass1[16]; strncpy(passwd_pass1, crypt1_ret, 16); char *crypt2_ret = crypt(passwd_pass1, ((char *) temp_buffer) + 12); if (NULL == crypt2_ret) { rcs_print_error("TCPMEM::login() crypt function failed.\n"); return (0); } char passwd_pass2[16]; strncpy(passwd_pass2, crypt2_ret, 16); *((u_long *) temp_buffer) = htonl((u_long) serial_number); *((u_long *) temp_buffer + 1) = htonl((u_long) REMOTE_CMS_LOGIN_REQUEST_TYPE); *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number); if (sendn(socket_fd, temp_buffer, 20, 0, 30.0) < 0) { return 0; } memset(temp_buffer, 0, 20); strncpy(((char *) temp_buffer), name, 16); if (sendn(socket_fd, temp_buffer, 16, 0, 30.0) < 0) { return (status = CMS_MISC_ERROR); } if (sendn(socket_fd, passwd_pass2, 16, 0, 30.0) < 0) { return (status = CMS_MISC_ERROR); } serial_number++; if (recvn(socket_fd, temp_buffer, 8, 0, 30.0, &recvd_bytes) < 0) { return 0; } recvd_bytes = 0; returned_serial_number = (CMS_STATUS) ntohl(*((u_long *) temp_buffer)); rcs_print_debug(PRINT_ALL_SOCKET_R
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -