Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        private void ProccessSubscribe(AcceptedRequest tu, IncomingMessageEx request)
        {
            var dialog = dialogManager.GetOrCreate(request.Reader, request.ConnectionAddresses);

            if (dialog == null)
            {
                SendResponse(request, StatusCodes.CallLegTransactionDoesNotExist);
            }
            else if (request.Reader.IsExpiresTooBrief(60))
            {
                SendResponse(request, StatusCodes.IntervalTooBrief);
            }
            else
            {
                int expires = request.Reader.GetExpires(600, 900);


                var dialogId = dialog.Id.ToString();
                var toUser   = request.Reader.To.AddrSpec.User.ToString();
                var toHost   = request.Reader.To.AddrSpec.Hostport.Host.ToString();
                var document = simpleModule.Subscribe(dialogId, toUser + "@" + toHost, expires);


                var statusCode = StatusCodes.OK;
                var writer     = GetWriter();

                writer.WriteStatusLine(statusCode);
                writer.CopyViaToFromCallIdRecordRouteCSeq(request.Reader, statusCode, dialog.LocalTag);
                writer.WriteExpires(expires);
                writer.WriteCRLF();

                SendResponse(request, writer);


                if (document != null)
                {
                    SendNotify(dialog, expires, document);
                }
            }
        }
Ejemplo n.º 3
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);
        }