⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcpmem.cc

📁 CNC 的开放码,EMC2 V2.2.8版
💻 CC
📖 第 1 页 / 共 5 页
字号:
	    serial_number++;	}	handle_old_replies();	check_id(timedout_request_writeid);	if (status == CMS_READ_OK) {	    serial_number++;	}	reenable_sigpipe();	subscription_count++;	return status;    }    if (timedout_request == NO_REMOTE_CMS_REQUEST) {	set_socket_fds(read_socket_fd);    }    if (fatal_error_occurred) {	if (status >= 0) {	    status = CMS_MISC_ERROR;	}	reenable_sigpipe();	return (status);    }    if (socket_fd <= 0) {	reconnect_needed = 1;	rcs_print_error("TCPMEM::read: Invalid socket descriptor. (%d)\n",	    socket_fd);	reenable_sigpipe();	return (status = CMS_MISC_ERROR);    }    last_timedout_request = timedout_request;    if (((int) handle_old_replies()) < 0) {	reenable_sigpipe();	return status;    }    if (polling && last_timedout_request == REMOTE_CMS_READ_REQUEST_TYPE) {	check_id(timedout_request_writeid);	reenable_sigpipe();	return status;    }    set_socket_fds(read_socket_fd);    *((u_long *) temp_buffer) = htonl((u_long) serial_number);    *((u_long *) temp_buffer + 1) =	htonl((u_long) REMOTE_CMS_READ_REQUEST_TYPE);    *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number);    *((u_long *) temp_buffer + 3) = htonl((u_long) CMS_PEEK_ACCESS);    *((u_long *) temp_buffer + 4) = htonl((u_long) in_buffer_id);    int send_header_size = 20;    if (total_subdivisions > 1) {	*((u_long *) temp_buffer + 5) = htonl((u_long) current_subdivision);	send_header_size = 24;    }    if (sendn(socket_fd, temp_buffer, send_header_size, 0, timeout) < 0) {	rcs_print_error("TCPMEM: Can't send PEEK request to server.\n");	reconnect_needed = 1;	reenable_sigpipe();	return (status = CMS_MISC_ERROR);    }    serial_number++;    if (recvn(socket_fd, temp_buffer, 20, 0, timeout, &recvd_bytes) < 0) {	if (recvn_timedout) {	    timedout_request = REMOTE_CMS_READ_REQUEST_TYPE;	    if (polling) {		reenable_sigpipe();		return (status = CMS_READ_OLD);	    } else {		consecutive_timeouts = 1;		reenable_sigpipe();		return (status = CMS_TIMED_OUT);	    }	} else {	    recvd_bytes = 0;	    fatal_error_occurred = 1;	    reconnect_needed = 1;	    reenable_sigpipe();	    return (status = CMS_MISC_ERROR);	}    }    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);	reconnect_needed = 1;	if (subscription_type == CMS_NO_SUBSCRIPTION) {	    reenable_sigpipe();	    return (status = CMS_MISC_ERROR);	}    }    status = (CMS_STATUS) ntohl(*((u_long *) temp_buffer + 1));    message_size = ntohl(*((u_long *) temp_buffer + 2));    id = ntohl(*((u_long *) temp_buffer + 3));    header.was_read = ntohl(*((u_long *) temp_buffer + 4));    if (message_size > max_encoded_message_size) {	reconnect_needed = 1;	rcs_print_error("Recieved message is too big. (%ld > %ld)\n",	    message_size, max_encoded_message_size);	reenable_sigpipe();	return (status = CMS_MISC_ERROR);    }    if (message_size > 0) {	if (recvn	    (socket_fd, encoded_data, message_size, 0, timeout,		&recvd_bytes) < 0) {	    if (recvn_timedout) {		if (!waiting_for_message) {		    waiting_message_id = id;		    waiting_message_size = message_size;		}		waiting_for_message = 1;		timedout_request = REMOTE_CMS_READ_REQUEST_TYPE;		if (polling) {		    reenable_sigpipe();		    return (status = CMS_READ_OLD);		} else {		    reenable_sigpipe();		    return (status = CMS_TIMED_OUT);		}	    } else {		reconnect_needed = 1;		recvd_bytes = 0;		fatal_error_occurred = 1;		reenable_sigpipe();		return (status = CMS_MISC_ERROR);	    }	}    }    recvd_bytes = 0;    check_id(id);    reenable_sigpipe();    return (status);}CMS_STATUS TCPMEM::write(void *user_data){    if (!write_permission_flag) {	rcs_print_error("CMS: %s was not configured to write to %s\n",	    ProcessName, BufferName);	return (status = CMS_PERMISSIONS_ERROR);    }    if (reconnect_needed && autoreconnect) {	reconnect();    }    if (!force_raw) {	user_data = encoded_data;    }    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::write: Invalid socket descriptor. (%d)\n",	    socket_fd);	reenable_sigpipe();	return (status = CMS_MISC_ERROR);    }    if (((int) handle_old_replies()) < 0) {	reenable_sigpipe();	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_WRITE_REQUEST_TYPE);    *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number);    *((u_long *) temp_buffer + 3) = htonl((u_long) CMS_WRITE_ACCESS);    *((u_long *) temp_buffer + 4) = htonl((u_long) header.in_buffer_size);    int send_header_size = 20;    if (total_subdivisions > 1) {	*((u_long *) temp_buffer + 5) = htonl((u_long) current_subdivision);	send_header_size = 24;    }    if (header.in_buffer_size < 0x2000 - 20 && header.in_buffer_size > 0) {	memcpy(temp_buffer + send_header_size, user_data,	    header.in_buffer_size);	if (sendn	    (socket_fd, temp_buffer, header.in_buffer_size + send_header_size,		0, timeout) < 0) {	    rcs_print_error		("TCPMEM: Failed to send message of size %d + header of size %d  to the server.\n",		header.in_buffer_size, send_header_size);	    reconnect_needed = 1;	    reenable_sigpipe();	    return (status = CMS_MISC_ERROR);	}    } else {	if (sendn(socket_fd, temp_buffer, send_header_size, 0, timeout) < 0) {	    rcs_print_error("TCPMEM: Failed to send header to server.\n");	    reconnect_needed = 1;	    reenable_sigpipe();	    return (status = CMS_MISC_ERROR);	}	if (header.in_buffer_size > 0) {	    if (sendn(socket_fd, user_data, header.in_buffer_size, 0, timeout)		< 0) {		reconnect_needed = 1;		reenable_sigpipe();		return (status = CMS_MISC_ERROR);	    }	}    }    serial_number++;    if ((min_compatible_version < 2.58 && min_compatible_version > 1e-6)	|| confirm_write) {	if (recvn(socket_fd, temp_buffer, 12, 0, timeout, &recvd_bytes) < 0) {	    if (recvn_timedout) {		timedout_request = REMOTE_CMS_WRITE_REQUEST_TYPE;		consecutive_timeouts = 1;		reenable_sigpipe();		return (status = CMS_TIMED_OUT);	    } else {		recvd_bytes = 0;		reconnect_needed = 1;		fatal_error_occurred = 1;		reenable_sigpipe();		return (status = CMS_MISC_ERROR);	    }	}	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);	    reconnect_needed = 1;	    if (subscription_type == CMS_NO_SUBSCRIPTION) {		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));    } else {	header.was_read = 0;	status = CMS_WRITE_OK;	returned_serial_number = serial_number;    }    reenable_sigpipe();    return (status);}CMS_STATUS TCPMEM::write_if_read(void *user_data){    if (!write_permission_flag) {	rcs_print_error("CMS: %s was not configured to write to %s\n",	    ProcessName, BufferName);	return (status = CMS_PERMISSIONS_ERROR);    }    if (reconnect_needed && autoreconnect) {	reconnect();    }    if (!force_raw) {	user_data = encoded_data;    }    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::write: Invalid socket descriptor. (%d)\n",	    socket_fd);	reenable_sigpipe();	return (status = CMS_MISC_ERROR);    }    if (((int) handle_old_replies()) < 0) {	reenable_sigpipe();	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_WRITE_REQUEST_TYPE);    *((u_long *) temp_buffer + 2) = htonl((u_long) buffer_number);    *((u_long *) temp_buffer + 3) = htonl((u_long) CMS_WRITE_IF_READ_ACCESS);    *((u_long *) temp_buffer + 4) = htonl((u_long) header.in_buffer_size);    int send_header_size = 20;    if (total_subdivisions > 1) {	*((u_long *) temp_buffer + 5) = htonl((u_long) current_subdivision);	send_header_size = 24;    }    if (header.in_buffer_size < 0x2000 - 20 && header.in_buffer_size > 0) {	memcpy(temp_buffer + 20, user_data, header.in_buffer_size);	if (sendn	    (socket_fd, temp_buffer, header.in_buffer_size + send_header_size,		0, timeout) < 0) {	    reconnect_needed = 1;	    reenable_sigpipe();	    return (status = CMS_MISC_ERROR);	}    } else {	if (sendn(socket_fd, temp_buffer, send_header_size, 0, timeout) < 0) {	    reconnect_needed = 1;	    reenable_sigpipe();	    return (status = CMS_MISC_ERROR);	}	if (header.in_buffer_size > 0) {	    if (sendn(socket_fd, user_data, header.in_buffer_size, 0, timeout)		< 0) {		reconnect_needed = 1;		reenable_sigpipe();		return (status = CMS_MISC_ERROR);	    }	}    }    serial_number++;    if ((min_compatible_version < 2.58 && min_compatible_version > 1e-6) ||	confirm_write) {	if (recvn(socket_fd, temp_buffer, 12, 0, timeout, &recvd_bytes) < 0) {	    if (recvn_timedout) {		timedout_request = REMOTE_CMS_WRITE_REQUEST_TYPE;		consecutive_timeouts = 1;		reenable_sigpipe();		return (status = CMS_TIMED_OUT);	    } else {		recvd_bytes = 0;		fatal_error_occurred = 1;		reconnect_needed = 1;		reenable_sigpipe();		return (status = CMS_MISC_ERROR);	    }	}	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);	    reconnect_needed = 1;	    if (subscription_type == CMS_NO_SUBSCRIPTION) {		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));    } else {	header.was_read = 0;	status = CMS_WRITE_OK;	returned_serial_number = 0;    }    reenable_sigpipe();    return (status);}int TCPMEM::check_if_read(){    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_CHECK_IF_READ_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);    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -