diff --git a/src/servers/registrar/Registrar.cpp b/src/servers/registrar/Registrar.cpp index 8e62d46e73..946722cba8 100644 --- a/src/servers/registrar/Registrar.cpp +++ b/src/servers/registrar/Registrar.cpp @@ -95,6 +95,9 @@ Registrar::MessageReceived(BMessage *message) case B_REG_SET_THREAD_AND_TEAM: fRoster->HandleSetThreadAndTeam(message); break; + case B_REG_SET_SIGNATURE: + fRoster->HandleSetSignature(message); + break; case B_REG_GET_APP_INFO: fRoster->HandleGetAppInfo(message); break; diff --git a/src/servers/registrar/TRoster.cpp b/src/servers/registrar/TRoster.cpp index 937bc9c34c..2e57215ad4 100644 --- a/src/servers/registrar/TRoster.cpp +++ b/src/servers/registrar/TRoster.cpp @@ -462,6 +462,43 @@ PRINT(("team: %ld, thread: %ld, token: %lu\n", team, thread, token)); FUNCTION_END(); } +// HandleSetSignature +/*! \brief Handles a SetSignature() request. + \param request The request message +*/ +void +TRoster::HandleSetSignature(BMessage *request) +{ + FUNCTION_START(); + + status_t error = B_OK; + // get the parameters + team_id team; + const char *signature; + if (request->FindInt32("team", &team) != B_OK) + error = B_BAD_VALUE; + if (request->FindString("signature", &signature) != B_OK) + error = B_BAD_VALUE; + // find the app and set the signature + if (error == B_OK) { + if (RosterAppInfo *info = fRegisteredApps.InfoFor(team)) + strcpy(info->signature, signature); + else + SET_ERROR(error, B_REG_APP_NOT_REGISTERED); + } + // reply to the request + if (error == B_OK) { + BMessage reply(B_REG_SUCCESS); + request->SendReply(&reply); + } else { + BMessage reply(B_REG_ERROR); + reply.AddInt32("error", error); + request->SendReply(&reply); + } + + FUNCTION_END(); +} + // HandleGetAppInfo /*! \brief Handles a Get{Running,Active,}AppInfo() request. \param request The request message diff --git a/src/servers/registrar/TRoster.h b/src/servers/registrar/TRoster.h index 9cd8743e9a..cea0fb4394 100644 --- a/src/servers/registrar/TRoster.h +++ b/src/servers/registrar/TRoster.h @@ -58,6 +58,7 @@ public: void HandleRemovePreRegApp(BMessage *request); void HandleRemoveApp(BMessage *request); void HandleSetThreadAndTeam(BMessage *request); + void HandleSetSignature(BMessage *request); void HandleGetAppInfo(BMessage *request); void HandleGetAppList(BMessage *request); void HandleActivateApp(BMessage *request);