aboutsummaryrefslogtreecommitdiffstats
path: root/src/assuan.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/assuan.h')
-rw-r--r--src/assuan.h88
1 files changed, 77 insertions, 11 deletions
diff --git a/src/assuan.h b/src/assuan.h
index 788a742..eec9842 100644
--- a/src/assuan.h
+++ b/src/assuan.h
@@ -23,18 +23,28 @@
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
-
+#ifndef _ASSUAN_NO_SOCKET_WRAPPER
+#ifdef _WIN32
+#include <ws2tcpip.h>
+#else
+#include <sys/socket.h>
+#endif
+#endif /*!_ASSUAN_NO_SOCKET_WRAPPER*/
/* To use this file with libraries the following macros are useful:
#define _ASSUAN_EXT_SYM_PREFIX _foo_
- This prefixes all external symbols with "_foo_".
+ This prefixes all external symbols with "_foo_".
#define _ASSUAN_ONLY_GPG_ERRORS
- If this is defined all old-style Assuan error codes are made
- inactive as well as other dereacted stuff.
+ If this is defined all old-style Assuan error codes are made
+ inactive as well as other deprecated stuff.
+
+ #define _ASSUAN_NO_SOCKET_WRAPPER
+
+ Do not include the definitions for the socket wrapper feature.
The follwing macros are used internally in the implementation of
libassuan:
@@ -132,6 +142,12 @@
#define assuan_pipe_connect2 _ASSUAN_PREFIX(assuan_pipe_connect2)
#define assuan_set_assuan_log_prefix \
_ASSUAN_PREFIX(assuan_set_assuan_log_prefix)
+#define assuan_sock_close _ASSUAN_PREFIX(assuan_sock_close)
+#define assuan_sock_new _ASSUAN_PREFIX(assuan_sock_new)
+#define assuan_sock_connect _ASSUAN_PREFIX(assuan_sock_connect)
+#define assuan_sock_bind _ASSUAN_PREFIX(assuan_sock_bind)
+#define assuan_sock_get_nonce _ASSUAN_PREFIX(assuan_sock_get_nonce)
+#define assuan_sock_check_nonce _ASSUAN_PREFIX(assuan_sock_check_nonce)
/* And now the internal functions, argh... */
@@ -144,8 +160,8 @@
_ASSUAN_PREFIX(_assuan_register_std_commands)
#define _assuan_simple_read _ASSUAN_PREFIX(_assuan_simple_read)
#define _assuan_simple_write _ASSUAN_PREFIX(_assuan_simple_write)
-#define _assuan_simple_read _ASSUAN_PREFIX(_assuan_simple_read)
-#define _assuan_simple_write _ASSUAN_PREFIX(_assuan_simple_write)
+#define _assuan_io_read _ASSUAN_PREFIX(_assuan_io_read)
+#define _assuan_io_write _ASSUAN_PREFIX(_assuan_io_write)
#define _assuan_new_context _ASSUAN_PREFIX(_assuan_new_context)
#define _assuan_release_context _ASSUAN_PREFIX(_assuan_release_context)
#define _assuan_malloc _ASSUAN_PREFIX(_assuan_malloc)
@@ -162,10 +178,6 @@
#define _assuan_gpg_strerror_r _ASSUAN_PREFIX(_assuan_gpg_strerror_r)
#define _assuan_gpg_strsource _ASSUAN_PREFIX(_assuan_gpg_strsource)
#define _assuan_write_line _ASSUAN_PREFIX(_assuan_write_line)
-#define _assuan_close _ASSUAN_PREFIX(_assuan_close)
-#define _assuan_sock_new _ASSUAN_PREFIX(_assuan_sock_new)
-#define _assuan_sock_bind _ASSUAN_PREFIX(_assuan_sock_bind)
-#define _assuan_sock_connect _ASSUAN_PREFIX(_assuan_sock_connect)
#define _assuan_error _ASSUAN_PREFIX(_assuan_error)
#define _assuan_init_uds_io _ASSUAN_PREFIX(_assuan_init_uds_io)
#define _assuan_uds_close_fds _ASSUAN_PREFIX(_assuan_uds_close_fds)
@@ -173,6 +185,12 @@
#define _assuan_simple_recvmsg _ASSUAN_PREFIX(_assuan_simple_recvmsg)
#define _assuan_simple_sendmsg _ASSUAN_PREFIX(_assuan_simple_sendmsg)
#define _assuan_waitpid _ASSUAN_PREFIX(_assuan_waitpid)
+#define _assuan_sock_close _ASSUAN_PREFIX(_assuan_close)
+#define _assuan_sock_new _ASSUAN_PREFIX(_assuan_sock_new)
+#define _assuan_sock_connect _ASSUAN_PREFIX(_assuan_sock_connect)
+#define _assuan_sock_bind _ASSUAN_PREFIX(_assuan_sock_bind)
+#define _assuan_sock_get_nonce _ASSUAN_PREFIX(_assuan_sock_get_nonce)
+#define _assuan_sock_check_nonce _ASSUAN_PREFIX(_assuan_sock_check_nonce)
#endif /*_ASSUAN_EXT_SYM_PREFIX*/
@@ -357,13 +375,45 @@ typedef struct assuan_context_s *ASSUAN_CONTEXT _ASSUAN_DEPRECATED;
actually is a plain pointer). This is required to eventually
support 64 bit Windows systems. */
#ifdef _WIN32
-typedef void * assuan_fd_t;
+typedef void *assuan_fd_t;
#define ASSUAN_INVALID_FD ((void*)(-1))
#else
typedef int assuan_fd_t;
#define ASSUAN_INVALID_FD (-1)
#endif
+
+/* Assuan features an emulation of Unix domain sockets based on a
+ local TCP connections. To implement access permissions based on
+ file permissions a nonce is used which is expected by th server as
+ the first bytes received. This structure is used by the server to
+ save the nonce created initially by bind. On POSIX systems this is
+ a dummy operation. */
+struct assuan_sock_nonce_s
+{
+ size_t length;
+#ifdef _WIN32
+ char nonce[16];
+#endif
+};
+typedef struct assuan_sock_nonce_s assuan_sock_nonce_t;
+
+/* Define the Unix domain socket structure for Windows. */
+#if defined(_WIN32) && !defined(_ASSUAN_NO_SOCKET_WRAPPER)
+#ifndef AF_LOCAL
+#define AF_LOCAL AF_UNIX
+#endif
+#define EADDRINUSE WSAEADDRINUSE
+struct sockaddr_un
+{
+ short sun_family;
+ unsigned short sun_port;
+ struct in_addr sun_addr;
+ char sun_path[108-2-4];
+};
+#endif
+
+
/*-- assuan-handler.c --*/
int assuan_register_command (assuan_context_t ctx,
const char *cmd_string,
@@ -498,6 +548,7 @@ assuan_error_t assuan_send_data (assuan_context_t ctx,
assuan_error_t assuan_sendfd (assuan_context_t ctx, assuan_fd_t fd);
assuan_error_t assuan_receivefd (assuan_context_t ctx, assuan_fd_t *fd);
+
/*-- assuan-util.c --*/
void assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n),
void *(*new_realloc_func)(void *p, size_t n),
@@ -563,6 +614,21 @@ void assuan_set_assuan_log_prefix (const char *text);
string, i.e. "" */
const char *assuan_get_assuan_log_prefix (void);
+
+/*-- assuan-socket.c --*/
+
+/* These are socket wrapper functions to support an emulation of Unix
+ domain sockets on Windows W32. */
+int assuan_sock_close (assuan_fd_t fd);
+assuan_fd_t assuan_sock_new (int domain, int type, int proto);
+int assuan_sock_connect (assuan_fd_t sockfd,
+ struct sockaddr *addr, int addrlen);
+int assuan_sock_bind (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen);
+int assuan_sock_get_nonce (struct sockaddr *addr, int addrlen,
+ assuan_sock_nonce_t *nonce);
+int assuan_sock_check_nonce (assuan_fd_t fd, assuan_sock_nonce_t *nonce);
+
+
#ifdef __cplusplus
}
#endif