Exemple #1
0
		private void ProccessService(AcceptedRequest tu, IncomingMessageEx request)
		{
			var writer = GetWriter();

			try
			{
				var outContent = mras.ProcessRequest(request.Content);

				writer.WriteStatusLine(StatusCodes.OK);
				writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);
				writer.WriteContentType(type, subtype);
				writer.WriteCustomHeaders();
				writer.WriteContentLength();
				writer.WriteCRLF();

				writer.Write(outContent.GenerateToByteArray());
				writer.RewriteContentLength();
			}
			catch (MrasException)
			{
				writer.WriteResponse(request.Reader, StatusCodes.BadRequest);
			}

			tu.SendResponse(request, writer);
		}
		private void ProccessService(AcceptedRequest tu, IncomingMessageEx request)
		{
			var account = accounts.GetAccount(request.Reader.RequestUri.Hostport.Host);

			var writer = GetWriter();

			if (account != null)
			{
				var outContent = serviceSoap.ProcessRequest<IAccount>(request.Content, Search, account);

				writer.WriteStatusLine(StatusCodes.OK);
				writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);
				writer.WriteContentType(type, subtype);
				writer.WriteCustomHeaders();
				writer.WriteContentLength();
				writer.WriteCRLF();

				writer.Write(outContent.GenerateToByteArray());
				writer.RewriteContentLength();
			}
			else
			{
				writer.WriteStatusLine(StatusCodes.NotFound);
				writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.NotFound);
				writer.WriteContentLength(0);
				writer.WriteCRLF();
			}

			tu.SendResponse(request, writer);
		}
        private void ProccessService(AcceptedRequest tu, IncomingMessageEx request)
        {
            var account = accounts.GetAccount(request.Reader.RequestUri.Hostport.Host);

            var writer = GetWriter();

            if (account != null)
            {
                var outContent = serviceSoap.ProcessRequest <IAccount>(request.Content, Search, account);

                writer.WriteStatusLine(StatusCodes.OK);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);
                writer.WriteContentType(type, subtype);
                writer.WriteCustomHeaders();
                writer.WriteContentLength();
                writer.WriteCRLF();

                writer.Write(outContent.GenerateToByteArray());
                writer.RewriteContentLength();
            }
            else
            {
                writer.WriteStatusLine(StatusCodes.NotFound);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.NotFound);
                writer.WriteContentLength(0);
                writer.WriteCRLF();
            }

            tu.SendResponse(request, writer);
        }
Exemple #4
0
        private void ProccessService(AcceptedRequest tu, IncomingMessageEx request)
        {
            var writer = GetWriter();

            try
            {
                var outContent = mras.ProcessRequest(request.Content);

                writer.WriteStatusLine(StatusCodes.OK);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);
                writer.WriteContentType(type, subtype);
                writer.WriteCustomHeaders();
                writer.WriteContentLength();
                writer.WriteCRLF();

                writer.Write(outContent.GenerateToByteArray());
                writer.RewriteContentLength();
            }
            catch (MrasException)
            {
                writer.WriteResponse(request.Reader, StatusCodes.BadRequest);
            }

            tu.SendResponse(request, writer);
        }
		private void ProccessSubscribe(AcceptedRequest tu, IncomingMessageEx request)
		{
			var statusCode = StatusCodes.OK;
			var dialog = dialogManager.GetOrCreate(request.Reader, request.ConnectionAddresses, out statusCode);

			var writer = GetWriter();

			int expires = 0;
			if (statusCode == StatusCodes.OK)
			{
				expires = request.Reader.GetExpires(600, int.MaxValue);

				writer.WriteStatusLine(statusCode);
				writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode, dialog.LocalTag);
				writer.WriteDate(DateTime.UtcNow);
				writer.WriteExpires(expires);
				writer.WriteContentLength(0);
				writer.WriteCRLF();
			}
			else
			{
				writer.WriteResponse(request.Reader, statusCode);
			}

			tu.SendResponse(request, writer);

			if (statusCode == StatusCodes.OK)
				SendNotify(dialog, expires);
		}
        private void ProccessSubscribe(AcceptedRequest tu, IncomingMessageEx request)
        {
            var statusCode = StatusCodes.OK;
            var dialog     = dialogManager.GetOrCreate(request.Reader, request.ConnectionAddresses, out statusCode);

            var writer = GetWriter();

            int expires = 0;

            if (statusCode == StatusCodes.OK)
            {
                expires = request.Reader.GetExpires(600, int.MaxValue);

                writer.WriteStatusLine(statusCode);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode, dialog.LocalTag);
                writer.WriteDate(DateTime.UtcNow);
                writer.WriteExpires(expires);
                writer.WriteContentLength(0);
                writer.WriteCRLF();
            }
            else
            {
                writer.WriteResponse(request.Reader, statusCode);
            }

            tu.SendResponse(request, writer);

            if (statusCode == StatusCodes.OK)
            {
                SendNotify(dialog, expires);
            }
        }
