From 6ac4ceb4c6ee63c279f4841381a3eb09598f3517 Mon Sep 17 00:00:00 2001
From: Jonathan Beck
Date: Mon, 25 Aug 2008 23:25:56 +0200
Subject: migrate main.c

---
 src/AFC.c   |  2 +-
 src/AFC.h   | 11 +---------
 src/ifuse.c | 20 ++----------------
 src/main.c  | 68 ++++++++++++++++++++++++++++++-------------------------------
 4 files changed, 37 insertions(+), 64 deletions(-)

(limited to 'src')

diff --git a/src/AFC.c b/src/AFC.c
index 7b6608f..64a26b0 100644
--- a/src/AFC.c
+++ b/src/AFC.c
@@ -596,7 +596,7 @@ int iphone_afc_get_file_attr ( iphone_afc_client_t client, const char *filename,
 	if (!file){
 		ret = IPHONE_E_NO_SUCH_FILE;
 	} else {
-		stbuf->st_mode = file->type | 0644; // but we don't want anything on the iPhone executable, like, ever
+		stbuf->st_mode = file->type | (S_ISDIR(file->type) ? 0755 : 0644);
 		stbuf->st_size = file->size;
 		stbuf->st_blksize = 2048; // FIXME: Is this the actual block size used on the iPhone?
 		stbuf->st_blocks = file->blocks;
diff --git a/src/AFC.h b/src/AFC.h
index 60cb22a..7271dfa 100644
--- a/src/AFC.h
+++ b/src/AFC.h
@@ -52,16 +52,7 @@ struct iphone_afc_file_int {
 	uint32 filehandle, blocks, size, type;
 };
 
-enum {
-	AFC_FILE_READ = 0x00000002, // seems to be able to read and write files
-	AFC_FILE_WRITE = 0x00000003, // writes and creates a file, blanks it out, etc.
-	AFC_FILE_RW = 0x00000005, // seems to do the same as 2. Might even create the file. 
-	AFC_FILE_OP4 = 0x00000004, // no idea -- appears to be "write" -- clears file beforehand like 3
-	AFC_FILE_OP6 = 0x00000006, // no idea yet -- appears to be the same as 5.
-	AFC_FILE_OP1 = 0x00000001, // no idea juuust yet... probably read.
-	AFC_FILE_OP0 = 0x00000000,
-	AFC_FILE_OP10 = 0x0000000a
-};
+
 
 enum {
 	AFC_ERROR = 0x00000001,
diff --git a/src/ifuse.c b/src/ifuse.c
index 7672bb9..cc2072f 100644
--- a/src/ifuse.c
+++ b/src/ifuse.c
@@ -42,8 +42,8 @@
 GHashTable *file_handles;
 int fh_index = 0;
 
-iPhone *phone = NULL;
-lockdownd_client *control = NULL;
+iphone_device_t phone = NULL;
+iphone_lckd_client_t control = NULL;
 
 int debug = 0;
 
@@ -52,22 +52,6 @@ static int ifuse_getattr(const char *path, struct stat *stbuf) {
 	AFCFile *file;
 	AFClient *afc = fuse_get_context()->private_data;
 
-	memset(stbuf, 0, sizeof(struct stat));
-	file = afc_get_file_info(afc, path);
-	if (!file){
-		res = -ENOENT;
-	} else {
-	  	stbuf->st_mode = file->type | (S_ISDIR(file->type) ? 0755 : 0644);
-		stbuf->st_size = file->size;
-		stbuf->st_blksize = 2048; // FIXME: Is this the actual block size used on the iPhone?
-		stbuf->st_blocks = file->blocks;
-		stbuf->st_uid = getuid();
-		stbuf->st_gid = getgid();
-
-		afc_close_file(afc,file);
-		free(file);
-	}
-
 	return res;
 }
 
diff --git a/src/main.c b/src/main.c
index 78c62f7..85405dd 100644
--- a/src/main.c
+++ b/src/main.c
@@ -29,17 +29,15 @@
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
-#include "plist.h"
-#include "lockdown.h"
-#include "AFC.h"
-#include "userpref.h"
+
+#include <libiphone/libiphone.h>
 
 int debug = 1;
 
 int main(int argc, char *argv[]) {
 	int bytes = 0, port = 0, i = 0;
-	lockdownd_client *control = NULL;
-	iPhone *phone = get_iPhone();
+	iphone_lckd_client_t control = NULL;
+	iphone_device_t phone = NULL;
 	
 	if (argc > 1 && !strcasecmp(argv[1], "--debug")){
 		debug = 1;
@@ -47,13 +45,13 @@ int main(int argc, char *argv[]) {
 		debug = 0;
 	}
 	
-	if (!phone) {
+	if (IPHONE_E_SUCCESS != iphone_get_device(&phone)) {
 		printf("No iPhone found, is it plugged in?\n");
 		return -1;
        	}
 
-	if (!lockdownd_init(phone, &control)){
-		free_iPhone(phone);
+	if (IPHONE_E_SUCCESS != iphone_lckd_new_client(phone, &control)){
+		iphone_free_device(phone);
 		return -1;
 	}
 
@@ -63,21 +61,22 @@ int main(int argc, char *argv[]) {
 		free(uid);
 	}
 
-	port = lockdownd_start_service(control, "com.apple.afc");
+	port = iphone_lckd_start_service(control, "com.apple.afc");
 	
 	if (port) {
-		AFClient *afc = afc_connect(phone, 3432, port);
+		iphone_afc_client_t afc = NULL;
+		iphone_afc_new_client(phone, 3432, port, &afc);
 		if (afc) {
 			char **dirs;
-			dirs = afc_get_dir_list(afc, "/eafaedf");
-			if (!dirs) dirs = afc_get_dir_list(afc, "/");
+			dirs = iphone_afc_get_dir_list(afc, "/eafaedf");
+			if (!dirs) dirs = iphone_afc_get_dir_list(afc, "/");
 			printf("Directory time.\n");
 			for (i = 0; dirs[i]; i++) {
 				printf("/%s\n", dirs[i]);
 			}
 			
 			g_strfreev(dirs);
-			dirs = afc_get_devinfo(afc);
+			dirs = iphone_afc_get_devinfo(afc);
 			if (dirs) {
 				for (i = 0; dirs[i]; i+=2) {
 					printf("%s: %s\n", dirs[i], dirs[i+1]);
@@ -85,64 +84,63 @@ int main(int argc, char *argv[]) {
 			}
 			g_strfreev(dirs);
 			
-			AFCFile *my_file = afc_open_file(afc, "/iTunesOnTheGoPlaylist.plist", AFC_FILE_READ);
-			if (my_file) {
-				printf("A file size: %i\n", my_file->size);
-				char *file_data = (char*)malloc(sizeof(char) * my_file->size);
-				bytes = afc_read_file(afc, my_file, file_data, my_file->size);
+			iphone_afc_file_t my_file = NULL;
+			struct stat stbuf;
+			iphone_afc_get_file_attr ( afc, "/iTunesOnTheGoPlaylist.plist", &stbuf );
+			if (IPHONE_E_SUCCESS == iphone_afc_open_file(afc, "/iTunesOnTheGoPlaylist.plist", AFC_FILE_READ, &my_file) && my_file) {
+				printf("A file size: %i\n", stbuf.st_size);
+				char *file_data = (char*)malloc(sizeof(char) * stbuf.st_size);
+				bytes = iphone_afc_read_file(afc, my_file, file_data, stbuf.st_size);
 				if (bytes >= 0) {
 					printf("The file's data:\n");
 					fwrite(file_data, 1, bytes, stdout);
 				}
 				printf("\nClosing my file.\n");
-				afc_close_file(afc, my_file);
-				free(my_file);
+				iphone_afc_close_file(afc, my_file);
 				free(file_data);
 			} else printf("couldn't open a file\n");
 			
-			my_file = afc_open_file(afc, "/readme.libiphone.fx", AFC_FILE_WRITE);
+			iphone_afc_open_file(afc, "/readme.libiphone.fx", AFC_FILE_WRITE, &my_file);
 			if (my_file) {
 				char *outdatafile = strdup("this is a bitchin text file\n");
-				bytes = afc_write_file(afc, my_file, outdatafile, strlen(outdatafile));
+				bytes = iphone_afc_write_file(afc, my_file, outdatafile, strlen(outdatafile));
 				free(outdatafile);
 				if (bytes > 0) printf("Wrote a surprise. ;)\n");
 				else printf("I wanted to write a surprise, but... :(\n");
-				afc_close_file(afc, my_file);
-				free(my_file);
+				iphone_afc_close_file(afc, my_file);
 			}
 			printf("Deleting a file...\n");
-			bytes = afc_delete_file(afc, "/delme");
+			bytes = iphone_afc_delete_file(afc, "/delme");
 			if (bytes) printf("Success.\n");
 			else printf("Failure. (expected unless you have a /delme file on your phone)\n");
 			
 			printf("Renaming a file...\n");
-			bytes = afc_rename_file(afc, "/renme", "/renme2");
+			bytes = iphone_afc_rename_file(afc, "/renme", "/renme2");
 			if (bytes > 0) printf("Success.\n");
 			else printf("Failure. (expected unless you have a /renme file on your phone)\n");
 			
 			printf("Seek & read\n");
-			my_file = afc_open_file(afc, "/readme.libiphone.fx", AFC_FILE_READ);
-			bytes = afc_seek_file(afc, my_file, 5);
+			iphone_afc_open_file(afc, "/readme.libiphone.fx", AFC_FILE_READ, &my_file);
+			bytes = iphone_afc_seek_file(afc, my_file, 5);
 			if (bytes) printf("WARN: SEEK DID NOT WORK\n");
 			char *threeletterword = (char*)malloc(sizeof(char) * 5);
-			bytes = afc_read_file(afc, my_file, threeletterword, 3);
+			bytes = iphone_afc_read_file(afc, my_file, threeletterword, 3);
 			threeletterword[3] = '\0';
 			if (bytes > 0) printf("Result: %s\n", threeletterword);
 			else printf("Couldn't read!\n");
 			free(threeletterword);
-			afc_close_file(afc, my_file);
-			free(my_file);
+			iphone_afc_close_file(afc, my_file);
 			
 		}
-		afc_disconnect(afc);
+		iphone_afc_free_client(afc);
 	} else {
 		printf("Start service failure.\n");
 	}
 	
 	printf("All done.\n");
 
-	lockdownd_close(control);
-	free_iPhone(phone);
+	iphone_lckd_free_client(control);
+	iphone_free_device(phone);
 	
 	return 0;
 }
-- 
cgit v1.1-32-gdbae