2 * Unix SMB/CIFS implementation.
3 * server auto-generated by pidl. DO NOT MODIFY!
7 #include "librpc/gen_ndr/srv_echo.h"
9 static BOOL api_echo_AddOne(pipes_struct *p)
11 struct ndr_pull *pull;
12 struct ndr_push *push;
16 TALLOC_CTX *mem_ctx = talloc_init("api_echo_AddOne");
18 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
23 pull = ndr_pull_init_blob(&blob, mem_ctx);
27 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
28 status = ndr_pull_echo_AddOne(pull, NDR_IN, &r);
29 if (NT_STATUS_IS_ERR(status)) {
35 r.out.out_data = talloc_size(mem_ctx, sizeof(*r.out.out_data));
36 if (r.out.out_data == NULL) {
41 _echo_AddOne(p, r.in.in_data, r.out.out_data);
43 push = ndr_push_init_ctx(mem_ctx);
49 status = ndr_push_echo_AddOne(push, NDR_OUT, &r);
50 if (NT_STATUS_IS_ERR(status)) {
55 blob = ndr_push_blob(push);
56 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
66 static BOOL api_echo_EchoData(pipes_struct *p)
68 struct ndr_pull *pull;
69 struct ndr_push *push;
72 struct echo_EchoData r;
73 TALLOC_CTX *mem_ctx = talloc_init("api_echo_EchoData");
75 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
80 pull = ndr_pull_init_blob(&blob, mem_ctx);
84 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
85 status = ndr_pull_echo_EchoData(pull, NDR_IN, &r);
86 if (NT_STATUS_IS_ERR(status)) {
92 r.out.out_data = talloc_array_size(mem_ctx, sizeof(*r.out.out_data), r.in.len);
93 if (r.out.out_data == NULL) {
98 _echo_EchoData(p, r.in.len, r.in.in_data, r.out.out_data);
100 push = ndr_push_init_ctx(mem_ctx);
102 talloc_free(mem_ctx);
106 status = ndr_push_echo_EchoData(push, NDR_OUT, &r);
107 if (NT_STATUS_IS_ERR(status)) {
108 talloc_free(mem_ctx);
112 blob = ndr_push_blob(push);
113 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
114 talloc_free(mem_ctx);
118 talloc_free(mem_ctx);
123 static BOOL api_echo_SinkData(pipes_struct *p)
125 struct ndr_pull *pull;
126 struct ndr_push *push;
129 struct echo_SinkData r;
130 TALLOC_CTX *mem_ctx = talloc_init("api_echo_SinkData");
132 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
133 talloc_free(mem_ctx);
137 pull = ndr_pull_init_blob(&blob, mem_ctx);
141 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
142 status = ndr_pull_echo_SinkData(pull, NDR_IN, &r);
143 if (NT_STATUS_IS_ERR(status)) {
144 talloc_free(mem_ctx);
148 _echo_SinkData(p, r.in.len, r.in.data);
150 push = ndr_push_init_ctx(mem_ctx);
152 talloc_free(mem_ctx);
156 status = ndr_push_echo_SinkData(push, NDR_OUT, &r);
157 if (NT_STATUS_IS_ERR(status)) {
158 talloc_free(mem_ctx);
162 blob = ndr_push_blob(push);
163 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
164 talloc_free(mem_ctx);
168 talloc_free(mem_ctx);
173 static BOOL api_echo_SourceData(pipes_struct *p)
175 struct ndr_pull *pull;
176 struct ndr_push *push;
179 struct echo_SourceData r;
180 TALLOC_CTX *mem_ctx = talloc_init("api_echo_SourceData");
182 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
183 talloc_free(mem_ctx);
187 pull = ndr_pull_init_blob(&blob, mem_ctx);
191 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
192 status = ndr_pull_echo_SourceData(pull, NDR_IN, &r);
193 if (NT_STATUS_IS_ERR(status)) {
194 talloc_free(mem_ctx);
199 r.out.data = talloc_array_size(mem_ctx, sizeof(*r.out.data), r.in.len);
200 if (r.out.data == NULL) {
201 talloc_free(mem_ctx);
205 _echo_SourceData(p, r.in.len, r.out.data);
207 push = ndr_push_init_ctx(mem_ctx);
209 talloc_free(mem_ctx);
213 status = ndr_push_echo_SourceData(push, NDR_OUT, &r);
214 if (NT_STATUS_IS_ERR(status)) {
215 talloc_free(mem_ctx);
219 blob = ndr_push_blob(push);
220 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
221 talloc_free(mem_ctx);
225 talloc_free(mem_ctx);
230 static BOOL api_echo_TestCall(pipes_struct *p)
232 struct ndr_pull *pull;
233 struct ndr_push *push;
236 struct echo_TestCall r;
237 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestCall");
239 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
240 talloc_free(mem_ctx);
244 pull = ndr_pull_init_blob(&blob, mem_ctx);
248 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
249 status = ndr_pull_echo_TestCall(pull, NDR_IN, &r);
250 if (NT_STATUS_IS_ERR(status)) {
251 talloc_free(mem_ctx);
256 r.out.s2 = talloc_size(mem_ctx, sizeof(*r.out.s2));
257 if (r.out.s2 == NULL) {
258 talloc_free(mem_ctx);
262 _echo_TestCall(p, r.in.s1, r.out.s2);
264 push = ndr_push_init_ctx(mem_ctx);
266 talloc_free(mem_ctx);
270 status = ndr_push_echo_TestCall(push, NDR_OUT, &r);
271 if (NT_STATUS_IS_ERR(status)) {
272 talloc_free(mem_ctx);
276 blob = ndr_push_blob(push);
277 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
278 talloc_free(mem_ctx);
282 talloc_free(mem_ctx);
287 static BOOL api_echo_TestCall2(pipes_struct *p)
289 struct ndr_pull *pull;
290 struct ndr_push *push;
293 struct echo_TestCall2 r;
294 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestCall2");
296 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
297 talloc_free(mem_ctx);
301 pull = ndr_pull_init_blob(&blob, mem_ctx);
305 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
306 status = ndr_pull_echo_TestCall2(pull, NDR_IN, &r);
307 if (NT_STATUS_IS_ERR(status)) {
308 talloc_free(mem_ctx);
313 r.out.info = talloc_size(mem_ctx, sizeof(*r.out.info));
314 if (r.out.info == NULL) {
315 talloc_free(mem_ctx);
319 r.out.result = _echo_TestCall2(p, r.in.level, r.out.info);
321 push = ndr_push_init_ctx(mem_ctx);
323 talloc_free(mem_ctx);
327 status = ndr_push_echo_TestCall2(push, NDR_OUT, &r);
328 if (NT_STATUS_IS_ERR(status)) {
329 talloc_free(mem_ctx);
333 blob = ndr_push_blob(push);
334 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
335 talloc_free(mem_ctx);
339 talloc_free(mem_ctx);
344 static BOOL api_echo_TestSleep(pipes_struct *p)
346 struct ndr_pull *pull;
347 struct ndr_push *push;
350 struct echo_TestSleep r;
351 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestSleep");
353 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
354 talloc_free(mem_ctx);
358 pull = ndr_pull_init_blob(&blob, mem_ctx);
362 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
363 status = ndr_pull_echo_TestSleep(pull, NDR_IN, &r);
364 if (NT_STATUS_IS_ERR(status)) {
365 talloc_free(mem_ctx);
369 r.out.result = _echo_TestSleep(p, r.in.seconds);
371 push = ndr_push_init_ctx(mem_ctx);
373 talloc_free(mem_ctx);
377 status = ndr_push_echo_TestSleep(push, NDR_OUT, &r);
378 if (NT_STATUS_IS_ERR(status)) {
379 talloc_free(mem_ctx);
383 blob = ndr_push_blob(push);
384 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
385 talloc_free(mem_ctx);
389 talloc_free(mem_ctx);
394 static BOOL api_echo_TestEnum(pipes_struct *p)
396 struct ndr_pull *pull;
397 struct ndr_push *push;
400 struct echo_TestEnum r;
401 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestEnum");
403 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
404 talloc_free(mem_ctx);
408 pull = ndr_pull_init_blob(&blob, mem_ctx);
412 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
413 status = ndr_pull_echo_TestEnum(pull, NDR_IN, &r);
414 if (NT_STATUS_IS_ERR(status)) {
415 talloc_free(mem_ctx);
420 r.out.foo1 = r.in.foo1;
421 r.out.foo2 = r.in.foo2;
422 r.out.foo3 = r.in.foo3;
423 _echo_TestEnum(p, r.in.foo1, r.in.foo2, r.in.foo3);
425 push = ndr_push_init_ctx(mem_ctx);
427 talloc_free(mem_ctx);
431 status = ndr_push_echo_TestEnum(push, NDR_OUT, &r);
432 if (NT_STATUS_IS_ERR(status)) {
433 talloc_free(mem_ctx);
437 blob = ndr_push_blob(push);
438 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
439 talloc_free(mem_ctx);
443 talloc_free(mem_ctx);
448 static BOOL api_echo_TestSurrounding(pipes_struct *p)
450 struct ndr_pull *pull;
451 struct ndr_push *push;
454 struct echo_TestSurrounding r;
455 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestSurrounding");
457 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
458 talloc_free(mem_ctx);
462 pull = ndr_pull_init_blob(&blob, mem_ctx);
466 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
467 status = ndr_pull_echo_TestSurrounding(pull, NDR_IN, &r);
468 if (NT_STATUS_IS_ERR(status)) {
469 talloc_free(mem_ctx);
474 r.out.data = r.in.data;
475 _echo_TestSurrounding(p, r.in.data);
477 push = ndr_push_init_ctx(mem_ctx);
479 talloc_free(mem_ctx);
483 status = ndr_push_echo_TestSurrounding(push, NDR_OUT, &r);
484 if (NT_STATUS_IS_ERR(status)) {
485 talloc_free(mem_ctx);
489 blob = ndr_push_blob(push);
490 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
491 talloc_free(mem_ctx);
495 talloc_free(mem_ctx);
500 static BOOL api_echo_TestDoublePointer(pipes_struct *p)
502 struct ndr_pull *pull;
503 struct ndr_push *push;
506 struct echo_TestDoublePointer r;
507 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestDoublePointer");
509 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
510 talloc_free(mem_ctx);
514 pull = ndr_pull_init_blob(&blob, mem_ctx);
518 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
519 status = ndr_pull_echo_TestDoublePointer(pull, NDR_IN, &r);
520 if (NT_STATUS_IS_ERR(status)) {
521 talloc_free(mem_ctx);
525 r.out.result = _echo_TestDoublePointer(p, r.in.data);
527 push = ndr_push_init_ctx(mem_ctx);
529 talloc_free(mem_ctx);
533 status = ndr_push_echo_TestDoublePointer(push, NDR_OUT, &r);
534 if (NT_STATUS_IS_ERR(status)) {
535 talloc_free(mem_ctx);
539 blob = ndr_push_blob(push);
540 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
541 talloc_free(mem_ctx);
545 talloc_free(mem_ctx);
552 static struct api_struct api_rpcecho_cmds[] =
554 {"ECHO_ADDONE", DCERPC_ECHO_ADDONE, api_echo_AddOne},
555 {"ECHO_ECHODATA", DCERPC_ECHO_ECHODATA, api_echo_EchoData},
556 {"ECHO_SINKDATA", DCERPC_ECHO_SINKDATA, api_echo_SinkData},
557 {"ECHO_SOURCEDATA", DCERPC_ECHO_SOURCEDATA, api_echo_SourceData},
558 {"ECHO_TESTCALL", DCERPC_ECHO_TESTCALL, api_echo_TestCall},
559 {"ECHO_TESTCALL2", DCERPC_ECHO_TESTCALL2, api_echo_TestCall2},
560 {"ECHO_TESTSLEEP", DCERPC_ECHO_TESTSLEEP, api_echo_TestSleep},
561 {"ECHO_TESTENUM", DCERPC_ECHO_TESTENUM, api_echo_TestEnum},
562 {"ECHO_TESTSURROUNDING", DCERPC_ECHO_TESTSURROUNDING, api_echo_TestSurrounding},
563 {"ECHO_TESTDOUBLEPOINTER", DCERPC_ECHO_TESTDOUBLEPOINTER, api_echo_TestDoublePointer},
566 void rpcecho_get_pipe_fns(struct api_struct **fns, int *n_fns)
568 *fns = api_rpcecho_cmds;
569 *n_fns = sizeof(api_rpcecho_cmds) / sizeof(struct api_struct);
572 NTSTATUS rpc_rpcecho_init(void)
574 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "rpcecho", "rpcecho", api_rpcecho_cmds, sizeof(api_rpcecho_cmds) / sizeof(struct api_struct));