BMessenger has no friends besides Private anymore.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11023 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2005-01-25 14:46:28 +00:00
parent 4afc60d31b
commit 4b8aafea9f
4 changed files with 46 additions and 29 deletions

View File

@ -14,6 +14,7 @@
#include <Entry.h>
#include <Message.h>
#include <Messenger.h>
#include <MessengerPrivate.h>
#include <SupportDefs.h>
// Project Includes ------------------------------------------------------------
@ -62,10 +63,11 @@ inline
void
_set_message_reply_(BMessage *message, BMessenger messenger)
{
message->fReplyTo.port = messenger.fPort;
message->fReplyTo.target = messenger.fHandlerToken;
message->fReplyTo.team = messenger.fTeam;
message->fReplyTo.preferred = messenger.fPreferredTarget;
BMessenger::Private messengerPrivate(messenger);
message->fReplyTo.port = messengerPrivate.Port();
message->fReplyTo.target = messengerPrivate.Token();
message->fReplyTo.team = messengerPrivate.Team();
message->fReplyTo.preferred = messengerPrivate.IsPreferredTarget();
}
//------------------------------------------------------------------------------
inline int32 _get_message_target_(BMessage *msg)

View File

@ -45,6 +45,7 @@
#include <Errors.h>
#include <Message.h>
#include <Messenger.h>
#include <MessengerPrivate.h>
#include <String.h>
//#include <CRTDBG.H>
@ -329,8 +330,10 @@ BMessenger BMessage::ReturnAddress() const
{
if (WasDelivered())
{
return BMessenger(fReplyTo.team, fReplyTo.port, fReplyTo.target,
fReplyTo.preferred);
BMessenger messenger;
BMessenger::Private(messenger).SetTo(fReplyTo.team, fReplyTo.port,
fReplyTo.target, fReplyTo.preferred);
return messenger;
}
return BMessenger();
@ -457,9 +460,11 @@ status_t BMessage::SendReply(BMessage* the_reply, BMessenger reply_to,
bigtime_t timeout)
{
// TODO: test
BMessenger messenger(fReplyTo.team, fReplyTo.port,
fReplyTo.target,
fReplyTo.preferred);
BMessenger messenger;
BMessenger::Private messengerPrivate(messenger);
messengerPrivate.SetTo(fReplyTo.team, fReplyTo.port, fReplyTo.target,
fReplyTo.preferred);
if (fReplyRequired)
{
if (fReplyDone)
@ -472,9 +477,9 @@ status_t BMessage::SendReply(BMessage* the_reply, BMessenger reply_to,
the_reply->fIsReply = false;
if (err)
{
if (set_port_owner(messenger.fPort, messenger.fTeam) == B_BAD_TEAM_ID)
{
delete_port(messenger.fPort);
if (set_port_owner(messengerPrivate.Port(),
messengerPrivate.Team()) == B_BAD_TEAM_ID) {
delete_port(messengerPrivate.Port());
}
}
return err;
@ -526,9 +531,10 @@ status_t BMessage::SendReply(BMessage* the_reply, BMessage* reply_to_reply,
bigtime_t send_timeout, bigtime_t reply_timeout)
{
// TODO: test
BMessenger messenger(fReplyTo.team, fReplyTo.port,
fReplyTo.target,
fReplyTo.preferred);
BMessenger messenger;
BMessenger::Private messengerPrivate(messenger);
messengerPrivate.SetTo(fReplyTo.team, fReplyTo.port, fReplyTo.target,
fReplyTo.preferred);
if (fReplyRequired)
{
if (fReplyDone)
@ -542,9 +548,9 @@ status_t BMessage::SendReply(BMessage* the_reply, BMessage* reply_to_reply,
the_reply->fIsReply = false;
if (err)
{
if (set_port_owner(messenger.fPort, messenger.fTeam) == B_BAD_TEAM_ID)
{
delete_port(messenger.fPort);
if (set_port_owner(messengerPrivate.Port(),
messengerPrivate.Team()) == B_BAD_TEAM_ID) {
delete_port(messengerPrivate.Port());
}
}
return err;
@ -1792,14 +1798,15 @@ PRINT(("BMessage::_send_(port: %ld, token: %ld, preferred: %d): "
tmp_msg.fReplyTo = fReplyTo;
BMessage* self = const_cast<BMessage*>(this);
BMessenger::Private replyToPrivate(reply_to);
self->fPreferred = preferred;
self->fTarget = token;
self->fReplyRequired = reply_required;
self->fReplyTo.team = reply_to.fTeam;
self->fReplyTo.port = reply_to.fPort;
self->fReplyTo.target = (reply_to.fPreferredTarget
? B_PREFERRED_TOKEN : reply_to.fHandlerToken);
self->fReplyTo.preferred = reply_to.fPreferredTarget;
self->fReplyTo.team = replyToPrivate.Team();
self->fReplyTo.port = replyToPrivate.Port();
self->fReplyTo.target = (replyToPrivate.IsPreferredTarget()
? B_PREFERRED_TOKEN : replyToPrivate.Token());
self->fReplyTo.preferred = replyToPrivate.IsPreferredTarget();
char tmp[0x800];
ssize_t size;
@ -1863,7 +1870,9 @@ status_t BMessage::send_message(port_id port, team_id port_owner, int32 token,
goto error;
{
BMessenger messenger(team, reply_port, B_PREFERRED_TOKEN, false);
BMessenger messenger;
BMessenger::Private(messenger).SetTo(team, reply_port,
B_PREFERRED_TOKEN, false);
err = _send_(port, token, preferred, send_timeout, true, messenger);
}
if (err)

View File

@ -41,6 +41,7 @@
#include <fs_info.h>
#include <image.h>
#include <List.h>
#include <MessengerPrivate.h>
#include <Mime.h>
#include <Node.h>
#include <NodeInfo.h>
@ -2145,7 +2146,8 @@ BRoster::send_to_running(team_id team, int argc, const char *const *args,
app_info info;
error = GetRunningAppInfo(team, &info);
if (error == B_OK) {
BMessenger messenger(team, info.port, 0, true);
BMessenger messenger;
BMessenger::Private(messenger).SetTo(team, info.port, 0, true);
// send messages from the list
if (messageList) {
for (int32 i = 0;
@ -2186,7 +2188,7 @@ DBG(OUT("BRoster::InitMessengers()\n"));
if (rosterPort >= 0 && get_port_info(rosterPort, &info) == B_OK) {
DBG(OUT(" found roster port\n"));
// ask for the MIME messenger
fMess = BMessenger(info.team, rosterPort, 0, true);
BMessenger::Private(fMess).SetTo(info.team, rosterPort, 0, true);
BMessage reply;
status_t error = fMess.SendMessage(B_REG_GET_MIME_MESSENGER, &reply);
if (error == B_OK && reply.what == B_REG_SUCCESS) {

View File

@ -6,6 +6,7 @@
#include <ByteOrder.h>
#include <Messenger.h>
#include <MessengerPrivate.h>
status_t
@ -108,10 +109,13 @@ swap_data(type_code type, void *_data, size_t length, swap_action action)
BMessenger *end = (BMessenger *)((addr_t)_data + length);
while (messenger < end) {
BMessenger::Private messengerPrivate(messenger);
// ToDo: if the additional fields change, this function has to be updated!
messenger->fPort = __swap_int32(messenger->fPort);
messenger->fHandlerToken = __swap_int32(messenger->fHandlerToken);
messenger->fTeam = __swap_int32(messenger->fTeam);
messengerPrivate.SetTo(
__swap_int32(messengerPrivate.Team()),
__swap_int32(messengerPrivate.Port()),
__swap_int32(messengerPrivate.Token()),
messengerPrivate.IsPreferredTarget());
messenger++;
}
break;