1/* 2 * Copyright 2006-2008, Haiku, Inc. All Rights Reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Axel Dörfler, axeld@pinc-software.de 7 */ 8#ifndef NET_UTILITY_H 9#define NET_UTILITY_H 10 11 12#include <net_stack.h> 13 14 15class UserBuffer { 16public: 17 UserBuffer(void* buffer, size_t size); 18 19 void* Push(void* source, size_t size); 20 status_t Pad(size_t length); 21 status_t PadToNext(size_t length); 22 23 status_t Status() const 24 { return fStatus; } 25 size_t BytesConsumed() const 26 { return fBufferSize - fAvailable; } 27 28private: 29 uint8* fBuffer; 30 size_t fBufferSize; 31 size_t fAvailable; 32 status_t fStatus; 33}; 34 35 36inline 37UserBuffer::UserBuffer(void* buffer, size_t size) 38 : 39 fBuffer((uint8*)buffer), 40 fBufferSize(size), 41 fAvailable(size), 42 fStatus(B_OK) 43{ 44} 45 46 47// checksums 48uint16 compute_checksum(uint8* _buffer, size_t length); 49uint16 checksum(uint8* buffer, size_t length); 50 51// notifications 52status_t notify_socket(net_socket* socket, uint8 event, int32 value); 53 54// fifos 55status_t init_fifo(net_fifo* fifo, const char *name, size_t maxBytes); 56void uninit_fifo(net_fifo* fifo); 57status_t fifo_enqueue_buffer(net_fifo* fifo, struct net_buffer* buffer); 58ssize_t fifo_dequeue_buffer(net_fifo* fifo, uint32 flags, bigtime_t timeout, 59 struct net_buffer** _buffer); 60status_t clear_fifo(net_fifo* fifo); 61status_t fifo_socket_enqueue_buffer(net_fifo* fifo, net_socket* socket, 62 uint8 event, net_buffer* buffer); 63 64// timer 65void init_timer(net_timer* timer, net_timer_func hook, void* data); 66void set_timer(net_timer* timer, bigtime_t delay); 67bool cancel_timer(struct net_timer* timer); 68status_t wait_for_timer(struct net_timer* timer); 69bool is_timer_active(net_timer* timer); 70bool is_timer_running(net_timer* timer); 71status_t init_timers(void); 72void uninit_timers(void); 73 74// syscall restart 75bool is_syscall(void); 76bool is_restarted_syscall(void); 77void store_syscall_restart_timeout(bigtime_t timeout); 78bigtime_t restore_syscall_restart_timeout(void); 79 80#endif // NET_UTILITY_H 81