respect SO_BROADCAST for received and sent datagrams.

- check if the destination address is specified in IPv4's SendData()
 - minor cleanups to IPv4's TRACE()s.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20681 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Hugo Santos
2007-04-13 21:33:13 +00:00
parent 7e99a484fb
commit 49f3c71e21
4 changed files with 68 additions and 40 deletions
+14 -6
View File
@@ -50,13 +50,14 @@ public:
status_t InitCheck() const;
status_t Enqueue(net_buffer *buffer);
status_t EnqueueClone(net_buffer *buffer);
net_buffer *Dequeue(bool clone);
status_t BlockingDequeue(bool clone, bigtime_t timeout,
net_buffer **_buffer);
status_t SocketDequeue(uint32 flags, net_buffer **_buffer);
void Clear();
status_t SocketEnqueue(net_buffer *buffer);
status_t SocketDequeue(uint32 flags, net_buffer **_buffer);
size_t AvailableData() const;
void WakeAll();
@@ -65,7 +66,7 @@ public:
protected:
status_t _Enqueue(net_buffer *buffer);
status_t _EnqueueClone(net_buffer *buffer);
status_t _SocketEnqueue(net_buffer *buffer);
net_buffer *_Dequeue(bool clone);
void _Clear();
@@ -141,15 +142,22 @@ DECL_DATAGRAM_SOCKET(inline status_t)::_Enqueue(net_buffer *buffer)
}
DECL_DATAGRAM_SOCKET(inline status_t)::EnqueueClone(net_buffer *_buffer)
DECL_DATAGRAM_SOCKET(inline status_t)::SocketEnqueue(net_buffer *_buffer)
{
AutoLocker _(fLock);
return _EnqueueClone(_buffer);
return _SocketEnqueue(_buffer);
}
DECL_DATAGRAM_SOCKET(inline status_t)::_EnqueueClone(net_buffer *_buffer)
DECL_DATAGRAM_SOCKET(inline status_t)::_SocketEnqueue(net_buffer *_buffer)
{
if (_buffer->flags & MSG_BCAST) {
// only deliver datagrams sent to a broadcast address
// to sockets with SO_BROADCAST on.
if (!(fSocket->options & SO_BROADCAST))
return B_OK;
}
net_buffer *buffer = ModuleBundle::Buffer()->clone(_buffer, false);
if (buffer == NULL)
return B_NO_MEMORY;