Aurora.Voice.Whisper.MurmurVoiceModule.RestGetMumbleServerInfo C# (CSharp) Method

RestGetMumbleServerInfo() public method

Returns information about a mumble server via a REST Request
public RestGetMumbleServerInfo ( IScene scene, string request, OpenSim.Framework.Servers.HttpServer.OSHttpRequest httpRequest, OpenSim.Framework.Servers.HttpServer.OSHttpResponse httpResponse ) : byte[]
scene IScene
request string
httpRequest OpenSim.Framework.Servers.HttpServer.OSHttpRequest HTTP request header object
httpResponse OpenSim.Framework.Servers.HttpServer.OSHttpResponse HTTP response header object
return byte[]
        public byte[] RestGetMumbleServerInfo(IScene scene, string request,
            OSHttpRequest httpRequest, OSHttpResponse httpResponse)
        {
            if (m_murmurd_host == null)
            {
                httpResponse.StatusCode = 404;
                httpResponse.StatusDescription = "Not Found";

                string message = "[MUMBLE VOIP]: Server info request from " + httpRequest.RemoteIPEndPoint.Address + ". Cannot send response, module is not configured properly.";
                m_log.Warn(message);
                return Encoding.UTF8.GetBytes("Mumble server info is not available.");
            }
            if (httpRequest.Headers.GetValues("avatar_uuid") == null)
            {
                httpResponse.StatusCode = 400;
                httpResponse.StatusDescription = "Bad Request";

                string message = "[MUMBLE VOIP]: Invalid server info request from " + httpRequest.RemoteIPEndPoint.Address + "";
                m_log.Warn(message);
                return Encoding.UTF8.GetBytes("avatar_uuid header is missing");
            }

            string[] strings = httpRequest.Headers.GetValues("avatar_uuid");
            if (strings != null)
            {
                string avatar_uuid = strings[0];
                string responseBody = String.Empty;
                UUID avatarId;
                if (UUID.TryParse(avatar_uuid, out avatarId))
                {
                    if (scene == null) throw new Exception("[MurmurVoice] Invalid scene.");

                    Agent agent = GetServerManager(scene).Agent.GetOrCreate(avatarId);

                    string channel_uri;

                    IScenePresence avatar = scene.GetScenePresence(avatarId);

                    // get channel_uri: check first whether estate
                    // settings allow voice, then whether parcel allows
                    // voice, if all do retrieve or obtain the parcel
                    // voice channel
                    LandData land = scene.RequestModuleInterface<IParcelManagementModule>().GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y).LandData;

                    m_log.DebugFormat("[MurmurVoice] region \"{0}\": Parcel \"{1}\" ({2}): avatar \"{3}\": request: {4}",
                                      scene.RegionInfo.RegionName, land.Name, land.LocalID, avatar.Name, request);

                    if (/*((land.Flags & (uint)ParcelFlags.AllowVoiceChat) > 0) && */scene.RegionInfo.EstateSettings.AllowVoice)
                    {
                        agent.channel = GetServerManager(scene).Channel.GetOrCreate(ChannelName(scene, land));

                        // Host/port pair for voice server
                        channel_uri = String.Format("{0}:{1}", m_murmurd_host, m_murmurd_port);

                        if (agent.session > 0)
                        {
                            User state = GetServerManager(scene).Server.getState(agent.session);
                            GetServerCallback(scene).AddUserToChan(state, agent.channel);
                        }

                        m_log.InfoFormat("[MurmurVoice] {0}", channel_uri);
                    }
                    else
                    {
                        m_log.DebugFormat("[MurmurVoice] Voice not enabled.");
                        channel_uri = "";
                    }
                    const string m_context = "Mumble voice system";

                    httpResponse.AddHeader("Mumble-Server", m_murmurd_host);
                    httpResponse.AddHeader("Mumble-Version", m_server_version);
                    httpResponse.AddHeader("Mumble-Channel", channel_uri);
                    httpResponse.AddHeader("Mumble-User", avatar_uuid);
                    httpResponse.AddHeader("Mumble-Password", agent.pass);
                    httpResponse.AddHeader("Mumble-Avatar-Id", avatar_uuid);
                    httpResponse.AddHeader("Mumble-Context-Id", m_context);

                    responseBody += "Mumble-Server: " + m_murmurd_host + "\n";
                    responseBody += "Mumble-Version: " + m_server_version + "\n";
                    responseBody += "Mumble-Channel: " + channel_uri + "\n";
                    responseBody += "Mumble-User: " + avatar_uuid + "\n";
                    responseBody += "Mumble-Password: " + agent.pass + "\n";
                    responseBody += "Mumble-Avatar-Id: " + avatar_uuid + "\n";
                    responseBody += "Mumble-Context-Id: " + m_context + "\n";

                    string log_message = "[MUMBLE VOIP]: Server info request handled for " + httpRequest.RemoteIPEndPoint.Address + "";
                    m_log.Info(log_message);
                }
                else
                {
                    httpResponse.StatusCode = 400;
                    httpResponse.StatusDescription = "Bad Request";

                    m_log.Warn("[MUMBLE VOIP]: Could not parse avatar uuid from request");
                    return Encoding.UTF8.GetBytes("could not parse avatar_uuid header");
                }

                return Encoding.UTF8.GetBytes(responseBody);
            }
            return Encoding.UTF8.GetBytes("Mumble server info is not available.");
        }