diff --git a/libretroshare/src/_rsiface/rsdefs.h b/libretroshare/src/_rsiface/rsdefs.h index 0228f2e28..393e35138 100644 --- a/libretroshare/src/_rsiface/rsdefs.h +++ b/libretroshare/src/_rsiface/rsdefs.h @@ -67,6 +67,64 @@ const int NOTIFY_TYPE_ADD = 0x04; /* flagged additions */ const int NOTIFY_TYPE_DEL = 0x08; /* flagged deletions */ +/* + * From rsfiles.h + */ + +/* These are used mainly by ftController at the moment */ +const uint32_t RS_FILE_CTRL_PAUSE = 0x00000100; +const uint32_t RS_FILE_CTRL_START = 0x00000200; + +const uint32_t RS_FILE_RATE_TRICKLE = 0x00000001; +const uint32_t RS_FILE_RATE_SLOW = 0x00000002; +const uint32_t RS_FILE_RATE_STANDARD = 0x00000003; +const uint32_t RS_FILE_RATE_FAST = 0x00000004; +const uint32_t RS_FILE_RATE_STREAM_AUDIO = 0x00000005; +const uint32_t RS_FILE_RATE_STREAM_VIDEO = 0x00000006; + +const uint32_t RS_FILE_PEER_ONLINE = 0x00001000; +const uint32_t RS_FILE_PEER_OFFLINE = 0x00002000; + +/************************************ + * Used To indicate where to search. + * + * The Order of these is very important, + * it specifies the search order too. + * + */ + +const uint32_t RS_FILE_HINTS_MASK = 0x00ffffff; + +const uint32_t RS_FILE_HINTS_CACHE = 0x00000001; +const uint32_t RS_FILE_HINTS_EXTRA = 0x00000002; +const uint32_t RS_FILE_HINTS_LOCAL = 0x00000004; +const uint32_t RS_FILE_HINTS_REMOTE = 0x00000008; +const uint32_t RS_FILE_HINTS_DOWNLOAD= 0x00000010; +const uint32_t RS_FILE_HINTS_UPLOAD = 0x00000020; +const uint32_t RS_FILE_HINTS_TURTLE = 0x00000040; + + +const uint32_t RS_FILE_HINTS_SPEC_ONLY = 0x01000000; +const uint32_t RS_FILE_HINTS_NO_SEARCH = 0x02000000; + +/* Callback Codes */ +//const uint32_t RS_FILE_HINTS_CACHE = 0x00000001; // ALREADY EXISTS +const uint32_t RS_FILE_HINTS_MEDIA = 0x00001000; + +const uint32_t RS_FILE_HINTS_BACKGROUND = 0x00002000; // To download slowly. + +const uint32_t RS_FILE_EXTRA_DELETE = 0x0010; + +const uint32_t CB_CODE_CACHE = 0x0001; +const uint32_t CB_CODE_EXTRA = 0x0002; +const uint32_t CB_CODE_MEDIA = 0x0004; + + + + + + + diff --git a/libretroshare/src/_rsiface/rsiface.pri b/libretroshare/src/_rsiface/rsiface.pri index 6520d4f58..0d40ff511 100644 --- a/libretroshare/src/_rsiface/rsiface.pri +++ b/libretroshare/src/_rsiface/rsiface.pri @@ -10,8 +10,10 @@ SOURCES = $$PWP/rsinit.cc \ $$PWP/rsexpr.cc \ $$PWP/rsforums.cc \ $$PWP/rschannels.cc \ - rsmsgs.cc \ - rsfeeditem.cc + $$PWP/rsmsgs.cc \ + $$PWP/rsfeeditem.cc \ + $$PWP/rspeers.cc \ + rsstatus.cc HEADERS = $$PWP/rsinit.h \ $$PWP/rsiface.h \ $$PWP/rscontrol.h \ @@ -28,5 +30,10 @@ HEADERS = $$PWP/rsinit.h \ $$PWP/rsdistrib.h \ $$PWP/rsmsgs.h \ $$PWP/rsnotify.h \ - rsfeeditem.h \ - rsdefs.h + $$PWP/rsfeeditem.h \ + $$PWP/rsdefs.h \ + $$PWP/rspeers.h \ + $$PWP/rsphoto.h \ + $$PWP/rsrank.h \ + $$PWP/rsstatus.h \ + $$PWP/rsturtle.h diff --git a/libretroshare/src/_rsiface/rspeers.cc b/libretroshare/src/_rsiface/rspeers.cc new file mode 100644 index 000000000..e94bd59d9 --- /dev/null +++ b/libretroshare/src/_rsiface/rspeers.cc @@ -0,0 +1,181 @@ +#include "_rsiface/rspeers.h" +#include +#include +#include + +#ifdef RS_USE_PGPSSL + #include +#endif + +/**************** PQI_USE_XPGP ******************/ +#if defined(PQI_USE_XPGP) + #include "pqi/authxpgp.h" +#else /* X509 Certificates */ +/**************** PQI_USE_XPGP ******************/ + #include "pqi/authssl.h" +#endif /* X509 Certificates */ +/**************** PQI_USE_XPGP ******************/ + + +std::ostream &operator<<(std::ostream &out, const RsPeerDetails &detail) +{ + out << "RsPeerDetail: " << detail.name << " <" << detail.id << ">"; + out << std::endl; + + out << " email: " << detail.email; + out << " location:" << detail.location; + out << " org: " << detail.org; + out << std::endl; + + out << " fpr: " << detail.fpr; + out << " authcode:" << detail.authcode; + out << std::endl; + + out << " signers:"; + out << std::endl; + + std::list::const_iterator it; + for(it = detail.signers.begin(); + it != detail.signers.end(); it++) + { + out << "\t" << *it; + out << std::endl; + } + out << std::endl; + + out << " trustLvl: " << detail.trustLvl; + out << " ownSign: " << detail.ownsign; + out << " trusted: " << detail.trusted; + out << std::endl; + + out << " state: " << detail.state; + out << " netMode: " << detail.netMode; + out << std::endl; + + out << " localAddr: " << detail.localAddr; + out << ":" << detail.localPort; + out << std::endl; + out << " extAddr: " << detail.extAddr; + out << ":" << detail.extPort; + out << std::endl; + + + out << " lastConnect: " << detail.lastConnect; + out << " connectPeriod: " << detail.connectPeriod; + out << std::endl; + + return out; +} + + +std::string RsPeerTrustString(uint32_t trustLvl) +{ + + std::string str; + +#ifdef RS_USE_PGPSSL + switch(trustLvl) + { + default: + case GPGME_VALIDITY_UNKNOWN: + str = "GPGME_VALIDITY_UNKNOWN"; + break; + case GPGME_VALIDITY_UNDEFINED: + str = "GPGME_VALIDITY_UNDEFINED"; + break; + case GPGME_VALIDITY_NEVER: + str = "GPGME_VALIDITY_NEVER"; + break; + case GPGME_VALIDITY_MARGINAL: + str = "GPGME_VALIDITY_MARGINAL"; + break; + case GPGME_VALIDITY_FULL: + str = "GPGME_VALIDITY_FULL"; + break; + case GPGME_VALIDITY_ULTIMATE: + str = "GPGME_VALIDITY_ULTIMATE"; + break; + } + return str; +#endif + + if (trustLvl == RS_TRUST_LVL_GOOD) + { + str = "Good"; + } + else if (trustLvl == RS_TRUST_LVL_MARGINAL) + { + str = "Marginal"; + } + else + { + str = "No Trust"; + } + return str; +} + + + +std::string RsPeerStateString(uint32_t state) +{ + std::string str; + if (state & RS_PEER_STATE_CONNECTED) + { + str = "Connected"; + } + else if (state & RS_PEER_STATE_UNREACHABLE) + { + str = "Unreachable"; + } + else if (state & RS_PEER_STATE_ONLINE) + { + str = "Available"; + } + else if (state & RS_PEER_STATE_FRIEND) + { + str = "Offline"; + } + else + { + str = "Neighbour"; + } + return str; +} + +std::string RsPeerNetModeString(uint32_t netModel) +{ + std::string str; + if (netModel == RS_NETMODE_EXT) + { + str = "External Port"; + } + else if (netModel == RS_NETMODE_UPNP) + { + str = "Ext (UPnP)"; + } + else if (netModel == RS_NETMODE_UDP) + { + str = "UDP Mode"; + } + else if (netModel == RS_NETMODE_UNREACHABLE) + { + str = "UDP Mode (Unreachable)"; + } + else + { + str = "Unknown NetMode"; + } + return str; +} + + +std::string RsPeerLastConnectString(uint32_t lastConnect) +{ + std::ostringstream out; + out << lastConnect << " secs ago"; + return out.str(); +} + + + + diff --git a/libretroshare/src/_rsiface/rspeers.h b/libretroshare/src/_rsiface/rspeers.h new file mode 100644 index 000000000..e0aae77ab --- /dev/null +++ b/libretroshare/src/_rsiface/rspeers.h @@ -0,0 +1,175 @@ +#ifndef RETROSHARE_PEER_GUI_INTERFACE_H +#define RETROSHARE_PEER_GUI_INTERFACE_H + +/* + * libretroshare/src/rsiface: rspeer.h + * + * RetroShare C++ Interface. + * + * Copyright 2004-2008 by Robert Fernie. + * + * 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 "retroshare@lunamutt.com". + * + */ + +#include +#include +#include +#include "rsserver/p3peers.h" +#include "rsserver/p3face.h" +#include "pqi/p3connmgr.h" +#include "pqi/p3authmgr.h" +#include "_rsiface/rsinit.h" + +/* The Main Interface Class - for information about your Peers */ +class RsPeers; +extern RsPeers *rsPeers; + +/* Trust Levels */ +const uint32_t RS_TRUST_LVL_UNKNOWN = 0x0001; +const uint32_t RS_TRUST_LVL_MARGINAL = 0x0002; +const uint32_t RS_TRUST_LVL_GOOD = 0x0003; + + +/* Net Mode */ +const uint32_t RS_NETMODE_UDP = 0x0001; +const uint32_t RS_NETMODE_UPNP = 0x0002; +const uint32_t RS_NETMODE_EXT = 0x0003; +const uint32_t RS_NETMODE_UNREACHABLE = 0x0004; + +/* Visibility */ +const uint32_t RS_VS_DHT_ON = 0x0001; +const uint32_t RS_VS_DISC_ON = 0x0002; + +/* State */ +const uint32_t RS_PEER_STATE_FRIEND = 0x0001; +const uint32_t RS_PEER_STATE_ONLINE = 0x0002; +const uint32_t RS_PEER_STATE_CONNECTED = 0x0004; +const uint32_t RS_PEER_STATE_UNREACHABLE= 0x0008; + +/* A couple of helper functions for translating the numbers games */ + +std::string RsPeerTrustString(uint32_t trustLvl); +std::string RsPeerStateString(uint32_t state); +std::string RsPeerNetModeString(uint32_t netModel); +std::string RsPeerLastConnectString(uint32_t lastConnect); + + +/* Details class */ + +class RsPeerDetails +{ + + RsPeerDetails(); + + /* Auth details */ + std::string id; + std::string name; + std::string email; + std::string location; + std::string org; + + std::string fpr; /* pgp fingerprint */ + std::string authcode; + std::list signers; + + uint32_t trustLvl; + uint32_t validLvl; + + bool ownsign; /* we have signed certificate */ + bool trusted; /* we trust their signature on others */ + + /* Network details (only valid if friend) */ + uint32_t state; + + std::string localAddr; + uint16_t localPort; + std::string extAddr; + uint16_t extPort; + + uint32_t netMode; + uint32_t tryNetMode; /* only for ownState */ + uint32_t visState; + + /* basic stats */ + uint32_t lastConnect; /* how long ago */ + std::string autoconnect; + uint32_t connectPeriod; +}; + +std::ostream &operator<<(std::ostream &out, const RsPeerDetails &detail); + +class RsPeers +{ +public: + + RsPeers() { return; } + virtual ~RsPeers() { return; } + + /* Updates ... */ + virtual bool FriendsChanged() = 0; + virtual bool OthersChanged() = 0; + + /* Peer Details (Net & Auth) */ + virtual std::string getOwnId() = 0; + + virtual bool getOnlineList(std::list &ids) = 0; + virtual bool getFriendList(std::list &ids) = 0; + virtual bool getOthersList(std::list &ids) = 0; + + virtual bool isOnline(std::string id) = 0; + virtual bool isFriend(std::string id) = 0; + virtual std::string getPeerName(std::string id) = 0; + virtual bool getPeerDetails(std::string id, RsPeerDetails &d) = 0; + + /* Using PGP Ids */ + virtual std::string getPGPOwnId() = 0; + virtual bool getPGPFriendList(std::list &ids) = 0; + virtual bool getPGPAllList(std::list &ids) = 0; + + /* Add/Remove Friends */ + virtual bool addFriend(std::string id) = 0; + virtual bool removeFriend(std::string id) = 0; + + /* get/set third party info about who trusts me */ + virtual bool isTrustingMe(std::string id) const = 0 ; + + /* Network Stuff */ + virtual bool connectAttempt(std::string id) = 0; + virtual bool setLocalAddress(std::string id, std::string addr, uint16_t port) = 0; + virtual bool setExtAddress( std::string id, std::string addr, uint16_t port) = 0; + virtual bool setNetworkMode(std::string id, uint32_t netMode) = 0; + virtual bool setVisState(std::string id, uint32_t vis) = 0; + + virtual void getIPServersList(std::list& ip_servers) = 0; + virtual void allowServerIPDetermination(bool) = 0; + virtual bool getAllowServerIPDetermination() = 0 ; + + /* Auth Stuff */ + virtual std::string GetRetroshareInvite() = 0; + + virtual bool LoadCertificateFromFile(std::string fname, std::string &id) = 0; + virtual bool LoadCertificateFromString(std::string cert, std::string &id) = 0; + virtual bool SaveCertificateToFile(std::string id, std::string fname) = 0; + virtual std::string SaveCertificateToString(std::string id) = 0; + + virtual bool AuthCertificate(std::string id, std::string code) = 0; + virtual bool SignCertificate(std::string id) = 0; + virtual bool TrustCertificate(std::string id, bool trust) = 0; +}; + +#endif diff --git a/libretroshare/src/_rsiface/rsphoto.h b/libretroshare/src/_rsiface/rsphoto.h new file mode 100644 index 000000000..c25654acf --- /dev/null +++ b/libretroshare/src/_rsiface/rsphoto.h @@ -0,0 +1,126 @@ +#ifndef RSPHOTO_H +#define RSPHOTO_H + +/* + * libretroshare/src/rsiface: rsphoto.h + * + * RetroShare C++ Interface. + * + * Copyright 2008-2008 by Robert Fernie. + * + * 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 "retroshare@lunamutt.com". + * + */ + +#include +#include +#include + +/* The Main Interface Class - for information about your Peers */ +class RsPhoto; +extern RsPhoto *rsPhoto; + +class RsPhotoDetails; +class RsPhotoShowDetails; + + +// CHANGE: CLASS_TO_STRUCT +struct RsPhotoShowInfo +{ + std::string photoId; + std::wstring altComment; + uint32_t deltaT; /* in 100ths of sec? */ +}; + + +// CHANGE: CLASS_TO_STRUCT +struct RsPhotoShowDetails +{ + RsPhotoDetails() {} + std::string id; + std::string showid; + + std::string name; + std::wstring location; + std::wstring comment; + std::string date; + std::list photos; +}; + + +/* Details class */ +// CHANGE: CLASS_TO_STRUCT +struct RsPhotoDetails +{ + RsPhotoDetails(); + + std::string id; + std::string srcid; + + std::string hash; + uint64_t size; + + std::string name; + std::wstring comment; + + std::string location; + std::string date; + + uint32_t format; + + bool isAvailable; + std::string path; +}; + +// CHANGE:DELETED : reason-> not implemented +//std::ostream &operator<<(std::ostream &out, const RsPhotoShowDetails &detail); +//std::ostream &operator<<(std::ostream &out, const RsPhotoDetails &detail); + +class RsPhoto +{ + public: + + RsPhoto() { return; } + virtual ~RsPhoto() { return; } + + /* changed? */ + virtual bool updated() = 0; + + /* access data */ + virtual bool getPhotoList(std::string id, std::list &hashs) = 0; + virtual bool getShowList(std::string id, std::list &showIds) = 0; + virtual bool getShowDetails(std::string id, std::string showId, RsPhotoShowDetails &detail) = 0; + virtual bool getPhotoDetails(std::string id, std::string photoId, RsPhotoDetails &detail) = 0; + + /* add / delete */ + virtual std::string createShow(std::string name) = 0; + virtual bool deleteShow(std::string showId) = 0; + virtual bool addPhotoToShow(std::string showId, std::string photoId, int16_t index) = 0; + virtual bool movePhotoInShow(std::string showId, std::string photoId, int16_t index) = 0; + virtual bool removePhotoFromShow(std::string showId, std::string photoId) = 0; + + virtual std::string addPhoto(std::string path) = 0; /* add from file */ + virtual bool addPhoto(std::string srcId, std::string photoId) = 0; /* add from peers photos */ + virtual bool deletePhoto(std::string photoId) = 0; + + /* modify properties (TODO) */ + virtual bool modifyShow(std::string showId, std::wstring name, std::wstring comment) = 0; + virtual bool modifyPhoto(std::string photoId, std::wstring name, std::wstring comment) = 0; + virtual bool modifyShowComment(std::string showId, std::string photoId, std::wstring comment) = 0; +}; + +#endif // RSPHOTO_H diff --git a/libretroshare/src/_rsiface/rsrank.h b/libretroshare/src/_rsiface/rsrank.h new file mode 100644 index 000000000..5987fb70a --- /dev/null +++ b/libretroshare/src/_rsiface/rsrank.h @@ -0,0 +1,97 @@ +#ifndef RSRANK_H +#define RSRANK_H + +/* + * libretroshare/src/rsiface: rsrank.h + * + * RetroShare C++ Interface. + * + * Copyright 2007-2008 by Robert Fernie. + * + * 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 "retroshare@lunamutt.com". + * + */ + +#include +#include +#include + +/* The Main Interface Class - for information about your Peers */ +class RsRanks; +extern RsRanks *rsRanks; + + +// CHANGE:CLASS_TO_STRUCT +class RsRankComment +{ + std::string id; + std::wstring comment; + int32_t score; + time_t timestamp; +}; + +// CHANGE:CLASS_TO_STRUCT +struct RsRankDetails +{ + std::string rid; + std::wstring link; + std::wstring title; + float rank; + bool ownTag; + + std::list comments; +}; + +const uint32_t RS_RANK_SCORE = 0x0001; +const uint32_t RS_RANK_TIME = 0x0002; +const uint32_t RS_RANK_ALG = 0x0003; + + +// CHANGE:DELETED -> reason. not implemented +//std::ostream &operator<<(std::ostream &out, const RsRankDetails &detail); + +class RsRanks +{ +public: + + RsRanks() { return; } + virtual ~RsRanks() { return; } + + /* needs update? */ + virtual bool updated() = 0; + + /* Set Sort Methods */ + virtual bool setSortPeriod(uint32_t period) = 0; + virtual bool setSortMethod(uint32_t type) = 0; + virtual bool clearPeerFilter() = 0; + virtual bool setPeerFilter(std::list peers) = 0; + + /* get Ids */ + virtual uint32_t getRankingsCount() = 0; + virtual float getMaxRank() = 0; + virtual bool getRankings(uint32_t first, uint32_t count, std::list &rids) = 0; + virtual bool getRankDetails(std::string rid, RsRankDetails &details) = 0; + + /* Add New Comment / Msg */ + virtual std::string newRankMsg(std::wstring link, std::wstring title, std::wstring comment, int32_t score) = 0; + virtual bool updateComment(std::string rid, std::wstring comment, int32_t score) = 0; + + virtual std::string anonRankMsg(std::string rid, std::wstring link, std::wstring title) = 0; + +}; + +#endif // RSRANK_H diff --git a/libretroshare/src/_rsiface/rsstatus.cc b/libretroshare/src/_rsiface/rsstatus.cc new file mode 100644 index 000000000..70e1794f9 --- /dev/null +++ b/libretroshare/src/_rsiface/rsstatus.cc @@ -0,0 +1,33 @@ +#include "rsstatus.h" + +std::string RsStatusString(uint32_t status) +{ + std::string str; + if (status == RS_STATUS_OFFLINE) + { + str = "Offline"; + } + else if (status == RS_STATUS_AWAY) + { + str = "Away"; + } + else if (status == RS_STATUS_BUSY) + { + str = "Busy"; + } + else if (status == RS_STATUS_ONLINE) + { + str = "Online"; + } + return str; +} + + +std::ostream& operator<<(std::ostream& out, const StatusInfo& si) +{ + out << "StatusInfo: " << std::endl; + out << "id: " << si.id << std::endl; + out << "status: " << si.status; + out << " (" << RsStatusString(si.status) << ")" << std::endl; + return out; +} diff --git a/libretroshare/src/_rsiface/rsstatus.h b/libretroshare/src/_rsiface/rsstatus.h new file mode 100644 index 000000000..d1ebedb52 --- /dev/null +++ b/libretroshare/src/_rsiface/rsstatus.h @@ -0,0 +1,61 @@ +#ifndef RSSTATUS_H +#define RSSTATUS_H + +/* + * libretroshare/src/rsiface: rsstatus.h + * + * RetroShare C++ . + * + * Copyright 2007-2008 by Vinny Do. + * + * 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 "retroshare@lunamutt.com". + * + */ + +class RsStatus; + +extern RsStatus *rsStatus; + +#include +#include +#include + +const uint32_t RS_STATUS_OFFLINE = 0x0001; +const uint32_t RS_STATUS_AWAY = 0x0002; +const uint32_t RS_STATUS_BUSY = 0x0003; +const uint32_t RS_STATUS_ONLINE = 0x0004; + +std::string RsStatusString(uint32_t status); + +// CHANGE: CLASS_TO_STRUCT +struct StatusInfo +{ + std::string id; + uint32_t status; +}; + +class RsStatus +{ +public: + virtual bool getStatus(std::string id, StatusInfo& statusInfo) = 0; + virtual bool setStatus(StatusInfo& statusInfo) = 0; + +}; + +std::ostream& operator<<(std::ostream& out, const StatusInfo& statusInfo); + +#endif // RSSTATUS_H diff --git a/libretroshare/src/_rsiface/rsturtle.h b/libretroshare/src/_rsiface/rsturtle.h new file mode 100644 index 000000000..49b5b9af8 --- /dev/null +++ b/libretroshare/src/_rsiface/rsturtle.h @@ -0,0 +1,94 @@ +#ifndef RSTURTLE_H +#define RSTURTLE_H + +/* + * libretroshare/src/rsiface: rsturtle.h + * + * RetroShare C++ Interface. + * + * Copyright 2009 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" + * + */ + +#include +#include +#include + +class RsTurtle; +extern RsTurtle *rsTurtle ; + +typedef uint32_t TurtleRequestId ; + +// This is the structure used to send back results of the turtle search +// to the notifyBase class. + +struct TurtleFileInfo +{ + std::string hash ; + std::string name ; + uint64_t size ; +}; + +// Interface class for turtle hopping. +// +// This class mainly interacts with the turtle router, that is responsible +// for routing turtle packets between peers, accepting/forwarding search +// requests and dowloading files. +// +// As seen from here, the interface is really simple. +// +class RsTurtle +{ +public: + enum FileSharingStrategy { SHARE_ENTIRE_NETWORK, SHARE_FRIENDS_ONLY } ; + + RsTurtle() { _sharing_strategy = SHARE_ENTIRE_NETWORK ;} + virtual ~RsTurtle() {} + + + + // Lauches a search request through the pipes, and immediately returns + // the request id, which will be further used by the gui to store results + // as they come back. + // + virtual TurtleRequestId turtleSearch(const std::string& match_string) = 0 ; + + // Initiates tunnel handling for the given file hash. tunnels. Launches + // an exception if an error occurs during the initialization process. The + // turtle router itself does not initiate downloads, it only maintains + // tunnels for the given hash. The download should be driven by the file + // transfer module by calling ftServer::FileRequest(). + // + virtual void monitorFileTunnels(const std::string& name,const std::string& file_hash,uint64_t size) = 0 ; + + // Tells the turtle router to stop handling tunnels for the given file hash. Traditionally this should + // be called after calling ftServer::fileCancel(). + // + virtual void stopMonitoringFileTunnels(const std::string& file_hash) = 0 ; + + // Sets the file sharing strategy. It concerns all local files. It would + // be better to handle this for each file, of course. + + void setFileSharingStrategy(FileSharingStrategy f) { _sharing_strategy = f ; } + +protected: + FileSharingStrategy _sharing_strategy ; +}; + +#endif // RSTURTLE_H diff --git a/libretroshare/src/_rsiface/rstypes.h b/libretroshare/src/_rsiface/rstypes.h index b870eb327..cc6284ed3 100644 --- a/libretroshare/src/_rsiface/rstypes.h +++ b/libretroshare/src/_rsiface/rstypes.h @@ -1,5 +1,5 @@ -#ifndef RS_TYPES_GUI_INTERFACE_H -#define RS_TYPES_GUI_INTERFACE_H +#ifndef RSTYPES_H +#define RSTYPES_H /* * "$Id: rstypes.h,v 1.7 2007-05-05 16:10:05 rmf24 Exp $" @@ -43,61 +43,61 @@ const uint32_t FT_STATE_WAITING = 0x0002; const uint32_t FT_STATE_DOWNLOADING = 0x0003; const uint32_t FT_STATE_COMPLETE = 0x0004; -class TransferInfo +// CHANGE: CLASS_TO_STRUCT +struct TransferInfo { - public: - /**** Need Some of these Fields ****/ - std::string peerId; - std::string name; /* if has alternative name? */ - double tfRate; /* kbytes */ - int status; /* FT_STATE_... */ + /**** Need Some of these Fields ****/ + std::string peerId; + std::string name; /* if has alternative name? */ + double tfRate; /* kbytes */ + int status; /* FT_STATE_... */ }; class FileInfo { - /* old BaseInfo Entries */ - public: +/* old BaseInfo Entries */ +public: - FileInfo() :flags(0), mId(0) { return; } - RsCertId id; /* key for matching everything */ - int flags; /* INFO_TAG above */ + FileInfo() :flags(0), mId(0) {} + RsCertId id; /* key for matching everything */ + int flags; /* INFO_TAG above */ - /* allow this to be tweaked by the GUI Model */ - mutable unsigned int mId; /* (GUI) Model Id -> unique number */ + /* allow this to be tweaked by the GUI Model */ + mutable unsigned int mId; /* (GUI) Model Id -> unique number */ - /* Old FileInfo Entries */ - public: +/* Old FileInfo Entries */ +public: -static const int kRsFiStatusNone = 0; -static const int kRsFiStatusStall = 1; -static const int kRsFiStatusProgress = 2; -static const int kRsFiStatusDone = 2; + static const int kRsFiStatusNone = 0; + static const int kRsFiStatusStall = 1; + static const int kRsFiStatusProgress = 2; + static const int kRsFiStatusDone = 2; - /* FileInfo(); */ +/* FileInfo(); */ - int searchId; /* 0 if none */ - std::string path; - std::string fname; - std::string hash; - std::string ext; + int searchId; /* 0 if none */ + std::string path; + std::string fname; + std::string hash; + std::string ext; - uint64_t size; - uint64_t avail; /* how much we have */ - int status; + uint64_t size; + uint64_t avail; /* how much we have */ + int status; - bool inRecommend; + bool inRecommend; - double rank; - int age; + double rank; + int age; - /* Transfer Stuff */ - uint64_t transfered; - double tfRate; /* in kbytes */ - uint32_t downloadStatus; /* 0 = Err, 1 = Ok, 2 = Done */ - std::list peers; + /* Transfer Stuff */ + uint64_t transfered; + double tfRate; /* in kbytes */ + uint32_t downloadStatus; /* 0 = Err, 1 = Ok, 2 = Done */ + std::list peers; - time_t lastTS; + time_t lastTS; }; std::ostream &operator<<(std::ostream &out, const FileInfo &info); @@ -111,42 +111,43 @@ std::ostream &operator<<(std::ostream &out, const FileInfo &info); #define UPNP_STATE_FAILED_UDP 4 #define UPNP_STATE_ACTIVE 5 -class RsConfig +// CHANGE: CLASS_TO_STRUCT +struct RsConfig { - public: - std::string ownId; - std::string ownName; - std::string localAddr; - int localPort; - std::string extAddr; - int extPort; - std::string extName; + std::string ownId; + std::string ownName; - bool firewalled; - bool forwardPort; + std::string localAddr; + int localPort; + std::string extAddr; + int extPort; + std::string extName; - int maxDownloadDataRate; /* kb */ - int maxUploadDataRate; /* kb */ - int maxIndivDataRate; /* kb */ + bool firewalled; + bool forwardPort; - int promptAtBoot; /* popup the password prompt */ + int maxDownloadDataRate; /* kb */ + int maxUploadDataRate; /* kb */ + int maxIndivDataRate; /* kb */ - /* older data types */ - bool DHTActive; - bool uPnPActive; + int promptAtBoot; /* popup the password prompt */ - int uPnPState; - int DHTPeers; + /* older data types */ + bool DHTActive; + bool uPnPActive; - /* Flags for Network Status */ - bool netOk; /* That we've talked to someone! */ - bool netUpnpOk; /* upnp is enabled and active */ - bool netDhtOk; /* response from dht */ - bool netExtOk; /* know our external address */ - bool netUdpOk; /* recvd stun / udp packets */ - bool netTcpOk; /* recvd incoming tcp */ - bool netResetReq; + int uPnPState; + int DHTPeers; + + /* Flags for Network Status */ + bool netOk; /* That we've talked to someone! */ + bool netUpnpOk; /* upnp is enabled and active */ + bool netDhtOk; /* response from dht */ + bool netExtOk; /* know our external address */ + bool netUdpOk; /* recvd stun / udp packets */ + bool netTcpOk; /* recvd incoming tcp */ + bool netResetReq; }; /********************** For Search Interface *****************/ @@ -164,25 +165,23 @@ const int OpExactMatch = 0x002; const int OpLessThan = 0x003; const int OpGreaterThan = 0x004; -class Condition +// CHANGE: CLASS_TO_STRUCT +struct Condition { - public: - - std::string type; - int op; - double value; - std::string name; + std::string type; + int op; + double value; + std::string name; }; -class SearchRequest +// CHANGE: CLASS_TO_STRUCT +struct SearchRequest { - public: - int searchId; - RsCertId toId; /* all zeros for everyone! */ - std::list tests; + int searchId; + RsCertId toId; /* all zeros for everyone! */ + std::list tests; }; - /********************** For FileCache Interface *****************/ #define DIR_TYPE_ROOT 0x01 @@ -204,46 +203,46 @@ class SearchRequest #define DIR_FLAGS_DETAILS 0x0002 #define DIR_FLAGS_CHILDREN 0x0004 -class DirStub +// CHANGE: CLASS_TO_STRUCT +struct DirStub { - public: - uint8_t type; - std::string name; - void *ref; + uint8_t type; + std::string name; + void *ref; }; -class DirDetails +// CHANGE: CLASS_TO_STRUCT +struct DirDetails { - public: - void *parent; - uint32_t prow; /* parent row */ + void *parent; + uint32_t prow; /* parent row */ - void *ref; - uint8_t type; - std::string id; - std::string name; - std::string hash; - std::string path; - uint64_t count; - uint32_t age; - uint32_t rank; + void *ref; + uint8_t type; + std::string id; + std::string name; + std::string hash; + std::string path; + uint64_t count; + uint32_t age; + uint32_t rank; - std::list children; + std::list children; }; -class FileDetail +// CHANGE: CLASS_TO_STRUCT +struct FileDetail { - public: - std::string id; - std::string name; - std::string hash; - std::string path; - uint64_t size; - uint32_t age; - uint32_t rank; + std::string id; + std::string name; + std::string hash; + std::string path; + uint64_t size; + uint32_t age; + uint32_t rank; }; -#endif +#endif // RSTYPES_H diff --git a/libretroshare/src/services/p3status.cc b/libretroshare/src/services/p3status.cc index 731dd4be8..75e358a2f 100644 --- a/libretroshare/src/services/p3status.cc +++ b/libretroshare/src/services/p3status.cc @@ -24,6 +24,7 @@ */ #include "services/p3status.h" +#include "_rsiface/rsstatus.h" std::ostream& operator<<(std::ostream& out, const StatusInfo& si) {