1/* 2 * Unix SMB/CIFS implementation. 3 * RPC Pipe client / server routines for rpcecho 4 * Copyright (C) Tim Potter 2003 5 * Copyright (C) Jelmer Vernooij 2006 6 * Copyright (C) Gerald (Jerry) Carter 2007 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, see <http://www.gnu.org/licenses/>. 20 */ 21 22/* This is the interface to the rpcecho pipe. */ 23 24#include "includes.h" 25#include "../librpc/gen_ndr/srv_echo.h" 26 27#ifdef DEVELOPER 28 29#undef DBGC_CLASS 30#define DBGC_CLASS DBGC_RPC_SRV 31 32/* Add one to the input and return it */ 33 34void _echo_AddOne(pipes_struct *p, struct echo_AddOne *r ) 35{ 36 DEBUG(10, ("_echo_AddOne\n")); 37 38 *r->out.out_data = r->in.in_data + 1; 39} 40 41/* Echo back an array of data */ 42 43void _echo_EchoData(pipes_struct *p, struct echo_EchoData *r) 44{ 45 DEBUG(10, ("_echo_EchoData\n")); 46 47 if ( r->in.len == 0 ) { 48 r->out.out_data = NULL; 49 return; 50 } 51 52 r->out.out_data = TALLOC_ARRAY(p->mem_ctx, uint8, r->in.len); 53 memcpy( r->out.out_data, r->in.in_data, r->in.len ); 54 return; 55} 56 57/* Sink an array of data */ 58 59void _echo_SinkData(pipes_struct *p, struct echo_SinkData *r) 60{ 61 DEBUG(10, ("_echo_SinkData\n")); 62 63 /* My that was some yummy data! */ 64 return; 65} 66 67/* Source an array of data */ 68 69void _echo_SourceData(pipes_struct *p, struct echo_SourceData *r) 70{ 71 uint32 i; 72 73 DEBUG(10, ("_echo_SourceData\n")); 74 75 if ( r->in.len == 0 ) { 76 r->out.data = NULL; 77 return; 78 } 79 80 r->out.data = TALLOC_ARRAY(p->mem_ctx, uint8, r->in.len ); 81 82 for (i = 0; i < r->in.len; i++ ) { 83 r->out.data[i] = i & 0xff; 84 } 85 86 return; 87} 88 89void _echo_TestCall(pipes_struct *p, struct echo_TestCall *r) 90{ 91 p->rng_fault_state = True; 92 return; 93} 94 95NTSTATUS _echo_TestCall2(pipes_struct *p, struct echo_TestCall2 *r) 96{ 97 p->rng_fault_state = True; 98 return NT_STATUS_OK; 99} 100 101uint32 _echo_TestSleep(pipes_struct *p, struct echo_TestSleep *r) 102{ 103 p->rng_fault_state = True; 104 return 0; 105} 106 107void _echo_TestEnum(pipes_struct *p, struct echo_TestEnum *r) 108{ 109 p->rng_fault_state = True; 110 return; 111} 112 113void _echo_TestSurrounding(pipes_struct *p, struct echo_TestSurrounding *r) 114{ 115 p->rng_fault_state = True; 116 return; 117} 118 119uint16 _echo_TestDoublePointer(pipes_struct *p, struct echo_TestDoublePointer *r) 120{ 121 p->rng_fault_state = True; 122 return 0; 123} 124 125#endif /* DEVELOPER */ 126