#endif
#include "socket.h"
+#if USE_SSL
+# include "ssl.h"
+#endif
#if USE_GIO
#error USE_GIO is currently not supported
}
#endif /* !INET6 */
-#if 0
-SockInfo *sock_connect_nb(const gchar *hostname, gushort port)
-{
- gint sock;
- gint ret;
- SockInfo *sockinfo;
-
-#ifdef INET6
- if ((sock = sock_connect_by_getaddrinfo(hostname, port)) < 0)
- return NULL;
- if (set_nonblocking_mode(sock, TRUE) < 0) return NULL;
- ret = sock;
-#else
- if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
- perror("socket");
- return NULL;
- }
-
- if (set_nonblocking_mode(sock, TRUE) < 0) return NULL;
-
- ret = sock_connect_by_hostname(sock, hostname, port);
-
- if (ret < 0 && errno != EINPROGRESS) {
- if (errno != 0) perror("connect");
- close(sock);
- return NULL;
- }
-#endif /* INET6 */
-
- sockinfo = g_new0(SockInfo, 1);
- sockinfo->sock = sock;
- sockinfo->hostname = g_strdup(hostname);
- sockinfo->port = port;
- sockinfo->state = CONN_LOOKUPSUCCESS;
-
- if (ret < 0 && errno == EINPROGRESS) return sockinfo;
-
- sockinfo->state = CONN_ESTABLISHED;
- return sockinfo;
-}
-#endif
-
SockInfo *sock_connect(const gchar *hostname, gushort port)
{
gint sock;
g_return_val_if_fail(sock != NULL, -1);
#if USE_SSL
- if(sock->ssl) {
+ if (sock->ssl)
return ssl_read(sock->ssl, buf, len);
- }
#endif
return fd_read(sock->sock, buf, len);
}
return read(fd, buf, len);
}
-#ifdef USE_SSL
+#if USE_SSL
gint ssl_read(SSL *ssl, gchar *buf, gint len)
{
return SSL_read(ssl, buf, len);
g_return_val_if_fail(sock != NULL, -1);
#if USE_SSL
- if(sock->ssl) {
+ if (sock->ssl)
return ssl_write(sock->ssl, buf, len);
- }
#endif
return fd_write(sock->sock, buf, len);
}
return wrlen;
}
-#ifdef USE_SSL
+#if USE_SSL
gint ssl_write(SSL *ssl, const gchar *buf, gint len)
{
gint n, wrlen = 0;
#if USE_SSL
gint ssl_gets(SSL *ssl, gchar *buf, gint len)
{
- gchar *buf2 = buf;
+ gchar *bp = buf;
gboolean newline = FALSE;
- gint n, count = 0;
+ gint n;
if (--len < 1)
return -1;
- while(len > 0 && !newline) {
- *buf2 = '\0';
- if((n = SSL_read(ssl, buf2, 1)) < 0)
+ while (len > 0 && !newline) {
+ *bp = '\0';
+ if ((n = SSL_read(ssl, bp, 1)) <= 0)
return -1;
- if(*buf2 == '\n')
+ if (*bp == '\n')
newline = TRUE;
- buf2 += n;
- count += n;
+ bp += n;
}
- *buf2 = '\0';
- return count;
+ *bp = '\0';
+ return bp - buf;
}
#endif
g_return_val_if_fail(sock != NULL, -1);
#if USE_SSL
- if(sock->ssl) {
+ if (sock->ssl)
return ssl_gets(sock->ssl, buf, len);
- }
#endif
return fd_gets(sock->sock, buf, len);
}
g_return_val_if_fail(sock != NULL, NULL);
#if USE_SSL
- if(sock->ssl) {
+ if (sock->ssl)
return ssl_getline(sock->ssl);
- }
#endif
return fd_getline(sock->sock);
}
if (!sock)
return 0;
+#if USE_SSL
+ if (sock->ssl)
+ ssl_done_socket(sock);
+#endif
ret = fd_close(sock->sock);
g_free(sock->hostname);
g_free(sock);