Exemple #7
0
        private void ProccessRequest(AcceptedRequest tu, IncomingMessageEx request)
        {
            var writer = GetWriter();

            writer.WriteStatusLine(StatusCodes.NotImplemented);
            writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.NotImplemented);
            writer.WriteContentLength(0);
            writer.WriteCRLF();

            tu.SendResponse(request, writer);
        }
Exemple #8
0
		private void ProccessOptions(AcceptedRequest tu, IncomingMessageEx request)
		{
			var writer = GetWriter();

			writer.WriteStatusLine(StatusCodes.OK);
			writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK); // statusCode есть во writer'е!!!!!!
			writer.WriteAllow(AllowMethods);
			writer.WriteCRLF();

			tu.SendResponse(request, writer);
		}
Exemple #9
0
        private void ProccessOptions(AcceptedRequest tu, IncomingMessageEx request)
        {
            var writer = GetWriter();

            writer.WriteStatusLine(StatusCodes.OK);
            writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);             // statusCode есть во writer'е!!!!!!
            writer.WriteAllow(AllowMethods);
            writer.WriteCRLF();

            tu.SendResponse(request, writer);
        }
Exemple #10
0
		private void ProccessRequest(AcceptedRequest tu, IncomingMessageEx request)
		{
			var writer = GetWriter();

			writer.WriteStatusLine(StatusCodes.NotImplemented);
			writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.NotImplemented);
			writer.WriteContentLength(0);
			writer.WriteCRLF();

			tu.SendResponse(request, writer);
		}
Exemple #11
0
        private void ProccessService(AcceptedRequest tu, IncomingMessageEx request)
        {
            var         writer     = GetWriter();
            StatusCodes statusCode = StatusCodes.OK;

            string endpointId = null;

            if (request.Reader.Count.ContactCount == 0)
            {
                statusCode = StatusCodes.BadRequest;
            }
            else
            {
                endpointId = (request.Reader.Contact[0].SipInstance.IsValid == true ?
                              request.Reader.Contact[0].SipInstance : request.Reader.Contact[0].AddrSpec1.Value).ToString();
            }

            if (statusCode == StatusCodes.OK)
            {
                try
                {
                    var categories = enhancedPresence.ParsePublication(request.Content);

                    var content = enhancedPresence.ProcessPublication(
                        request.Reader.From.AddrSpec.Value.ToString(), categories, endpointId);

                    writer.WriteStatusLine(statusCode);
                    writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode);
                    writer.WriteContentType(new ByteArrayPart(categories.OutContentType), new ByteArrayPart(categories.OutContentSubtype));
                    // нужен ли контакт
                    writer.WriteCustomHeaders();
                    writer.WriteContentLength();
                    writer.WriteCRLF();

                    int endOfHeaders = writer.Count;
                    writer.Write(content.GenerateToByteArray());
                    writer.RewriteContentLength(writer.Count - endOfHeaders);
                }
                catch (EnhancedPresenceException)
                {
                    statusCode = StatusCodes.BadRequest;
                }
            }

            if (statusCode != StatusCodes.OK)
            {
                writer.WriteResponse(request.Reader, statusCode);
            }

            tu.SendResponse(request, writer);
        }
Exemple #12
0
        private void ProccessUnsubscribe(AcceptedRequest tu, IncomingMessageEx request)
        {
            var writer = GetWriter();

            var dialog = dialogManager.Get(request.Reader);

            if (dialog != null)
            {
                writer.WriteResponse(request.Reader, StatusCodes.OK, dialog.LocalTag);
                dialogManager.Remove(dialog.Id);
            }
            else
            {
                writer.WriteResponse(request.Reader, StatusCodes.OK);
            }

            tu.SendResponse(request, writer);
        }
Exemple #13
0
		private void ProccessUnsubscribe(AcceptedRequest tu, IncomingMessageEx request)
		{
			var writer = GetWriter();

			var dialog = dialogManager.Get(request.Reader);

			if (dialog != null)
			{
				writer.WriteResponse(request.Reader, StatusCodes.OK, dialog.LocalTag);
				dialogManager.Remove(dialog.Id);
			}
			else
			{
				writer.WriteResponse(request.Reader, StatusCodes.OK);
			}

			tu.SendResponse(request, writer);
		}
