From b0591ec20469dcaea98f2bb64d61a7b7c4c79a86 Mon Sep 17 00:00:00 2001 From: Adi Oanca Date: Tue, 13 Jan 2004 00:00:59 +0000 Subject: [PATCH] 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 --- src/kits/app/PortLink.cpp | 47 +++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/kits/app/PortLink.cpp b/src/kits/app/PortLink.cpp index 423fec4089..f3924e19e5 100644 --- a/src/kits/app/PortLink.cpp +++ b/src/kits/app/PortLink.cpp @@ -24,42 +24,45 @@ // Description: Class for low-overhead port-based messaging // //------------------------------------------------------------------------------ +#include + #include #include "PortLink.h" #include "PortMessage.h" +#include "Session.h" PortLink::PortLink(port_id port) { 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; - fReceivePort=create_port(30,"PortLink reply port"); + fSendPort = port; + fReceivePort = create_port(30,"PortLink reply port"); - fSendCode=0; - fSendBuffer=new char[4096]; - fSendPosition=8; - fDataSize=(int32*)(fSendBuffer+sizeof(int32)); - *fDataSize=0; + fSendCode = 0; + fSendBuffer = (char*)malloc(4096);//new char[4096]; + fSendPosition = 8; + fDataSize = (int32*)(fSendBuffer+sizeof(int32)); + *fDataSize = 0; } PortLink::PortLink( const PortLink &link ) { - port_ok=link.port_ok; + port_ok = link.port_ok; - fSendPort=link.fSendPort; - fReceivePort=create_port(30,"PortLink reply port"); + fSendPort = link.fSendPort; + fReceivePort = create_port(30,"PortLink reply port"); - fSendCode = 0; - fSendBuffer=new char[4096]; - fSendPosition = 8; - fDataSize=(int32*)(fSendBuffer+sizeof(int32)); - *fDataSize=0; + fSendCode = 0; + fSendBuffer = (char*)malloc(4096);//new char[4096]; + fSendPosition = 8; + fDataSize = (int32*)(fSendBuffer+sizeof(int32)); + *fDataSize = 0; } PortLink::~PortLink(void) { - delete [] fSendBuffer; + free(fSendBuffer);//delete [] fSendBuffer; } void PortLink::SetOpCode( int32 code ) @@ -120,6 +123,16 @@ status_t PortLink::FlushWithReply( PortMessage *msg,bigtime_t timeout ) 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) { if (size <= 0)