Exemple #1
0
        internal object Encode(EngineIOTransportType TransportType, bool ForceBase64, bool ForceBinary = false)
        {
            if (ForceBase64 && ForceBinary)
            {
                throw new ArgumentException("ForceBase64 && ForceBinary cannot be true.", "ForceBase64, ForceBinary");
            }

            try
            {
                if (IsText || IsBinary)
                {
                    if (TransportType == EngineIOTransportType.polling)
                    {
                        if (!ForceBinary && (IsText || ForceBase64))
                        {
                            StringBuilder Builder = new StringBuilder();
                            Builder.Append((int)Type);
                            Builder.Append(IsText ? Data : Convert.ToBase64String(RawData));

                            int Length = Builder.Length + (IsText ? 0 : 1);
                            Builder.Insert(0, string.Format("{0}:" + (IsText ? "" : "b"), Length));

                            return(Builder.ToString());
                        }
                        else
                        {
                            List <byte> Buffer = new List <byte>()
                            {
                                (byte)(IsText ? 0 : 1)
                            };
                            byte[] RawData = IsText ? Encoding.UTF8.GetBytes(Data) : this.RawData;

                            foreach (char Character in (RawData.Length + 1).ToString())
                            {
                                Buffer.Add(byte.Parse(Character.ToString()));
                            }

                            Buffer.Add(0xff);

                            if (IsText)
                            {
                                Buffer.Add(Convert.ToByte((char)(Type + 48)));
                            }
                            else
                            {
                                Buffer.Add((byte)Type);
                            }

                            Buffer.AddRange(RawData);
                            return(Buffer.ToArray());
                        }
                    }
                    else
                    {
                        if (!ForceBinary && (IsText || ForceBase64))
                        {
                            StringBuilder Builder = new StringBuilder();
                            Builder.Append((IsText ? "" : "b") + (int)Type);
                            Builder.Append(IsText ? Data : Convert.ToBase64String(RawData));

                            return(Builder.ToString());
                        }
                        else
                        {
                            List <byte> Buffer = new List <byte>()
                            {
                                (byte)Type
                            };
                            Buffer.AddRange(RawData);

                            return(Buffer.ToArray());
                        }
                    }
                }

                throw new EngineIOException("Packet encoding failed. " + this);
            }
            catch (Exception Exception)
            {
                return(CreateErrorPacket(Exception));
            }
        }
        private EngineIOException Verify(NameValueCollection QueryString, NameValueCollection Headers, EngineIOTransportType ExpectedTransportType)
        {
            EngineIOException Exception = Exceptions.UNKNOWN_TRANSPORT;

            if (EngineIOHttpManager.GetTransport(QueryString).Equals(ExpectedTransportType.ToString()))
            {
                bool IsPolling   = EngineIOHttpManager.IsPolling(QueryString) && Option.Polling;
                bool IsWebSocket = EngineIOHttpManager.IsWebSocket(QueryString) && Option.WebSocket;

                if (IsPolling || IsWebSocket)
                {
                    if (EngineIOHttpManager.IsValidHeader(EngineIOHttpManager.GetOrigin(Headers)))
                    {
                        Exception = null;
                    }
                    else
                    {
                        Exception = Exceptions.BAD_REQUEST;
                    }
                }
            }

            return(Exception);
        }
Exemple #3
0
 public static bool Equals(this EngineIOTransportType TransportType, string TransportName)
 {
     return(TransportType.ToString().Equals(TransportName?.Trim()?.ToLower() ?? string.Empty));
 }