X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Froomops.c;h=bee589e4e2b98e6d0a3e10b7996384e6641e7d2b;hb=3de82b24ab6b64e144577a86938ba04d53042d5c;hp=66efe3faa75d4e71af67c5c052b0430614252c84;hpb=156d3eaa1b5d85cb70a79046bd874ab832df6ff1;p=citadel.git diff --git a/webcit/roomops.c b/webcit/roomops.c index 66efe3faa..bee589e4e 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -127,8 +127,10 @@ void dotgoto(void) { * goto next room */ void smart_goto(const StrBuf *next_room) { - gotoroom(next_room); - readloop(readnew, eUseDefault); + if (gotoroom(next_room) / 100 == 2) + readloop(readnew, eUseDefault); + else + do_404(); } /* @@ -182,6 +184,10 @@ long gotoroom(const StrBuf *gname) long err = 0; int room_name_supplied = 0; int is_baseroom = 0; + int failvisibly; + + /* on fail, should we fallback to _BASEROOM_? */ + failvisibly = ibstr("failvisibly"); /* store ungoto information */ if (StrLength(gname) > 0) { @@ -206,6 +212,10 @@ long gotoroom(const StrBuf *gname) } StrBuf_ServGetln(Buf); if (GetServerStatus(Buf, &err) != 2) { + if (failvisibly) { + FreeStrBuf(&Buf); + return err; + } serv_puts("GOTO _BASEROOM_"); StrBuf_ServGetln(Buf); /* @@ -1200,6 +1210,14 @@ void netedit(void) { } serv_puts("000"); + serv_puts("NOOP"); + StrBuf_ServGetln(Line); + if (GetServerStatus(Line, NULL) != 2) { /* WHOOOPS? ERROR? */ + AppendImportantMessage(SRV_STATUS_MSG(Line)); + StrBuf_ServGetln(Line); /* resync... */ + } + + FlushIgnetCfgs(&WC->CurRoom); FreeStrBuf(&Line); @@ -1446,6 +1464,7 @@ InitModule_ROOMOPS REGISTERTokenParamDefine(VIEW_JOURNAL); REGISTERTokenParamDefine(VIEW_BLOG); REGISTERTokenParamDefine(VIEW_QUEUE); + REGISTERTokenParamDefine(VIEW_WIKIMD); /* GNET types: */ /* server internal, we need to know but ignore them. */