mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-15 04:22:27 -04:00

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8047 b45a01b8-16f6-495d-af2f-9b41ad6348cc
89 lines
2.4 KiB
C++
89 lines
2.4 KiB
C++
#include "ServiceControlHandler.h"
|
|
|
|
#include "retroshare/rsservicecontrol.h"
|
|
|
|
#include "Operators.h"
|
|
|
|
namespace resource_api
|
|
{
|
|
// maybe move to another place later
|
|
// need more generic operators for list, vector, map
|
|
template<class T>
|
|
void setToStream(StreamBase& stream, std::set<T>& set)
|
|
{
|
|
if(stream.serialise())
|
|
{
|
|
for(typename std::set<T>::iterator sit = set.begin(); sit != set.end(); sit++)
|
|
{
|
|
T item = *sit;
|
|
stream << makeValueReference(item);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
while(stream.hasMore())
|
|
{
|
|
T item;
|
|
stream << makeValueReference(item);
|
|
set.insert(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
void servicePermissionToStream(StreamBase& stream, RsServicePermissions& perm)
|
|
{
|
|
stream << makeKeyValueReference("service_id", perm.mServiceId)
|
|
<< makeKeyValueReference("service_name", perm.mServiceName)
|
|
<< makeKeyValueReference("default_allowed", perm.mDefaultAllowed)
|
|
;
|
|
setToStream(stream.getStreamToMember("peers_allowed"), perm.mPeersAllowed);
|
|
setToStream(stream.getStreamToMember("peers_denied"), perm.mPeersDenied);
|
|
}
|
|
|
|
ServiceControlHandler::ServiceControlHandler(RsServiceControl* control):
|
|
mRsServiceControl(control)
|
|
{
|
|
addResourceHandler("*", this, &ServiceControlHandler::handleWildcard);
|
|
}
|
|
|
|
void ServiceControlHandler::handleWildcard(Request &req, Response &resp)
|
|
{
|
|
bool ok = false;
|
|
if(!req.mPath.empty())
|
|
{
|
|
}
|
|
else
|
|
{
|
|
// no more path element
|
|
if(req.isGet())
|
|
{
|
|
// list all peers
|
|
ok = true;
|
|
RsPeerServiceInfo psi;
|
|
ok &= mRsServiceControl->getOwnServices(psi);
|
|
for(std::map<uint32_t, RsServiceInfo>::iterator mit = psi.mServiceList.begin(); mit != psi.mServiceList.end(); mit++)
|
|
{
|
|
RsServicePermissions perms;
|
|
ok &= mRsServiceControl->getServicePermissions(mit->first, perms);
|
|
if(ok)
|
|
{
|
|
servicePermissionToStream(resp.mDataStream.getStreamToMember(), perms);
|
|
}
|
|
}
|
|
}
|
|
else if(req.isPut())
|
|
{
|
|
|
|
}
|
|
}
|
|
if(ok)
|
|
{
|
|
resp.setOk();
|
|
}
|
|
else
|
|
{
|
|
resp.setFail();
|
|
}
|
|
}
|
|
|
|
} // namespace resource_api
|