#include "tools.h"
#include "internet_addressing.h"
#include "user_ops.h"
+#include "room_ops.h"
#include "parsedate.h"
char node[256];
char name[256];
struct quickroom qrbuf;
+ int i;
/* Split it up */
process_rfc822_addr(source, user, node, name);
*/
if (!strcasecmp(node, config.c_nodename)) {
/* Try all local rooms */
- if (!strncasecmp(destuser, "room_", 5)) {
- /* FIX do this here */
+ if (!strncasecmp(user, "room_", 5)) {
+ strcpy(name, &user[5]);
+ for (i=0; i<strlen(name); ++i)
+ if (name[i]=='_') name[i]=' ';
+ if (getroom(&qrbuf, name) == 0) {
+ strcpy(destuser, qrbuf.QRname);
+ strcpy(desthost, config.c_nodename);
+ return rfc822_room_delivery;
+ }
}
/* Try all local users */
rfc822_address_locally_validated,
rfc822_no_such_user,
rfc822_address_on_citadel_network,
- rfc822_address_invalid
+ rfc822_address_invalid,
+ rfc822_room_delivery
};
strcat(SMTP_RECP, "|0\n");
return;
+ case rfc822_room_delivery:
+ cprintf("250 Delivering to room '%s'\n", user);
+ ++SMTP->number_of_recipients;
+ CtdlReallocUserData(SYM_SMTP_RECP,
+ strlen(SMTP_RECP) + 1024 );
+ strcat(SMTP_RECP, "room|");
+ strcat(SMTP_RECP, user);
+ strcat(SMTP_RECP, "|0\n");
+ return;
+
case rfc822_no_such_user:
cprintf("550 %s: no such user\n", recp);
return;
}
}
+ /* Delivery to local non-mailbox rooms */
+ if (!strcasecmp(dtype, "room")) {
+ extract(room, buf, 1);
+ CtdlSaveMsgPointerInRoom(room, msgid, 0);
+ ++successful_saves;
+ }
+
/* Remote delivery */
if (!strcasecmp(dtype, "remote")) {
extract(user, buf, 1);