#include "ExtendedServerInfo.h"
#include "ServerInfo.h"
ExtendedShareInfo::ExtendedShareInfo()
:
BReferenceable(),
fShareName()
{
}
status_t
ExtendedShareInfo::SetTo(const ShareInfo* shareInfo)
{
if (!shareInfo)
return B_BAD_VALUE;
if (!fShareName.SetTo(shareInfo->GetShareName()))
return B_NO_MEMORY;
return B_OK;
}
const char*
ExtendedShareInfo::GetShareName() const
{
return fShareName.GetString();
}
ExtendedServerInfo::ExtendedServerInfo(const NetAddress& address)
:
BReferenceable(),
fAddress(address),
fState(0)
{
}
ExtendedServerInfo::~ExtendedServerInfo()
{
int32 count = CountShares();
for (int32 i = 0; i < count; i++)
ShareInfoAt(i)->ReleaseReference();
}
const NetAddress&
ExtendedServerInfo::GetAddress() const
{
return fAddress;
}
const char*
ExtendedServerInfo::GetServerName() const
{
return fServerName.GetString();
}
const char*
ExtendedServerInfo::GetConnectionMethod() const
{
return fConnectionMethod.GetString();
}
int32
ExtendedServerInfo::CountShares() const
{
return fShareInfos.Count();
}
ExtendedShareInfo*
ExtendedServerInfo::ShareInfoAt(int32 index) const
{
if (index < 0 || index >= fShareInfos.Count())
return NULL;
return fShareInfos.ElementAt(index);
}
ExtendedShareInfo*
ExtendedServerInfo::GetShareInfo(const char* name)
{
for (int32 i = 0; ExtendedShareInfo* shareInfo = ShareInfoAt(i); i++) {
if (strcmp(shareInfo->GetShareName(), name) == 0)
return shareInfo;
}
return NULL;
}
status_t
ExtendedServerInfo::SetTo(ServerInfo* serverInfo)
{
if (!serverInfo)
return B_BAD_VALUE;
const char* name = serverInfo->GetServerName();
HashString addressString;
if (!name || strlen(name) == 0) {
status_t error = fAddress.GetString(&addressString, false);
if (error != B_OK)
return error;
name = addressString.GetString();
}
if (!fServerName.SetTo(name)
|| !fConnectionMethod.SetTo(serverInfo->GetConnectionMethod())) {
return B_NO_MEMORY;
}
int32 shareCount = serverInfo->CountShares();
for (int32 i = 0; i < shareCount; i++) {
const ShareInfo& shareInfo = serverInfo->ShareInfoAt(i);
status_t error = _AddShare(&shareInfo);
if (error != B_OK)
return error;
}
return B_OK;
}
void
ExtendedServerInfo::SetState(uint32 state)
{
fState = state;
}
uint32
ExtendedServerInfo::GetState() const
{
return fState;
}
status_t
ExtendedServerInfo::_AddShare(const ShareInfo* info)
{
ExtendedShareInfo* extendedInfo = new(std::nothrow) ExtendedShareInfo;
if (!extendedInfo)
return B_NO_MEMORY;
status_t error = extendedInfo->SetTo(info);
if (error != B_OK) {
delete extendedInfo;
return error;
}
error = fShareInfos.PushBack(extendedInfo);
if (error != B_OK) {
delete extendedInfo;
return error;
}
return B_OK;
}