+ if ( (!strcasecmp(buf_directive, "subpending")) || (!strcasecmp(buf_directive, "unsubpending")) ) {
+ time_t pendingtime = extract_long(buf, 3);
+ if ((time(NULL) - pendingtime) > 259200) {
+ syslog(LOG_DEBUG, "%s %s is %ld seconds old - deleting it", buf_email, buf_directive, time(NULL) - pendingtime);
+ keep_this_line = 0;
+ }
+ }
+
+ if (keep_this_line) {
+ sprintf(&newnetconfig[strlen(newnetconfig)], "%s\n", buf);
+ }
+ }
+
+ // Do we need to send out a confirmation email?
+ if ((action == SUBSCRIBE) && (!is_already_subscribed)) {
+ generate_uuid(confirmation_token);
+ sprintf(&newnetconfig[strlen(newnetconfig)], "subpending|%s|%s|%ld|%s", emailaddr, confirmation_token, time(NULL), url);
+ send_subscribe_confirmation_email(CC->room.QRname, emailaddr, url, confirmation_token);
+ }
+ if ((action == UNSUBSCRIBE) && (is_already_subscribed)) {
+ generate_uuid(confirmation_token);
+ sprintf(&newnetconfig[strlen(newnetconfig)], "unsubpending|%s|%s|%ld|%s", emailaddr, confirmation_token, time(NULL), url);
+ send_unsubscribe_confirmation_email(CC->room.QRname, emailaddr, url, confirmation_token);
+ }
+
+ // Write the new netconfig back to disk
+ SaveRoomNetConfigFile(CC->room.QRnumber, newnetconfig);
+ end_critical_section(S_NETCONFIGS);
+ free(newnetconfig); // this was the new netconfig, free it because we're done with it
+ free(oldnetconfig); // this was the old netconfig, free it even if we didn't do anything
+
+ // Tell the client what happened.
+ if ((action == SUBSCRIBE) && (is_already_subscribed)) {
+ cprintf("%d This email address is already subscribed.\n", ERROR + ALREADY_EXISTS);
+ }
+ else if ((action == SUBSCRIBE) && (!is_already_subscribed)) {
+ cprintf("%d Subscription was requested, and a confirmation email was sent.\n", CIT_OK);
+ }
+ else if ((action == UNSUBSCRIBE) && (!is_already_subscribed)) {
+ cprintf("%d This email address is not subscribed.\n", ERROR + NO_SUCH_USER);
+ }
+ else if ((action == UNSUBSCRIBE) && (is_already_subscribed)) {
+ cprintf("%d Unsubscription was requested, and a confirmation email was sent.\n", CIT_OK);
+ }
+ else {
+ cprintf("%d Nothing happens.\n", ERROR);
+ }