1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 #include <BufferedStreamSocket.hxx>
15 // LO vs WinAPI conflict
21 #include <sys/socket.h>
28 BufferedStreamSocket::BufferedStreamSocket( const osl::StreamSocket
&aSocket
):
29 StreamSocket( aSocket
),
38 BufferedStreamSocket::BufferedStreamSocket( int aSocket
):
48 void BufferedStreamSocket::getPeerAddr(osl::SocketAddr
& rAddr
)
50 assert ( !usingCSocket
);
51 StreamSocket::getPeerAddr( rAddr
);
54 sal_Int32
BufferedStreamSocket::write( const void* pBuffer
, sal_uInt32 n
)
57 return StreamSocket::write( pBuffer
, n
);
59 return ::send( mSocket
, (const char *) pBuffer
, (size_t) n
, 0 );
62 void BufferedStreamSocket::close()
64 if( usingCSocket
&& mSocket
!= -1 )
67 ::closesocket( mSocket
);
74 ::osl::StreamSocket::close();
77 sal_Int32
BufferedStreamSocket::readLine( OString
& aLine
)
81 // Process buffer first incase data already present.
82 vector
<char>::iterator aIt
;
83 if ( (aIt
= find( aBuffer
.begin(), aBuffer
.end(), '\n' ))
86 sal_uInt64 aLocation
= aIt
- aBuffer
.begin();
88 aLine
= OString( &(*aBuffer
.begin()), aLocation
);
90 aBuffer
.erase( aBuffer
.begin(), aIt
+ 1 ); // Also delete the empty line
91 aRead
-= (aLocation
+ 1);
93 SAL_INFO( "sdremote.bluetooth", "recv line '" << aLine
<< "'" );
95 return aLine
.getLength() + 1;
98 // Then try and receive if nothing present
99 aBuffer
.resize( aRead
+ 100 );
101 aRet
= StreamSocket::recv( &aBuffer
[aRead
], 100 );
103 aRet
= ::recv( mSocket
, &aBuffer
[aRead
], 100, 0 );
105 SAL_INFO( "sdremote.bluetooth", "recv " << aRet
<< " aBuffer len " << aBuffer
.size() );
110 // Prevent buffer from growing massively large.
111 if ( aRead
> MAX_LINE_LENGTH
)
113 aBuffer
.erase( aBuffer
.begin(), aBuffer
.end() );
122 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */