Open network service discovery API

Add support for DNS based network service discovery API. This
allows applications to discover and resolve applications on a
local network such as Wi-Fi

Change-Id: Ie89895edd35d12b7f7a23fb5fed36cb2b2079f7a
diff --git a/services/java/com/android/server/NsdService.java b/services/java/com/android/server/NsdService.java
index a3ac8d0..8014e27 100644
--- a/services/java/com/android/server/NsdService.java
+++ b/services/java/com/android/server/NsdService.java
@@ -167,6 +167,18 @@
                                 NsdManager.ERROR);
                     }
                     break;
+                case NsdManager.UNREGISTER_SERVICE:
+                    if (DBG) Slog.d(TAG, "unregister service");
+                    clientInfo = mClients.get(msg.replyTo);
+                    int regId = msg.arg1;
+                    if (clientInfo.mRegisteredIds.remove(new Integer(regId)) &&
+                            unregisterService(regId)) {
+                        mReplyChannel.replyToMessage(msg, NsdManager.UNREGISTER_SERVICE_SUCCEEDED);
+                    } else {
+                        mReplyChannel.replyToMessage(msg, NsdManager.UNREGISTER_SERVICE_FAILED,
+                                NsdManager.ERROR);
+                    }
+                    break;
                 case NsdManager.UPDATE_SERVICE:
                     if (DBG) Slog.d(TAG, "Update service");
                     //TODO: implement
@@ -237,6 +249,8 @@
     }
 
     public Messenger getMessenger() {
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INTERNET,
+            "NsdService");
         return new Messenger(mAsyncServiceHandler);
     }