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