diff options
Diffstat (limited to 'OpenSim/Region/Environment/Modules/Scripting')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs index bf21dd3..aa7a20f 100644 --- a/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs +++ b/OpenSim/Region/Environment/Modules/Scripting/XMLRPC/XMLRPCModule.cs | |||
@@ -160,6 +160,10 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC | |||
160 | * | 160 | * |
161 | * Generate a LLUUID channel key and add it and | 161 | * Generate a LLUUID channel key and add it and |
162 | * the prim id to dictionary <channelUUID, primUUID> | 162 | * the prim id to dictionary <channelUUID, primUUID> |
163 | * | ||
164 | * A custom channel key can be proposed. | ||
165 | * Otherwise, passing LLUUID.Zero will generate | ||
166 | * and return a random channel | ||
163 | * | 167 | * |
164 | * First check if there is a channel assigned for | 168 | * First check if there is a channel assigned for |
165 | * this itemID. If there is, then someone called | 169 | * this itemID. If there is, then someone called |
@@ -169,9 +173,9 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC | |||
169 | * | 173 | * |
170 | * ********************************************/ | 174 | * ********************************************/ |
171 | 175 | ||
172 | public LLUUID OpenXMLRPCChannel(uint localID, LLUUID itemID) | 176 | public LLUUID OpenXMLRPCChannel(uint localID, LLUUID itemID, LLUUID channelID) |
173 | { | 177 | { |
174 | LLUUID channel = new LLUUID(); | 178 | LLUUID newChannel = LLUUID.Zero; |
175 | 179 | ||
176 | //Is a dupe? | 180 | //Is a dupe? |
177 | foreach (RPCChannelInfo ci in m_openChannels.Values) | 181 | foreach (RPCChannelInfo ci in m_openChannels.Values) |
@@ -179,22 +183,22 @@ namespace OpenSim.Region.Environment.Modules.Scripting.XMLRPC | |||
179 | if (ci.GetItemID().Equals(itemID)) | 183 | if (ci.GetItemID().Equals(itemID)) |
180 | { | 184 | { |
181 | // return the original channel ID for this item | 185 | // return the original channel ID for this item |
182 | channel = ci.GetChannelID(); | 186 | newChannel = ci.GetChannelID(); |
183 | break; | 187 | break; |
184 | } | 188 | } |
185 | } | 189 | } |
186 | 190 | ||
187 | if (channel == LLUUID.Zero) | 191 | if (newChannel == LLUUID.Zero) |
188 | { | 192 | { |
189 | channel = LLUUID.Random(); | 193 | newChannel = (channelID == LLUUID.Zero) ? LLUUID.Random() : channelID; |
190 | RPCChannelInfo rpcChanInfo = new RPCChannelInfo(localID, itemID, channel); | 194 | RPCChannelInfo rpcChanInfo = new RPCChannelInfo(localID, itemID, newChannel); |
191 | lock (XMLRPCListLock) | 195 | lock (XMLRPCListLock) |
192 | { | 196 | { |
193 | m_openChannels.Add(channel, rpcChanInfo); | 197 | m_openChannels.Add(newChannel, rpcChanInfo); |
194 | } | 198 | } |
195 | } | 199 | } |
196 | 200 | ||
197 | return channel; | 201 | return newChannel; |
198 | } | 202 | } |
199 | 203 | ||
200 | // Delete channels based on itemID | 204 | // Delete channels based on itemID |