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

List:       kde-commits
Subject:    kdelibs/dcop
From:       Waldo Bastian <bastian () kde ! org>
Date:       2004-07-10 17:16:23
Message-ID: 20040710171623.D686F16B1C () office ! kde ! org
[Download RAW message or body]

CVS commit by waba: 

Revert last change: It can confuse older dcop clients


  M +56 -3     dcopserver.cpp   1.169


--- kdelibs/dcop/dcopserver.cpp  #1.168:1.169
@@ -877,5 +877,32 @@ static const IcePaVersionRec DCOPServerV
 };
 
-static Status DCOPServerProtocolSetupProc ( IceConn /*iceConn*/,
+static const IcePoVersionRec DUMMYVersions[] = {
+    { DCOPVersionMajor, DCOPVersionMinor, 0 }
+};
+
+typedef struct DCOPServerConnStruct *DCOPServerConn;
+
+struct DCOPServerConnStruct
+{
+    /*
+     * We use ICE to esablish a connection with the client.
+   */
+
+    IceConn             iceConn;
+
+
+    /*
+   * Major and minor versions of the XSMP.
+   */
+
+    int                 proto_major_version;
+    int                 proto_minor_version;
+
+
+    QCString clientId;
+};
+
+
+static Status DCOPServerProtocolSetupProc ( IceConn iceConn,
                                             int majorVersion, int minorVersion,
                                             char* vendor, char* release,
@@ -883,4 +910,6 @@ static Status DCOPServerProtocolSetupPro
                                             char **/*failureReasonRet*/)
 {
+    DCOPServerConn serverConn;
+
     /*
      * vendor/release are undefined for ProtocolSetup in DCOP
@@ -892,7 +921,20 @@ static Status DCOPServerProtocolSetupPro
         free (release);
 
-    *clientDataRet = 0;
 
-    return (majorVersion == DCOPVersionMajor && minorVersion == DCOPVersionMinor);
+    /*
+     * Allocate new DCOPServerConn.
+     */
+
+    serverConn = new DCOPServerConnStruct;
+
+    serverConn->iceConn = iceConn;
+    serverConn->proto_major_version = majorVersion;
+    serverConn->proto_minor_version = minorVersion;
+    //serverConn->clientId already initialized
+
+    *clientDataRet = static_cast<IcePointer>(serverConn);
+
+
+    return 1;
 }
 
@@ -918,4 +960,15 @@ DCOPServer::DCOPServer(bool _suicide)
     dcopSignals = new DCOPSignals;
 
+    extern int _kde_IceLastMajorOpcode; // from libICE
+    if (_kde_IceLastMajorOpcode < 1 )
+        IceRegisterForProtocolSetup(const_cast<char *>("DUMMY"),
+                                    const_cast<char *>("DUMMY"),
+                                    const_cast<char *>("DUMMY"),
+                                    1, const_cast<IcePoVersionRec *>(DUMMYVersions),
+                                    DCOPAuthCount, const_cast<char **>(DCOPAuthNames),
+                                    DCOPClientAuthProcs, 0);
+    if (_kde_IceLastMajorOpcode < 1 )
+        qWarning("DCOPServer Error: incorrect major opcode!");
+
     the_server = this;
     if (( majorOpcode = IceRegisterForProtocolReply (const_cast<char *>("DCOP"),


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

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