Reduce MDNS logging

If it's compiled with no debugging turned on we should not log all
the info and warning and stuff.

Change-Id: Ifacfeca81d24a8a542e3ce2eb0684643eb35e166
diff --git a/Android.mk b/Android.mk
index d277eec..575073e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -54,7 +54,7 @@
 
 LOCAL_C_INCLUDES := external/mdnsresponder/mDNSShared
 
-LOCAL_CFLAGS := -O2 -g -W -Wall -D__ANDROID__ -D_GNU_SOURCE -DHAVE_IPV6 -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DTARGET_OS_LINUX -fno-strict-aliasing -DHAVE_LINUX -DMDNS_UDS_SERVERPATH=\"/dev/socket/mdnsd\" -DMDNS_DEBUGMSGS=4
+LOCAL_CFLAGS := -O2 -g -W -Wall -D__ANDROID__ -D_GNU_SOURCE -DHAVE_IPV6 -DNOT_HAVE_SA_LEN -DUSES_NETLINK -DTARGET_OS_LINUX -fno-strict-aliasing -DHAVE_LINUX -DMDNS_UDS_SERVERPATH=\"/dev/socket/mdnsd\" -DMDNS_DEBUGMSGS=0
 
 LOCAL_SYSTEM_SHARED_LIBRARIES := libmdnssd libc libcutils
 
diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
index c4674c3..ee0b335 100755
--- a/mDNSPosix/mDNSPosix.c
+++ b/mDNSPosix/mDNSPosix.c
@@ -475,7 +475,12 @@
 mDNSlocal void GetUserSpecifiedRFC1034ComputerName(domainlabel *const namelabel)
 	{
 	int len = 0;
+#ifndef __ANDROID__
 	gethostname((char *)(&namelabel->c[1]), MAX_DOMAIN_LABEL);
+#else
+	// use an appropriate default label rather than the linux default of 'localhost'
+	strncpy(&namelabel->c[1], "Android", MAX_DOMAIN_LABEL);
+#endif
 	while (len < MAX_DOMAIN_LABEL && namelabel->c[len+1] && namelabel->c[len+1] != '.') len++;
 	namelabel->c[0] = len;
 	}
diff --git a/mDNSShared/PlatformCommon.c b/mDNSShared/PlatformCommon.c
index fc3c0b1..2fb530e 100644
--- a/mDNSShared/PlatformCommon.c
+++ b/mDNSShared/PlatformCommon.c
@@ -202,11 +202,15 @@
 #ifdef __ANDROID__
 		switch (loglevel)
 			{
-//			case MDNS_LOG_OPERATION: syslog_level = ANDROID_LOG_WARN;   break;
-//			case MDNS_LOG_SPS:
-//			case MDNS_LOG_DEBUG:     syslog_level = ANDROID_LOG_DEBUG;  break;
-//			case MDNS_LOG_INFO:      syslog_level = ANDROID_LOG_INFO;   break;
+			case MDNS_LOG_DEBUG:     syslog_level = ANDROID_LOG_DEBUG;  break;
+#if MDNS_DEBUGMSGS > 0
+			case MDNS_LOG_OPERATION: syslog_level = ANDROID_LOG_WARN;   break;
+			case MDNS_LOG_SPS:       syslog_level = ANDROID_LOG_DEBUG;  break;
+			case MDNS_LOG_INFO:      syslog_level = ANDROID_LOG_INFO;   break;
 			default:                 syslog_level = ANDROID_LOG_ERROR;  break;
+#else
+			default:		return;
+#endif
 			}
 		__android_log_print(syslog_level, "mdns", "%s", buffer);
 #else
diff --git a/mDNSShared/dns_sd.h b/mDNSShared/dns_sd.h
index 607ebcd..be39083 100644
--- a/mDNSShared/dns_sd.h
+++ b/mDNSShared/dns_sd.h
@@ -1967,6 +1967,24 @@
     );
 
 
