/* * A simple interface to test the RPC server. * * Copyright (C) Google 2007 (Dan Hipschman) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ #include "server_defines.h" typedef struct tag_vector { int x; int y; int z; } vector_t; [ uuid(00000000-4114-0704-2301-000000000000), implicit_handle(handle_t IServer_IfHandle) ] interface IServer { typedef struct { int *pi; int **ppi; int ***pppi; } pints_t; typedef struct { char *pc; short *ps; long *pl; float *pf; double *pd; } ptypes_t; typedef struct { vector_t *pu; vector_t **pv; } pvectors_t; typedef struct { [switch_is(s)] union { [case(SUN_I)] int i; [case(SUN_F1, SUN_F2)] float f; [case(SUN_PI)] int *pi; } u; int s; } sun_t; int int_return(void); int square(int x); int sum(int x, int y); void square_out(int x, [out] int *y); void square_ref([in, out] int *x); int str_length([string] const char *s); int dot_self(vector_t *v); double square_half(double x, [out] double *y); float square_half_float(float x, [out] float *y); long square_half_long(long x, [out] long *y); int sum_fixed_array(int a[5]); int pints_sum(pints_t *pints); double ptypes_sum(ptypes_t *ptypes); int dot_pvectors(pvectors_t *pvectors); /* don't use this anywhere except in sp_t */ typedef struct { int x; } sp_inner_t; typedef struct { int x; sp_inner_t *s; } sp_t; int sum_sp(sp_t *sp); double square_sun(sun_t *su); typedef struct test_list { int t; [switch_is(t)] union { [case(TL_NULL)] int x; /* end of list */ [case(TL_LIST)] struct test_list *tail; } u; } test_list_t; int test_list_length(test_list_t *ls); void stop(void); }