X-Git-Url: https://git.pterodactylus.net/?p=fms.git;a=blobdiff_plain;f=src%2Ffreenet%2Fmessagelistrequester.cpp;h=75f2e0273add4f35ccbe1155f043048ad59a7028;hp=ba2d4ffacda562817670a37eefb7b1f44460691c;hb=1230cc420c955e75051d011d964bc68f061ba08c;hpb=6836fbb5db8464f56e682989996b2210b14231d0 diff --git a/src/freenet/messagelistrequester.cpp b/src/freenet/messagelistrequester.cpp index ba2d4ff..75f2e02 100644 --- a/src/freenet/messagelistrequester.cpp +++ b/src/freenet/messagelistrequester.cpp @@ -76,19 +76,22 @@ const bool MessageListRequester::HandleAllData(FCPMessage &message) // insert external message indexes for(long i=0; iPrepare("INSERT INTO tblMessageListRequests(IdentityID,Day,RequestIndex,Found) VALUES(?,?,?,'true');"); @@ -133,6 +136,13 @@ const bool MessageListRequester::HandleGetFailed(FCPMessage &message) StringFunctions::Convert(idparts[1],identityid); StringFunctions::Convert(idparts[2],index); + // code 27 - permanent redirect + if(message["Code"]=="27") + { + StartRedirectRequest(message); + return true; + } + // if this is a fatal error - insert index into database so we won't try to download this index again if(message["Fatal"]=="true") { @@ -210,12 +220,50 @@ void MessageListRequester::PopulateIDList() } } +void MessageListRequester::StartRedirectRequest(FCPMessage &message) +{ + std::vector parts; + std::string indexstr=""; + std::string identityidstr=""; + std::string datestr=""; + FCPMessage newmessage; + + // get the new edition # + StringFunctions::Split(message["RedirectURI"],"/",parts); + //edition # is 2nd to last part + if(parts.size()>2) + { + indexstr=parts[parts.size()-2]; + } + + // get identityid + parts.clear(); + StringFunctions::Split(message["Identifier"],"|",parts); + if(parts.size()>1) + { + identityidstr=parts[1]; + } + if(parts.size()>4) + { + datestr=parts[4]; + } + + newmessage.SetName("ClientGet"); + newmessage["URI"]=StringFunctions::UriDecode(message["RedirectURI"]); + newmessage["Identifier"]=m_fcpuniquename+"|"+identityidstr+"|"+indexstr+"|_|"+datestr+"|"+newmessage["URI"]; + newmessage["ReturnType"]="direct"; + newmessage["MaxSize"]="1000000"; + + m_fcp->SendMessage(newmessage); + +} + void MessageListRequester::StartRequest(const long &id) { DateTime now; FCPMessage message; std::string publickey; - int index; + int index=0; std::string indexstr; std::string identityidstr; @@ -249,10 +297,10 @@ void MessageListRequester::StartRequest(const long &id) StringFunctions::Convert(id,identityidstr); message.SetName("ClientGet"); - message["URI"]=publickey+m_messagebase+"|"+now.Format("%Y-%m-%d")+"|MessageList|"+indexstr+".xml"; - message["Identifier"]=m_fcpuniquename+"|"+identityidstr+"|"+indexstr+"|"+message["URI"]; + message["URI"]="USK"+publickey.substr(3)+m_messagebase+"|"+now.Format("%Y.%m.%d")+"|MessageList/"+indexstr+"/MessageList.xml"; + message["Identifier"]=m_fcpuniquename+"|"+identityidstr+"|"+indexstr+"|_|"+now.Format("%Y-%m-%d")+"|"+message["URI"]; message["ReturnType"]="direct"; - message["MaxSize"]="1000000"; // 1 MB + message["MaxSize"]="1000000"; m_fcp->SendMessage(message);