private UpDevice DoHandshake(NetworkDevice device) { try { // Create a Dummy device just for calling it logger.Log("Trying to handshake with device : " + device.networkDeviceName); UpDevice dummyDevice = new UpDevice(device.networkDeviceName); dummyDevice.AddNetworkInterface(device.networkDeviceName, device.networkDeviceType); Call call = new Call(DEVICE_DRIVER_NAME, "handshake", null); call.AddParameter("device", Json.Serialize(currentDevice.ToJSON())); Response response = gateway.CallService(dummyDevice, call); if ((response != null) && string.IsNullOrEmpty(response.error)) { // in case of a success greeting process, register the device in the neighborhood database object responseDevice = response.GetResponseData("device"); if (responseDevice != null) { UpDevice remoteDevice; if (responseDevice is string) { remoteDevice = UpDevice.FromJSON(Json.Deserialize(responseDevice as string)); } else { remoteDevice = UpDevice.FromJSON(responseDevice); } RegisterDevice(remoteDevice); logger.Log("Registered device " + remoteDevice.name); return(remoteDevice); } else { logger.LogError( "Not possible complete handshake with device '" + device.networkDeviceName + "' for no device on the handshake response."); } } else { logger.LogError( "Not possible to handshake with device '" + device.networkDeviceName + (response == null ? ": No Response received." : "': Cause : " + response.error)); } } catch (System.Exception e) { logger.Log(e.StackTrace); logger.LogError("Not possible to handshake with device '" + device.networkDeviceName + "'. " + e.Message); } return(null); }