#include "idl_types.h" import "server_id.idl"; import "security.idl"; import "auth.idl"; /* * The main server code should just work with * 'struct smbXsrv_session' and never use * smbXsrv_session0, smbXsrv_sessionU * and smbXsrv_sessionB directly. * * We need to change the smbXsrv_session, * we can just point it to smbXsrv_session1 * and could implement transparent mapping. */ cpp_quote("#define smbXsrv_session smbXsrv_session0") cpp_quote("#define smbXsrv_open smbXsrv_open0") [ pointer_default(unique) ] interface smbXsrv { /* sessions */ typedef struct { server_id server_id; [charset(UTF8),string] char *local_address; [charset(UTF8),string] char *remote_address; [charset(UTF8),string] char *remote_name; DATA_BLOB signing_key; } smbXsrv_channel_global0; typedef struct { [ignore] db_record *db_rec; uint32 session_global_id; hyper session_wire_id; NTTIME creation_time; NTTIME expiration_time; /* * auth_session is NULL until the * session is valid for the first time. */ auth_session_info *auth_session_info; [range(1, 1024)] uint32 num_channels; smbXsrv_channel_global0 channels[num_channels]; } smbXsrv_session_global0; typedef union { [case(0)] smbXsrv_session_global0 *info0; [default] hyper *dummy; } smbXsrv_session_globalU; typedef [public] struct { uint32 version; uint32 seqnum; [switch_is(version)] smbXsrv_session_globalU info; } smbXsrv_session_globalB; void smbXsrv_session_global_decode( [in] smbXsrv_session_globalB blob ); typedef struct { [ignore] db_record *db_rec; [ignore] smbXsrv_connection *connection; uint32 local_id; [ref] smbXsrv_session_global0 *global; NTSTATUS status; //NTTIME idle_time; //[ignore] gensec_security *gensec; //[ignore] smbXsrv_tcon_table *tcon_table; //[ignore] smbXsrv_open_table *open_table; [ignore] smbd_smb2_session *smb2sess; } smbXsrv_session0; typedef union { [case(0)] smbXsrv_session0 *info0; [default] hyper *dummy; } smbXsrv_sessionU; typedef [public] struct { uint32 version; [value(0)] uint32 reserved; [switch_is(version)] smbXsrv_sessionU info; } smbXsrv_sessionB; void smbXsrv_session_decode( [in] smbXsrv_sessionB blob ); /* open files */ typedef struct { [ignore] db_record *db_rec; uint32 open_global_id; hyper open_persistent_id; hyper open_volatile_id; NTTIME open_time; [charset(UTF8),string] char *open_path; } smbXsrv_open_global0; typedef union { [case(0)] smbXsrv_open_global0 *info0; [default] hyper *dummy; } smbXsrv_open_globalU; typedef [public] struct { uint32 version; uint32 seqnum; [switch_is(version)] smbXsrv_open_globalU info; } smbXsrv_open_globalB; void smbXsrv_open_global_decode( [in] smbXsrv_open_globalB blob ); typedef struct { [ignore] db_record *db_rec; [ignore] smbXsrv_connection *connection; uint32 local_id; [ref] smbXsrv_open_global0 *global; [ignore] files_struct *fsp; } smbXsrv_open0; typedef union { [case(0)] smbXsrv_open0 *info0; [default] hyper *dummy; } smbXsrv_openU; typedef [public] struct { uint32 version; [value(0)] uint32 reserved; [switch_is(version)] smbXsrv_openU info; } smbXsrv_openB; void smbXsrv_open_decode( [in] smbXsrv_openB blob ); }