2003-04-11 08:09:14 +04:00
/*
* Unix SMB / CIFS implementation .
* RPC Pipe client / server routines for rpcecho
2007-05-31 01:43:48 +04:00
* Copyright ( C ) Tim Potter 2003
* Copyright ( C ) Jelmer Vernooij 2006
* Copyright ( C ) Gerald ( Jerry ) Carter 2007
2003-04-11 08:09:14 +04:00
*
* 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
2007-07-09 23:25:36 +04:00
* the Free Software Foundation ; either version 3 of the License , or
2003-04-11 08:09:14 +04:00
* ( 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
2007-07-10 09:23:25 +04:00
* along with this program ; if not , see < http : //www.gnu.org/licenses/>.
2003-04-11 08:09:14 +04:00
*/
/* This is the interface to the rpcecho pipe. */
# include "includes.h"
2009-11-26 20:21:28 +03:00
# include "../librpc/gen_ndr/srv_echo.h"
2003-04-11 08:09:14 +04:00
# ifdef DEVELOPER
# undef DBGC_CLASS
# define DBGC_CLASS DBGC_RPC_SRV
/* Add one to the input and return it */
2007-05-31 01:43:48 +04:00
void _echo_AddOne ( pipes_struct * p , struct echo_AddOne * r )
2003-04-11 08:09:14 +04:00
{
2007-05-31 01:43:48 +04:00
DEBUG ( 10 , ( " _echo_AddOne \n " ) ) ;
2003-04-11 08:09:14 +04:00
2007-10-11 00:34:30 +04:00
* r - > out . out_data = r - > in . in_data + 1 ;
2003-04-11 08:09:14 +04:00
}
/* Echo back an array of data */
2007-01-18 13:18:59 +03:00
void _echo_EchoData ( pipes_struct * p , struct echo_EchoData * r )
2003-04-11 08:09:14 +04:00
{
2007-05-31 01:43:48 +04:00
DEBUG ( 10 , ( " _echo_EchoData \n " ) ) ;
2003-04-11 08:09:14 +04:00
2007-05-31 01:43:48 +04:00
if ( r - > in . len = = 0 ) {
r - > out . out_data = NULL ;
return ;
}
2007-07-05 02:28:04 +04:00
r - > out . out_data = TALLOC_ARRAY ( p - > mem_ctx , uint8 , r - > in . len ) ;
2007-05-31 01:43:48 +04:00
memcpy ( r - > out . out_data , r - > in . in_data , r - > in . len ) ;
return ;
2003-04-11 08:09:14 +04:00
}
/* Sink an array of data */
2007-01-18 13:18:59 +03:00
void _echo_SinkData ( pipes_struct * p , struct echo_SinkData * r )
2003-04-11 08:09:14 +04:00
{
2007-05-31 01:43:48 +04:00
DEBUG ( 10 , ( " _echo_SinkData \n " ) ) ;
2003-04-11 08:09:14 +04:00
/* My that was some yummy data! */
2007-05-31 01:43:48 +04:00
return ;
2003-04-11 08:09:14 +04:00
}
/* Source an array of data */
2007-01-18 13:18:59 +03:00
void _echo_SourceData ( pipes_struct * p , struct echo_SourceData * r )
2003-04-11 08:09:14 +04:00
{
uint32 i ;
2007-05-31 01:43:48 +04:00
DEBUG ( 10 , ( " _echo_SourceData \n " ) ) ;
if ( r - > in . len = = 0 ) {
r - > out . data = NULL ;
return ;
}
2007-07-05 02:28:04 +04:00
r - > out . data = TALLOC_ARRAY ( p - > mem_ctx , uint8 , r - > in . len ) ;
2003-04-11 08:09:14 +04:00
2007-05-31 01:43:48 +04:00
for ( i = 0 ; i < r - > in . len ; i + + ) {
2007-01-18 13:18:59 +03:00
r - > out . data [ i ] = i & 0xff ;
2007-05-31 01:43:48 +04:00
}
return ;
2006-09-16 02:49:27 +04:00
}
2003-04-11 08:09:14 +04:00
2007-01-18 13:18:59 +03:00
void _echo_TestCall ( pipes_struct * p , struct echo_TestCall * r )
2006-09-16 02:49:27 +04:00
{
2007-10-11 00:34:30 +04:00
p - > rng_fault_state = True ;
return ;
2006-09-16 02:49:27 +04:00
}
2007-01-18 13:18:59 +03:00
NTSTATUS _echo_TestCall2 ( pipes_struct * p , struct echo_TestCall2 * r )
2006-09-16 02:49:27 +04:00
{
2007-10-11 00:34:30 +04:00
p - > rng_fault_state = True ;
2006-09-16 02:49:27 +04:00
return NT_STATUS_OK ;
}
2007-01-18 13:18:59 +03:00
uint32 _echo_TestSleep ( pipes_struct * p , struct echo_TestSleep * r )
2006-09-16 02:49:27 +04:00
{
2007-10-11 00:34:30 +04:00
p - > rng_fault_state = True ;
return 0 ;
2006-09-16 02:49:27 +04:00
}
2007-01-18 13:18:59 +03:00
void _echo_TestEnum ( pipes_struct * p , struct echo_TestEnum * r )
2006-09-16 02:49:27 +04:00
{
2007-10-11 00:34:30 +04:00
p - > rng_fault_state = True ;
return ;
2006-09-16 02:49:27 +04:00
}
2007-01-18 13:18:59 +03:00
void _echo_TestSurrounding ( pipes_struct * p , struct echo_TestSurrounding * r )
2006-09-16 02:49:27 +04:00
{
2007-10-11 00:34:30 +04:00
p - > rng_fault_state = True ;
return ;
2006-09-16 02:49:27 +04:00
}
2007-01-18 13:18:59 +03:00
uint16 _echo_TestDoublePointer ( pipes_struct * p , struct echo_TestDoublePointer * r )
2006-09-16 02:49:27 +04:00
{
2007-10-11 00:34:30 +04:00
p - > rng_fault_state = True ;
return 0 ;
2003-04-11 08:09:14 +04:00
}
# endif /* DEVELOPER */