aboutsummaryrefslogtreecommitdiffstats
path: root/assuan/assuan-socket.c
diff options
context:
space:
mode:
authorMarcus Brinkmann <[email protected]>2009-04-08 18:53:57 +0000
committerMarcus Brinkmann <[email protected]>2009-04-08 18:53:57 +0000
commitd255b4bec9a1fdf0864640750161ea12999e43a5 (patch)
tree75e870ff7e07cb4f2bf30dc8a136c72eb4bf6bd4 /assuan/assuan-socket.c
parent2009-03-23 Marcus Brinkmann <[email protected]> (diff)
downloadgpgme-d255b4bec9a1fdf0864640750161ea12999e43a5.tar.gz
gpgme-d255b4bec9a1fdf0864640750161ea12999e43a5.zip
assuan/
2009-04-08 Marcus Brinkmann <[email protected]> * assuan.h (_gpgme_io_socket): New prototype. (_ASSUAN_CUSTOM_IO, _assuan_custom_close, _assuan_custom_read) (_assuan_custom_write, _assuan_custom_pipe, _assuan_custom_socket) (_assuan_custom_connect): New macros. * assuan-socket.c (_assuan_close, _assuan_sock_new) (_assuan_sock_connect) [_ASSUAN_CUSTOM_IO]: Use custom I/O function. * assuan-buffer.c (assuan_read_line): Do not handle EAGAIN anymore. * assuan-client.c (_assuan_read_from_server): Likewise. * assuan-handler.c (process_next): Likewise * assuan-inquire.c (assuan_inquire): Likewise. src/ 2009-04-08 Marcus Brinkmann <[email protected]> * w32-glib-io.c (giochannel_table): New members used, fd, socket. (find_channel): Drop CREATE argument. (new_dummy_channel_from_fd, new_channel_from_fd) (new_channel_from_socket): New functions. (_gpgm_io_fd2str): Implement for sockets. (_gpgme_io_write, _gpgme_io_read): Translate EAGAIN errors correctly. (_gpgme_io_pipe): Fix for new channel bookkeeping. (_gpgme_io_close, _gpgme_io_dup): Likewise. (wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New. * w32-io.c (MAX_READERS, MAX_WRITERS): Bump up to 40. (wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New. * w32-qt-io.cpp (_gpgme_io_socket, _gpgme_io_connect): New stubs. * version.c [HAVE_W32_SYSTEM]: Include "windows.h. (do_subsystem_inits) [HAVE_W32_SYSTEM]: Call WSAStartup. * engine-assuan.c (llass_status_handler): Ignore EAGAIN errors.
Diffstat (limited to 'assuan/assuan-socket.c')
-rw-r--r--assuan/assuan-socket.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/assuan/assuan-socket.c b/assuan/assuan-socket.c
index 02a62253..74e8eb29 100644
--- a/assuan/assuan-socket.c
+++ b/assuan/assuan-socket.c
@@ -145,7 +145,10 @@ read_port_and_nonce (const char *fname, unsigned short *port, char *nonce)
int
_assuan_close (assuan_fd_t fd)
{
-#if defined (HAVE_W32_SYSTEM) && !defined(_ASSUAN_IN_GPGME_BUILD_ASSUAN)
+#ifdef _ASSUAN_CUSTOM_IO
+ return _assuan_custom_close (fd);
+#else
+#ifdef (HAVE_W32_SYSTEM)
int rc = closesocket (HANDLE2SOCKET(fd));
if (rc)
errno = _assuan_sock_wsa2errno (WSAGetLastError ());
@@ -160,6 +163,7 @@ _assuan_close (assuan_fd_t fd)
#else
return close (fd);
#endif
+#endif
}
@@ -173,13 +177,25 @@ _assuan_sock_new (int domain, int type, int proto)
assuan_fd_t res;
if (domain == AF_UNIX || domain == AF_LOCAL)
domain = AF_INET;
+
+#ifdef _ASSUAN_CUSTOM_IO
+ return _assuan_custom_socket (domain, type, proto);
+#else
res = SOCKET2HANDLE(socket (domain, type, proto));
if (res == ASSUAN_INVALID_FD)
errno = _assuan_sock_wsa2errno (WSAGetLastError ());
return res;
+#endif
+
+#else
+
+#ifdef _ASSUAN_CUSTOM_IO
+ return _gpgme_io_socket (domain, type, proto);
#else
return socket (domain, type, proto);
#endif
+
+#endif
}
@@ -208,11 +224,18 @@ _assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)
unaddr->sun_port = myaddr.sin_port;
unaddr->sun_addr.s_addr = myaddr.sin_addr.s_addr;
+#ifdef _ASSUAN_CUSTOM_IO
+ ret = _assuan_custom_connect (sockfd,
+ (struct sockaddr *)&myaddr, sizeof myaddr);
+#else
ret = connect (HANDLE2SOCKET(sockfd),
(struct sockaddr *)&myaddr, sizeof myaddr);
+#endif
+
if (!ret)
{
/* Send the nonce. */
+
ret = _assuan_io_write (sockfd, nonce, 16);
if (ret >= 0 && ret != 16)
{
@@ -220,6 +243,8 @@ _assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)
ret = -1;
}
}
+ else
+ errno = _assuan_sock_wsa2errno (WSAGetLastError ());
return ret;
}
else
@@ -231,8 +256,14 @@ _assuan_sock_connect (assuan_fd_t sockfd, struct sockaddr *addr, int addrlen)
return res;
}
#else
+
+#ifdef _ASSUAN_CUSTOM_IO
+ return _assuan_custom_connect (sockfd, addr, addrlen);
+#else
return connect (sockfd, addr, addrlen);
#endif
+
+#endif
}