Exemple #1
0
        private static Guid GetConversationId(DataAccessLayer.User sender, DataAccessLayer.User recipient)
        {
            int senderId = recipient.UserType == DataAccessLayer.UserType.Group ? 0 : sender.Id;

            return(MessageValidator.GetConversationGuid(senderId, recipient.Id));
        }
Exemple #2
0
        public static void Validate(this Message message, DataAccessLayer.User sender)
        {
            message.MessageId = Guid.NewGuid();
            message.LastUpdateTimeUtcTicks = DateTime.UtcNow.Ticks;
            message.PostDateTimeUtcTicks   = DateTime.UtcNow.Ticks;

            if (message.Sender == null || message.Sender.Id != sender.Id)
            {
                throw new InvalidMessageException(InvalidMessageError.InvalidSenderError);
            }

            if (message.Recipient == null || message.Recipient.Id == message.Sender.Id)
            {
                throw new InvalidMessageException(InvalidMessageError.InvalidRecipientError);
            }

            if (message.ConversationId != GetConversationId(message.Sender, message.Recipient) &&
                message.ConversationId != Guid.Empty)
            {
                throw new InvalidMessageException(InvalidMessageError.InvalidSenderError);
            }

            if (message.ConversationId == Guid.Empty)
            {
                int senderId = message.Recipient.UserType == DataAccessLayer.UserType.Group ? 0 : message.SenderId;

                message.ConversationId = MessageValidator.GetConversationGuid(senderId, message.RecipientId);
            }

            if (((message.MessageFlags & MessageFlags.Image) == MessageFlags.Image) &&
                message.Image == null)
            {
                throw new InvalidMessageException(InvalidMessageError.ImageMissingError);
            }

            if (((message.MessageFlags & (MessageFlags.PollMessage | MessageFlags.Calendar)) == MessageFlags.PollMessage) &&
                (message.PollOptions == null || message.PollOptions.Count == 0))
            {
                throw new InvalidMessageException(InvalidMessageError.InvalidPollOptionsError);
            }

            if (((message.MessageFlags & MessageFlags.PollResponseMessage) == MessageFlags.PollResponseMessage) &&
                (message.PollMessageId == Guid.Empty))
            {
                throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError);
            }

            if ((message.MessageFlags & MessageFlags.PollResponseMessage) == MessageFlags.PollResponseMessage)
            {
                if (message.PollMessageId == null)
                {
                    throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError);
                }

                Message pollMessage = MessageStore.Instance.GetMessage(message.ConversationId, message.PollMessageId.Value);
                if (pollMessage == null)
                {
                    throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError);
                }

                if ((pollMessage.MessageFlags & MessageFlags.PollMessage) != MessageFlags.PollMessage)
                {
                    throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError);
                }

                if (((pollMessage.MessageFlags & MessageFlags.Calendar) == 0) &&
                    !pollMessage.PollOptions.Contains(message.PollResponse))
                {
                    throw new InvalidMessageException(InvalidMessageError.InvalidPollResponseError);
                }
            }

            if (message.ClientMessageId == Guid.Empty)
            {
                message.ClientMessageId = Guid.NewGuid();
            }
        }