X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Ffreenet%2Fmessagelistrequester.cpp;h=a6d8ba9eadcb97e55bef5576623a7957db8c73a5;hb=853f67b0b7b8121d572cff34d40f7b28cac8f65e;hp=ba2d4ffacda562817670a37eefb7b1f44460691c;hpb=9a14c0d9f7f7c319e539583b93664953764e83b7;p=fms.git diff --git a/src/freenet/messagelistrequester.cpp b/src/freenet/messagelistrequester.cpp index ba2d4ff..a6d8ba9 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") { @@ -143,7 +153,7 @@ const bool MessageListRequester::HandleGetFailed(FCPMessage &message) st.Step(); st.Finalize(); - m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageListRequester::HandleGetFailed fatal error requesting "+message["Identifier"]); + m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"MessageListRequester::HandleGetFailed fatal error code="+message["Code"]+" requesting "+message["Identifier"]); } // remove this identityid from request list @@ -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; @@ -240,6 +288,8 @@ void MessageListRequester::StartRequest(const long &id) if(st2.ResultNull(0)==false) { st2.ResultInt(0,index); + // don't increment index here - the node will let us know if there is a new edition + // 2008-05-31 - well actually the node isn't reliably retreiving the latest edition for USKs, so we DO need to increment the index index++; } } @@ -249,10 +299,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);