diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs index 881807a..dd44564 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Voice/VivoxVoice/VivoxVoiceModule.cs | |||
@@ -92,7 +92,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
92 | // Capability strings | 92 | // Capability strings |
93 | private static readonly string m_parcelVoiceInfoRequestPath = "0107/"; | 93 | private static readonly string m_parcelVoiceInfoRequestPath = "0107/"; |
94 | private static readonly string m_provisionVoiceAccountRequestPath = "0108/"; | 94 | private static readonly string m_provisionVoiceAccountRequestPath = "0108/"; |
95 | private static readonly string m_chatSessionRequestPath = "0109/"; | 95 | //private static readonly string m_chatSessionRequestPath = "0109/"; |
96 | 96 | ||
97 | // Control info, e.g. vivox server, admin user, admin password | 97 | // Control info, e.g. vivox server, admin user, admin password |
98 | private static bool m_pluginEnabled = false; | 98 | private static bool m_pluginEnabled = false; |
@@ -117,6 +117,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
117 | 117 | ||
118 | private IConfig m_config; | 118 | private IConfig m_config; |
119 | 119 | ||
120 | private object m_Lock; | ||
121 | |||
120 | public void Initialise(IConfigSource config) | 122 | public void Initialise(IConfigSource config) |
121 | { | 123 | { |
122 | 124 | ||
@@ -128,6 +130,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
128 | if (!m_config.GetBoolean("enabled", false)) | 130 | if (!m_config.GetBoolean("enabled", false)) |
129 | return; | 131 | return; |
130 | 132 | ||
133 | m_Lock = new object(); | ||
134 | |||
131 | try | 135 | try |
132 | { | 136 | { |
133 | // retrieve configuration variables | 137 | // retrieve configuration variables |
@@ -429,15 +433,15 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
429 | "ParcelVoiceInfoRequest", | 433 | "ParcelVoiceInfoRequest", |
430 | agentID.ToString())); | 434 | agentID.ToString())); |
431 | 435 | ||
432 | caps.RegisterHandler( | 436 | //caps.RegisterHandler( |
433 | "ChatSessionRequest", | 437 | // "ChatSessionRequest", |
434 | new RestStreamHandler( | 438 | // new RestStreamHandler( |
435 | "POST", | 439 | // "POST", |
436 | capsBase + m_chatSessionRequestPath, | 440 | // capsBase + m_chatSessionRequestPath, |
437 | (request, path, param, httpRequest, httpResponse) | 441 | // (request, path, param, httpRequest, httpResponse) |
438 | => ChatSessionRequest(scene, request, path, param, agentID, caps), | 442 | // => ChatSessionRequest(scene, request, path, param, agentID, caps), |
439 | "ChatSessionRequest", | 443 | // "ChatSessionRequest", |
440 | agentID.ToString())); | 444 | // agentID.ToString())); |
441 | } | 445 | } |
442 | 446 | ||
443 | /// <summary> | 447 | /// <summary> |
@@ -818,11 +822,11 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
818 | { | 822 | { |
819 | string requrl = String.Format(m_vivoxChannelPath, m_vivoxServer, "create", channelId, m_authToken); | 823 | string requrl = String.Format(m_vivoxChannelPath, m_vivoxServer, "create", channelId, m_authToken); |
820 | 824 | ||
821 | if (parent != null && parent != String.Empty) | 825 | if (!string.IsNullOrEmpty(parent)) |
822 | { | 826 | { |
823 | requrl = String.Format("{0}&chan_parent={1}", requrl, parent); | 827 | requrl = String.Format("{0}&chan_parent={1}", requrl, parent); |
824 | } | 828 | } |
825 | if (description != null && description != String.Empty) | 829 | if (!string.IsNullOrEmpty(description)) |
826 | { | 830 | { |
827 | requrl = String.Format("{0}&chan_desc={1}", requrl, description); | 831 | requrl = String.Format("{0}&chan_desc={1}", requrl, description); |
828 | } | 832 | } |
@@ -832,7 +836,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
832 | requrl = String.Format("{0}&chan_roll_off={1}", requrl, m_vivoxChannelRollOff); | 836 | requrl = String.Format("{0}&chan_roll_off={1}", requrl, m_vivoxChannelRollOff); |
833 | requrl = String.Format("{0}&chan_dist_model={1}", requrl, m_vivoxChannelDistanceModel); | 837 | requrl = String.Format("{0}&chan_dist_model={1}", requrl, m_vivoxChannelDistanceModel); |
834 | requrl = String.Format("{0}&chan_max_range={1}", requrl, m_vivoxChannelMaximumRange); | 838 | requrl = String.Format("{0}&chan_max_range={1}", requrl, m_vivoxChannelMaximumRange); |
835 | requrl = String.Format("{0}&chan_ckamping_distance={1}", requrl, m_vivoxChannelClampingDistance); | 839 | requrl = String.Format("{0}&chan_clamping_distance={1}", requrl, m_vivoxChannelClampingDistance); |
836 | 840 | ||
837 | XmlElement resp = VivoxCall(requrl, true); | 841 | XmlElement resp = VivoxCall(requrl, true); |
838 | if (XmlFind(resp, "response.level0.body.chan_uri", out channelUri)) | 842 | if (XmlFind(resp, "response.level0.body.chan_uri", out channelUri)) |
@@ -858,7 +862,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
858 | // requrl = String.Format("{0}&chan_parent={1}", requrl, parent); | 862 | // requrl = String.Format("{0}&chan_parent={1}", requrl, parent); |
859 | // } | 863 | // } |
860 | 864 | ||
861 | if (description != null && description != String.Empty) | 865 | if (!string.IsNullOrEmpty(description)) |
862 | { | 866 | { |
863 | requrl = String.Format("{0}&chan_desc={1}", requrl, description); | 867 | requrl = String.Format("{0}&chan_desc={1}", requrl, description); |
864 | } | 868 | } |
@@ -1043,7 +1047,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1043 | private XmlElement VivoxDeleteChannel(string parent, string channelid) | 1047 | private XmlElement VivoxDeleteChannel(string parent, string channelid) |
1044 | { | 1048 | { |
1045 | string requrl = String.Format(m_vivoxChannelDel, m_vivoxServer, "delete", channelid, m_authToken); | 1049 | string requrl = String.Format(m_vivoxChannelDel, m_vivoxServer, "delete", channelid, m_authToken); |
1046 | if (parent != null && parent != String.Empty) | 1050 | if (!string.IsNullOrEmpty(parent)) |
1047 | { | 1051 | { |
1048 | requrl = String.Format("{0}&chan_parent={1}", requrl, parent); | 1052 | requrl = String.Format("{0}&chan_parent={1}", requrl, parent); |
1049 | } | 1053 | } |
@@ -1111,27 +1115,32 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1111 | 1115 | ||
1112 | doc = new XmlDocument(); | 1116 | doc = new XmlDocument(); |
1113 | 1117 | ||
1114 | try | 1118 | // Let's serialize all calls to Vivox. Most of these are driven by |
1119 | // the clients (CAPs), when the user arrives at the region. We don't | ||
1120 | // want to issue many simultaneous http requests to Vivox, because mono | ||
1121 | // doesn't like that | ||
1122 | lock (m_Lock) | ||
1115 | { | 1123 | { |
1116 | // Otherwise prepare the request | 1124 | try |
1117 | m_log.DebugFormat("[VivoxVoice] Sending request <{0}>", requrl); | 1125 | { |
1118 | 1126 | // Otherwise prepare the request | |
1119 | HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requrl); | 1127 | m_log.DebugFormat("[VivoxVoice] Sending request <{0}>", requrl); |
1120 | HttpWebResponse rsp = null; | ||
1121 | 1128 | ||
1122 | // We are sending just parameters, no content | 1129 | HttpWebRequest req = (HttpWebRequest)WebRequest.Create(requrl); |
1123 | req.ContentLength = 0; | ||
1124 | 1130 | ||
1125 | // Send request and retrieve the response | 1131 | // We are sending just parameters, no content |
1126 | rsp = (HttpWebResponse)req.GetResponse(); | 1132 | req.ContentLength = 0; |
1127 | 1133 | ||
1128 | XmlTextReader rdr = new XmlTextReader(rsp.GetResponseStream()); | 1134 | // Send request and retrieve the response |
1129 | doc.Load(rdr); | 1135 | using (HttpWebResponse rsp = (HttpWebResponse)req.GetResponse()) |
1130 | rdr.Close(); | 1136 | using (Stream s = rsp.GetResponseStream()) |
1131 | } | 1137 | using (XmlTextReader rdr = new XmlTextReader(s)) |
1132 | catch (Exception e) | 1138 | doc.Load(rdr); |
1133 | { | 1139 | } |
1134 | m_log.ErrorFormat("[VivoxVoice] Error in admin call : {0}", e.Message); | 1140 | catch (Exception e) |
1141 | { | ||
1142 | m_log.ErrorFormat("[VivoxVoice] Error in admin call : {0}", e.Message); | ||
1143 | } | ||
1135 | } | 1144 | } |
1136 | 1145 | ||
1137 | // If we're debugging server responses, dump the whole | 1146 | // If we're debugging server responses, dump the whole |
@@ -1316,4 +1325,4 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.VivoxVoice | |||
1316 | return false; | 1325 | return false; |
1317 | } | 1326 | } |
1318 | } | 1327 | } |
1319 | } \ No newline at end of file | 1328 | } |