summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libiphone/libiphone.h11
-rw-r--r--src/AFC.c2
-rw-r--r--src/AFC.h11
-rw-r--r--src/ifuse.c20
-rw-r--r--src/main.c68
5 files changed, 48 insertions, 64 deletions
diff --git a/include/libiphone/libiphone.h b/include/libiphone/libiphone.h
index 89b8529..768ff21 100644
--- a/include/libiphone/libiphone.h
+++ b/include/libiphone/libiphone.h
@@ -46,6 +46,17 @@ extern "C" {
//afc specific error
#define IPHONE_E_NO_SUCH_FILE -10
+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
+};
+
struct iphone_device_int;
typedef struct iphone_device_int *iphone_device_t;
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;
}