$ git clone https://socialnetwork.ion.nu/socialnetwork.git
commit ee9e9c44c17ac6b97be7c38761fb8705c96fb1a0
Author: Alicia <...>
Date: Sun Jan 22 00:16:07 2017 +0100
Accept a path prefix to social_init() for where to load and store data.
diff --git a/social.c b/social.c
index a0d82b3..6e04115 100644
--- a/social.c
+++ b/social.c
@@ -28,6 +28,7 @@
struct user** social_users=0;
unsigned int social_usercount=0;
struct user* social_self;
+static char* prefix=0;
// Abstract away all the messagepassing and present information more or less statically
// TODO: Think about privacy for all data updates
// TODO: We must also sign all data updates to prevent forgeries
@@ -47,8 +48,8 @@ static void user_save(struct user* user)
if(!user->pubkey){return;}
// TODO: Absolute path, something like $HOME/.socialnetwork
mkdir("users", 0700);
- char path[strlen("users/0")+40];
- sprintf(path, "users/"PEERFMT, PEERARG(user->id));
+ char path[strlen(prefix)+strlen("/users/0")+40];
+ sprintf(path, "%s/users/"PEERFMT, prefix, PEERARG(user->id));
int f=open(path, O_WRONLY|O_CREAT|O_TRUNC, 0600);
gnutls_datum_t key;
gnutls_pubkey_export2(user->pubkey, GNUTLS_X509_FMT_PEM, &key);
@@ -65,8 +66,8 @@ static void user_load(struct user* user)
// Load user data (only pubkey atm), but spare pubkey if it's already set
if(!user->pubkey)
{
- char path[strlen("users/0")+40];
- sprintf(path, "users/"PEERFMT, PEERARG(user->id));
+ char path[strlen(prefix)+strlen("/users/0")+40];
+ sprintf(path, "%s/users/"PEERFMT, prefix, PEERARG(user->id));
int f=open(path, O_RDONLY);
if(f>=0)
{
@@ -81,8 +82,8 @@ static void user_load(struct user* user)
}
}
// Load updates
- char path[strlen("updates/0")+40];
- sprintf(path, "updates/"PEERFMT, PEERARG(user->id));
+ char path[strlen(prefix)+strlen("/updates/0")+40];
+ sprintf(path, "%s/updates/"PEERFMT, prefix, PEERARG(user->id));
int f=open(path, O_RDONLY);
if(f<0){return;}
uint64_t size;
@@ -176,8 +177,10 @@ static void sendupdates(struct peer* peer, void* data, unsigned int len)
}
}
-void social_init(const char* keypath)
+void social_init(const char* keypath, const char* pathprefix)
{
+ free(prefix);
+ prefix=strdup(pathprefix);
// Load key, friends, circles, etc. our own profile
peer_init(keypath);
social_self=user_new(peer_id);
@@ -193,7 +196,7 @@ void social_init(const char* keypath)
peer_registercmd("updateinfo", updateinfo);
peer_registercmd("getpeers", greetpeer);
peer_registercmd("getupdates", sendupdates);
-// TODO: Set up socket and bootstrap here too? or accept an already set up socket?
+// TODO: Set up socket and bootstrap here too? or accept an already set up socket to bootstrap?
}
void social_findfriends(void) // Call a second or so after init (once we have some bootstrap peers)
diff --git a/social.h b/social.h
index 6bfce28..0153288 100644
--- a/social.h
+++ b/social.h
@@ -57,7 +57,7 @@ struct user
extern struct user** social_users;
extern unsigned int social_usercount;
extern struct user* social_self; // Most things we need to keep track of for ourself are the same things we need to keep track of for others
-extern void social_init(const char* keypath);
+extern void social_init(const char* keypath, const char* pathprefix);
extern struct friendslist* social_user_getcircle(struct user* user, uint32_t circle);
extern void social_user_addtocircle(struct user* user, uint32_t circle, const unsigned char id[20]);
extern void social_user_removefromcircle(struct user* user, uint32_t circle, const unsigned char id[20]);
diff --git a/socialtest.c b/socialtest.c
index 8269a7b..1a4c728 100644
--- a/socialtest.c
+++ b/socialtest.c
@@ -65,7 +65,7 @@ int main(int argc, char** argv)
bind(sock, ai->ai_addr, ai->ai_addrlen);
freeaddrinfo(ai);
}
- social_init("priv.pem");
+ social_init("priv.pem", ".");
peer_bootstrap(sock, "127.0.0.1:4000");
struct pollfd pfd[]={{.fd=0, .events=POLLIN, .revents=0}, {.fd=sock, .events=POLLIN, .revents=0}};