1/* 2 * Copyright 2005-2007, Ingo Weinhold <bonefish@cs.tu-berlin.de>. 3 * All rights reserved. Distributed under the terms of the MIT License. 4 */ 5#ifndef _BOOT_REMOTE_DISK_H 6#define _BOOT_REMOTE_DISK_H 7 8#include <netinet/in.h> 9 10#include <SupportDefs.h> 11 12#include <boot/net/RemoteDiskDefs.h> 13 14 15class RemoteDisk { 16public: 17 RemoteDisk(); 18 ~RemoteDisk(); 19 20 status_t Init(uint32 serverAddress, uint16 serverPort, 21 off_t imageSize); 22 23 status_t FindAnyRemoteDisk(); 24 25 ssize_t ReadAt(off_t pos, void *buffer, 26 size_t bufferSize); 27 ssize_t WriteAt(off_t pos, const void *buffer, 28 size_t bufferSize); 29 30 off_t Size() const 31 { return fImageSize; } 32 33 bool IsReadOnly() const 34 { return false; } 35 36// uint32 ServerIPAddress() const 37// { return fServerAddress; } 38// uint16 ServerPort() const 39// { return fServerPort; } 40 41private: 42 status_t _Init(); 43 44 ssize_t _ReadFromPacket(off_t& pos, uint8*& buffer, 45 size_t& bufferSize); 46 47 status_t _SendRequest(remote_disk_header *request, 48 size_t size, uint8 expectedReply, 49 sockaddr_in* peerAddress = NULL); 50 status_t _SendRequest(remote_disk_header *request, 51 size_t size, uint8 expectedReply, 52 sockaddr_in* peerAddress, 53 void* receiveBuffer, 54 size_t receiveBufferSize, 55 int32* bytesReceived); 56 57private: 58 sockaddr_in fSocketAddress; 59 sockaddr_in fServerAddress; 60 off_t fImageSize; 61 uint64 fRequestID; 62 int fSocket; 63 void* fPacket; 64 int32 fPacketSize; 65}; 66 67#endif // _BOOT_REMOTE_DISK_H 68