Skip to content

Commit

Permalink
added writing metadata to file
Browse files Browse the repository at this point in the history
  • Loading branch information
Gregory Mullen (grayhatter) committed May 23, 2015
1 parent 43b22f5 commit b2e94b5
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 11 deletions.
3 changes: 3 additions & 0 deletions friend.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,15 @@ void friend_set_alias(FRIEND *f, char_t *alias, STRING_IDX length){
if(length == 0) {
f->alias = NULL;
f->alias_length = 0;
f->metadata.alias_length = 0;
} else {
f->alias = malloc(length + 1);
memcpy(f->alias, alias, length);
f->alias_length = length;
f->metadata.alias_length = length;
}
f->alias[f->alias_length] = 0;
utox_write_metadata(f);
}

void friend_sendimage(FRIEND *f, UTOX_NATIVE_IMAGE *native_image, uint16_t width, uint16_t height, UTOX_PNG_IMAGE png_image, size_t png_size)
Expand Down
12 changes: 7 additions & 5 deletions friend.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
typedef struct friend_meta_data {
size_t alias_length;
uint8_t data[];
} FRIEND_META_DATA;

typedef struct friend {
_Bool online, typing, notify;
uint8_t calling, status;
Expand All @@ -16,12 +21,9 @@ typedef struct friend {
AVATAR avatar;

uint16_t transfer_count;
} FRIEND;

typedef struct friend_meta_data {
size_t alias_length;
uint8_t alias[];
} FRIEND_META_DATA;
FRIEND_META_DATA metadata;
} FRIEND;

#define MAX_GROUP_PEERS 256

Expand Down
19 changes: 13 additions & 6 deletions tox.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ void log_read(Tox *tox, int fid)

void friend_meta_data_read(Tox *tox, int friend_id)
{
/* Will need to be rewritten if anything is added to friend's meta data */
uint8_t path[UTOX_FILE_NAME_LENGTH], *p;
p = path + datapath(path);

Expand All @@ -238,15 +239,21 @@ void friend_meta_data_read(Tox *tox, int friend_id)
}

uint32_t size;
void *metadata = file_raw((char*)path, &size);
if (!metadata) {
void *mdata = file_raw((char*)path, &size);
if (!mdata) {
debug("Meta Data not found (%s)\n", path);
return;
}
size_t alias_length = 0;
memcpy(&alias_length, metadata, sizeof(size_t));
if (alias_length) {
friend_set_alias(&friend[friend_id], metadata + sizeof(size_t), alias_length);
FRIEND_META_DATA *metadata = calloc(1, sizeof(*metadata));

if (size < sizeof(*metadata)) {
debug("Meta Data was incomplete\n");
return;
}

memcpy(metadata, mdata, sizeof(*metadata));
if (metadata->alias_length) {
friend_set_alias(&friend[friend_id], mdata + sizeof(size_t), metadata->alias_length);
}
}

Expand Down
25 changes: 25 additions & 0 deletions util.c
Original file line number Diff line number Diff line change
Expand Up @@ -717,3 +717,28 @@ void config_save(UTOX_SAVE *save)
fwrite(options.proxy_host, strlen(options.proxy_host), 1, file);
fclose(file);
}

void utox_write_metadata(FRIEND *f){
/* data sizes */
size_t data_sz = 0, current_sz = 0;
size_t alias_sz = strlen((const char*)f->alias);
data_sz += alias_sz;

/* Create path */
uint8_t dest[UTOX_FILE_NAME_LENGTH], *dest_p;
dest_p = dest + datapath(dest);
cid_to_string(dest_p, f->cid);
memcpy((char*)dest_p + (TOX_PUBLIC_KEY_SIZE * 2), ".fmetadata", sizeof(".fmetadata"));

/* Create data */
uint8_t *data = malloc(sizeof(FRIEND_META_DATA) + data_sz + 1);
memcpy(data, &f->metadata, sizeof(FRIEND_META_DATA));
current_sz = sizeof(FRIEND_META_DATA);
/* copy the data */
/* alias */
memcpy(data + current_sz, f->alias, alias_sz);
current_sz += alias_sz;

/* Write */
file_write_raw(dest, data, current_sz);
}
11 changes: 11 additions & 0 deletions util.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
*/
void* file_raw(char *path, uint32_t *size);

/*
* Write *data, of size, to path on disk.
*/
void file_write_raw(uint8_t *path, uint8_t *data, size_t size);

//add null terminator to data
void* file_text(char *path);

Expand Down Expand Up @@ -91,3 +96,9 @@ void scale_rgbx_image(uint8_t *old_rgbx, uint16_t old_width, uint16_t old_height
*/
UTOX_SAVE* config_load(void);
void config_save(UTOX_SAVE *save);


/*
Saves user meta data to disk
*/
void utox_write_metadata(FRIEND *f);

0 comments on commit b2e94b5

Please sign in to comment.