xref: /haiku/src/add-ons/kernel/file_systems/netfs/client/ServerQueryIterator.cpp (revision 5a1d355fdf2747f80f8c46e2539f844a0b813346)
1*5a1d355fSStephan Aßmus // ServerQueryIterator.cpp
2*5a1d355fSStephan Aßmus 
3*5a1d355fSStephan Aßmus #include "ServerQueryIterator.h"
4*5a1d355fSStephan Aßmus 
5*5a1d355fSStephan Aßmus #include <new>
6*5a1d355fSStephan Aßmus 
7*5a1d355fSStephan Aßmus // constructor
ServerQueryIterator(Volume * volume)8*5a1d355fSStephan Aßmus ServerQueryIterator::ServerQueryIterator(Volume* volume)
9*5a1d355fSStephan Aßmus 	: QueryIterator(volume),
10*5a1d355fSStephan Aßmus 	  fRemoteCookie(-1),
11*5a1d355fSStephan Aßmus 	  fShareVolumeIDs(NULL),
12*5a1d355fSStephan Aßmus 	  fShareVolumeCount(0),
13*5a1d355fSStephan Aßmus 	  fShareVolumeIndex(0)
14*5a1d355fSStephan Aßmus {
15*5a1d355fSStephan Aßmus }
16*5a1d355fSStephan Aßmus 
17*5a1d355fSStephan Aßmus // destructor
~ServerQueryIterator()18*5a1d355fSStephan Aßmus ServerQueryIterator::~ServerQueryIterator()
19*5a1d355fSStephan Aßmus {
20*5a1d355fSStephan Aßmus }
21*5a1d355fSStephan Aßmus 
22*5a1d355fSStephan Aßmus // SetRemoteCookie
23*5a1d355fSStephan Aßmus void
SetRemoteCookie(int32 cookie)24*5a1d355fSStephan Aßmus ServerQueryIterator::SetRemoteCookie(int32 cookie)
25*5a1d355fSStephan Aßmus {
26*5a1d355fSStephan Aßmus 	fRemoteCookie = cookie;
27*5a1d355fSStephan Aßmus }
28*5a1d355fSStephan Aßmus 
29*5a1d355fSStephan Aßmus // GetRemoteCookie
30*5a1d355fSStephan Aßmus int32
GetRemoteCookie() const31*5a1d355fSStephan Aßmus ServerQueryIterator::GetRemoteCookie() const
32*5a1d355fSStephan Aßmus {
33*5a1d355fSStephan Aßmus 	return fRemoteCookie;
34*5a1d355fSStephan Aßmus }
35*5a1d355fSStephan Aßmus 
36*5a1d355fSStephan Aßmus // SetEntry
37*5a1d355fSStephan Aßmus status_t
SetEntry(const int32 * shareVolumeIDs,int32 shareVolumeCount,const NodeInfo & dirInfo,const EntryInfo & entryInfo)38*5a1d355fSStephan Aßmus ServerQueryIterator::SetEntry(const int32* shareVolumeIDs,
39*5a1d355fSStephan Aßmus 	int32 shareVolumeCount, const NodeInfo& dirInfo,
40*5a1d355fSStephan Aßmus 	const EntryInfo& entryInfo)
41*5a1d355fSStephan Aßmus {
42*5a1d355fSStephan Aßmus 	UnsetEntry();
43*5a1d355fSStephan Aßmus 
44*5a1d355fSStephan Aßmus 	if (!shareVolumeIDs || shareVolumeCount <= 0)
45*5a1d355fSStephan Aßmus 		return B_BAD_VALUE;
46*5a1d355fSStephan Aßmus 
47*5a1d355fSStephan Aßmus 	// copy volume IDs
48*5a1d355fSStephan Aßmus 	if (shareVolumeCount <= IN_OBJECT_ID_COUNT)
49*5a1d355fSStephan Aßmus 		fShareVolumeIDs = fInObjectIDs;
50*5a1d355fSStephan Aßmus 	else
51*5a1d355fSStephan Aßmus 		fShareVolumeIDs = new(std::nothrow) int32[shareVolumeCount];
52*5a1d355fSStephan Aßmus 	if (!fShareVolumeIDs)
53*5a1d355fSStephan Aßmus 		return B_NO_MEMORY;
54*5a1d355fSStephan Aßmus 	fShareVolumeCount = shareVolumeCount;
55*5a1d355fSStephan Aßmus 	memcpy(fShareVolumeIDs, shareVolumeIDs, shareVolumeCount * 4);
56*5a1d355fSStephan Aßmus 
57*5a1d355fSStephan Aßmus 	// copy entry name
58*5a1d355fSStephan Aßmus 	if (!fEntryName.SetTo(entryInfo.name.GetString())) {
59*5a1d355fSStephan Aßmus 		UnsetEntry();
60*5a1d355fSStephan Aßmus 		return B_NO_MEMORY;
61*5a1d355fSStephan Aßmus 	}
62*5a1d355fSStephan Aßmus 
63*5a1d355fSStephan Aßmus 	fDirectoryInfo = dirInfo;
64*5a1d355fSStephan Aßmus 	fEntryInfo = entryInfo;
65*5a1d355fSStephan Aßmus 	fEntryInfo.name.SetTo(fEntryName.GetString());
66*5a1d355fSStephan Aßmus 
67*5a1d355fSStephan Aßmus 	return B_OK;
68*5a1d355fSStephan Aßmus }
69*5a1d355fSStephan Aßmus 
70*5a1d355fSStephan Aßmus // UnsetEntry
71*5a1d355fSStephan Aßmus void
UnsetEntry()72*5a1d355fSStephan Aßmus ServerQueryIterator::UnsetEntry()
73*5a1d355fSStephan Aßmus {
74*5a1d355fSStephan Aßmus 	if (fShareVolumeIDs && fShareVolumeIDs != fInObjectIDs)
75*5a1d355fSStephan Aßmus 		delete[] fShareVolumeIDs;
76*5a1d355fSStephan Aßmus 	fShareVolumeIDs = NULL;
77*5a1d355fSStephan Aßmus 
78*5a1d355fSStephan Aßmus 	fShareVolumeCount = 0;
79*5a1d355fSStephan Aßmus 	fShareVolumeIndex = 0;
80*5a1d355fSStephan Aßmus 	fEntryName.Unset();
81*5a1d355fSStephan Aßmus 	fEntryInfo.name.SetTo(NULL);
82*5a1d355fSStephan Aßmus }
83*5a1d355fSStephan Aßmus 
84*5a1d355fSStephan Aßmus // GetShareVolumeIDs
85*5a1d355fSStephan Aßmus const int32*
GetShareVolumeIDs() const86*5a1d355fSStephan Aßmus ServerQueryIterator::GetShareVolumeIDs() const
87*5a1d355fSStephan Aßmus {
88*5a1d355fSStephan Aßmus 	return fShareVolumeIDs;
89*5a1d355fSStephan Aßmus }
90*5a1d355fSStephan Aßmus 
91*5a1d355fSStephan Aßmus // CountShareVolumes
92*5a1d355fSStephan Aßmus int32
CountShareVolumes() const93*5a1d355fSStephan Aßmus ServerQueryIterator::CountShareVolumes() const
94*5a1d355fSStephan Aßmus {
95*5a1d355fSStephan Aßmus 	return fShareVolumeCount;
96*5a1d355fSStephan Aßmus }
97*5a1d355fSStephan Aßmus 
98*5a1d355fSStephan Aßmus // GetDirectoryInfo
99*5a1d355fSStephan Aßmus const NodeInfo&
GetDirectoryInfo() const100*5a1d355fSStephan Aßmus ServerQueryIterator::GetDirectoryInfo() const
101*5a1d355fSStephan Aßmus {
102*5a1d355fSStephan Aßmus 	return fDirectoryInfo;
103*5a1d355fSStephan Aßmus }
104*5a1d355fSStephan Aßmus 
105*5a1d355fSStephan Aßmus // GetEntryInfo
106*5a1d355fSStephan Aßmus const EntryInfo&
GetEntryInfo() const107*5a1d355fSStephan Aßmus ServerQueryIterator::GetEntryInfo() const
108*5a1d355fSStephan Aßmus {
109*5a1d355fSStephan Aßmus 	return fEntryInfo;
110*5a1d355fSStephan Aßmus }
111*5a1d355fSStephan Aßmus 
112*5a1d355fSStephan Aßmus // HasNextShareVolumeID
113*5a1d355fSStephan Aßmus bool
HasNextShareVolumeID() const114*5a1d355fSStephan Aßmus ServerQueryIterator::HasNextShareVolumeID() const
115*5a1d355fSStephan Aßmus {
116*5a1d355fSStephan Aßmus 	return (fShareVolumeIDs && fShareVolumeIndex < fShareVolumeCount);
117*5a1d355fSStephan Aßmus }
118*5a1d355fSStephan Aßmus 
119*5a1d355fSStephan Aßmus // NextShareVolumeID
120*5a1d355fSStephan Aßmus int32
NextShareVolumeID()121*5a1d355fSStephan Aßmus ServerQueryIterator::NextShareVolumeID()
122*5a1d355fSStephan Aßmus {
123*5a1d355fSStephan Aßmus 	if (!fShareVolumeIDs || fShareVolumeIndex >= fShareVolumeCount)
124*5a1d355fSStephan Aßmus 		return B_ENTRY_NOT_FOUND;
125*5a1d355fSStephan Aßmus 
126*5a1d355fSStephan Aßmus 	return fShareVolumeIDs[fShareVolumeIndex++];
127*5a1d355fSStephan Aßmus }
128