Squeleton code for the global routing matrix. Most functions are left unimplemented, but

the basic structure is here. Functions have been added to serialise both SHA1 and floats.
The router is not yet enabled since protocol is likely to change again.




git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6886 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2013-11-02 14:35:33 +00:00
parent 261d9102d4
commit e0863194a3
18 changed files with 1241 additions and 4 deletions

View file

@ -0,0 +1,81 @@
/*
* libretroshare/src/services: groutermatrix.h
*
* Services for RetroShare.
*
* Copyright 2013 by Cyril Soler
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License Version 2 as published by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA.
*
* Please report all bugs and problems to "csoler@users.sourceforge.net".
*
*/
#pragma once
#include <list>
#include "pgp/rscertificate.h"
#include "groutertypes.h"
#include "rsgrouter.h"
// The routing matrix records the event clues received from each friend
//
struct RoutingMatrixHitEntry
{
float weight ;
time_t time_stamp ;
};
// The map indexes for each friend the list of recent routing clues received.
//
struct RoutingMatrixFriendKeyData
{
std::list<RoutingMatrixHitEntry> routing_clues ;
float probability ;
};
class GRouterMatrix
{
public:
// Computes the routing probabilities for this id for the given list of friends.
// the computation accounts for the time at which the info was received and the
// weight of each routing hit record.
//
bool computeRoutingProbabilities(const GRouterKeyId& id, const std::vector<SSLIdType>& friends, std::vector<float>& probas) const ;
// Remove oldest entries.
//
bool autoWash() ;
// Update routing probabilities for each key, accounting for all received events, but without
// activity information
//
bool updateRoutingProbabilities() ;
// Record one routing clue. The events can possibly be merged in time buckets.
//
bool addRoutingClue(const GRouterKeyId& id,const GRouterServiceId& sid,float distance,const std::string& desc_string,const SSLIdType& source_friend) ;
private:
// List of events received and computed routing probabilities
//
std::map<GRouterKeyId, RoutingMatrixFriendKeyData> _routing_info ;
// This is used to avoid re-computing probas when new events have been received.
//
bool _proba_need_updating ;
};