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)) {
34 r.out.out_data = talloc_size(mem_ctx, sizeof(*r.out.out_data));
35 if (r.out.out_data == NULL) {
40 _echo_AddOne(p, r.in.in_data, r.out.out_data);
42 push = ndr_push_init_ctx(mem_ctx);
48 status = ndr_push_echo_AddOne(push, NDR_OUT, &r);
49 if (NT_STATUS_IS_ERR(status)) {
54 blob = ndr_push_blob(push);
55 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
65 static BOOL api_echo_EchoData(pipes_struct *p)
67 struct ndr_pull *pull;
68 struct ndr_push *push;
71 struct echo_EchoData r;
72 TALLOC_CTX *mem_ctx = talloc_init("api_echo_EchoData");
74 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
79 pull = ndr_pull_init_blob(&blob, mem_ctx);
83 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
84 status = ndr_pull_echo_EchoData(pull, NDR_IN, &r);
85 if (NT_STATUS_IS_ERR(status)) {
90 r.out.out_data = talloc_array_size(mem_ctx, sizeof(*r.out.out_data), r.in.len);
91 if (r.out.out_data == NULL) {
96 _echo_EchoData(p, r.in.len, r.in.in_data, r.out.out_data);
98 push = ndr_push_init_ctx(mem_ctx);
100 talloc_free(mem_ctx);
104 status = ndr_push_echo_EchoData(push, NDR_OUT, &r);
105 if (NT_STATUS_IS_ERR(status)) {
106 talloc_free(mem_ctx);
110 blob = ndr_push_blob(push);
111 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
112 talloc_free(mem_ctx);
116 talloc_free(mem_ctx);
121 static BOOL api_echo_SinkData(pipes_struct *p)
123 struct ndr_pull *pull;
124 struct ndr_push *push;
127 struct echo_SinkData r;
128 TALLOC_CTX *mem_ctx = talloc_init("api_echo_SinkData");
130 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
131 talloc_free(mem_ctx);
135 pull = ndr_pull_init_blob(&blob, mem_ctx);
139 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
140 status = ndr_pull_echo_SinkData(pull, NDR_IN, &r);
141 if (NT_STATUS_IS_ERR(status)) {
142 talloc_free(mem_ctx);
146 _echo_SinkData(p, r.in.len, r.in.data);
148 push = ndr_push_init_ctx(mem_ctx);
150 talloc_free(mem_ctx);
154 status = ndr_push_echo_SinkData(push, NDR_OUT, &r);
155 if (NT_STATUS_IS_ERR(status)) {
156 talloc_free(mem_ctx);
160 blob = ndr_push_blob(push);
161 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
162 talloc_free(mem_ctx);
166 talloc_free(mem_ctx);
171 static BOOL api_echo_SourceData(pipes_struct *p)
173 struct ndr_pull *pull;
174 struct ndr_push *push;
177 struct echo_SourceData r;
178 TALLOC_CTX *mem_ctx = talloc_init("api_echo_SourceData");
180 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
181 talloc_free(mem_ctx);
185 pull = ndr_pull_init_blob(&blob, mem_ctx);
189 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
190 status = ndr_pull_echo_SourceData(pull, NDR_IN, &r);
191 if (NT_STATUS_IS_ERR(status)) {
192 talloc_free(mem_ctx);
196 r.out.data = talloc_array_size(mem_ctx, sizeof(*r.out.data), r.in.len);
197 if (r.out.data == NULL) {
198 talloc_free(mem_ctx);
202 _echo_SourceData(p, r.in.len, r.out.data);
204 push = ndr_push_init_ctx(mem_ctx);
206 talloc_free(mem_ctx);
210 status = ndr_push_echo_SourceData(push, NDR_OUT, &r);
211 if (NT_STATUS_IS_ERR(status)) {
212 talloc_free(mem_ctx);
216 blob = ndr_push_blob(push);
217 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
218 talloc_free(mem_ctx);
222 talloc_free(mem_ctx);
227 static BOOL api_echo_TestCall(pipes_struct *p)
229 struct ndr_pull *pull;
230 struct ndr_push *push;
233 struct echo_TestCall r;
234 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestCall");
236 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
237 talloc_free(mem_ctx);
241 pull = ndr_pull_init_blob(&blob, mem_ctx);
245 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
246 status = ndr_pull_echo_TestCall(pull, NDR_IN, &r);
247 if (NT_STATUS_IS_ERR(status)) {
248 talloc_free(mem_ctx);
252 r.out.s2 = talloc_size(mem_ctx, sizeof(*r.out.s2));
253 if (r.out.s2 == NULL) {
254 talloc_free(mem_ctx);
258 _echo_TestCall(p, r.in.s1, r.out.s2);
260 push = ndr_push_init_ctx(mem_ctx);
262 talloc_free(mem_ctx);
266 status = ndr_push_echo_TestCall(push, NDR_OUT, &r);
267 if (NT_STATUS_IS_ERR(status)) {
268 talloc_free(mem_ctx);
272 blob = ndr_push_blob(push);
273 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
274 talloc_free(mem_ctx);
278 talloc_free(mem_ctx);
283 static BOOL api_echo_TestCall2(pipes_struct *p)
285 struct ndr_pull *pull;
286 struct ndr_push *push;
289 struct echo_TestCall2 r;
290 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestCall2");
292 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
293 talloc_free(mem_ctx);
297 pull = ndr_pull_init_blob(&blob, mem_ctx);
301 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
302 status = ndr_pull_echo_TestCall2(pull, NDR_IN, &r);
303 if (NT_STATUS_IS_ERR(status)) {
304 talloc_free(mem_ctx);
308 r.out.info = talloc_size(mem_ctx, sizeof(*r.out.info));
309 if (r.out.info == NULL) {
310 talloc_free(mem_ctx);
314 r.out.result = _echo_TestCall2(p, r.in.level, r.out.info);
316 push = ndr_push_init_ctx(mem_ctx);
318 talloc_free(mem_ctx);
322 status = ndr_push_echo_TestCall2(push, NDR_OUT, &r);
323 if (NT_STATUS_IS_ERR(status)) {
324 talloc_free(mem_ctx);
328 blob = ndr_push_blob(push);
329 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
330 talloc_free(mem_ctx);
334 talloc_free(mem_ctx);
339 static BOOL api_echo_TestSleep(pipes_struct *p)
341 struct ndr_pull *pull;
342 struct ndr_push *push;
345 struct echo_TestSleep r;
346 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestSleep");
348 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
349 talloc_free(mem_ctx);
353 pull = ndr_pull_init_blob(&blob, mem_ctx);
357 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
358 status = ndr_pull_echo_TestSleep(pull, NDR_IN, &r);
359 if (NT_STATUS_IS_ERR(status)) {
360 talloc_free(mem_ctx);
364 r.out.result = _echo_TestSleep(p, r.in.seconds);
366 push = ndr_push_init_ctx(mem_ctx);
368 talloc_free(mem_ctx);
372 status = ndr_push_echo_TestSleep(push, NDR_OUT, &r);
373 if (NT_STATUS_IS_ERR(status)) {
374 talloc_free(mem_ctx);
378 blob = ndr_push_blob(push);
379 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
380 talloc_free(mem_ctx);
384 talloc_free(mem_ctx);
389 static BOOL api_echo_TestEnum(pipes_struct *p)
391 struct ndr_pull *pull;
392 struct ndr_push *push;
395 struct echo_TestEnum r;
396 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestEnum");
398 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
399 talloc_free(mem_ctx);
403 pull = ndr_pull_init_blob(&blob, mem_ctx);
407 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
408 status = ndr_pull_echo_TestEnum(pull, NDR_IN, &r);
409 if (NT_STATUS_IS_ERR(status)) {
410 talloc_free(mem_ctx);
414 r.out.foo1 = r.in.foo1;
415 r.out.foo2 = r.in.foo2;
416 r.out.foo3 = r.in.foo3;
417 _echo_TestEnum(p, r.in.foo1, r.in.foo2, r.in.foo3);
419 push = ndr_push_init_ctx(mem_ctx);
421 talloc_free(mem_ctx);
425 status = ndr_push_echo_TestEnum(push, NDR_OUT, &r);
426 if (NT_STATUS_IS_ERR(status)) {
427 talloc_free(mem_ctx);
431 blob = ndr_push_blob(push);
432 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
433 talloc_free(mem_ctx);
437 talloc_free(mem_ctx);
442 static BOOL api_echo_TestSurrounding(pipes_struct *p)
444 struct ndr_pull *pull;
445 struct ndr_push *push;
448 struct echo_TestSurrounding r;
449 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestSurrounding");
451 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
452 talloc_free(mem_ctx);
456 pull = ndr_pull_init_blob(&blob, mem_ctx);
460 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
461 status = ndr_pull_echo_TestSurrounding(pull, NDR_IN, &r);
462 if (NT_STATUS_IS_ERR(status)) {
463 talloc_free(mem_ctx);
467 r.out.data = r.in.data;
468 _echo_TestSurrounding(p, r.in.data);
470 push = ndr_push_init_ctx(mem_ctx);
472 talloc_free(mem_ctx);
476 status = ndr_push_echo_TestSurrounding(push, NDR_OUT, &r);
477 if (NT_STATUS_IS_ERR(status)) {
478 talloc_free(mem_ctx);
482 blob = ndr_push_blob(push);
483 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
484 talloc_free(mem_ctx);
488 talloc_free(mem_ctx);
493 static BOOL api_echo_TestDoublePointer(pipes_struct *p)
495 struct ndr_pull *pull;
496 struct ndr_push *push;
499 struct echo_TestDoublePointer r;
500 TALLOC_CTX *mem_ctx = talloc_init("api_echo_TestDoublePointer");
502 if (!prs_data_blob(&p->in_data.data, &blob, mem_ctx)) {
503 talloc_free(mem_ctx);
507 pull = ndr_pull_init_blob(&blob, mem_ctx);
511 pull->flags |= LIBNDR_FLAG_REF_ALLOC;
512 status = ndr_pull_echo_TestDoublePointer(pull, NDR_IN, &r);
513 if (NT_STATUS_IS_ERR(status)) {
514 talloc_free(mem_ctx);
518 r.out.result = _echo_TestDoublePointer(p, r.in.data);
520 push = ndr_push_init_ctx(mem_ctx);
522 talloc_free(mem_ctx);
526 status = ndr_push_echo_TestDoublePointer(push, NDR_OUT, &r);
527 if (NT_STATUS_IS_ERR(status)) {
528 talloc_free(mem_ctx);
532 blob = ndr_push_blob(push);
533 if (!prs_init_data_blob(&p->out_data.rdata, &blob, p->mem_ctx)) {
534 talloc_free(mem_ctx);
538 talloc_free(mem_ctx);
545 static struct api_struct api_rpcecho_cmds[] =
547 {"ECHO_ADDONE", DCERPC_ECHO_ADDONE, api_echo_AddOne},
548 {"ECHO_ECHODATA", DCERPC_ECHO_ECHODATA, api_echo_EchoData},
549 {"ECHO_SINKDATA", DCERPC_ECHO_SINKDATA, api_echo_SinkData},
550 {"ECHO_SOURCEDATA", DCERPC_ECHO_SOURCEDATA, api_echo_SourceData},
551 {"ECHO_TESTCALL", DCERPC_ECHO_TESTCALL, api_echo_TestCall},
552 {"ECHO_TESTCALL2", DCERPC_ECHO_TESTCALL2, api_echo_TestCall2},
553 {"ECHO_TESTSLEEP", DCERPC_ECHO_TESTSLEEP, api_echo_TestSleep},
554 {"ECHO_TESTENUM", DCERPC_ECHO_TESTENUM, api_echo_TestEnum},
555 {"ECHO_TESTSURROUNDING", DCERPC_ECHO_TESTSURROUNDING, api_echo_TestSurrounding},
556 {"ECHO_TESTDOUBLEPOINTER", DCERPC_ECHO_TESTDOUBLEPOINTER, api_echo_TestDoublePointer},
559 void rpcecho_get_pipe_fns(struct api_struct **fns, int *n_fns)
561 *fns = api_rpcecho_cmds;
562 *n_fns = sizeof(api_rpcecho_cmds) / sizeof(struct api_struct);
565 NTSTATUS rpc_rpcecho_init(void)
567 return rpc_pipe_register_commands(SMB_RPC_INTERFACE_VERSION, "rpcecho", "rpcecho", api_rpcecho_cmds, sizeof(api_rpcecho_cmds) / sizeof(struct api_struct));