Add compatibility for libimobiledevice API >= 1.1.5
diff --git a/configure.ac b/configure.ac
index 5d5a59e..11f24b4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,18 +16,22 @@
 
 # Checks for libraries.
 PKG_CHECK_MODULES(libimobiledevice, libimobiledevice-1.0 >= 0.9.7)
-PKG_CHECK_MODULES(libimobiledevice10, libimobiledevice-1.0 >= 1.0.0, libimobiledevice_1_0=yes, libimobiledevice_1_0=no)
+PKG_CHECK_MODULES(libimobiledevice100, libimobiledevice-1.0 >= 1.0.0, libimobiledevice_1_0=yes, libimobiledevice_1_0=no)
 if test x"$libimobiledevice_1_0" = xyes; then
   AC_DEFINE([HAVE_LIBIMOBILEDEVICE_1_0], 1, [Define if libimobiledevice is using 1.0.0 API])
 fi
-PKG_CHECK_MODULES(libimobiledevice11, libimobiledevice-1.0 >= 1.1.0, libimobiledevice_1_1=yes, libimobiledevice_1_1=no)
+PKG_CHECK_MODULES(libimobiledevice110, libimobiledevice-1.0 >= 1.1.0, libimobiledevice_1_1=yes, libimobiledevice_1_1=no)
 if test x"$libimobiledevice_1_1" = xyes; then
   AC_DEFINE([HAVE_LIBIMOBILEDEVICE_1_1], 1, [Define if libimobiledevice is using 1.1.0 API])
 fi
-PKG_CHECK_MODULES(libimobiledevice12, libimobiledevice-1.0 >= 1.1.2, libimobiledevice_1_2=yes, libimobiledevice_1_2=no)
+PKG_CHECK_MODULES(libimobiledevice112, libimobiledevice-1.0 >= 1.1.2, libimobiledevice_1_2=yes, libimobiledevice_1_2=no)
 if test x"$libimobiledevice_1_2" = xno; then
   PKG_CHECK_MODULES(libglib2, glib-2.0 >= 2.14.1)
 fi
+PKG_CHECK_MODULES(libimobiledevice115, libimobiledevice-1.0 >= 1.1.5, libimobiledevice_1_1_5=yes, libimobiledevice_1_1_5=no)
+if test x"$libimobiledevice_1_1_5" = xyes; then
+  AC_DEFINE([HAVE_LIBIMOBILEDEVICE_1_1_5], 1, [Define if libimobiledevice is using 1.1.5 API])
+fi
 PKG_CHECK_MODULES(libplist, libplist >= 0.15)
 PKG_CHECK_MODULES(libzip, libzip >= 0.8)
 
diff --git a/src/ideviceinstaller.c b/src/ideviceinstaller.c
index 7682536..51fbe7b 100644
--- a/src/ideviceinstaller.c
+++ b/src/ideviceinstaller.c
@@ -388,7 +388,11 @@
 	instproxy_client_t ipc = NULL;
 	np_client_t np = NULL;
 	afc_client_t afc = NULL;
-	uint16_t port = 0;
+#ifdef HAVE_LIBIMOBILEDEVICE_1_1_5
+	lockdownd_service_descriptor_t service = NULL;
+#else
+	uint16_t service = 0;
+#endif
 	int res = 0;
 
 	parse_opts(argc, argv);
@@ -408,13 +412,13 @@
 
 	if ((lockdownd_start_service
 		 (client, "com.apple.mobile.notification_proxy",
-		  &port) != LOCKDOWN_E_SUCCESS) || !port) {
+		  &service) != LOCKDOWN_E_SUCCESS) || !service) {
 		fprintf(stderr,
 				"Could not start com.apple.mobile.notification_proxy!\n");
 		goto leave_cleanup;
 	}
 
-	if (np_client_new(phone, port, &np) != NP_E_SUCCESS) {
+	if (np_client_new(phone, service, &np) != NP_E_SUCCESS) {
 		fprintf(stderr, "Could not connect to notification_proxy!\n");
 		goto leave_cleanup;
 	}
@@ -430,16 +434,22 @@
 	np_observe_notifications(np, noties);
 
 run_again:
-	port = 0;
-	if ((lockdownd_start_service
-		 (client, "com.apple.mobile.installation_proxy",
-		  &port) != LOCKDOWN_E_SUCCESS) || !port) {
+#ifdef HAVE_LIBIMOBILEDEVICE_1_1_5
+	if (service) {
+		lockdownd_service_descriptor_free(service);
+	}
+	service = NULL;
+#else
+	service = 0;
+#endif
+	if ((lockdownd_start_service(client, "com.apple.mobile.installation_proxy",
+		  &service) != LOCKDOWN_E_SUCCESS) || !service) {
 		fprintf(stderr,
 				"Could not start com.apple.mobile.installation_proxy!\n");
 		goto leave_cleanup;
 	}
 
-	if (instproxy_client_new(phone, port, &ipc) != INSTPROXY_E_SUCCESS) {
+	if (instproxy_client_new(phone, service, &ipc) != INSTPROXY_E_SUCCESS) {
 		fprintf(stderr, "Could not connect to installation_proxy!\n");
 		goto leave_cleanup;
 	}
@@ -554,9 +564,16 @@
 		uint64_t af = 0;
 		char buf[8192];
 
-		port = 0;
-		if ((lockdownd_start_service(client, "com.apple.afc", &port) !=
-			 LOCKDOWN_E_SUCCESS) || !port) {
+#ifdef HAVE_LIBIMOBILEDEVICE_1_1_5
+		if (service) {
+			lockdownd_service_descriptor_free(service);
+		}
+		service = NULL;
+#else
+		service = 0;
+#endif
+		if ((lockdownd_start_service(client, "com.apple.afc", &service) !=
+			 LOCKDOWN_E_SUCCESS) || !service) {
 			fprintf(stderr, "Could not start com.apple.afc!\n");
 			goto leave_cleanup;
 		}
@@ -564,7 +581,7 @@
 		lockdownd_client_free(client);
 		client = NULL;
 
-		if (afc_client_new(phone, port, &afc) != INSTPROXY_E_SUCCESS) {
+		if (afc_client_new(phone, service, &afc) != INSTPROXY_E_SUCCESS) {
 			fprintf(stderr, "Could not connect to AFC!\n");
 			goto leave_cleanup;
 		}
@@ -1013,8 +1030,15 @@
 				goto leave_cleanup;
 			}
 
-			port = 0;
-			if ((lockdownd_start_service(client, "com.apple.afc", &port) != LOCKDOWN_E_SUCCESS) || !port) {
+#ifdef HAVE_LIBIMOBILEDEVICE_1_1_5
+			if (service) {
+				lockdownd_service_descriptor_free(service);
+			}
+			service = NULL;
+#else
+			service = 0;
+#endif
+			if ((lockdownd_start_service(client, "com.apple.afc", &service) != LOCKDOWN_E_SUCCESS) || !service) {
 				fprintf(stderr, "Could not start com.apple.afc!\n");
 				free(copy_path);
 				goto leave_cleanup;
@@ -1023,7 +1047,7 @@
 			lockdownd_client_free(client);
 			client = NULL;
 
-			if (afc_client_new(phone, port, &afc) != INSTPROXY_E_SUCCESS) {
+			if (afc_client_new(phone, service, &afc) != INSTPROXY_E_SUCCESS) {
 				fprintf(stderr, "Could not connect to AFC!\n");
 				goto leave_cleanup;
 			}