added an new method to be able to port message sto a BSession handler
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6042 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
+30
-17
@@ -24,42 +24,45 @@
|
|||||||
// Description: Class for low-overhead port-based messaging
|
// Description: Class for low-overhead port-based messaging
|
||||||
//
|
//
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
#include <ServerProtocol.h>
|
#include <ServerProtocol.h>
|
||||||
#include "PortLink.h"
|
#include "PortLink.h"
|
||||||
#include "PortMessage.h"
|
#include "PortMessage.h"
|
||||||
|
#include "Session.h"
|
||||||
|
|
||||||
PortLink::PortLink(port_id port)
|
PortLink::PortLink(port_id port)
|
||||||
{
|
{
|
||||||
port_info pi;
|
port_info pi;
|
||||||
port_ok = (get_port_info(port, &pi)==B_OK)? true: false;
|
port_ok = (get_port_info(port, &pi)==B_OK)? true: false;
|
||||||
|
|
||||||
fSendPort=port;
|
fSendPort = port;
|
||||||
fReceivePort=create_port(30,"PortLink reply port");
|
fReceivePort = create_port(30,"PortLink reply port");
|
||||||
|
|
||||||
fSendCode=0;
|
fSendCode = 0;
|
||||||
fSendBuffer=new char[4096];
|
fSendBuffer = (char*)malloc(4096);//new char[4096];
|
||||||
fSendPosition=8;
|
fSendPosition = 8;
|
||||||
fDataSize=(int32*)(fSendBuffer+sizeof(int32));
|
fDataSize = (int32*)(fSendBuffer+sizeof(int32));
|
||||||
*fDataSize=0;
|
*fDataSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PortLink::PortLink( const PortLink &link )
|
PortLink::PortLink( const PortLink &link )
|
||||||
{
|
{
|
||||||
port_ok=link.port_ok;
|
port_ok = link.port_ok;
|
||||||
|
|
||||||
fSendPort=link.fSendPort;
|
fSendPort = link.fSendPort;
|
||||||
fReceivePort=create_port(30,"PortLink reply port");
|
fReceivePort = create_port(30,"PortLink reply port");
|
||||||
|
|
||||||
fSendCode = 0;
|
fSendCode = 0;
|
||||||
fSendBuffer=new char[4096];
|
fSendBuffer = (char*)malloc(4096);//new char[4096];
|
||||||
fSendPosition = 8;
|
fSendPosition = 8;
|
||||||
fDataSize=(int32*)(fSendBuffer+sizeof(int32));
|
fDataSize = (int32*)(fSendBuffer+sizeof(int32));
|
||||||
*fDataSize=0;
|
*fDataSize = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
PortLink::~PortLink(void)
|
PortLink::~PortLink(void)
|
||||||
{
|
{
|
||||||
delete [] fSendBuffer;
|
free(fSendBuffer);//delete [] fSendBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PortLink::SetOpCode( int32 code )
|
void PortLink::SetOpCode( int32 code )
|
||||||
@@ -120,6 +123,16 @@ status_t PortLink::FlushWithReply( PortMessage *msg,bigtime_t timeout )
|
|||||||
return B_OK;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t PortLink::FlushToSession(){
|
||||||
|
BSession ses(0, fSendPort);
|
||||||
|
// !!!!!!!!!!!!!!!!!!!
|
||||||
|
// DW, if you modify PortLink, DON'T forget to modify
|
||||||
|
// BSession::CopyToSendBuffer() as well!!!
|
||||||
|
// !!!!!!!!!!!!!!!!!!!
|
||||||
|
ses.CopyToSendBuffer(fSendBuffer, fSendPosition - 8);
|
||||||
|
ses.Sync();
|
||||||
|
}
|
||||||
|
|
||||||
status_t PortLink::Attach(const void *data, size_t size)
|
status_t PortLink::Attach(const void *data, size_t size)
|
||||||
{
|
{
|
||||||
if (size <= 0)
|
if (size <= 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user