1 #ifndef __SMB_CONN_SRV_H__
2 #define __SMB_CONN_SRV_H__
3
4 #include "config.h"
5 #include <sys/types.h>
6 #include <unistd.h>
7 #include "smb_conn_proto.h"
8
9 /* gcc specific extension. does nothing on other compilers */
10 #if defined(__GNUC__)
11 #define ATTRIB(x) __attribute__ (x)
12 #else
13 #define ATTRIB(x) /* no attributes */
14 #endif
15
16 enum smb_conn_srv_fd_type{
17 SMB_CONN_FILE,
18 SMB_CONN_DIR
19 };
20
21 struct smb_conn_srv_fd{
22 enum smb_conn_srv_fd_type type;
23 int fd;
24 off_t offset;
25 };
26
27 void smb_conn_srv_debug_print(struct smb_conn_srv_ctx *ctx,
28 enum smb_conn_cmd msg_type,
29 int errno_value,
30 int level, int no_fallback,
31 const char *fmt, ...) ATTRIB((format(printf, 6, 7)));
32
33 void smb_conn_srv_send_reply(struct smb_conn_srv_ctx *ctx,
34 enum smb_conn_cmd query_cmd,
35 int errno_value,
36 void *reply, size_t reply_len);
37
38 int smb_conn_srv_send_msg(struct smb_conn_srv_ctx *ctx,
39 enum smb_conn_cmd msg_type,
40 int errno_value,
41 int level,
42 const char *msg);
43
44 void smb_conn_srv_open (struct smb_conn_srv_ctx *ctx, struct smb_conn_open_query *query, size_t query_len);
45 void smb_conn_srv_creat (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_mode_query *query, size_t query_len);
46 void smb_conn_srv_read (struct smb_conn_srv_ctx *ctx, struct smb_conn_rw_query *query, size_t query_len);
47 void smb_conn_srv_write (struct smb_conn_srv_ctx *ctx, struct smb_conn_rw_query *query, size_t query_len);
48 void smb_conn_srv_close (struct smb_conn_srv_ctx *ctx, struct smb_conn_fd_query *query, size_t query_len);
49 void smb_conn_srv_unlink (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_query *query, size_t query_len);
50 void smb_conn_srv_rename (struct smb_conn_srv_ctx *ctx, struct smb_conn_rename_query *query, size_t query_len);
51 void smb_conn_srv_opendir (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_query *query, size_t query_len);
52 void smb_conn_srv_closedir (struct smb_conn_srv_ctx *ctx, struct smb_conn_fd_query *query, size_t query_len);
53 void smb_conn_srv_readdir (struct smb_conn_srv_ctx *ctx, struct smb_conn_rw_query *query, size_t query_len);
54 void smb_conn_srv_mkdir (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_mode_query *query, size_t query_len);
55 void smb_conn_srv_rmdir (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_query *query, size_t query_len);
56 void smb_conn_srv_stat (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_query *query, size_t query_len);
57 void smb_conn_srv_fstat (struct smb_conn_srv_ctx *ctx, struct smb_conn_fd_query *query, size_t query_len);
58 void smb_conn_srv_ftruncate (struct smb_conn_srv_ctx *ctx, struct smb_conn_ftruncate_query *query, size_t query_len);
59 void smb_conn_srv_chmod (struct smb_conn_srv_ctx *ctx, struct smb_conn_url_mode_query *query, size_t query_len);
60 void smb_conn_srv_utimes (struct smb_conn_srv_ctx *ctx, struct smb_conn_utimes_query *query, size_t query_len);
61 void smb_conn_srv_setxattr (struct smb_conn_srv_ctx *ctx, struct smb_conn_setxattr_query *query, size_t query_len);
62 void smb_conn_srv_getxattr (struct smb_conn_srv_ctx *ctx, struct smb_conn_getxattr_query *query, size_t query_len);
63 void smb_conn_srv_listxattr (struct smb_conn_srv_ctx *ctx, struct smb_conn_listxattr_query *query, size_t query_len);
64 void smb_conn_srv_removexattr(struct smb_conn_srv_ctx *ctx, struct smb_conn_removexattr_query *query, size_t query_len);
65
smb_conn_srv_get_url_from_query(const void * query,size_t url_offs)66 static inline const char* smb_conn_srv_get_url_from_query(const void *query, size_t url_offs){
67 return ((const char *) query) + url_offs;
68 }
69
70 #ifdef PRINTF_DEBUG
71 #include <stdio.h>
72 #define DSRVPRINTF(ctx, level_value, fmt, args...) { \
73 fprintf(stderr, "srv(%d)->%s: " fmt, getpid(), __FUNCTION__, ## args); fflush(stderr); \
74 smb_conn_srv_debug_print(ctx, MESSAGE, 0, level_value, 1, "srv(%d)->%s: " fmt, getpid(), __FUNCTION__, ## args); \
75 }
76 #define DSRVDIEMSG(ctx, errno_value, fmt, args...) { \
77 fprintf(stderr, "srv(%d)->%s: " fmt, getpid(), __FUNCTION__, ## args); fflush(stderr); \
78 smb_conn_srv_debug_print(ctx, DIE_MSG, errno_value, 0, 1, "srv(%d)->%s: " fmt, getpid(), __FUNCTION__, ## args); \
79 }
80 #else
81 #define DSRVPRINTF(ctx, level_value, fmt, args...) smb_conn_srv_debug_print(ctx, MESSAGE, 0, level_value, 0, "srv(%d)->%s: " fmt, getpid(), __FUNCTION__, ## args)
82 #define DSRVDIEMSG(ctx, errno_value, fmt, args...) smb_conn_srv_debug_print(ctx, DIE_MSG, errno_value, 0, 0, "srv(%d)->%s: " fmt, getpid(), __FUNCTION__, ## args)
83 #endif
84
85 #endif /* __SMB_CONN_SRV_H__ */
86