[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    [PATCH] remove duplicate code from kdelibs/kdecore/ksock.cpp
From:       Matthias Welwarsky <matze () stud ! fbi ! fh-darmstadt ! de>
Date:       2001-06-18 9:03:03
[Download RAW message or body]

Hi all,

the following patch removes some duplicate code from KServerSocket, KSocket. 
It changes the ipv4_addr() and port() methods to make use of 
KInetSocketAddress instead of KSocketAddress. It removes code that is already 
in KInetSocketAddress.

regards,
	Matthias

["ksock.cpp.patch" (text/x-c++)]

Index: ksock.cpp
===================================================================
RCS file: /cvs/kdelibs/kdecore/ksock.cpp,v
retrieving revision 1.79
diff -u -r1.79 ksock.cpp
--- ksock.cpp	2001/06/11 00:32:41	1.79
+++ ksock.cpp	2001/06/18 08:31:33
@@ -214,22 +214,19 @@
 unsigned long KSocket::ipv4_addr()
 {
   unsigned long retval = 0;
-  KSocketAddress *sa = KExtendedSocket::peerAddress(sock);
-  if (sa == NULL)
+
+  // MW use KInetSocketAddress, no need to duplicate code
+  KInetSocketAddress *sa = dynamic_cast<KInetSocketAddress*>(KExtendedSocket::peerAddress(sock));
+  if (sa == NULL) // MW not a KInetSocketAddress or empty
     return 0;
 
-  if (sa->address() != NULL && (sa->address()->sa_family == PF_INET
-#ifdef PF_INET6
-				|| sa->address()->sa_family == PF_INET6
-#endif
-      ))
-    {
-      KInetSocketAddress *ksin = (KInetSocketAddress*)sa;
-      const sockaddr_in *sin = ksin->addressV4();
-      if (sin != NULL)
-	retval = *(unsigned long*)&sin->sin_addr; // I told you this was dumb
-    }
+  const sockaddr_in *sin = sa->addressV4();
+  if (sin != NULL) // MW V4 or convertible V6
+    retval = sin->sin_addr.s_addr;
+
   delete sa;
+
+  kdDebug() << "KSocket::ipv4_addr() = " << inet_ntoa(sin->sin_addr) << endl;
   return retval;
 }
 
@@ -382,47 +379,33 @@
 {
   if (d == NULL || d->ks == NULL || sock == -1)
     return 0;
-  const KSocketAddress *sa = d->ks->localAddress();
-  if (sa == NULL)
+
+  // MW use KInetSocketAddress
+  // why would we want to duplicate code?
+  const KInetSocketAddress *sa = dynamic_cast<const KInetSocketAddress*>(d->ks->localAddress());
+  if (sa == NULL) // MW not a KInetSocketAddress or empty
     return 0;
 
-  // we can use sockaddr_in here even if it isn't IPv4
-  sockaddr_in *sin = (sockaddr_in*)sa->address();
+  return sa->port();
 
-  if (sin->sin_family == PF_INET)
-    // correct family
-    return sin->sin_port;
-#ifdef PF_INET6
-  else if (sin->sin_family == PF_INET6)
-    {
-      kde_sockaddr_in6 *sin6 = (kde_sockaddr_in6*)sin;
-      return sin6->sin6_port;
-    }
-#endif
-  return 0;			// not a port we know
 }
 
 unsigned long KServerSocket::ipv4_addr()
 {
   if (d == NULL || d->ks == NULL || sock == -1)
     return 0;
-  const KSocketAddress *sa = d->ks->localAddress();
   
-  const sockaddr_in *sin = (sockaddr_in*)sa->address();
+  const KInetSocketAddress *sa = dynamic_cast<const KInetSocketAddress*>(d->ks->localAddress());
+  if (sa == NULL) // MW not a KInetSocketAddress or empty
+    return 0;
 
-  if (sin->sin_family == PF_INET)
-    // correct family
-    return ntohl(*(unsigned long*)&sin->sin_addr);
-#ifdef PF_INET6
-  else if (sin->sin_family == PF_INET6)
-    {
-      KInetSocketAddress *ksin = (KInetSocketAddress*)sa;
-      sin = ksin->addressV4();
-      if (sin != NULL)
-	return *(unsigned long*)&sin->sin_addr;
-    }
-#endif
-  return 0;			// this is dumb, isn't it?
+  const sockaddr_in *sin = sa->addressV4();
+  if (sin == NULL) // MW not convertible
+    return 0;
+
+  kdDebug() << "KServerSocket::ipv4_addr() = " << inet_ntoa(sin->sin_addr) << endl;
+
+  return sin->sin_addr.s_addr;
 }
 
 void KServerSocket::slotAccept( int )

>> Visit http://master.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic