[Goodies-commits] r5234 - xfce4-mailwatch-plugin/trunk/libmailwatch-core

Brian Tarricone kelnos at xfce.org
Sat Aug 16 10:47:59 CEST 2008


Author: kelnos
Date: 2008-08-16 08:47:59 +0000 (Sat, 16 Aug 2008)
New Revision: 5234

Modified:
   xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.c
   xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.h
Log:
allow setting service after creation, allow getting actual port after connect

Modified: xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.c
===================================================================
--- xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.c	2008-08-16 08:47:47 UTC (rev 5233)
+++ xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.c	2008-08-16 08:47:59 UTC (rev 5234)
@@ -91,6 +91,7 @@
     const gchar *line_terminator;
 
     gint fd;
+    guint actual_port;
 
     guchar *buffer;
     gsize buffer_len;
@@ -206,6 +207,7 @@
     net_conn->service = service ? g_strdup(service) : NULL;
     net_conn->line_terminator = g_intern_string("\r\n");
     net_conn->fd = -1;
+    net_conn->actual_port = -1;
 
     return net_conn;
 }
@@ -221,6 +223,16 @@
 }
 
 void
+xfce_mailwatch_net_conn_set_service(XfceMailwatchNetConn *net_conn,
+                                    const gchar *service)
+{
+    g_return_if_fail(net_conn && net_conn->fd == -1);
+
+    g_free(net_conn->service);
+    net_conn->service = g_strdup(service);
+}
+
+void
 xfce_mailwatch_net_conn_set_port(XfceMailwatchNetConn *net_conn,
                                  guint port)
 {
@@ -232,7 +244,11 @@
 xfce_mailwatch_net_conn_get_port(XfceMailwatchNetConn *net_conn)
 {
     g_return_val_if_fail(net_conn, 0);
-    return net_conn->port;
+
+    if(net_conn->actual_port != -1)
+        return net_conn->actual_port;
+    else
+        return net_conn->port;
 }
 
 void
@@ -316,6 +332,8 @@
     g_return_val_if_fail(net_conn && (!error || !*error), FALSE);
     g_return_val_if_fail(net_conn->fd == -1, TRUE);
 
+    net_conn->actual_port = -1;
+
     if(!xfce_mailwatch_net_conn_get_addrinfo(net_conn, &addresses, error)) {
         DBG("failed to get sockaddr");
         return FALSE;
@@ -387,6 +405,28 @@
                         DBG("    connection succeeded");
                         connect_succeeded = TRUE;
                         errno = 0;
+
+                        /* figure out the actual port */
+                        switch(ai->ai_addr->sa_family) {
+#ifdef ENABLE_IPV6_SUPPORT
+                            case AF_INET6:
+                            {
+                                struct sockaddr_in6 *addr = (struct sockaddr_in6 *)ai->ai_addr;
+                                net_conn->actual_port = ntohs(addr->sin6_port);
+                                break;
+                            }
+#endif
+                            case AF_INET:
+                            {
+                                struct sockaddr_in *addr = (struct sockaddr_in *)ai->ai_addr;
+                                net_conn->actual_port = ntohs(addr->sin_port);
+                                break;
+                            }
+
+                            default:
+                                g_warning("Unable to determine socket type to get real port number");
+                                break;
+                        }
                     } else {
                         DBG("    connection failed: sock_err is (%d) %s",
                             sock_err, strerror(sock_err));
@@ -519,7 +559,7 @@
 gint
 xfce_mailwatch_net_conn_send_data(XfceMailwatchNetConn *net_conn,
                                   const guchar *buf,
-                                  gsize buf_len,
+                                  gssize buf_len,
                                   GError **error)
 {
     gint bout = 0;
@@ -527,6 +567,9 @@
     g_return_val_if_fail(net_conn && (!error || !*error), -1);
     g_return_val_if_fail(net_conn->fd != -1, -1);
 
+    if(buf_len < 0)
+        buf_len = strlen((const gchar *)buf);
+
 #ifdef HAVE_SSL_SUPPORT
     if(net_conn->is_secure) {
         gint ret = 0, totallen = buf_len;
@@ -776,7 +819,7 @@
 
 gint
 xfce_mailwatch_net_conn_recv_line(XfceMailwatchNetConn *net_conn,
-                                  guchar *buf,
+                                  gchar *buf,
                                   gsize buf_len,
                                   GError **error)
 {
@@ -864,6 +907,7 @@
     shutdown(net_conn->fd, SHUT_RDWR);
     close(net_conn->fd);
     net_conn->fd = -1;
+    net_conn->actual_port = -1;
 }
 
 void

Modified: xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.h
===================================================================
--- xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.h	2008-08-16 08:47:47 UTC (rev 5233)
+++ xfce4-mailwatch-plugin/trunk/libmailwatch-core/mailwatch-net-conn.h	2008-08-16 08:47:59 UTC (rev 5234)
@@ -38,6 +38,9 @@
                                                       XMNCShouldContinueFunc func,
                                                       gpointer user_data);
 
+void xfce_mailwatch_net_conn_set_service(XfceMailwatchNetConn *net_conn,
+                                         const gchar *service);
+
 void xfce_mailwatch_net_conn_set_port(XfceMailwatchNetConn *net_conn,
                                       guint port);
 guint xfce_mailwatch_net_conn_get_port(XfceMailwatchNetConn *net_conn);
@@ -56,7 +59,7 @@
 
 gint xfce_mailwatch_net_conn_send_data(XfceMailwatchNetConn *net_conn,
                                        const guchar *buf,
-                                       gsize buf_len,
+                                       gssize buf_len,
                                        GError **error);
 
 gint xfce_mailwatch_net_conn_recv_data(XfceMailwatchNetConn *net_conn,
@@ -64,7 +67,7 @@
                                        gsize buf_len,
                                        GError **error);
 gint xfce_mailwatch_net_conn_recv_line(XfceMailwatchNetConn *net_conn,
-                                       guchar *buf,
+                                       gchar *buf,
                                        gsize buf_len,
                                        GError **error);
 




More information about the Goodies-commits mailing list