+ // card name should be more than 3 character long !!!!
+ if (strlen (request->prefix) < 3) {
+ return (jsonNewMessage (AFB_FAIL,"Fail invalid plugin=%s", request->prefix));
+ }
+
+ // open session directory
+ sessionDir = open (session->config->sessiondir, O_DIRECTORY);
+ if (sessionDir < 0) {
+ return (jsonNewMessage (AFB_FAIL,"Fail to open directory [%s] error=%s", session->config->sessiondir, strerror(sessionDir)));
+ }
+
+ // create session sndcard directory if it does not exit
+ cardDir = openat (sessionDir, request->prefix, O_DIRECTORY);
+ if (cardDir < 0) {
+ cardDir = mkdirat (sessionDir, request->prefix, O_RDWR | S_IRWXU | S_IRGRP);
+ if (cardDir < 0) {
+ return (jsonNewMessage (AFB_FAIL,"Fail to create directory [%s/%s] error=%s", session->config->sessiondir, request->prefix, strerror(cardDir)));
+ }
+ }
+ close (sessionDir);
+ return NULL;
+}
+
+// Create a link toward last used sessionname within sndcard directory
+STATIC void makeSessionLink (const char *cardname, const char *sessionname) {
+ char linkname [256], filename [256];
+ int err;
+ // create a link to keep track of last uploaded sessionname for this card
+ strncpy (filename, sessionname, sizeof(filename));
+ strncat (filename, ".afb", sizeof(filename));
+
+ strncpy (linkname, cardname, sizeof(linkname));
+ strncat (linkname, "/", sizeof(filename));
+ strncat (linkname, AFB_CURRENT_SESSION, sizeof(linkname));
+ strncat (linkname, ".afb", sizeof(filename));
+ unlink (linkname); // remove previous link if any
+ err = symlink (filename, linkname);
+ if (err < 0) fprintf (stderr, "Fail to create link %s->%s error=%s\n", linkname, filename, strerror(errno));
+}