summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2015-06-30 16:03:57 +0200
committerWerner Koch <wk@gnupg.org>2015-06-30 16:03:57 +0200
commit87def94c86d5272c23daf2b5ea446c5553aa1d90 (patch)
tree9bb02b34259e07857655789304e4c87098e02446
parentcd8face27cc96cb0092c920e6e5bdee81a61c420 (diff)
downloadlibassuan-87def94c86d5272c23daf2b5ea446c5553aa1d90.tar.gz
Add assuan_sock_set_flag and assuan_sock_get_flag.
* src/assuan-socket.c (_assuan_sock_set_flag): New. (assuan_sock_set_flag): New. (_assuan_sock_get_flag, assuan_sock_get_flag): New. * src/assuan.h.in (assuan_sock_set_flag): New. (assuan_sock_get_flag): New. * src/libassuan.def: Add them. * src/libassuan.vers: Add them. -- These new functions are intended for a Cygwin socket emulation. This commit merely introduces a generic framework. Signed-off-by: Werner Koch <wk@gnupg.org>
-rw-r--r--NEWS7
-rw-r--r--configure.ac4
-rw-r--r--doc/assuan.texi24
-rw-r--r--src/assuan-socket.c65
-rw-r--r--src/assuan.h.in2
-rw-r--r--src/libassuan.def2
-rw-r--r--src/libassuan.vers2
7 files changed, 95 insertions, 11 deletions
diff --git a/NEWS b/NEWS
index 2125894..8007b29 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,11 @@
-Noteworthy changes in version 2.2.2 (unreleased) [C5/A5/R_]
+Noteworthy changes in version 2.3.0 (unreleased) [C5/A5/R_]
------------------------------------------------
+ * Interface changes relative to the 2.2.1 release:
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ assuan_sock_set_flag NEW.
+ assuan_sock_get_flag NEW.
+
Noteworthy changes in version 2.2.1 (2015-05-12) [C5/A5/R1]
------------------------------------------------
diff --git a/configure.ac b/configure.ac
index 9727638..78c25ea 100644
--- a/configure.ac
+++ b/configure.ac
@@ -31,8 +31,8 @@ min_automake_version="1.14"
# for the LT versions.
m4_define([mym4_package],[libassuan])
m4_define([mym4_major], [2])
-m4_define([mym4_minor], [2])
-m4_define([mym4_micro], [2])
+m4_define([mym4_minor], [3])
+m4_define([mym4_micro], [0])
# To start a new development series, i.e a new major or minor number
# you need to mark an arbitrary commit before the first beta release
diff --git a/doc/assuan.texi b/doc/assuan.texi
index 10b309c..1c3c2ca 100644
--- a/doc/assuan.texi
+++ b/doc/assuan.texi
@@ -2046,6 +2046,30 @@ code it may be used on POSIX systems as well, where this function is
a nop.
@end deftypefun
+To control certain properties of the wrapper two additional functions
+are provided:
+
+@deftypefun int assuan_sock_set_flag ( @
+ @w{assuan_fd_t @var{fd}}, @
+ @w{const char *@var{name}}, @
+ @w{int @var{value}})
+
+Set the flags @var{name} for socket @var{fd} to @var{value}. See
+below for a list of valid names. Returns 0 on success; on failure
+sets ERRNO and returns -1.
+@end deftypefun
+
+@deftypefun int assuan_sock_get_flag ( @
+ @w{assuan_fd_t @var{fd}}, @
+ @w{const char *@var{name}}, @
+ @w{int *@var{r_value}})
+
+Store the current value of the flag @var{name} for socket @var{fd} at
+@var{r_value}. See below for a list of valid names. Returns 0 on
+success; on failure sets ERRNO and returns -1.
+@end deftypefun
+
+No flags are defined.
@c ---------------------------------------------------------------------
diff --git a/src/assuan-socket.c b/src/assuan-socket.c
index ed6a488..7bca0ae 100644
--- a/src/assuan-socket.c
+++ b/src/assuan-socket.c
@@ -1,5 +1,6 @@
-/* assuan-socket.c
+/* assuan-socket.c - Socket wrapper
Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
+ Copyright (C) 2001-2015 g10 Code GmbH
This file is part of Assuan.
@@ -78,6 +79,13 @@
+ strlen ((ptr)->sun_path))
#endif
+/* In the future, we can allow access to sock_ctx, if that context's
+ hook functions need to be overridden. There can only be one global
+ assuan_sock_* user (one library or one application) with this
+ convenience interface, if non-standard hook functions are
+ needed. */
+static assuan_context_t sock_ctx;
+
#ifdef HAVE_W32_SYSTEM
@@ -375,6 +383,42 @@ _assuan_sock_new (assuan_context_t ctx, int domain, int type, int proto)
int
+_assuan_sock_set_flag (assuan_context_t ctx, assuan_fd_t sockfd,
+ const char *name, int value)
+{
+ if (0)
+ {
+ }
+ else
+ {
+ gpg_err_set_errno (EINVAL);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
+_assuan_sock_get_flag (assuan_context_t ctx, assuan_fd_t sockfd,
+ const char *name, int *r_value)
+{
+ (void)ctx;
+
+ if (0)
+ {
+ }
+ else
+ {
+ gpg_err_set_errno (EINVAL);
+ return -1;
+ }
+
+ return 0;
+}
+
+
+int
_assuan_sock_connect (assuan_context_t ctx, assuan_fd_t sockfd,
struct sockaddr *addr, int addrlen)
{
@@ -695,13 +739,6 @@ _assuan_sock_check_nonce (assuan_context_t ctx, assuan_fd_t fd,
/* Public API. */
-/* In the future, we can allow access to sock_ctx, if that context's
- hook functions need to be overridden. There can only be one global
- assuan_sock_* user (one library or one application) with this
- convenience interface, if non-standard hook functions are
- needed. */
-static assuan_context_t sock_ctx;
-
gpg_error_t
assuan_sock_init ()
{
@@ -752,6 +789,18 @@ assuan_sock_new (int domain, int type, int proto)
}
int
+assuan_sock_set_flag (assuan_fd_t sockfd, const char *name, int value)
+{
+ return _assuan_sock_set_flag (sock_ctx, sockfd, name, value);
+}
+
+int
+assuan_sock_get_flag (assuan_fd_t sockfd, const char *name, int *r_value)
+{
+ return _assuan_sock_get_flag (sock_ctx, sockfd, name, r_value);
+}
+
+int
assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)
{
return _assuan_sock_connect (sock_ctx, sockfd, addr, addrlen);
diff --git a/src/assuan.h.in b/src/assuan.h.in
index f53c26e..14255ea 100644
--- a/src/assuan.h.in
+++ b/src/assuan.h.in
@@ -467,6 +467,8 @@ gpg_error_t assuan_sock_init (void);
void assuan_sock_deinit (void);
int assuan_sock_close (assuan_fd_t fd);
assuan_fd_t assuan_sock_new (int domain, int type, int proto);
+int assuan_sock_set_flag (assuan_fd_t sockfd, const char *name, int value);
+int assuan_sock_get_flag (assuan_fd_t sockfd, const char *name, int *r_value);
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);
diff --git a/src/libassuan.def b/src/libassuan.def
index d9997e3..9f31c31 100644
--- a/src/libassuan.def
+++ b/src/libassuan.def
@@ -112,6 +112,8 @@ EXPORTS
__assuan_waitpid @91
assuan_check_version @92
assuan_sock_set_sockaddr_un @93
+ assuan_sock_set_flag @94
+ assuan_sock_get_flag @95
; END
diff --git a/src/libassuan.vers b/src/libassuan.vers
index e36c322..2b2389d 100644
--- a/src/libassuan.vers
+++ b/src/libassuan.vers
@@ -102,6 +102,8 @@ LIBASSUAN_1.0 {
assuan_socket_connect_fd;
assuan_check_version;
assuan_sock_set_sockaddr_un;
+ assuan_sock_set_flag;
+ assuan_sock_get_flag;
__assuan_close;
__assuan_pipe;