Return-Path: Delivered-To: apmail-zookeeper-commits-archive@www.apache.org Received: (qmail 27462 invoked from network); 17 Mar 2011 01:01:08 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 17 Mar 2011 01:01:08 -0000 Received: (qmail 94012 invoked by uid 500); 17 Mar 2011 01:01:08 -0000 Delivered-To: apmail-zookeeper-commits-archive@zookeeper.apache.org Received: (qmail 93996 invoked by uid 500); 17 Mar 2011 01:01:08 -0000 Mailing-List: contact commits-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ Delivered-To: mailing list commits@zookeeper.apache.org Received: (qmail 93988 invoked by uid 99); 17 Mar 2011 01:01:08 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 17 Mar 2011 01:01:08 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 17 Mar 2011 01:01:07 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id EEA2F23888E7; Thu, 17 Mar 2011 01:00:44 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1082362 - in /zookeeper/trunk: CHANGES.txt src/c/include/zookeeper.h src/c/src/zookeeper.c src/c/tests/TestClient.cc Date: Thu, 17 Mar 2011 01:00:44 -0000 To: commits@zookeeper.apache.org From: breed@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110317010044.EEA2F23888E7@eris.apache.org> Author: breed Date: Thu Mar 17 01:00:44 2011 New Revision: 1082362 URL: http://svn.apache.org/viewvc?rev=1082362&view=rev Log: ZOOKEEPER-1020. Implement function in C client to determine which host you're currently connected to. Modified: zookeeper/trunk/CHANGES.txt zookeeper/trunk/src/c/include/zookeeper.h zookeeper/trunk/src/c/src/zookeeper.c zookeeper/trunk/src/c/tests/TestClient.cc Modified: zookeeper/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1082362&r1=1082361&r2=1082362&view=diff ============================================================================== --- zookeeper/trunk/CHANGES.txt (original) +++ zookeeper/trunk/CHANGES.txt Thu Mar 17 01:00:44 2011 @@ -282,6 +282,8 @@ NEW FEATURES: ZOOKEEPER-775. A large scale pub/sub system (Erwin, Ivan and Ben via mahadev) + ZOOKEEPER-1020. Implement function in C client to determine which host you're currently connected to. (stephen tyree via breed) + Release 3.3.0 - 2010-03-24 Non-backward compatible changes: Modified: zookeeper/trunk/src/c/include/zookeeper.h URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/c/include/zookeeper.h?rev=1082362&r1=1082361&r2=1082362&view=diff ============================================================================== --- zookeeper/trunk/src/c/include/zookeeper.h (original) +++ zookeeper/trunk/src/c/include/zookeeper.h Thu Mar 17 01:00:44 2011 @@ -20,6 +20,7 @@ #define ZOOKEEPER_H_ #include +#include #include #include #include @@ -366,6 +367,14 @@ ZOOAPI void zoo_set_context(zhandle_t *z */ ZOOAPI watcher_fn zoo_set_watcher(zhandle_t *zh,watcher_fn newFn); +/** + * \brief returns the socket address for the current connection + * \return socket address of the connected host or NULL on failure, only valid if the + * connection is current connected + */ +ZOOAPI struct sockaddr* zookeeper_get_connected_host(zhandle_t *zh, + struct sockaddr *addr, socklen_t *addr_len); + #ifndef THREADED /** * \brief Returns the events that zookeeper is interested in. Modified: zookeeper/trunk/src/c/src/zookeeper.c URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/c/src/zookeeper.c?rev=1082362&r1=1082361&r2=1082362&view=diff ============================================================================== --- zookeeper/trunk/src/c/src/zookeeper.c (original) +++ zookeeper/trunk/src/c/src/zookeeper.c Thu Mar 17 01:00:44 2011 @@ -645,6 +645,18 @@ watcher_fn zoo_set_watcher(zhandle_t *zh return oldWatcher; } +struct sockaddr* zookeeper_get_connected_host(zhandle_t *zh, + struct sockaddr *addr, socklen_t *addr_len) +{ + if (zh->state!=ZOO_CONNECTED_STATE) { + return NULL; + } + if (getpeername(zh->fd, addr, addr_len)==-1) { + return NULL; + } + return addr; +} + static void log_env() { char buf[2048]; #ifdef HAVE_SYS_UTSNAME_H Modified: zookeeper/trunk/src/c/tests/TestClient.cc URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/c/tests/TestClient.cc?rev=1082362&r1=1082361&r2=1082362&view=diff ============================================================================== --- zookeeper/trunk/src/c/tests/TestClient.cc (original) +++ zookeeper/trunk/src/c/tests/TestClient.cc Thu Mar 17 01:00:44 2011 @@ -503,7 +503,7 @@ public: void testAuth() { int rc; count = 0; - watchctx_t ctx1, ctx2, ctx3, ctx4; + watchctx_t ctx1, ctx2, ctx3, ctx4, ctx5; zhandle_t *zk = createClient(&ctx1); struct ACL_vector nodeAcl; struct ACL acl_val; @@ -600,6 +600,17 @@ public: CPPUNIT_ASSERT_EQUAL(0, zoo_state(zk2)); // 0 ==> ZOO_CLOSED_STATE rc = zoo_add_auth(zk2, "digest", "pat:passwd", 10, voidCompletion, (void*)ZOK); CPPUNIT_ASSERT_EQUAL((int) ZINVALIDSTATE, rc); + + struct sockaddr addr; + socklen_t addr_len = sizeof(addr); + zk = createClient(&ctx5); + stopServer(); + CPPUNIT_ASSERT(ctx5.waitForDisconnected(zk)); + CPPUNIT_ASSERT(zookeeper_get_connected_host(zk, &addr, &addr_len) == NULL); + addr_len = sizeof(addr); + startServer(); + CPPUNIT_ASSERT(ctx5.waitForConnected(zk)); + CPPUNIT_ASSERT(zookeeper_get_connected_host(zk, &addr, &addr_len) != NULL); } void testGetChildren2() {