+typedef void (DNSSD_API *DNSHostnameChangedReply)
+    (
+    DNSServiceRef                    sdRef,
+    DNSServiceFlags                  flags,
+    DNSServiceErrorType              errorCode,
+    const char                       *hostname,
+    void                             *context
+    );
+
+DNSServiceErrorType DNSSD_API DNSSetHostname
+    (
+    DNSServiceRef            *sdRef,
+    DNSServiceFlags          flags,
+    const char               *hostname,
+    DNSHostnameChangedReply  callBack,
+    void                     *context
+    );
+
 /*********************************************************************************************
  *
  *  General Utility Functions
diff --git a/mDNSShared/dnssd_clientstub.c b/mDNSShared/dnssd_clientstub.c
index 30f63fc..9af6135 100644
--- a/mDNSShared/dnssd_clientstub.c
+++ b/mDNSShared/dnssd_clientstub.c
@@ -841,6 +841,9 @@
 			case enumeration_request:
 				if (sdr->AppCallback)((DNSServiceDomainEnumReply) sdr->AppCallback)(sdr, 0, 0, error, NULL,                   sdr->AppContext);
 				break;
+			case sethost_request:
+				if (sdr->AppCallback)((DNSServiceSetHostReply)    sdr->AppCallback)(sdr, 0,    error, NULL,                   sdr->AppContext);
+				break;
 			case connection_request:
 				// This means Register Record, walk the list of DNSRecords to do the callback
 				rec = sdr->rec;
@@ -1380,6 +1383,43 @@
 	return err;
 	}
 
+static void handle_hostname_changed_response(DNSServiceOp *const sdr, const CallbackHeader *const cbh, const char *data, const char *const end)
+	{
+	char replyHostname[256];
+
+	get_string(&data, end, replyHostname, sizeof(replyHostname));
+	if (!data) syslog(LOG_WARNING, "dnssd_clientstub handle_hsotname_changed_response: error reading result from daemon");
+	else ((DNSHostnameChangedReply)sdr->AppCallback)(sdr, cbh->cb_flags, cbh->cb_err, replyHostname, sdr->AppContext);
+	// MUST NOT touch sdr after invoking AppCallback -- client is allowed to dispose it from within callback function
+	}
+
+DNSServiceErrorType DNSSD_API DNSSetHostname
+	(
+	DNSServiceRef           *sdRef,
+	DNSServiceFlags          flags,
+	const char              *hostname,
+	DNSHostnameChangedReply  callBack,
+	void                    *context
+	)
+	{
+	char *ptr;
+	size_t len;
+	ipc_msg_hdr *hdr;
+	DNSServiceErrorType err = ConnectToServer(sdRef, flags, sethost_request, handle_hostname_changed_response, callBack, context);
+	if (err) return err;
+	len = sizeof(flags);
+	len += strlen(hostname) + 1;
+
+	hdr = create_hdr(sethost_request, &len, &ptr, (*sdRef)->primary ? 1 : 0, *sdRef);
+	if (!hdr) { DNSServiceRefDeallocate(*sdRef); *sdRef = NULL; return kDNSServiceErr_NoMemory; }
+
+	put_flags(flags, &ptr);
+	put_string(hostname, &ptr);
+	err = deliver_request(hdr, *sdRef);		// Will free hdr for us
+	if (err) { DNSServiceRefDeallocate(*sdRef); *sdRef = NULL; }
+	return err;
+	}
+
 DNSServiceErrorType DNSSD_API DNSServiceSetDefaultDomainForUser(DNSServiceFlags flags, const char *domain);
 DNSServiceErrorType DNSSD_API DNSServiceSetDefaultDomainForUser(DNSServiceFlags flags, const char *domain)
 	{
diff --git a/mDNSShared/dnssd_ipc.h b/mDNSShared/dnssd_ipc.h
index c02ca03..a46a979 100644
--- a/mDNSShared/dnssd_ipc.h
+++ b/mDNSShared/dnssd_ipc.h
@@ -139,7 +139,7 @@
     port_mapping_request,	// New in Leopard and B4W 2.0
 	addrinfo_request,
 	send_bpf,				// New in SL
-
+    sethost_request,
 	cancel_request = 63
     } request_op_t;
 
@@ -153,7 +153,8 @@
     reg_record_reply_op,	// Up to here is in Tiger and B4W 1.0.3
     getproperty_reply_op,	// New in B4W 1.0.4
     port_mapping_reply_op,	// New in Leopard and B4W 2.0
-	addrinfo_reply_op
+	addrinfo_reply_op,
+    sethost_reply,
     } reply_op_t;
 
 #if defined(_WIN64)
diff --git a/mDNSShared/uds_daemon.c b/mDNSShared/uds_daemon.c
index f5dfd72..580b92e 100644
--- a/mDNSShared/uds_daemon.c
+++ b/mDNSShared/uds_daemon.c
@@ -2117,6 +2117,33 @@
 	else           RmvAutoBrowseDomain(0, &answer->rdata->u.name);
 	}
 
+mDNSlocal mStatus handle_sethost_request(request_state *request)
+	{
+	get_flags(&request->msgptr, request->msgend);
+	char hostName[MAX_DOMAIN_LABEL];
+	int len = 0;
+
+	if (get_string(&request->msgptr, request->msgend, hostName, MAX_DOMAIN_LABEL) < 0) return(mStatus_BadParamErr);
+
+	LogOperation("%3d: DNSSetHostname(%X, %d, nonstr ) START",
+			request->sd, request->flags);
+
+        // if we start using this as a callback for notification when the hostname changes we may need to cleanup from it
+//	request->terminate = sethost_termination_callback;
+
+	if(hostName[0] == 0) return mStatus_BadParamErr;
+
+        while (len < MAX_DOMAIN_LABEL && hostName[len+1] && hostName[len+1] != '.') len++;
+
+	strncpy(&(mDNSStorage.nicelabel.c[1]), hostName, len);
+	mDNSStorage.nicelabel.c[0] = len;
+	strncpy(&(mDNSStorage.hostlabel.c[1]), hostName, len);
+	mDNSStorage.hostlabel.c[0] = len;
+
+	mDNS_SetFQDN(&mDNSStorage);
+	return mStatus_NoError;
+	}
+
 mDNSlocal mStatus handle_browse_request(request_state *request)
 	{
 	char regtype[MAX_ESCAPED_DOMAIN_NAME], domain[MAX_ESCAPED_DOMAIN_NAME];
@@ -3759,6 +3786,7 @@
 			case addrinfo_request:         min_size += sizeof(mDNSu32) + 4 /* v4/v6 */   + 1 /* hostname */;                       break;
 			case send_bpf:                 // Same as cancel_request below
 			case cancel_request:           min_size = 0;                                                                           break;
+                        case sethost_request:          min_size = sizeof(mDNSu32) + 1 /* hostname */;                                          break;
 			default: LogMsg("ERROR: validate_message - unsupported req type: %d", req->hdr.op); min_size = -1;                     break;
 			}
 
@@ -3807,6 +3835,7 @@
 			case getproperty_request:                handle_getproperty_request (req);  break;
 			case port_mapping_request:         err = handle_port_mapping_request(req);  break;
 			case addrinfo_request:             err = handle_addrinfo_request    (req);  break;
+                        case sethost_request:              err = handle_sethost_request     (req);  break;
 			case send_bpf:                     /* Do nothing for send_bpf */            break;
 
 			// These are all operations that work with an existing request_state object