[xmppd-dev] commit r1539 - in trunk/jabberd14: . jabberd/lib resolver

mail at jabberd.org mail at jabberd.org
Wed Sep 10 02:35:57 CEST 2008


Author: mawis
Date: Wed Sep 10 02:35:57 2008
New Revision: 1539

Log:
Continued work on new resolver

Modified:
   trunk/jabberd14/ChangeLog
   trunk/jabberd14/jabberd/lib/lwresc.cc
   trunk/jabberd14/resolver/resolver.cc
   trunk/jabberd14/resolver/resolver.h

Modified: trunk/jabberd14/ChangeLog
==============================================================================
--- trunk/jabberd14/ChangeLog	Wed Sep 10 02:00:15 2008	(r1538)
+++ trunk/jabberd14/ChangeLog	Wed Sep 10 02:35:57 2008	(r1539)
@@ -7,6 +7,7 @@
     * jabberd/lib/jabberdlib.h: same
     * jabberd/lib/socket.cc: same
     * jabberd/mio_xml.cc: sanity change
+    * jabberd/lib/lwresc.cc: fix in reading uint16_t
 
 2008-09-08  Matthias Wimmer  <m at tthias.eu>
 

Modified: trunk/jabberd14/jabberd/lib/lwresc.cc
==============================================================================
--- trunk/jabberd14/jabberd/lib/lwresc.cc	Wed Sep 10 02:00:15 2008	(r1538)
+++ trunk/jabberd14/jabberd/lib/lwresc.cc	Wed Sep 10 02:35:57 2008	(r1539)
@@ -109,7 +109,7 @@
 		throw std::runtime_error("No data available to be read from the stream");
 	    }
 
-	    return first_char*0x100 + second_char;
+	    return static_cast<unsigned char>(first_char)*0x100 + static_cast<unsigned char>(second_char);
 	}
 
 	uint32_t lwresult::read_uint32(std::istream& is) {

Modified: trunk/jabberd14/resolver/resolver.cc
==============================================================================
--- trunk/jabberd14/resolver/resolver.cc	Wed Sep 10 02:00:15 2008	(r1538)
+++ trunk/jabberd14/resolver/resolver.cc	Wed Sep 10 02:35:57 2008	(r1539)
@@ -40,11 +40,8 @@
 	}
 
 	void resolver::open_lwresd_socket() {
-	    log_debug2(ZONE, LOGT_IO, "opening socket: service=%s, host=%s", lwresd_service.c_str(), lwresd_host.c_str());
 	    int udp_socket = make_netsocket2(lwresd_service, lwresd_host, NETSOCKET_UDP);
 
-	    log_debug2(ZONE, LOGT_IO, "netsocket is on fd %i", udp_socket);
-
 	    lwresd_socket = mio_new(udp_socket, mio_callback, this, MIO_CONNECT_RAW);
 	}
 
@@ -138,7 +135,6 @@
 	    query_bin << query;
 
 	    // send it
-	    log_debug2(ZONE, LOGT_IO, "sending %i bytes", query_bin.str().length());
 	    mio_write(lwresd_socket, NULL, query_bin.str().c_str(), query_bin.str().length());
 	}
 
@@ -250,7 +246,7 @@
 	    return r_DONE;
 	}
 
-	resolver_job::resolver_job(resolver& owner, dpacket dp) : owner(owner) {
+	resolver_job::resolver_job(resolver& owner, dpacket dp) : owner(owner), waited_srv_serial(0) {
 	    // sanity check
 	    if (!dp->host) {
 		throw std::invalid_argument("dpacket has no host");
@@ -298,12 +294,11 @@
 		xmppd::lwresc::rrsetbyname query(name_to_resolve.str(), ns_c_in, ns_t_srv);
 
 		// register result callback
+		waited_srv_serial = query.getSerial();
 		connected_signals.push_back(owner.register_result_callback(query.getSerial(), sigc::mem_fun(*this, &xmppd::resolver::resolver_job::on_srv_query_result)));
 
 		// send query
 		owner.send_query(query);
-
-		// XXX implementation needed
 	    } else {
 		// no SRV lookup, just plain AAAA+A
 
@@ -321,6 +316,19 @@
 	}
 
 	void resolver_job::on_srv_query_result(xmppd::lwresc::lwresult const& result) {
+	    // ignore all results we are not waiting for
+	    if (result.getSerial() != waited_srv_serial)
+		return;
+
+	    // did we successfully get a result?
+	    if (result.getResult() != xmppd::lwresc::lwresult::res_success) {
+		// try next service
+		++current_service;
+		start_resolving_service();
+		return;
+	    }
+
+	    // XXX implement this method
 	}
     }
 }

Modified: trunk/jabberd14/resolver/resolver.h
==============================================================================
--- trunk/jabberd14/resolver/resolver.h	Wed Sep 10 02:00:15 2008	(r1538)
+++ trunk/jabberd14/resolver/resolver.h	Wed Sep 10 02:35:57 2008	(r1539)
@@ -167,6 +167,11 @@
 		 * handle results of SRV queries to the DNS
 		 */
 		void on_srv_query_result(xmppd::lwresc::lwresult const& result);
+
+		/**
+		 * the serial for the SRV query that we have sent last
+		 */
+		uint32_t waited_srv_serial;
 	};
 
 	/**


More information about the dev mailing list