aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs7
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs2
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs36
-rw-r--r--OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs127
4 files changed, 123 insertions, 49 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs
index 10a4753..bbadc55 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/AvatarPickerSearchModule.cs
@@ -49,12 +49,10 @@ using OpenSim.Capabilities.Handlers;
49 49
50namespace OpenSim.Region.ClientStack.Linden 50namespace OpenSim.Region.ClientStack.Linden
51{ 51{
52
53 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AvatarPickerSearchModule")] 52 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "AvatarPickerSearchModule")]
54 public class AvatarPickerSearchModule : INonSharedRegionModule 53 public class AvatarPickerSearchModule : INonSharedRegionModule
55 { 54 {
56 private static readonly ILog m_log = 55// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
57 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
58 56
59 private Scene m_scene; 57 private Scene m_scene;
60 private IPeople m_People; 58 private IPeople m_People;
@@ -134,6 +132,5 @@ namespace OpenSim.Region.ClientStack.Linden
134 caps.RegisterHandler("AvatarPickerSearch", m_URL); 132 caps.RegisterHandler("AvatarPickerSearch", m_URL);
135 } 133 }
136 } 134 }
137
138 } 135 }
139} 136} \ No newline at end of file
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
index cf95463..47988dd 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/UploadBakedTextureModule.cs
@@ -287,7 +287,7 @@ namespace OpenSim.Region.ClientStack.Linden
287 287
288 public void RegisterCaps(UUID agentID, Caps caps) 288 public void RegisterCaps(UUID agentID, Caps caps)
289 { 289 {
290 UUID capID = UUID.Random(); 290// UUID capID = UUID.Random();
291 291
292 //caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture)); 292 //caps.RegisterHandler("GetTexture", new StreamHandler("GET", "/CAPS/" + capID, ProcessGetTexture));
293 if (m_URL == "localhost") 293 if (m_URL == "localhost")
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 51cc2bf..d94da34 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -3842,7 +3842,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
3842 m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber); 3842 m_udpClient.NeedAcks.Remove(oPacket.SequenceNumber);
3843 3843
3844 // Count this as a resent packet since we are going to requeue all of the updates contained in it 3844 // Count this as a resent packet since we are going to requeue all of the updates contained in it
3845 Interlocked.Increment(ref m_udpClient.PacketsResent); 3845 Interlocked.Increment(ref m_udpClient.PacketsResent);
3846
3847 // We're not going to worry about interlock yet since its not currently critical that this total count
3848 // is 100% correct
3849 m_udpServer.PacketsResentCount++;
3846 3850
3847 foreach (EntityUpdate update in updates) 3851 foreach (EntityUpdate update in updates)
3848 ResendPrimUpdate(update); 3852 ResendPrimUpdate(update);
@@ -4407,6 +4411,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4407 // Count this as a resent packet since we are going to requeue all of the updates contained in it 4411 // Count this as a resent packet since we are going to requeue all of the updates contained in it
4408 Interlocked.Increment(ref m_udpClient.PacketsResent); 4412 Interlocked.Increment(ref m_udpClient.PacketsResent);
4409 4413
4414 // We're not going to worry about interlock yet since its not currently critical that this total count
4415 // is 100% correct
4416 m_udpServer.PacketsResentCount++;
4417
4410 foreach (ObjectPropertyUpdate update in updates) 4418 foreach (ObjectPropertyUpdate update in updates)
4411 ResendPropertyUpdate(update); 4419 ResendPropertyUpdate(update);
4412 } 4420 }
@@ -4594,6 +4602,32 @@ namespace OpenSim.Region.ClientStack.LindenUDP
4594 SceneObjectPart root = sop.ParentGroup.RootPart; 4602 SceneObjectPart root = sop.ParentGroup.RootPart;
4595 4603
4596 block.TouchName = Util.StringToBytes256(root.TouchName); 4604 block.TouchName = Util.StringToBytes256(root.TouchName);
4605
4606 // SL 3.3.4, at least, appears to read this information as a concatenated byte[] stream of UUIDs but
4607 // it's not yet clear whether this is actually used. If this is done in the future then a pre-cached
4608 // copy is really needed since it's less efficient to be constantly recreating this byte array.
4609// using (MemoryStream memStream = new MemoryStream())
4610// {
4611// using (BinaryWriter binWriter = new BinaryWriter(memStream))
4612// {
4613// for (int i = 0; i < sop.GetNumberOfSides(); i++)
4614// {
4615// Primitive.TextureEntryFace teFace = sop.Shape.Textures.FaceTextures[i];
4616//
4617// UUID textureID;
4618//
4619// if (teFace != null)
4620// textureID = teFace.TextureID;
4621// else
4622// textureID = sop.Shape.Textures.DefaultTexture.TextureID;
4623//
4624// binWriter.Write(textureID.GetBytes());
4625// }
4626//
4627// block.TextureID = memStream.ToArray();
4628// }
4629// }
4630
4597 block.TextureID = new byte[0]; // TextureID ??? 4631 block.TextureID = new byte[0]; // TextureID ???
4598 block.SitName = Util.StringToBytes256(root.SitName); 4632 block.SitName = Util.StringToBytes256(root.SitName);
4599 block.OwnerMask = root.OwnerMask; 4633 block.OwnerMask = root.OwnerMask;
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
index 01981dd..4854893 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs
@@ -147,6 +147,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
147 147
148 StatsManager.RegisterStat( 148 StatsManager.RegisterStat(
149 new Stat( 149 new Stat(
150 "OutgoingPacketsResentCount",
151 "Number of packets resent because a client did not acknowledge receipt",
152 "",
153 "",
154 "clientstack",
155 scene.Name,
156 StatType.Pull,
157 MeasuresOfInterest.AverageChangeOverTime,
158 stat => stat.Value = m_udpServer.PacketsResentCount,
159 StatVerbosity.Debug));
160
161 StatsManager.RegisterStat(
162 new Stat(
150 "AverageUDPProcessTime", 163 "AverageUDPProcessTime",
151 "Average number of milliseconds taken to process each incoming UDP packet in a sample.", 164 "Average number of milliseconds taken to process each incoming UDP packet in a sample.",
152 "This is for initial receive processing which is separate from the later client LL packet processing stage.", 165 "This is for initial receive processing which is separate from the later client LL packet processing stage.",
@@ -299,6 +312,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP
299 public Socket Server { get { return null; } } 312 public Socket Server { get { return null; } }
300 313
301 /// <summary> 314 /// <summary>
315 /// Record how many packets have been resent
316 /// </summary>
317 internal int PacketsResentCount { get; set; }
318
319 /// <summary>
320 /// Record how many packets have been sent
321 /// </summary>
322 internal int PacketsSentCount { get; set; }
323
324 /// <summary>
302 /// Record how many inbound packets could not be recognized as LLUDP packets. 325 /// Record how many inbound packets could not be recognized as LLUDP packets.
303 /// </summary> 326 /// </summary>
304 public int IncomingMalformedPacketCount { get; private set; } 327 public int IncomingMalformedPacketCount { get; private set; }
@@ -866,44 +889,44 @@ namespace OpenSim.Region.ClientStack.LindenUDP
866 return x == m_location; 889 return x == m_location;
867 } 890 }
868 891
869 public void BroadcastPacket(Packet packet, ThrottleOutPacketType category, bool sendToPausedAgents, bool allowSplitting) 892// public void BroadcastPacket(Packet packet, ThrottleOutPacketType category, bool sendToPausedAgents, bool allowSplitting)
870 { 893// {
871 // CoarseLocationUpdate and AvatarGroupsReply packets cannot be split in an automated way 894// // CoarseLocationUpdate and AvatarGroupsReply packets cannot be split in an automated way
872 if ((packet.Type == PacketType.CoarseLocationUpdate || packet.Type == PacketType.AvatarGroupsReply) && allowSplitting) 895// if ((packet.Type == PacketType.CoarseLocationUpdate || packet.Type == PacketType.AvatarGroupsReply) && allowSplitting)
873 allowSplitting = false; 896// allowSplitting = false;
874 897//
875 if (allowSplitting && packet.HasVariableBlocks) 898// if (allowSplitting && packet.HasVariableBlocks)
876 { 899// {
877 byte[][] datas = packet.ToBytesMultiple(); 900// byte[][] datas = packet.ToBytesMultiple();
878 int packetCount = datas.Length; 901// int packetCount = datas.Length;
879 902//
880 if (packetCount < 1) 903// if (packetCount < 1)
881 m_log.Error("[LLUDPSERVER]: Failed to split " + packet.Type + " with estimated length " + packet.Length); 904// m_log.Error("[LLUDPSERVER]: Failed to split " + packet.Type + " with estimated length " + packet.Length);
882 905//
883 for (int i = 0; i < packetCount; i++) 906// for (int i = 0; i < packetCount; i++)
884 { 907// {
885 byte[] data = datas[i]; 908// byte[] data = datas[i];
886 m_scene.ForEachClient( 909// m_scene.ForEachClient(
887 delegate(IClientAPI client) 910// delegate(IClientAPI client)
888 { 911// {
889 if (client is LLClientView) 912// if (client is LLClientView)
890 SendPacketData(((LLClientView)client).UDPClient, data, packet.Type, category, null); 913// SendPacketData(((LLClientView)client).UDPClient, data, packet.Type, category, null);
891 } 914// }
892 ); 915// );
893 } 916// }
894 } 917// }
895 else 918// else
896 { 919// {
897 byte[] data = packet.ToBytes(); 920// byte[] data = packet.ToBytes();
898 m_scene.ForEachClient( 921// m_scene.ForEachClient(
899 delegate(IClientAPI client) 922// delegate(IClientAPI client)
900 { 923// {
901 if (client is LLClientView) 924// if (client is LLClientView)
902 SendPacketData(((LLClientView)client).UDPClient, data, packet.Type, category, null); 925// SendPacketData(((LLClientView)client).UDPClient, data, packet.Type, category, null);
903 } 926// }
904 ); 927// );
905 } 928// }
906 } 929// }
907 930
908 /// <summary> 931 /// <summary>
909 /// Start the process of sending a packet to the client. 932 /// Start the process of sending a packet to the client.
@@ -923,6 +946,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
923 if (packet.Type == PacketType.CoarseLocationUpdate && allowSplitting) 946 if (packet.Type == PacketType.CoarseLocationUpdate && allowSplitting)
924 allowSplitting = false; 947 allowSplitting = false;
925 948
949 bool packetQueued = false;
950
926 if (allowSplitting && packet.HasVariableBlocks) 951 if (allowSplitting && packet.HasVariableBlocks)
927 { 952 {
928 byte[][] datas = packet.ToBytesMultiple(); 953 byte[][] datas = packet.ToBytesMultiple();
@@ -934,18 +959,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
934 for (int i = 0; i < packetCount; i++) 959 for (int i = 0; i < packetCount; i++)
935 { 960 {
936 byte[] data = datas[i]; 961 byte[] data = datas[i];
937 SendPacketData(udpClient, data, packet.Type, category, method); 962
963 if (!SendPacketData(udpClient, data, packet.Type, category, method))
964 packetQueued = true;
938 } 965 }
939 } 966 }
940 else 967 else
941 { 968 {
942 byte[] data = packet.ToBytes(); 969 byte[] data = packet.ToBytes();
943 SendPacketData(udpClient, data, packet.Type, category, method); 970 packetQueued = SendPacketData(udpClient, data, packet.Type, category, method);
944 } 971 }
945 972
946 PacketPool.Instance.ReturnPacket(packet); 973 PacketPool.Instance.ReturnPacket(packet);
947 974
948 m_dataPresentEvent.Set(); 975 if (packetQueued)
976 m_dataPresentEvent.Set();
949 } 977 }
950 978
951 /// <summary> 979 /// <summary>
@@ -959,7 +987,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
959 /// The method to call if the packet is not acked by the client. If null, then a standard 987 /// The method to call if the packet is not acked by the client. If null, then a standard
960 /// resend of the packet is done. 988 /// resend of the packet is done.
961 /// </param> 989 /// </param>
962 public void SendPacketData( 990 /// <returns>true if the data was sent immediately, false if it was queued for sending</returns>
991 public bool SendPacketData(
963 LLUDPClient udpClient, byte[] data, PacketType type, ThrottleOutPacketType category, UnackedPacketMethod method) 992 LLUDPClient udpClient, byte[] data, PacketType type, ThrottleOutPacketType category, UnackedPacketMethod method)
964 { 993 {
965 int dataLength = data.Length; 994 int dataLength = data.Length;
@@ -1032,7 +1061,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1032 // packet so that it isn't sent before a queued update packet. 1061 // packet so that it isn't sent before a queued update packet.
1033 bool requestQueue = type == PacketType.KillObject; 1062 bool requestQueue = type == PacketType.KillObject;
1034 if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority)) 1063 if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue, highPriority))
1064 if (!outgoingPacket.Client.EnqueueOutgoing(outgoingPacket, requestQueue))
1065 {
1035 SendPacketFinal(outgoingPacket); 1066 SendPacketFinal(outgoingPacket);
1067 return true;
1068 }
1069
1070 return false;
1036 1071
1037 #endregion Queue or Send 1072 #endregion Queue or Send
1038 } 1073 }
@@ -1213,6 +1248,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1213 else 1248 else
1214 { 1249 {
1215 Interlocked.Increment(ref udpClient.PacketsResent); 1250 Interlocked.Increment(ref udpClient.PacketsResent);
1251
1252 // We're not going to worry about interlock yet since its not currently critical that this total count
1253 // is 100% correct
1254 PacketsResentCount++;
1216 } 1255 }
1217 1256
1218 #endregion Sequence Number Assignment 1257 #endregion Sequence Number Assignment
@@ -1220,6 +1259,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
1220 // Stats tracking 1259 // Stats tracking
1221 Interlocked.Increment(ref udpClient.PacketsSent); 1260 Interlocked.Increment(ref udpClient.PacketsSent);
1222 1261
1262 // We're not going to worry about interlock yet since its not currently critical that this total count
1263 // is 100% correct
1264 PacketsSentCount++;
1265
1223 // Put the UDP payload on the wire 1266 // Put the UDP payload on the wire
1224 AsyncBeginSend(buffer); 1267 AsyncBeginSend(buffer);
1225 1268