From b36bfdf9c32c0c5130eb192fc0bc655def511b1e Mon Sep 17 00:00:00 2001 From: Thorvald Natvig Date: Wed, 18 Feb 2009 20:27:17 +0000 Subject: [PATCH] hasPermission for Ice git-svn-id: https://mumble.svn.sourceforge.net/svnroot/mumble/trunk@1548 05730e5d-ab1b-0410-a4ac-84af385074fa --- src/murmur/Murmur.ice | 8 ++++++++ src/murmur/MurmurI.h | 2 ++ src/murmur/MurmurIce.cpp | 19 +++++++++++++------ src/murmur/MurmurIceWrapper.cpp | 4 ++++ 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/murmur/Murmur.ice b/src/murmur/Murmur.ice index 17ab95804..ff4396e04 100644 --- a/src/murmur/Murmur.ice +++ b/src/murmur/Murmur.ice @@ -484,6 +484,14 @@ module Murmur */ void sendMessage(int session, string text) throws ServerBootedException, InvalidSessionException; + /** Check if player is permitted to perform action. + * @param session Connection ID of player. See [Player::session]. + * @param channelid ID of Channel. See [Channel::id]. + * @param perm Permission bits to check. + * @return true if any of the permissions in perm were set for the user. + */ + bool hasPermission(int session, int channelid, int perm) throws ServerBootedException, InvalidSessionException, InvalidChannelException; + /** Add a context callback. This is done per player, and will add a context menu action for the player. * * @param session Session of user which should receive context entry. diff --git a/src/murmur/MurmurI.h b/src/murmur/MurmurI.h index 595ee4f31..1f85b5248 100644 --- a/src/murmur/MurmurI.h +++ b/src/murmur/MurmurI.h @@ -75,6 +75,8 @@ class ServerI : virtual public Server { const ::std::string&, const Ice::Current&); + virtual void hasPermission_async(const ::Murmur::AMD_Server_hasPermissionPtr&, ::Ice::Int, ::Ice::Int, ::Ice::Int, const ::Ice::Current&); + virtual void addContextCallback_async(const ::Murmur::AMD_Server_addContextCallbackPtr&, ::Ice::Int, const ::std::string&, const ::std::string&, const ::Murmur::ServerContextCallbackPrx&, int, const ::Ice::Current&); virtual void removeContextCallback_async(const ::Murmur::AMD_Server_removeContextCallbackPtr&, const ::Murmur::ServerContextCallbackPrx&, const ::Ice::Current&); diff --git a/src/murmur/MurmurIce.cpp b/src/murmur/MurmurIce.cpp index 33f103b02..39000dced 100644 --- a/src/murmur/MurmurIce.cpp +++ b/src/murmur/MurmurIce.cpp @@ -658,7 +658,7 @@ static void impl_Server_delete(const ::Murmur::AMD_Server_deletePtr cb, int serv cb->ice_response(); } -static void impl_Server_addCallback(const Murmur::AMD_Server_addCallbackPtr &cb, int server_id, const Murmur::ServerCallbackPrx& cbptr) { +static void impl_Server_addCallback(const Murmur::AMD_Server_addCallbackPtr cb, int server_id, const Murmur::ServerCallbackPrx& cbptr) { NEED_SERVER; QList< ::Murmur::ServerCallbackPrx> &qmList = mi->qmServerCallbacks[server_id]; @@ -672,7 +672,7 @@ static void impl_Server_addCallback(const Murmur::AMD_Server_addCallbackPtr &cb, } } -static void impl_Server_removeCallback(const Murmur::AMD_Server_removeCallbackPtr &cb, int server_id, const Murmur::ServerCallbackPrx& cbptr) { +static void impl_Server_removeCallback(const Murmur::AMD_Server_removeCallbackPtr cb, int server_id, const Murmur::ServerCallbackPrx& cbptr) { NEED_SERVER; QList< ::Murmur::ServerCallbackPrx> &qmList = mi->qmServerCallbacks[server_id]; @@ -865,7 +865,14 @@ static void impl_Server_sendMessage(const ::Murmur::AMD_Server_sendMessagePtr cb cb->ice_response(); } -static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCallbackPtr &cb, int server_id, ::Ice::Int session, const ::std::string& action, const ::std::string& text, const ::Murmur::ServerContextCallbackPrx& cbptr, int ctx) { +static void impl_Server_hasPermission(const ::Murmur::AMD_Server_hasPermissionPtr cb, int server_id, ::Ice::Int session, ::Ice::Int channelid, ::Ice::Int perm) { + NEED_SERVER; + NEED_PLAYER; + NEED_CHANNEL; + cb->ice_response(server->hasPermission(user, channel, static_cast(perm))); +} + +static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCallbackPtr cb, int server_id, ::Ice::Int session, const ::std::string& action, const ::std::string& text, const ::Murmur::ServerContextCallbackPrx& cbptr, int ctx) { NEED_SERVER; NEED_PLAYER; @@ -893,7 +900,7 @@ static void impl_Server_addContextCallback(const Murmur::AMD_Server_addContextCa server->sendMessage(user, &mcaa); } -static void impl_Server_removeContextCallback(const Murmur::AMD_Server_removeContextCallbackPtr &cb, int server_id, const Murmur::ServerContextCallbackPrx& cbptr) { +static void impl_Server_removeContextCallback(const Murmur::AMD_Server_removeContextCallbackPtr cb, int server_id, const Murmur::ServerContextCallbackPrx& cbptr) { NEED_SERVER; QMap > & qmPrx = mi->qmServerContextCallbacks[server_id]; @@ -1297,7 +1304,7 @@ static void impl_Meta_getVersion(const ::Murmur::AMD_Meta_getVersionPtr cb, cons cb->ice_response(major, minor, patch, toStdUtf8String(txt)); } -static void impl_Meta_addCallback(const Murmur::AMD_Meta_addCallbackPtr &cb, const Ice::ObjectAdapterPtr, const Murmur::MetaCallbackPrx& cbptr) { +static void impl_Meta_addCallback(const Murmur::AMD_Meta_addCallbackPtr cb, const Ice::ObjectAdapterPtr, const Murmur::MetaCallbackPrx& cbptr) { try { const Murmur::MetaCallbackPrx &oneway = Murmur::MetaCallbackPrx::checkedCast(cbptr->ice_oneway()); if (! mi->qmMetaCallbacks.contains(oneway)) @@ -1308,7 +1315,7 @@ static void impl_Meta_addCallback(const Murmur::AMD_Meta_addCallbackPtr &cb, con } } -static void impl_Meta_removeCallback(const Murmur::AMD_Meta_removeCallbackPtr &cb, const Ice::ObjectAdapterPtr, const Murmur::MetaCallbackPrx& cbptr) { +static void impl_Meta_removeCallback(const Murmur::AMD_Meta_removeCallbackPtr cb, const Ice::ObjectAdapterPtr, const Murmur::MetaCallbackPrx& cbptr) { try { const Murmur::MetaCallbackPrx &oneway = Murmur::MetaCallbackPrx::uncheckedCast(cbptr->ice_oneway()); mi->qmMetaCallbacks.removeAll(oneway); diff --git a/src/murmur/MurmurIceWrapper.cpp b/src/murmur/MurmurIceWrapper.cpp index 72febce9a..f13ed3467 100644 --- a/src/murmur/MurmurIceWrapper.cpp +++ b/src/murmur/MurmurIceWrapper.cpp @@ -86,6 +86,10 @@ void ::Murmur::ServerI::sendMessage_async(const ::Murmur::AMD_Server_sendMessage IceEvent *ie = new IceEvent(boost::bind(&impl_Server_sendMessage, cb, QString::fromStdString(current.id.name).toInt(), p1, p2)); QCoreApplication::instance()->postEvent(mi, ie); }; +void ::Murmur::ServerI::hasPermission_async(const ::Murmur::AMD_Server_hasPermissionPtr &cb, ::Ice::Int p1, ::Ice::Int p2, ::Ice::Int p3, const ::Ice::Current ¤t) { + IceEvent *ie = new IceEvent(boost::bind(&impl_Server_hasPermission, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3)); + QCoreApplication::instance()->postEvent(mi, ie); +}; void ::Murmur::ServerI::addContextCallback_async(const ::Murmur::AMD_Server_addContextCallbackPtr &cb, ::Ice::Int p1, const ::std::string& p2, const ::std::string& p3, const ::Murmur::ServerContextCallbackPrx& p4, ::Ice::Int p5, const ::Ice::Current ¤t) { IceEvent *ie = new IceEvent(boost::bind(&impl_Server_addContextCallback, cb, QString::fromStdString(current.id.name).toInt(), p1, p2, p3, p4, p5)); QCoreApplication::instance()->postEvent(mi, ie);