nfs4: Let GenerateClientID take advantage of PeerAddress methods
This commit is contained in:
@@ -28,22 +28,22 @@
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ServerAddress::operator==(const ServerAddress& address)
|
PeerAddress::operator==(const PeerAddress& address)
|
||||||
{
|
{
|
||||||
return memcmp(&fAddress, &address.fAddress, sizeof(fAddress)) == 0
|
return memcmp(&fAddress, &address.fAddress, sizeof(fAddress)) == 0
|
||||||
&& fProtocol == address.fProtocol;
|
&& fProtocol == address.fProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ServerAddress::operator<(const ServerAddress& address)
|
PeerAddress::operator<(const PeerAddress& address)
|
||||||
{
|
{
|
||||||
int compare = memcmp(&fAddress, &address.fAddress, sizeof(fAddress));
|
int compare = memcmp(&fAddress, &address.fAddress, sizeof(fAddress));
|
||||||
return compare < 0 || (compare == 0 && fProtocol < address.fProtocol);
|
return compare < 0 || (compare == 0 && fProtocol < address.fProtocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ServerAddress&
|
PeerAddress&
|
||||||
ServerAddress::operator=(const ServerAddress& address)
|
PeerAddress::operator=(const PeerAddress& address)
|
||||||
{
|
{
|
||||||
fAddress = address.fAddress;
|
fAddress = address.fAddress;
|
||||||
fProtocol = address.fProtocol;
|
fProtocol = address.fProtocol;
|
||||||
@@ -51,7 +51,7 @@ ServerAddress::operator=(const ServerAddress& address)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ServerAddress::ServerAddress()
|
PeerAddress::PeerAddress()
|
||||||
:
|
:
|
||||||
fProtocol(0)
|
fProtocol(0)
|
||||||
{
|
{
|
||||||
@@ -60,7 +60,7 @@ ServerAddress::ServerAddress()
|
|||||||
|
|
||||||
|
|
||||||
const char*
|
const char*
|
||||||
ServerAddress::ProtocolString() const
|
PeerAddress::ProtocolString() const
|
||||||
{
|
{
|
||||||
static const char* tcpName = "tcp";
|
static const char* tcpName = "tcp";
|
||||||
static const char* udpName = "udp";
|
static const char* udpName = "udp";
|
||||||
@@ -78,7 +78,7 @@ ServerAddress::ProtocolString() const
|
|||||||
|
|
||||||
|
|
||||||
char*
|
char*
|
||||||
ServerAddress::UniversalAddress() const
|
PeerAddress::UniversalAddress() const
|
||||||
{
|
{
|
||||||
const sockaddr* address = reinterpret_cast<const sockaddr*>(&fAddress);
|
const sockaddr* address = reinterpret_cast<const sockaddr*>(&fAddress);
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ ServerAddress::UniversalAddress() const
|
|||||||
|
|
||||||
|
|
||||||
socklen_t
|
socklen_t
|
||||||
ServerAddress::AddressSize() const
|
PeerAddress::AddressSize() const
|
||||||
{
|
{
|
||||||
switch (reinterpret_cast<const sockaddr*>(&fAddress)->sa_family) {
|
switch (reinterpret_cast<const sockaddr*>(&fAddress)->sa_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
@@ -112,7 +112,7 @@ ServerAddress::AddressSize() const
|
|||||||
|
|
||||||
|
|
||||||
uint16
|
uint16
|
||||||
ServerAddress::Port() const
|
PeerAddress::Port() const
|
||||||
{
|
{
|
||||||
uint16 port;
|
uint16 port;
|
||||||
|
|
||||||
@@ -132,7 +132,7 @@ ServerAddress::Port() const
|
|||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerAddress::SetPort(uint16 port)
|
PeerAddress::SetPort(uint16 port)
|
||||||
{
|
{
|
||||||
port = htons(port);
|
port = htons(port);
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ ServerAddress::SetPort(uint16 port)
|
|||||||
|
|
||||||
|
|
||||||
const void*
|
const void*
|
||||||
ServerAddress::InAddr() const
|
PeerAddress::InAddr() const
|
||||||
{
|
{
|
||||||
switch (reinterpret_cast<const sockaddr*>(&fAddress)->sa_family) {
|
switch (reinterpret_cast<const sockaddr*>(&fAddress)->sa_family) {
|
||||||
case AF_INET:
|
case AF_INET:
|
||||||
@@ -161,9 +161,22 @@ ServerAddress::InAddr() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t
|
||||||
|
PeerAddress::InAddrSize() const
|
||||||
|
{
|
||||||
|
switch (reinterpret_cast<const sockaddr*>(&fAddress)->sa_family) {
|
||||||
|
case AF_INET:
|
||||||
|
return sizeof(in_addr);
|
||||||
|
case AF_INET6:
|
||||||
|
return sizeof(in6_addr);
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ServerAddress::ResolveName(const char* name, ServerAddress* address)
|
PeerAddress::ResolveName(const char* name, PeerAddress* address)
|
||||||
{
|
{
|
||||||
address->fProtocol = IPPROTO_TCP;
|
address->fProtocol = IPPROTO_TCP;
|
||||||
|
|
||||||
@@ -210,39 +223,39 @@ ServerAddress::ResolveName(const char* name, ServerAddress* address)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Connection::Connection(const ServerAddress& address)
|
Connection::Connection(const PeerAddress& address)
|
||||||
:
|
:
|
||||||
ConnectionBase(address)
|
ConnectionBase(address)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ConnectionListener::ConnectionListener(const ServerAddress& address)
|
ConnectionListener::ConnectionListener(const PeerAddress& address)
|
||||||
:
|
:
|
||||||
ConnectionBase(address)
|
ConnectionBase(address)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ConnectionBase::ConnectionBase(const ServerAddress& address)
|
ConnectionBase::ConnectionBase(const PeerAddress& address)
|
||||||
:
|
:
|
||||||
fWaitCancel(create_sem(0, NULL)),
|
fWaitCancel(create_sem(0, NULL)),
|
||||||
fSocket(-1),
|
fSocket(-1),
|
||||||
fServerAddress(address)
|
fPeerAddress(address)
|
||||||
{
|
{
|
||||||
mutex_init(&fSocketLock, NULL);
|
mutex_init(&fSocketLock, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ConnectionStream::ConnectionStream(const ServerAddress& address)
|
ConnectionStream::ConnectionStream(const PeerAddress& address)
|
||||||
:
|
:
|
||||||
Connection(address)
|
Connection(address)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ConnectionPacket::ConnectionPacket(const ServerAddress& address)
|
ConnectionPacket::ConnectionPacket(const PeerAddress& address)
|
||||||
:
|
:
|
||||||
Connection(address)
|
Connection(address)
|
||||||
{
|
{
|
||||||
@@ -259,9 +272,9 @@ ConnectionBase::~ConnectionBase()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ConnectionBase::GetLocalAddress(ServerAddress* address)
|
ConnectionBase::GetLocalAddress(PeerAddress* address)
|
||||||
{
|
{
|
||||||
address->fProtocol = fServerAddress.fProtocol;
|
address->fProtocol = fPeerAddress.fProtocol;
|
||||||
|
|
||||||
socklen_t addressSize = sizeof(address->fAddress);
|
socklen_t addressSize = sizeof(address->fAddress);
|
||||||
return getsockname(fSocket, (struct sockaddr*)&address->fAddress,
|
return getsockname(fSocket, (struct sockaddr*)&address->fAddress,
|
||||||
@@ -443,7 +456,7 @@ ConnectionPacket::Receive(void** _buffer, uint32* _size)
|
|||||||
|
|
||||||
|
|
||||||
Connection*
|
Connection*
|
||||||
Connection::CreateObject(const ServerAddress& address)
|
Connection::CreateObject(const PeerAddress& address)
|
||||||
{
|
{
|
||||||
switch (address.fProtocol) {
|
switch (address.fProtocol) {
|
||||||
case IPPROTO_TCP:
|
case IPPROTO_TCP:
|
||||||
@@ -457,7 +470,7 @@ Connection::CreateObject(const ServerAddress& address)
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
Connection::Connect(Connection **_connection, const ServerAddress& address)
|
Connection::Connect(Connection **_connection, const PeerAddress& address)
|
||||||
{
|
{
|
||||||
Connection* conn = CreateObject(address);
|
Connection* conn = CreateObject(address);
|
||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
@@ -477,7 +490,7 @@ Connection::Connect(Connection **_connection, const ServerAddress& address)
|
|||||||
|
|
||||||
status_t
|
status_t
|
||||||
Connection::SetTo(Connection **_connection, int socket,
|
Connection::SetTo(Connection **_connection, int socket,
|
||||||
const ServerAddress& address)
|
const PeerAddress& address)
|
||||||
{
|
{
|
||||||
Connection* conn = CreateObject(address);
|
Connection* conn = CreateObject(address);
|
||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
@@ -494,9 +507,9 @@ status_t
|
|||||||
Connection::Connect()
|
Connection::Connect()
|
||||||
{
|
{
|
||||||
const sockaddr& address =
|
const sockaddr& address =
|
||||||
*reinterpret_cast<const sockaddr*>(&fServerAddress);
|
*reinterpret_cast<const sockaddr*>(&fPeerAddress);
|
||||||
|
|
||||||
switch (fServerAddress.fProtocol) {
|
switch (fPeerAddress.fProtocol) {
|
||||||
case IPPROTO_TCP:
|
case IPPROTO_TCP:
|
||||||
fSocket = socket(address.sa_family, SOCK_STREAM, IPPROTO_TCP);
|
fSocket = socket(address.sa_family, SOCK_STREAM, IPPROTO_TCP);
|
||||||
break;
|
break;
|
||||||
@@ -619,7 +632,7 @@ ConnectionListener::Listen(ConnectionListener** listener, uint16 port)
|
|||||||
return errno;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
ServerAddress address;
|
PeerAddress address;
|
||||||
address.fProtocol = IPPROTO_TCP;
|
address.fProtocol = IPPROTO_TCP;
|
||||||
memset(&address.fAddress, 0, sizeof(address.fAddress));
|
memset(&address.fAddress, 0, sizeof(address.fAddress));
|
||||||
|
|
||||||
@@ -663,7 +676,7 @@ ConnectionListener::AcceptConnection(Connection** connection)
|
|||||||
if (sock < 0)
|
if (sock < 0)
|
||||||
return errno;
|
return errno;
|
||||||
|
|
||||||
ServerAddress address;
|
PeerAddress address;
|
||||||
address.fProtocol = IPPROTO_TCP;
|
address.fProtocol = IPPROTO_TCP;
|
||||||
address.fAddress = addr;
|
address.fAddress = addr;
|
||||||
|
|
||||||
|
|||||||
@@ -15,16 +15,16 @@
|
|||||||
#include <SupportDefs.h>
|
#include <SupportDefs.h>
|
||||||
|
|
||||||
|
|
||||||
struct ServerAddress {
|
struct PeerAddress {
|
||||||
sockaddr_storage fAddress;
|
sockaddr_storage fAddress;
|
||||||
int fProtocol;
|
int fProtocol;
|
||||||
|
|
||||||
bool operator==(const ServerAddress& address);
|
bool operator==(const PeerAddress& address);
|
||||||
bool operator<(const ServerAddress& address);
|
bool operator<(const PeerAddress& address);
|
||||||
|
|
||||||
ServerAddress& operator=(const ServerAddress& address);
|
PeerAddress& operator=(const PeerAddress& address);
|
||||||
|
|
||||||
ServerAddress();
|
PeerAddress();
|
||||||
|
|
||||||
const char* ProtocolString() const;
|
const char* ProtocolString() const;
|
||||||
char* UniversalAddress() const;
|
char* UniversalAddress() const;
|
||||||
@@ -35,17 +35,18 @@ struct ServerAddress {
|
|||||||
uint16 Port() const;
|
uint16 Port() const;
|
||||||
|
|
||||||
const void* InAddr() const;
|
const void* InAddr() const;
|
||||||
|
size_t InAddrSize() const;
|
||||||
|
|
||||||
static status_t ResolveName(const char* name,
|
static status_t ResolveName(const char* name,
|
||||||
ServerAddress* address);
|
PeerAddress* address);
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConnectionBase {
|
class ConnectionBase {
|
||||||
public:
|
public:
|
||||||
ConnectionBase(const ServerAddress& address);
|
ConnectionBase(const PeerAddress& address);
|
||||||
virtual ~ConnectionBase();
|
virtual ~ConnectionBase();
|
||||||
|
|
||||||
status_t GetLocalAddress(ServerAddress* address);
|
status_t GetLocalAddress(PeerAddress* address);
|
||||||
|
|
||||||
void Disconnect();
|
void Disconnect();
|
||||||
|
|
||||||
@@ -54,15 +55,15 @@ protected:
|
|||||||
int fSocket;
|
int fSocket;
|
||||||
mutex fSocketLock;
|
mutex fSocketLock;
|
||||||
|
|
||||||
const ServerAddress fServerAddress;
|
const PeerAddress fPeerAddress;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Connection : public ConnectionBase {
|
class Connection : public ConnectionBase {
|
||||||
public:
|
public:
|
||||||
static status_t Connect(Connection **connection,
|
static status_t Connect(Connection **connection,
|
||||||
const ServerAddress& address);
|
const PeerAddress& address);
|
||||||
static status_t SetTo(Connection **connection, int socket,
|
static status_t SetTo(Connection **connection, int socket,
|
||||||
const ServerAddress& address);
|
const PeerAddress& address);
|
||||||
|
|
||||||
virtual status_t Send(const void* buffer, uint32 size) = 0;
|
virtual status_t Send(const void* buffer, uint32 size) = 0;
|
||||||
virtual status_t Receive(void** buffer, uint32* size) = 0;
|
virtual status_t Receive(void** buffer, uint32* size) = 0;
|
||||||
@@ -70,16 +71,16 @@ public:
|
|||||||
status_t Reconnect();
|
status_t Reconnect();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static Connection* CreateObject(const ServerAddress& address);
|
static Connection* CreateObject(const PeerAddress& address);
|
||||||
|
|
||||||
Connection(const ServerAddress& address);
|
Connection(const PeerAddress& address);
|
||||||
status_t Connect();
|
status_t Connect();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ConnectionStream : public Connection {
|
class ConnectionStream : public Connection {
|
||||||
public:
|
public:
|
||||||
ConnectionStream(const ServerAddress& address);
|
ConnectionStream(const PeerAddress& address);
|
||||||
|
|
||||||
virtual status_t Send(const void* buffer, uint32 size);
|
virtual status_t Send(const void* buffer, uint32 size);
|
||||||
virtual status_t Receive(void** buffer, uint32* size);
|
virtual status_t Receive(void** buffer, uint32* size);
|
||||||
@@ -87,7 +88,7 @@ public:
|
|||||||
|
|
||||||
class ConnectionPacket : public Connection {
|
class ConnectionPacket : public Connection {
|
||||||
public:
|
public:
|
||||||
ConnectionPacket(const ServerAddress& address);
|
ConnectionPacket(const PeerAddress& address);
|
||||||
|
|
||||||
virtual status_t Send(const void* buffer, uint32 size);
|
virtual status_t Send(const void* buffer, uint32 size);
|
||||||
virtual status_t Receive(void** buffer, uint32* size);
|
virtual status_t Receive(void** buffer, uint32* size);
|
||||||
@@ -100,7 +101,7 @@ public:
|
|||||||
status_t AcceptConnection(Connection** connection);
|
status_t AcceptConnection(Connection** connection);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ConnectionListener(const ServerAddress& address);
|
ConnectionListener(const PeerAddress& address);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CONNECTION_H
|
#endif // CONNECTION_H
|
||||||
|
|||||||
@@ -224,10 +224,10 @@ FileSystem::Migrate(const RPC::Server* serv)
|
|||||||
reinterpret_cast<FSLocations*>(values[0].fData.fLocations);
|
reinterpret_cast<FSLocations*>(values[0].fData.fLocations);
|
||||||
|
|
||||||
RPC::Server* server = fServer;
|
RPC::Server* server = fServer;
|
||||||
ServerAddress addr = fServer->ID();
|
PeerAddress addr = fServer->ID();
|
||||||
for (uint32 i = 0; i < locs->fCount; i++) {
|
for (uint32 i = 0; i < locs->fCount; i++) {
|
||||||
for (uint32 j = 0; j < locs->fLocations[i].fCount; j++) {
|
for (uint32 j = 0; j < locs->fLocations[i].fCount; j++) {
|
||||||
if (ServerAddress::ResolveName(locs->fLocations[i].fLocations[j],
|
if (PeerAddress::ResolveName(locs->fLocations[i].fLocations[j],
|
||||||
&addr) != B_OK)
|
&addr) != B_OK)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
status_t RegisterCallback(Callback* callback);
|
status_t RegisterCallback(Callback* callback);
|
||||||
status_t UnregisterCallback(Callback* callback);
|
status_t UnregisterCallback(Callback* callback);
|
||||||
|
|
||||||
inline ServerAddress LocalID();
|
inline PeerAddress LocalID();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
status_t StartServer();
|
status_t StartServer();
|
||||||
@@ -72,10 +72,10 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
inline ServerAddress
|
inline PeerAddress
|
||||||
CallbackServer::LocalID()
|
CallbackServer::LocalID()
|
||||||
{
|
{
|
||||||
ServerAddress address;
|
PeerAddress address;
|
||||||
fListener->GetLocalAddress(&address);
|
fListener->GetLocalAddress(&address);
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ RequestManager::FindRequest(uint32 xid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Server::Server(Connection* connection, ServerAddress* address)
|
Server::Server(Connection* connection, PeerAddress* address)
|
||||||
:
|
:
|
||||||
fConnection(connection),
|
fConnection(connection),
|
||||||
fAddress(address),
|
fAddress(address),
|
||||||
@@ -301,7 +301,7 @@ ServerManager::~ServerManager()
|
|||||||
|
|
||||||
|
|
||||||
status_t
|
status_t
|
||||||
ServerManager::Acquire(Server** _server, const ServerAddress& address,
|
ServerManager::Acquire(Server** _server, const PeerAddress& address,
|
||||||
ProgramData* (*createPrivateData)(Server*))
|
ProgramData* (*createPrivateData)(Server*))
|
||||||
{
|
{
|
||||||
status_t result;
|
status_t result;
|
||||||
@@ -372,7 +372,7 @@ ServerManager::Release(Server* server)
|
|||||||
|
|
||||||
|
|
||||||
ServerNode*
|
ServerNode*
|
||||||
ServerManager::_Find(const ServerAddress& address)
|
ServerManager::_Find(const PeerAddress& address)
|
||||||
{
|
{
|
||||||
ServerNode* node = fRoot;
|
ServerNode* node = fRoot;
|
||||||
while (node != NULL) {
|
while (node != NULL) {
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public:
|
|||||||
class Server {
|
class Server {
|
||||||
public:
|
public:
|
||||||
Server(Connection* connection,
|
Server(Connection* connection,
|
||||||
ServerAddress* address);
|
PeerAddress* address);
|
||||||
virtual ~Server();
|
virtual ~Server();
|
||||||
|
|
||||||
status_t SendCall(Call* call, Reply** reply);
|
status_t SendCall(Call* call, Reply** reply);
|
||||||
@@ -74,8 +74,8 @@ public:
|
|||||||
|
|
||||||
status_t Repair();
|
status_t Repair();
|
||||||
|
|
||||||
inline const ServerAddress& ID() const;
|
inline const PeerAddress& ID() const;
|
||||||
inline ServerAddress LocalID() const;
|
inline PeerAddress LocalID() const;
|
||||||
|
|
||||||
inline ProgramData* PrivateData();
|
inline ProgramData* PrivateData();
|
||||||
inline void SetPrivateData(ProgramData* privateData);
|
inline void SetPrivateData(ProgramData* privateData);
|
||||||
@@ -96,7 +96,7 @@ private:
|
|||||||
|
|
||||||
RequestManager fRequests;
|
RequestManager fRequests;
|
||||||
Connection* fConnection;
|
Connection* fConnection;
|
||||||
const ServerAddress* fAddress;
|
const PeerAddress* fAddress;
|
||||||
|
|
||||||
ProgramData* fPrivateData;
|
ProgramData* fPrivateData;
|
||||||
|
|
||||||
@@ -125,17 +125,17 @@ Server::CancelCall(Request* request)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline const ServerAddress&
|
inline const PeerAddress&
|
||||||
Server::ID() const
|
Server::ID() const
|
||||||
{
|
{
|
||||||
return *fAddress;
|
return *fAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
inline ServerAddress
|
inline PeerAddress
|
||||||
Server::LocalID() const
|
Server::LocalID() const
|
||||||
{
|
{
|
||||||
ServerAddress addr;
|
PeerAddress addr;
|
||||||
memset(&addr, 0, sizeof(addr));
|
memset(&addr, 0, sizeof(addr));
|
||||||
fConnection->GetLocalAddress(&addr);
|
fConnection->GetLocalAddress(&addr);
|
||||||
return addr;
|
return addr;
|
||||||
@@ -158,7 +158,7 @@ Server::SetPrivateData(ProgramData* privateData)
|
|||||||
|
|
||||||
|
|
||||||
struct ServerNode {
|
struct ServerNode {
|
||||||
ServerAddress fID;
|
PeerAddress fID;
|
||||||
Server* fServer;
|
Server* fServer;
|
||||||
int fRefCount;
|
int fRefCount;
|
||||||
|
|
||||||
@@ -171,13 +171,13 @@ public:
|
|||||||
ServerManager();
|
ServerManager();
|
||||||
~ServerManager();
|
~ServerManager();
|
||||||
|
|
||||||
status_t Acquire(Server** _server, const ServerAddress& address,
|
status_t Acquire(Server** _server, const PeerAddress& address,
|
||||||
ProgramData* (*createPrivateData)(Server*));
|
ProgramData* (*createPrivateData)(Server*));
|
||||||
void Release(Server* server);
|
void Release(Server* server);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
ServerNode* _Find(const ServerAddress& address);
|
ServerNode* _Find(const PeerAddress& address);
|
||||||
void _Delete(ServerNode* node);
|
void _Delete(ServerNode* node);
|
||||||
ServerNode* _Insert(ServerNode* node);
|
ServerNode* _Insert(ServerNode* node);
|
||||||
|
|
||||||
|
|||||||
@@ -673,8 +673,8 @@ RequestBuilder::SetClientID(RPC::Server* server)
|
|||||||
|
|
||||||
uint32 id = server->GetCallback()->ID();
|
uint32 id = server->GetCallback()->ID();
|
||||||
|
|
||||||
ServerAddress local = gRPCCallbackServer->LocalID();
|
PeerAddress local = gRPCCallbackServer->LocalID();
|
||||||
ServerAddress servAddr = server->LocalID();
|
PeerAddress servAddr = server->LocalID();
|
||||||
servAddr.SetPort(local.Port());
|
servAddr.SetPort(local.Port());
|
||||||
|
|
||||||
fRequest->Stream().AddString(local.ProtocolString());
|
fRequest->Stream().AddString(local.ProtocolString());
|
||||||
@@ -700,46 +700,15 @@ RequestBuilder::_GenerateClientId(XDR::WriteStream& stream,
|
|||||||
char id[512] = "HAIKU:kernel:";
|
char id[512] = "HAIKU:kernel:";
|
||||||
int pos = strlen(id);
|
int pos = strlen(id);
|
||||||
|
|
||||||
const sockaddr* remoteAddress =
|
PeerAddress local = server->LocalID();
|
||||||
reinterpret_cast<const sockaddr*>(&server->ID().fAddress);
|
|
||||||
|
|
||||||
ServerAddress local = server->LocalID();
|
memcpy(id + pos, server->ID().InAddr(), server->ID().InAddrSize());
|
||||||
const sockaddr* localAddress = reinterpret_cast<sockaddr*>(&local.fAddress);
|
pos += sizeof(server->ID().InAddrSize());
|
||||||
|
|
||||||
const sockaddr_in* address4;
|
|
||||||
const sockaddr_in6* address6;
|
|
||||||
switch (remoteAddress->sa_family) {
|
|
||||||
case AF_INET:
|
|
||||||
address4 = reinterpret_cast<const sockaddr_in*>(remoteAddress);
|
|
||||||
|
|
||||||
memcpy(id + pos, &address4->sin_addr, sizeof(address4->sin_addr));
|
memcpy(id + pos, local.InAddr(), local.InAddrSize());
|
||||||
pos += sizeof(address4->sin_addr);
|
pos += sizeof(local.InAddrSize());
|
||||||
|
|
||||||
memcpy(id + pos,
|
*(uint16*)(id + pos) = server->ID().Port();
|
||||||
&reinterpret_cast<const sockaddr_in*>(localAddress)->sin_addr,
|
|
||||||
sizeof(address4->sin_addr));
|
|
||||||
pos += sizeof(address4->sin_addr);
|
|
||||||
|
|
||||||
*(uint16*)(id + pos) = address4->sin_port;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case AF_INET6:
|
|
||||||
address6 = reinterpret_cast<const sockaddr_in6*>(remoteAddress);
|
|
||||||
|
|
||||||
memcpy(id + pos, &address6->sin6_addr, sizeof(address6->sin6_addr));
|
|
||||||
pos += sizeof(address6->sin6_addr);
|
|
||||||
|
|
||||||
memcpy(id + pos,
|
|
||||||
&reinterpret_cast<const sockaddr_in6*>(localAddress)->sin6_addr,
|
|
||||||
sizeof(address6->sin6_addr));
|
|
||||||
pos += sizeof(address6->sin6_addr);
|
|
||||||
|
|
||||||
*(uint16*)(id + pos) = address6->sin6_port;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return B_BAD_VALUE;
|
|
||||||
}
|
|
||||||
pos += sizeof(uint16);
|
pos += sizeof(uint16);
|
||||||
|
|
||||||
*(uint16*)(id + pos) = server->ID().fProtocol;
|
*(uint16*)(id + pos) = server->ID().fProtocol;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ CreateNFS4Server(RPC::Server* serv)
|
|||||||
|
|
||||||
// TODO: IPv6 address will cause problems
|
// TODO: IPv6 address will cause problems
|
||||||
static status_t
|
static status_t
|
||||||
ParseArguments(const char* _args, ServerAddress* address, char* _path)
|
ParseArguments(const char* _args, PeerAddress* address, char* _path)
|
||||||
{
|
{
|
||||||
if (_args == NULL)
|
if (_args == NULL)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -58,7 +58,7 @@ ParseArguments(const char* _args, ServerAddress* address, char* _path)
|
|||||||
}
|
}
|
||||||
*path++ = '\0';
|
*path++ = '\0';
|
||||||
|
|
||||||
status_t result = ServerAddress::ResolveName(args, address);
|
status_t result = PeerAddress::ResolveName(args, address);
|
||||||
if (result != B_OK)
|
if (result != B_OK)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ nfs4_mount(fs_volume* volume, const char* device, uint32 flags,
|
|||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
locker.Unlock();
|
locker.Unlock();
|
||||||
|
|
||||||
ServerAddress address;
|
PeerAddress address;
|
||||||
char path[256];
|
char path[256];
|
||||||
result = ParseArguments(args, &address, path);
|
result = ParseArguments(args, &address, path);
|
||||||
if (result != B_OK)
|
if (result != B_OK)
|
||||||
|
|||||||
Reference in New Issue
Block a user