Exemple #14
0
		private void ProccessSubscribe(AcceptedRequest tu, IncomingMessageEx request)
		{
			StatusCodes statusCode = StatusCodes.OK;
			string endpointId = string.Empty;

			int expires = request.Reader.GetExpires(600, 900);

			if (request.Reader.IsExpiresTooBrief(60))
				statusCode = StatusCodes.IntervalTooBrief;

			if (statusCode == StatusCodes.OK)
			{
				if (request.Reader.Count.ContactCount == 0)
					statusCode = StatusCodes.BadRequest;
				else
					endpointId = (request.Reader.Contact[0].SipInstance.IsValid == true ?
						request.Reader.Contact[0].SipInstance : request.Reader.Contact[0].AddrSpec1.Value).ToString();
			}

			Dialog dialog = null;
			if (statusCode == StatusCodes.OK)
				dialog = dialogManager.GetOrCreate(request.Reader, request.ConnectionAddresses, out statusCode);

			var writer = GetWriter();

			if (statusCode == StatusCodes.OK)
			{
                try
                {
                    var batchSubscribe = enhancedPresence.ParseSubscribe(request.Content);

                    var contents = enhancedPresence.ProcessSubscription(
                        request.Reader.From.AddrSpec.Value.ToString(),
                        dialog.Id.ToString(),
                        batchSubscribe,
                        (uint)expires,
                        endpointId,
                        dialog);

                    writer.WriteStatusLine(statusCode);
                    writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode, dialog.LocalTag);
                    writer.WriteContact(dialog.LocalEndPoint, dialog.Transport);
                    writer.WriteExpires(expires);
                    writer.WriteEventPresence();
                    writer.WriteSupportedMsBenotify();
                    writer.WriteContentTypeMultipart(contentType);
                    writer.WriteCustomHeaders();
                    writer.WriteContentLength();
                    writer.WriteCRLF();

                    WriteResponseContent(writer, contents);
                }
                catch (EnhancedPresenceException)
                {
                    // TODO: add error info in response
                    statusCode = StatusCodes.BadRequest;
                }
			}

            if (statusCode != StatusCodes.OK)
            {
				writer.WriteResponse(request.Reader, statusCode);
			}

			tu.SendResponse(request, writer);
		}
Exemple #15
0
		private void ProccessService(AcceptedRequest tu, IncomingMessageEx request)
		{
			var writer = GetWriter();
			StatusCodes statusCode = StatusCodes.OK;

			string endpointId = null;
			if (request.Reader.Count.ContactCount == 0)
				statusCode = StatusCodes.BadRequest;
			else
				endpointId = (request.Reader.Contact[0].SipInstance.IsValid == true ?
					request.Reader.Contact[0].SipInstance : request.Reader.Contact[0].AddrSpec1.Value).ToString();

			if (statusCode == StatusCodes.OK)
			{
				try
				{
					var categories = enhancedPresence.ParsePublication(request.Content);

					var content = enhancedPresence.ProcessPublication(
						request.Reader.From.AddrSpec.Value.ToString(), categories, endpointId);

					writer.WriteStatusLine(statusCode);
					writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode);
					writer.WriteContentType(new ByteArrayPart(categories.OutContentType), new ByteArrayPart(categories.OutContentSubtype));
					// нужен ли контакт
					writer.WriteCustomHeaders();
					writer.WriteContentLength();
					writer.WriteCRLF();

					int endOfHeaders = writer.Count;
					writer.Write(content.GenerateToByteArray());
					writer.RewriteContentLength(writer.Count - endOfHeaders);
				}
				catch (EnhancedPresenceException)
				{
					statusCode = StatusCodes.BadRequest;
				}
			}

			if (statusCode != StatusCodes.OK)
			{
				writer.WriteResponse(request.Reader, statusCode);
			}

			tu.SendResponse(request, writer);
		}
Exemple #16
0
        private void ProccessSubscribe(AcceptedRequest tu, IncomingMessageEx request)
        {
            StatusCodes statusCode = StatusCodes.OK;
            string      endpointId = string.Empty;

            int expires = request.Reader.GetExpires(600, 900);

            if (request.Reader.IsExpiresTooBrief(60))
            {
                statusCode = StatusCodes.IntervalTooBrief;
            }

            if (statusCode == StatusCodes.OK)
            {
                if (request.Reader.Count.ContactCount == 0)
                {
                    statusCode = StatusCodes.BadRequest;
                }
                else
                {
                    endpointId = (request.Reader.Contact[0].SipInstance.IsValid == true ?
                                  request.Reader.Contact[0].SipInstance : request.Reader.Contact[0].AddrSpec1.Value).ToString();
                }
            }

            Dialog dialog = null;

            if (statusCode == StatusCodes.OK)
            {
                dialog = dialogManager.GetOrCreate(request.Reader, request.ConnectionAddresses, out statusCode);
            }

            var writer = GetWriter();

            if (statusCode == StatusCodes.OK)
            {
                try
                {
                    var batchSubscribe = enhancedPresence.ParseSubscribe(request.Content);

                    var contents = enhancedPresence.ProcessSubscription(
                        request.Reader.From.AddrSpec.Value.ToString(),
                        dialog.Id.ToString(),
                        batchSubscribe,
                        (uint)expires,
                        endpointId,
                        dialog);

                    writer.WriteStatusLine(statusCode);
                    writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode, dialog.LocalTag);
                    writer.WriteContact(dialog.LocalEndPoint, dialog.Transport);
                    writer.WriteExpires(expires);
                    writer.WriteEventPresence();
                    writer.WriteSupportedMsBenotify();
                    writer.WriteContentTypeMultipart(contentType);
                    writer.WriteCustomHeaders();
                    writer.WriteContentLength();
                    writer.WriteCRLF();

                    WriteResponseContent(writer, contents);
                }
                catch (EnhancedPresenceException)
                {
                    // TODO: add error info in response
                    statusCode = StatusCodes.BadRequest;
                }
            }

            if (statusCode != StatusCodes.OK)
            {
                writer.WriteResponse(request.Reader, statusCode);
            }

            tu.SendResponse(request, writer);
        }
