2005-07-02 15:12:33 +04:00
/*
Unix SMB / CIFS implementation .
ejs < - > rpc interface definitions
Copyright ( C ) Andrew Tridgell 2005
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
the Free Software Foundation ; either version 2 of the License , or
( 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
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
struct ejs_rpc {
2005-07-07 12:20:57 +04:00
int eid ;
const char * callname ;
2005-07-08 07:10:30 +04:00
/* as ejs does only one pass, we can use a single var for switch
handling */
uint32_t switch_var ;
2005-07-02 15:12:33 +04:00
} ;
2005-07-07 10:25:04 +04:00
typedef NTSTATUS ( * ejs_pull_t ) ( struct ejs_rpc * , struct MprVar * , const char * , void * ) ;
typedef NTSTATUS ( * ejs_push_t ) ( struct ejs_rpc * , struct MprVar * , const char * , const void * ) ;
2005-07-02 15:12:33 +04:00
typedef NTSTATUS ( * ejs_pull_function_t ) ( struct ejs_rpc * , struct MprVar * , void * ) ;
typedef NTSTATUS ( * ejs_push_function_t ) ( struct ejs_rpc * , struct MprVar * , const void * ) ;
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_panic ( struct ejs_rpc * ejs , const char * why ) ;
2005-07-08 07:10:30 +04:00
void ejs_set_switch ( struct ejs_rpc * ejs , uint32_t switch_var ) ;
2005-07-07 12:20:57 +04:00
2005-07-07 10:25:04 +04:00
int ejs_rpc_call ( int eid , int argc , struct MprVar * * argv , const char * callname ,
ejs_pull_function_t ejs_pull , ejs_push_function_t ejs_push ) ;
2005-07-02 15:12:33 +04:00
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_pull_rpc ( int eid , const char * callname , struct MprVar * v , void * ptr , ejs_pull_function_t ejs_pull ) ;
NTSTATUS ejs_push_rpc ( int eid , const char * callname , struct MprVar * v , const void * ptr , ejs_push_function_t ejs_push ) ;
2005-07-07 10:25:04 +04:00
NTSTATUS ejs_pull_struct_start ( struct ejs_rpc * ejs , struct MprVar * * v , const char * name ) ;
NTSTATUS ejs_push_struct_start ( struct ejs_rpc * ejs , struct MprVar * * v , const char * name ) ;
2005-07-04 05:31:34 +04:00
NTSTATUS ejs_pull_uint8 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint8_t * r ) ;
NTSTATUS ejs_push_uint8 ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint8_t * r ) ;
2005-07-04 05:31:34 +04:00
NTSTATUS ejs_pull_uint16 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint16_t * r ) ;
NTSTATUS ejs_push_uint16 ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint16_t * r ) ;
2005-07-02 15:12:33 +04:00
NTSTATUS ejs_pull_uint32 ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint32_t * r ) ;
NTSTATUS ejs_push_uint32 ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint32_t * r ) ;
2005-07-07 10:25:04 +04:00
NTSTATUS ejs_pull_hyper ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_hyper ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const uint64_t * r ) ;
2005-07-08 12:18:52 +04:00
NTSTATUS ejs_pull_dlong ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_dlong ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const uint64_t * r ) ;
NTSTATUS ejs_pull_udlong ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_udlong ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const uint64_t * r ) ;
NTSTATUS ejs_pull_NTTIME ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , uint64_t * r ) ;
NTSTATUS ejs_push_NTTIME ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const uint64_t * r ) ;
2005-07-07 10:25:04 +04:00
NTSTATUS ejs_pull_enum ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , unsigned * r ) ;
NTSTATUS ejs_push_enum ( struct ejs_rpc * ejs ,
2005-07-07 11:42:47 +04:00
struct MprVar * v , const char * name , const unsigned * r ) ;
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_pull_string ( struct ejs_rpc * ejs ,
2005-07-08 12:18:52 +04:00
struct MprVar * v , const char * name , const char * * s ) ;
2005-07-07 12:20:57 +04:00
NTSTATUS ejs_push_string ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const char * s ) ;
2005-07-08 08:55:07 +04:00
void ejs_set_constant_int ( int eid , const char * name , int value ) ;
void ejs_set_constant_string ( int eid , const char * name , const char * value ) ;
2005-07-08 07:33:32 +04:00
2005-07-08 12:18:52 +04:00
NTSTATUS ejs_pull_dom_sid ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , struct dom_sid * r ) ;
NTSTATUS ejs_push_dom_sid ( struct ejs_rpc * ejs ,
struct MprVar * v , const char * name , const struct dom_sid * r ) ;
2005-07-08 14:29:18 +04:00
NTSTATUS ejs_push_null ( struct ejs_rpc * ejs , struct MprVar * v , const char * name ) ;
BOOL ejs_pull_null ( struct ejs_rpc * ejs , struct MprVar * v , const char * name ) ;
2005-07-08 12:18:52 +04:00
2005-07-09 09:28:42 +04:00
2005-07-08 07:33:32 +04:00
# define EJS_ALLOC_SIZE(ejs, s, size) do { \
( s ) = talloc_size ( ejs , size ) ; \
if ( ! ( s ) ) return ejs_panic ( ejs , " out of memory " ) ; \
} while ( 0 )
# define EJS_ALLOC(ejs, s) EJS_ALLOC_SIZE(ejs, s, sizeof(*(s)))
# define EJS_ALLOC_N_SIZE(ejs, s, n, elsize) do { \
( s ) = talloc_array_size ( ejs , elsize , n ) ; \
if ( ! ( s ) ) return ejs_panic ( ejs , " out of memory " ) ; \
} while ( 0 )
# define EJS_ALLOC_N(ejs, s, n) EJS_ALLOC_N_SIZE(ejs, s, n, sizeof(*(s)))
2005-07-08 12:18:52 +04:00
/* some types are equivalent for ejs */
# define ejs_pull_dom_sid2 ejs_pull_dom_sid
# define ejs_push_dom_sid2 ejs_push_dom_sid
# define ejs_pull_NTTIME_hyper ejs_pull_NTTIME
# define ejs_push_NTTIME_hyper ejs_push_NTTIME