Lines Matching refs:buffer

90 			status_t			SendRoutedData(net_buffer* buffer,
92 status_t SendData(net_buffer* buffer);
98 status_t StoreData(net_buffer* buffer);
99 status_t DeliverData(net_buffer* buffer);
178 status_t DemuxIncomingBuffer(net_buffer* buffer);
179 status_t DeliverError(status_t error, net_buffer* buffer);
195 status_t _DemuxBroadcast(net_buffer *buffer);
196 status_t _DemuxUnicast(net_buffer *buffer);
230 status_t ReceiveData(net_buffer* buffer);
232 net_buffer* buffer);
233 status_t Deframe(net_buffer* buffer);
241 inline net_domain* _GetDomain(net_buffer* buffer);
244 UdpDomainSupport* _GetDomainSupport(net_buffer* buffer);
289 UdpDomainSupport::DemuxIncomingBuffer(net_buffer *buffer)
294 if ((buffer->flags & MSG_BCAST) != 0)
295 return _DemuxBroadcast(buffer);
296 if ((buffer->flags & MSG_MCAST) != 0)
299 return _DemuxUnicast(buffer);
304 UdpDomainSupport::DeliverError(status_t error, net_buffer* buffer)
306 if ((buffer->flags & (MSG_BCAST | MSG_MCAST)) != 0)
312 UdpEndpoint* endpoint = _FindActiveEndpoint(buffer->source,
313 buffer->destination);
319 gBufferModule->free(buffer);
532 UdpDomainSupport::_DemuxBroadcast(net_buffer* buffer)
534 sockaddr* peerAddr = buffer->source;
535 sockaddr* broadcastAddr = buffer->destination;
539 if (buffer->interface_address != NULL)
540 mask = (sockaddr*)buffer->interface_address->mask;
542 TRACE_DOMAIN("_DemuxBroadcast(%p): mask %p\n", buffer, mask);
551 && buffer->index != endpoint->socket->bound_to_device)
572 endpoint->StoreData(buffer);
581 UdpDomainSupport::_DemuxUnicast(net_buffer* buffer)
583 TRACE_DOMAIN("_DemuxUnicast(%p)", buffer);
585 const sockaddr* localAddress = buffer->destination;
586 const sockaddr* peerAddress = buffer->source;
590 buffer->index);
593 endpoint = _FindActiveEndpoint(localAddress, NULL, buffer->index);
599 endpoint = _FindActiveEndpoint(*local, peerAddress, buffer->index);
602 endpoint = _FindActiveEndpoint(*local, NULL, buffer->index);
608 TRACE_DOMAIN("_DemuxUnicast(%p) - no matching endpoint found!", buffer);
612 endpoint->StoreData(buffer);
722 UdpEndpointManager::ReceiveData(net_buffer *buffer)
724 TRACE_EPM("ReceiveData(%p [%" B_PRIu32 " bytes])", buffer, buffer->size);
726 UdpDomainSupport* domainSupport = _GetDomainSupport(buffer);
734 status_t status = Deframe(buffer);
739 status = domainSupport->DemuxIncomingBuffer(buffer);
743 domainSupport->Domain()->module->error_reply(NULL, buffer,
748 gBufferModule->free(buffer);
754 UdpEndpointManager::ReceiveError(status_t error, net_buffer* buffer)
757 error, buffer, buffer->size);
760 if (buffer->size < 4)
763 UdpDomainSupport* domainSupport = _GetDomainSupport(buffer);
771 // Deframe the buffer manually, as we usually only get 8 bytes from the
774 if (gBufferModule->read(buffer, 0, &header,
775 std::min((size_t)buffer->size, sizeof(udp_header))) != B_OK) {
779 net_domain* domain = buffer->interface_address->domain;
782 SocketAddress source(addressModule, buffer->source);
783 SocketAddress destination(addressModule, buffer->destination);
788 error = domainSupport->DeliverError(error, buffer);
794 UdpEndpointManager::Deframe(net_buffer* buffer)
796 TRACE_EPM("Deframe(%p [%" B_PRIu32 " bytes])", buffer, buffer->size);
798 NetBufferHeaderReader<udp_header> bufferHeader(buffer);
804 net_domain* domain = _GetDomain(buffer);
807 "specified (interface address %p).", buffer->interface_address);
812 SocketAddress source(addressModule, buffer->source);
813 SocketAddress destination(addressModule, buffer->destination);
822 if (udpLength > buffer->size) {
823 TRACE_EPM(" Deframe(): buffer is too short, expected %hu.",
828 if (buffer->size > udpLength)
829 gBufferModule->trim(buffer, udpLength);
834 buffer, IPPROTO_UDP);
842 // remove UDP-header from buffer before passing it on
876 UdpEndpointManager::_GetDomain(net_buffer* buffer)
878 if (buffer->interface_address != NULL)
879 return buffer->interface_address->domain;
881 return gStackModule->get_domain(buffer->destination->sa_family);
923 /*! Retrieves the UdpDomainSupport object responsible for this buffer, if the
928 UdpEndpointManager::_GetDomainSupport(net_buffer* buffer)
932 return _GetDomainSupport(_GetDomain(buffer), false);
1016 UdpEndpoint::SendRoutedData(net_buffer *buffer, net_route *route)
1018 TRACE_EP("SendRoutedData(%p [%" B_PRIu32 " bytes], %p)", buffer,
1019 buffer->size, route);
1021 if (buffer->size > (0xffff - sizeof(udp_header)))
1024 buffer->protocol = IPPROTO_UDP;
1027 NetBufferPrepend<udp_header> header(buffer);
1031 header->source_port = AddressModule()->get_port(buffer->source);
1032 header->destination_port = AddressModule()->get_port(buffer->destination);
1033 header->udp_length = htons(buffer->size);
1034 // the udp-header is already included in the buffer-size
1040 gBufferModule, buffer, IPPROTO_UDP);
1044 *UDPChecksumField(buffer) = calculatedChecksum;
1046 return next->module->send_routed_data(next, route, buffer);
1051 UdpEndpoint::SendData(net_buffer *buffer)
1053 TRACE_EP("SendData(%p [%" B_PRIu32 " bytes])", buffer, buffer->size);
1055 return gDatalinkModule->send_data(this, NULL, buffer);
1081 TRACE_EP(" FetchData(): returns buffer with %" B_PRIu32 " bytes",
1088 UdpEndpoint::StoreData(net_buffer *buffer)
1090 TRACE_EP("StoreData(%p [%" B_PRIu32 " bytes])", buffer, buffer->size);
1092 return EnqueueClone(buffer);
1101 net_buffer *buffer = gBufferModule->clone(_buffer, false);
1102 if (buffer == NULL)
1105 status_t status = sUdpEndpointManager->Deframe(buffer);
1107 gBufferModule->free(buffer);
1111 return Enqueue(buffer);
1245 net_buffer *buffer)
1247 return ((UdpEndpoint *)protocol)->SendRoutedData(buffer, route);
1252 udp_send_data(net_protocol *protocol, net_buffer *buffer)
1254 return ((UdpEndpoint *)protocol)->SendData(buffer);
1295 udp_receive_data(net_buffer *buffer)
1297 return sUdpEndpointManager->ReceiveData(buffer);
1302 udp_deliver_data(net_protocol *protocol, net_buffer *buffer)
1304 return ((UdpEndpoint *)protocol)->DeliverData(buffer);
1309 udp_error_received(net_error error, net_buffer* buffer)
1335 gBufferModule->free(buffer);
1341 return sUdpEndpointManager->ReceiveError(notifyError, buffer);
1355 net_buffer* buffer, void *data, size_t dataSize)
1358 protocol, buffer, data, dataSize);