Exemple #17
0
		private void ProccessRegister(AcceptedRequest tu, IncomingMessageEx request)
		{
			StatusCodes statusCode = StatusCodes.OK;

			bool isStar = HasStarContact(request.Reader);
			var user = request.Reader.To.AddrSpec.User;
			var domain = request.Reader.RequestUri.Hostport.Host;

			if (isStar)
			{
				if (request.Reader.Count.ContactCount > 1 && request.Reader.Expires != 0)
					statusCode = StatusCodes.BadRequest;
			}
			else
			{
				if (IsExpiresValid(request.Reader) == false)
					statusCode = StatusCodes.IntervalTooBrief;
			}

			if (statusCode == StatusCodes.OK)
			{
				if (isStar)
					locationService.RemoveAllBindings(user, domain);
				else
					if (locationService.UpdateBindings(user, domain, request, defaultExpires) == false)
						statusCode = StatusCodes.Gone;
			}

			var writer = GetWriter();

			if (statusCode == StatusCodes.OK)
			{
				writer.WriteStatusLine(StatusCodes.OK);
				writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);

				int maxExpires = 0;

				foreach (var binding in locationService.GetEnumerableBindings(user, domain))
				{
					writer.WriteContact(binding.AddrSpec, binding.SipInstance, binding.Expires);

					if (maxExpires < binding.Expires)
						maxExpires = binding.Expires;
				}

				writer.WriteExpires(maxExpires);
				writer.WriteCustomHeaders();
				writer.WriteContentLength(0);
				writer.WriteCRLF();
			}
			else
			{
				writer.WriteStatusLine(statusCode);
				writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode);
				if (statusCode == StatusCodes.IntervalTooBrief)
					writer.WriteMinExpires(minExpires);
				writer.WriteContentLength(0);
				writer.WriteCRLF();
			}

			tu.SendResponse(request, writer);
		}
Exemple #18
0
        private void ProccessRegister(AcceptedRequest tu, IncomingMessageEx request)
        {
            StatusCodes statusCode = StatusCodes.OK;

            bool isStar = HasStarContact(request.Reader);
            var  user   = request.Reader.To.AddrSpec.User;
            var  domain = request.Reader.RequestUri.Hostport.Host;

            if (isStar)
            {
                if (request.Reader.Count.ContactCount > 1 && request.Reader.Expires != 0)
                {
                    statusCode = StatusCodes.BadRequest;
                }
            }
            else
            {
                if (IsExpiresValid(request.Reader) == false)
                {
                    statusCode = StatusCodes.IntervalTooBrief;
                }
            }

            if (statusCode == StatusCodes.OK)
            {
                if (isStar)
                {
                    locationService.RemoveAllBindings(user, domain);
                }
                else
                if (locationService.UpdateBindings(user, domain, request, defaultExpires) == false)
                {
                    statusCode = StatusCodes.Gone;
                }
            }

            var writer = GetWriter();

            if (statusCode == StatusCodes.OK)
            {
                writer.WriteStatusLine(StatusCodes.OK);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, StatusCodes.OK);

                int maxExpires = 0;

                foreach (var binding in locationService.GetEnumerableBindings(user, domain))
                {
                    writer.WriteContact(binding.AddrSpec, binding.SipInstance, binding.Expires);

                    if (maxExpires < binding.Expires)
                    {
                        maxExpires = binding.Expires;
                    }
                }

                writer.WriteExpires(maxExpires);
                writer.WriteCustomHeaders();
                writer.WriteContentLength(0);
                writer.WriteCRLF();
            }
            else
            {
                writer.WriteStatusLine(statusCode);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode);
                if (statusCode == StatusCodes.IntervalTooBrief)
                {
                    writer.WriteMinExpires(minExpires);
                }
                writer.WriteContentLength(0);
                writer.WriteCRLF();
            }

            tu.SendResponse(request, writer);
        }