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

📄 pmrpc_svc.c

📁 远程过程调用服务器端程序
💻 C
字号:
#include <stdio.h>

#include "include/rpc/rpc.h"
#include "pmrpc.h"


static void pmv2prog_2();

int main()
{
	SVCXPRT *transp;
	transp = svcudp_create(RPC_ANYSOCK);
	if (transp == NULL) {
		(void)fprintf(stderr, "cannot create udp service.\n");
		exit(1);
	}
	if (!svc_register(transp, PMV2PROG, PMV2VERS, pmv2prog_2, FALSE)) {
		(void)fprintf(stderr, "unable to register (PMV2PROG, PMV2VERS, udp).\n");
		exit(1);
	}

	svc_run();
	(void)fprintf(stderr, "svc_run returned\n");
	exit(1);
}

static void
pmv2prog_2(rqstp, transp)
	struct svc_req *rqstp;
	SVCXPRT *transp;
{
	union {
		tcpdrop_args drop_tcpack_2_arg;
		int set_crc_2_arg;
		int set_scramble_2_arg;
		u_int set_maxlen_2_arg;
		u_int set_minlen_2_arg;
		config_struct load_config_2_arg;
		rule_struct load_rule_2_arg;
		rule_array_struct load_batch_rule_2_arg;
		u_int clear_rule_2_arg;
		u_int show_rule_2_arg;
		rule_struct config_rule_2_arg;
		rule_array_struct config_batch_rule_2_arg;
		defrule_args set_def_rule_2_arg;
		int set_mactable_2_arg;
	} argument;
	char *result;
	bool_t (*xdr_argument)(), (*xdr_result)();
	char *(*local)();

	switch (rqstp->rq_proc) {
	case NULLPROC:
		(void)svc_sendreply(transp, xdr_void, (char *)NULL);
		return;

	case DROP_TCPACK:
		xdr_argument = xdr_tcpdrop_args;
		xdr_result = xdr_int;
		local = (char *(*)()) drop_tcpack_2;
		break;

	case SET_CRC:
		xdr_argument = xdr_int;
		xdr_result = xdr_int;
		local = (char *(*)()) set_crc_2;
		break;

	case SET_SCRAMBLE:
		xdr_argument = xdr_int;
		xdr_result = xdr_int;
		local = (char *(*)()) set_scramble_2;
		break;

	case SET_MAXLEN:
		xdr_argument = xdr_u_int;
		xdr_result = xdr_int;
		local = (char *(*)()) set_maxlen_2;
		break;

	case SET_MINLEN:
		xdr_argument = xdr_u_int;
		xdr_result = xdr_int;
		local = (char *(*)()) set_minlen_2;
		break;

	case SAVE_CONFIG:
		xdr_argument = xdr_void;
		xdr_result = xdr_config_struct;
		local = (char *(*)()) save_config_2;
		break;

	case LOAD_CONFIG:
		xdr_argument = xdr_config_struct;
		xdr_result = xdr_int;
		local = (char *(*)()) load_config_2;
		break;

	case SAVE_RULE:
		xdr_argument = xdr_void;
		xdr_result = xdr_rule_struct;
		local = (char *(*)()) save_rule_2;
		break;

	/*case SAVE_BATCH_RULE:
		xdr_argument = xdr_void;
		xdr_result = xdr_rule_array_struct;
		local = (char *(*)()) save_batch_rule_2;
		break;*/

	case LOAD_RULE:
		xdr_argument = xdr_rule_struct;
		xdr_result = xdr_int;
		local = (char *(*)()) load_rule_2;
		break;

	case LOAD_BATCH_RULE:
		xdr_argument = xdr_rule_array_struct;
		xdr_result = xdr_int;
		local = (char *(*)()) load_batch_rule_2;
		break;

	case CLEAR_RULE:
		xdr_argument = xdr_u_int;
		xdr_result = xdr_int;
		local = (char *(*)()) clear_rule_2;
		break;

	case SHOW_RULE:
		xdr_argument = xdr_u_int;
		xdr_result = xdr_rule_struct;
		local = (char *(*)()) show_rule_2;
		break;

	/*case SHOW_BATCH_RULE:
		xdr_argument = xdr_void;
		xdr_result = xdr_rule_array_struct;
		local = (char *(*)()) show_batch_rule_2;
		break;*/

	case CONFIG_RULE:
		xdr_argument = xdr_rule_struct;
		xdr_result = xdr_int;
		local = (char *(*)()) config_rule_2;
		break;

	case CONFIG_BATCH_RULE:
		xdr_argument = xdr_rule_array_struct;
		xdr_result = xdr_int;
		local = (char *(*)()) config_batch_rule_2;
		break;

	case SET_DEF_RULE:
		xdr_argument = xdr_defrule_args;
		xdr_result = xdr_int;
		local = (char *(*)()) set_def_rule_2;
		break;

	case SHOW_CONFIG:
		xdr_argument = xdr_void;
		xdr_result = xdr_config_struct;
		local = (char *(*)()) show_config_2;
		break;

	case SET_MACTABLE:
		xdr_argument = xdr_int;
		xdr_result = xdr_int;
		local = (char *(*)()) set_mactable_2;
		break;

	default:
		svcerr_noproc(transp);
		return;
	}
	bzero((char *)&argument, sizeof(argument));
	if (!svc_getargs(transp, xdr_argument, &argument)) {
		svcerr_decode(transp);
		return;
	}
	result = (*local)(&argument, rqstp);
	if (result != NULL && !svc_sendreply(transp, xdr_result, result)) {
		svcerr_systemerr(transp);
	}
	if (!svc_freeargs(transp, xdr_argument, &argument)) {
		(void)fprintf(stderr, "unable to free arguments\n");
		exit(1);
	}
}

⌨️ 快捷键说明

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