xref: /haiku/headers/private/kernel/boot/net/RemoteDisk.h (revision 7749d0bb0c358a3279b1b9cc76d8376e900130a5)
1 /*
2  * Copyright 2005, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
3  * All rights reserved. Distributed under the terms of the MIT License.
4  */
5 
6 #ifndef _BOOT_REMOTE_DISK_H
7 #define _BOOT_REMOTE_DISK_H
8 
9 #include <boot/vfs.h>
10 #include <boot/net/NetDefs.h>
11 #include <boot/net/RemoteDiskDefs.h>
12 
13 class UDPPacket;
14 class UDPSocket;
15 
16 class RemoteDisk : public Node {
17 public:
18 	RemoteDisk();
19 	~RemoteDisk();
20 
21 	status_t Init(ip_addr_t serverAddress, uint16 serverPort, off_t imageSize);
22 
23 	virtual ssize_t ReadAt(void *cookie, off_t pos, void *buffer,
24 		size_t bufferSize);
25 	virtual ssize_t WriteAt(void *cookie, off_t pos, const void *buffer,
26 		size_t bufferSize);
27 
28 	virtual status_t GetName(char *nameBuffer, size_t bufferSize) const;
29 	virtual off_t Size() const;
30 
31 	ip_addr_t ServerIPAddress() const;
32 	uint16 ServerPort() const;
33 
34 	static RemoteDisk *FindAnyRemoteDisk();
35 
36 private:
37 	ssize_t _ReadFromPacket(off_t &pos, uint8 *&buffer, size_t &bufferSize);
38 
39 	static status_t _SendRequest(UDPSocket *socket, ip_addr_t serverAddress,
40 		uint16 serverPort, remote_disk_header *request, size_t size,
41 		uint8 expectedReply, UDPPacket **packet);
42 	status_t _SendRequest(remote_disk_header *request, size_t size,
43 		uint8 expectedReply, UDPPacket **packet);
44 
45 private:
46 	ip_addr_t	fServerAddress;
47 	uint16		fServerPort;
48 	off_t		fImageSize;
49 	uint64		fRequestID;
50 	UDPSocket	*fSocket;
51 	UDPPacket	*fPacket;
52 };
53 
54 #endif	// _BOOT_REMOTE_DISK_H
55