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

📄 server.c

📁 samba最新软件
💻 C
字号:
/*    RPC echo server.   Copyright (C) Tim Potter 2003      This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 3 of the License, or   (at your option) any later version.      This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.      You should have received a copy of the GNU General Public License   along with this program.  If not, see <http://www.gnu.org/licenses/>.*/#define _WIN32_WINNT 0x0500#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include "rpcecho.h"#define RPC_MIN_CALLS 1#define RPC_MAX_CALLS 20#define RPC_ENDPOINT "\\pipe\\rpcecho"void AddOne(int in_data, __RPC_FAR int *out_data){	printf("AddOne: got in_data = %d\n", in_data);	*out_data = in_data + 1;}void EchoData(int len, unsigned char __RPC_FAR in_data[],	unsigned char __RPC_FAR out_data[]){	printf("EchoData: got len = %d\n", len);		memcpy(out_data, in_data, len);}void SinkData(int len, unsigned char __RPC_FAR in_data[  ]){	printf("SinkData: got len = %d\n", len);}void SourceData(int len, unsigned char __RPC_FAR out_data[  ]){	int i;	printf("SourceData: got len = %d\n", len);	for (i = 0; i < len; i++)		out_data[i] = i & 0xff;}void TestCall(wchar_t **s1, wchar_t **s2){	if (*s1) {		printf("s1='%S'\n", *s1);	} else {		printf("s1=NULL\n");	}	*s2 = L"test string";}long TestCall2(short level, echo_Info **info){	static echo_Info i;	printf("TestCall2 level %d\n", level);	*info = &i;	switch (level) {	case 1:		i.info1.v = 10;		break;	case 2:		i.info2.v = 20;		break;	case 3:		i.info3.v = 30;		break;	case 4:		i.info4.v = 40;		break;	case 5:		i.info5.v1 = 50;		i.info5.v2 = 51;		break;	case 6:		i.info6.v1 = 60;		i.info6.info1.v = 61;		break;	case 7:		i.info7.v1 = 70;		i.info7.info4.v = 71;		break;	default:		return -1;	}	return 0;}#if 0void TestSleep(PRPC_ASYNC_STATE pAsync, long seconds){	long ret;	printf("async Sleeping for %d seconds\n", seconds);	Sleep(1000 * seconds);	ret = seconds;	RpcAsyncCompleteCall(pAsync, &ret);}#elselong TestSleep(long seconds){	printf("non-async Sleeping for %d seconds\n", seconds);	Sleep(1000 * seconds);	return seconds;}#endifvoid echo_TestEnum(echo_Enum1 *foo1,		   echo_Enum2 *foo2,		   echo_Enum3 *foo3){	foo2->e1 = ECHO_ENUM2;}void echo_TestSurrounding(echo_Surrounding *data){	printf("Incoming array of size %d\n", data->x);	data->x *= 2;}short echo_TestDoublePointer(short ***data){	if (!*data) {		printf("WARNING: *data == NULL\n");		return 0;	}	if (!**data) {		printf("WARNING: **data == NULL\n");		return 0;	}	printf("Incoming double pointer: %d\n", ***data);	return ***data;}void main(int argc, char **argv){	RPC_STATUS status;	RPC_BINDING_VECTOR *pBindingVector;	if (argc != 1) {		printf("Usage: rpcechosrv\n");		exit(0);	}	status = RpcServerUseProtseqEp("ncacn_np", RPC_MAX_CALLS, "\\pipe\\rpcecho", NULL);	if (status) {		printf("Failed to register ncacn_np endpoint\n");		exit(status);	}	status = RpcServerUseProtseqEp("ncacn_ip_tcp", RPC_MAX_CALLS, "1234", NULL);	if (status) {		printf("Failed to register ncacn_ip_tcp endpoint\n");		exit(status);	}	status = RpcServerInqBindings(&pBindingVector);	if (status) {		printf("Failed RpcServerInqBindings\n");		exit(status);	}	status = RpcEpRegister(rpcecho_v1_0_s_ifspec, pBindingVector, NULL, "rpcecho server");	if (status) {		printf("Failed RpcEpRegister\n");		exit(status);	}	status = RpcServerRegisterIf(rpcecho_v1_0_s_ifspec, NULL, NULL);	if (status) {		printf("Failed to register interface\n");		exit(status);	}	status = RpcServerRegisterAuthInfo(NULL, RPC_C_AUTHN_WINNT, NULL, NULL);	if (status) {		printf("Failed to setup auth info\n");	}			status = RpcServerListen(RPC_MIN_CALLS, RPC_MAX_CALLS, FALSE);	if (status) {		printf("RpcServerListen returned error %d\n", status);		exit(status);	}}

⌨️ 快捷键说明

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