Ejemplo n.º 1
0
 bool TryGetThumb(WebData webData, MDBImage img, string fileName)
 {
     try
     {
         //try to load thumb
         var    hash          = Base32.Safe.Encode(Hash.FromString(Hash.Type.SHA256, fileName));
         string thumbFileName = FileSystem.Combine(mdb.CacheFolder, "Thumbs", hash + ".jpg");
         var    mime          = MimeTypes.FromExtension(".jpg");
         if (File.Exists(thumbFileName))
         {
             try
             {
                 webData.Answer = WebAnswer.Raw(webData.Request, WebMessage.Create(webData.Method, thumbFileName), File.ReadAllBytes(thumbFileName), mime);
                 webData.Answer.SetCacheTime(TimeSpan.FromDays(1));
                 return(true);
             }
             catch { /*file access error, writing in progress ?, wait for lock and retry*/ }
         }
         //wait until last thumb generation is finished
         byte[] data;
         lock (ThumbCreateSyncRoot)
         {
             //do a second check after lock is released...
             if (File.Exists(thumbFileName))
             {
                 try
                 {
                     webData.Answer = WebAnswer.Raw(webData.Request, WebMessage.Create(webData.Method, thumbFileName), File.ReadAllBytes(thumbFileName), mime);
                     webData.Answer.SetCacheTime(TimeSpan.FromDays(1));
                     return(true);
                 }
                 catch { /*file access error, recreate thumb*/ }
             }
             //generate thumb
             using (var bmp = Bitmap32.FromFile(fileName))
             {
                 data = WebImage.RenderThumb(bmp, thumbFileName);
             }
         }
         webData.Answer = WebAnswer.Raw(webData.Request, WebMessage.Create(webData.Method, thumbFileName), data, mime);
         webData.Answer.AllowCompression = false;
         webData.Answer.SetCacheTime(TimeSpan.FromDays(1));
         return(true);
     }
     catch (Exception ex)
     {
         this.LogError(ex, "Could not load / create thumb for {0}", fileName);
     }
     return(false);
 }
Ejemplo n.º 2
0
        public void GetTestStructMaxXML()
        {
            var        request = XmlRequest.Prepare("http://localhost:8080", "testdata", "structtype=max");
            WebMessage message = request.Get();

            Assert.AreEqual(HttpStatusCode.OK, message.Code);
            ITable <TestData> dataTable = request.Result.GetTable <TestData>();

            Assert.AreEqual(1, dataTable.RowCount);
            TestData data    = dataTable.GetStruct(dataTable.IDs[0]);
            TestData mindata = TestDataMax();

            Assert.True(data.Equals(mindata));
        }
Ejemplo n.º 3
0
        private void btnLeave_Click(object sender, EventArgs e)
        {
            if (gbChatRoom.Enabled && btnSend.Enabled &&
                m_Client != null && m_Client.GetState() > 0 &&
                m_UserName.Length > 0 && m_UserToken.Length > 0 &&
                m_RoomName.Length > 0)
            {
                ExitRoomRequest request = new ExitRoomRequest();
                request.UserName  = m_UserName;
                request.UserToken = m_UserToken;
                request.RoomName  = m_RoomName;

                m_Client.SendString("room/exit/" + WebMessage.ToJsonString <ExitRoomRequest>(request));
            }
        }
Ejemplo n.º 4
0
        public void Enqueue(Route route, WebMessage message)
        {
            if (!Table.ContainsKey(route))
            {
                lock (sync)
                {
                    if (!Table.ContainsKey(route))
                    {
                        Table.Add(route, new Queue <WebMessage>());
                    }
                }
            }

            Table[route].Enqueue(message);
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            ConnSql con     = new ConnSql();
            string  sqltext = "";

            sqltext = "delete student where sno='" + TextBox1.Text.Trim() + "'";
            if (con.RunSql(sqltext) == 1)
            {
                WebMessage.Show("删除成功");
            }
            else
            {
                WebMessage.Show("删除失败");
            }
        }
Ejemplo n.º 6
0
 protected void Page_Load(object sender, EventArgs e)
 {
     if (IsPostBack == false)
     {
         if (Session["username"] == null)
         {
             WebMessage.Show("请登录", "Default.aspx");
         }
         else
         {
             Label1.Text = "欢迎你" +
                           Session["sname"].ToString().Trim() + "同学!";
         }
     }
 }
Ejemplo n.º 7
0
        public string Send(string to, MessageType type, params object[] data)
        {
            var        from    = DateTime.Now.Ticks.ToString();
            WebMessage message = new WebMessage()
            {
                from = from,
                to   = to,
                type = type.ToString(),
                data = data,
            };

            this.websocket.SendToAsync(message.ToString(), to).Wait();

            return(string.Empty);
        }
Ejemplo n.º 8
0
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        string user_ip = Request.UserHostAddress;//获取用户IP地址信息

        sqltext = "select * from users where username='******'";
        table   = con.RunSqlReturnTable(sqltext);
        if (TextBox3.Text.Trim().ToUpper() != Button1.Text.Trim().ToUpper())
        {
            WebMessage.Show("验证码错误!");
        }
        else if (table.Rows.Count <= 0)
        {
            WebMessage.Show("用户名错误!");
        }
        else if (table.Rows[0][1].ToString() != TextBox2.Text.Trim())
        {
            WebMessage.Show("密码错误!");
        }
        else if (Session["username"] == null || Session["username"].ToString().Trim() == "")
        {
            UserLogin(TextBox1.Text.Trim(), user_ip);
            table = con.RunSqlReturnTable(sqltext);
            Session["username"] = TextBox1.Text.Trim();
            Session["password"] = TextBox2.Text.Trim();
            Session["nc"]       = table.Rows[0]["nc"].ToString().Trim();
            Session["jf"]       = table.Rows[0]["jf"].ToString().Trim().ToString();
            Session["realname"] = table.Rows[0]["realname"].ToString().Trim();
            Session["lb"]       = table.Rows[0]["lb"].ToString().Trim();
            Session["pic"]      = table.Rows[0]["pic"].ToString().Trim();
            Session["sex"]      = table.Rows[0]["sex"].ToString().Trim();
            if (table.Rows[0]["last_time"].ToString().Length > 5)
            {
                Session["last_time"] = table.Rows[0]["last_time"].ToString().Trim().Substring(0, 10);
            }
            if (Session["url"] == null || Session["url"].ToString().Trim() == "")
            {
                Response.Redirect("Default.aspx");
            }
            else
            {
                Response.Redirect(Session["url"].ToString());
            }
        }
        else
        {
            WebMessage.Shows("请退出当前登录的用户!");
        }
    }
Ejemplo n.º 9
0
        protected void Button_Confirm(object sender, EventArgs e)
        {
            if (Username.Text == "")
            {
                WebMessage.Show("请输入用户名");
            }
            else if (name.Text == "")
            {
                WebMessage.Show("请输入姓名");
            }
            else if (xueyuan.Text == "")
            {
                WebMessage.Show("请输入学院");
            }
            else if (banji.Text == "")
            {
                WebMessage.Show("请输入班级");
            }
            else if (Password.Text == "")
            {
                WebMessage.Show("请输入密码");
            }
            else if (Check.Text == "")
            {
                WebMessage.Show("请再次输入密码");
            }
            else if (Password.Text != Check.Text)
            {
                WebMessage.Show("密码不一致!");
            }

            else
            {
                string  sql  = "INSERT INTO bookuser (id,pwd,name,class,xueyuan,status,sex,admin,times1) VALUES ('" + Username.Text.Trim() + "','" + Password.Text.Trim() + "','" + name.Text.Trim() + "','" + banji.Text.Trim() + "','" + xueyuan.Text.Trim() + "','1','" + RadioButtonList1.SelectedValue + "','0','0')";
                ConnSql conn = new ConnSql();
                int     s    = conn.RunSql(sql);
                if (s > 0)
                {
                    WebMessage.Show("添加成功", "Index.aspx");
                }
                else
                {
                    WebMessage.Show("添加失败");
                }
            }
        }
Ejemplo n.º 10
0
        private void btnCreateRoom_Click(object sender, EventArgs e)
        {
            string newRoomName = "";

            if (InputBox("Create New Chat Room", "New Room Name", ref newRoomName) == DialogResult.OK)
            {
                if (m_UserName.Length > 0 && m_UserToken.Length > 0)
                {
                    CreateRoomRequest request = new CreateRoomRequest();
                    request.UserName  = m_UserName;
                    request.UserToken = m_UserToken;
                    request.RoomName  = newRoomName;

                    m_Client.SendString("room/create/" + WebMessage.ToJsonString <CreateRoomRequest>(request));
                }
            }
        }
Ejemplo n.º 11
0
        public static void DecodeMessage(Session session, WebMessage msg)
        {
            // do some complex decode actions here ...

            Byte[] bytes = msg.RawContent;
            if (bytes == null || bytes.Length <= 0) return; // nothing needs to decode

            if (msg.IsString())
            {
                Encoding encode = Encoding.UTF8;
                if (msg.MessageContent.Length == 0) msg.MessageContent = encode.GetString(bytes, 0, bytes.Length);
                else msg.MessageContent += encode.GetString(bytes, 0, bytes.Length);
            }
            else
            {
                msg.RawContent = bytes;
            }
        }
Ejemplo n.º 12
0
        void FilterList(WebData webData, ITable table, string nameField, string guidField, string text)
        {
            var ids = new Set <long>();

            if (text == null)
            {
                ids.IncludeRange(table.FindRows(Search.None, ResultOption.Limit(20)));
            }
            else
            {
                ids.AddRange(table.FindRows(Search.FieldLike(nameField, MDBSearch.Text(text + "%")) & Search.FieldNotEquals(guidField, null), ResultOption.SortAscending(nameField) + ResultOption.Group(nameField) + ResultOption.Group(guidField) + ResultOption.Limit(20)));
                if (ids.Count < 20)
                {
                    ids.IncludeRange(table.FindRows(Search.FieldLike(nameField, MDBSearch.Text("% " + text + "%")) & Search.FieldNotEquals(guidField, null), ResultOption.SortAscending(nameField) + ResultOption.Group(nameField) + ResultOption.Group(guidField) + ResultOption.Limit(20)));
                }
                if (ids.Count < 20)
                {
                    ids.IncludeRange(table.FindRows(Search.FieldLike(nameField, MDBSearch.Text(text + "%")) & Search.FieldEquals(guidField, null), ResultOption.SortAscending(nameField) + ResultOption.Group(nameField) + ResultOption.Limit(20 - ids.Count)));
                }
                if (ids.Count < 20)
                {
                    ids.IncludeRange(table.FindRows(Search.FieldLike(nameField, MDBSearch.Text("% " + text + "%")) & Search.FieldEquals(guidField, null), ResultOption.SortAscending(nameField) + ResultOption.Group(nameField) + ResultOption.Limit(20 - ids.Count)));
                }
            }
            var json = new JsonWriter();

            json.BeginArray("results");
            if (ids.Count > 0)
            {
                //get items
                var values = table.GetValues <string>(nameField, false, ids.SubRange(0, Math.Min(20, ids.Count)));
                foreach (var value in values)
                {
                    json.BeginObject();
                    json.String("id", value);
                    json.String("text", value);
                    json.EndObject();
                }
            }
            json.EndArray();
            var message = WebMessage.Create(webData.Method, $"Filter {nameField} {text}");

            webData.Answer = WebAnswer.Json(webData.Request, message, json.ToString());
        }
Ejemplo n.º 13
0
 public void OnClick()
 {
     meshRender = this.gameObject.GetComponent <MeshRenderer>();
     if (meshRender != null)
     {
         DataManager.Instance.str += "OnClick: " + this.name;
         meshRender.material.color = selectedColor;
     }
     try
     {
         IOSMessage.ClickMap(this.gameObject.name);
         AndroidMessage.ClickMap(this.gameObject.name);
         WebMessage.ClickMap(this.gameObject.name);
     }
     catch (Exception ex)
     {
         Debug.LogError("errr:" + ex.ToString());
     }
 }
Ejemplo n.º 14
0
        protected void bSend_Click(object sender, EventArgs e)
        {
            //!Error 学生姓名过长会 截断字符串
            ConnSql con     = new ConnSql();
            int     sex_tmp = rb_girl.Checked ? 1 : 0; //  暂存性别信息 女true 男false

            sex_tmp = con.RunSql("update student set sname = '" + tb_sname.Text.Trim() + "', sex="
                                 + sex_tmp + ", birthday = '"
                                 + tb_birth.Text.Trim() + "' where sno = '"
                                 + tb_sno.Text.Trim() + "'");
            if (sex_tmp.Equals(1))
            {
                WebMessage.Show("执行成功");
            }
            else
            {
                WebMessage.Show("执行失败");
            }
        }
Ejemplo n.º 15
0
            protected override Task OnMessageReceivedAsync(IWebSocketContext context, byte[] buffer, IWebSocketReceiveResult result)
            {
                if (this.eventCallback != null)
                {
                    var data    = Encoding.GetString(buffer);
                    var message = WebMessage.Parse(data);

                    var gm = new GlobalMessage()
                    {
                        From = message.from,
                        To   = message.to,
                        Type = Enum.Parse <GlobalMessageType>(message.type, true),
                        Data = message.data,
                    };
                    this.eventCallback(gm);
                }
                return(Task.Run(() =>
                {
                }));
            }
        protected void btn_edit_Click(object sender, EventArgs e)
        {
            ConnSql con = new ConnSql();
            string  sql = "update course set " +
                          "cname = '" + tb_cname.Text + "'," +
                          "xs = " + int.Parse(tb_lt.Text.Trim()) + "," +
                          "skdd = '" + tb_addr.Text + "'," +
                          "tno = '" + ddl_tch.SelectedValue + "'" +
                          " where cno = '" + tb_cno.Text + "'";

            try
            {
                con.RunSql(sql);
            }
            catch (Exception ex)
            {
                WebMessage.Show(ex.ToString());
                throw;
            }
        }
Ejemplo n.º 17
0
 protected void Button2_Click(object sender, EventArgs e)
 {
     if (TextBox1.Text.Trim() == "")
     {
         WebMessage.Show("请输入用户名");
     }
     else if (TextBox2.Text.Trim() == "")
     {
         WebMessage.Show("请输入密码");
     }
     else if (TextBox3.Text.Trim() == "")
     {
         WebMessage.Show("请输入验证码");
     }
     else
     {
         string    sqltext = "select * from student where sno='" + TextBox1.Text.Trim() + "'";
         DataTable table   = new DataTable();
         ConnSql   cn      = new ConnSql();
         table = cn.RunSqlReturnTable(sqltext);
         if (table.Rows.Count <= 0)
         {
             WebMessage.Show("用户名错误!");
         }
         else if (table.Rows[0]["pwd"].ToString().Trim() != TextBox2.Text)
         {
             WebMessage.Show("密码错误!");
         }
         else if (TextBox3.Text.Trim().ToUpper() != Button1.Text.Trim().ToUpper())
         {
             WebMessage.Show("验证码错误!");
         }
         else
         {
             Session["username"] = TextBox1.Text.Trim();
             Session["password"] = TextBox2.Text.Trim();
             Session["sname"]    = table.Rows[0]["sname"].ToString().Trim();
             WebMessage.Show("全部正确", "StudentMain.aspx");
         }
     }
 }
Ejemplo n.º 18
0
        public void EnterLobby(string result)
        {
            LogMsg(result);

            Invoke((Action)(() =>
            {
                if (result.ToLower() == "ok")
                {
                    gbLogin.Enabled = false;

                    if (m_RoomName == null || m_RoomName.Length <= 0)
                    {
                        gbLobby.Enabled = true;
                        m_UserList.Clear();
                        UpdateUserList();
                        richChatBox.Clear();
                    }

                    if (m_UserName.Length > 0 && m_UserToken.Length > 0 && m_RoomName.Length > 0)
                    {
                        gbChatRoom.Enabled = true;
                        ShowText("Re-enter lobby/chat-room successfully");
                    }

                    if (m_UserName.Length > 0 && m_UserToken.Length > 0)
                    {
                        GetRoomListRequest request = new GetRoomListRequest();
                        request.UserName = m_UserName;
                        request.UserToken = m_UserToken;

                        m_Client.SendString("lobby/list/" + WebMessage.ToJsonString <GetRoomListRequest>(request));
                    }
                }
                else
                {
                    ShowText("ERROR: " + "Failed to enter lobby: " + result);
                }
            }));
        }
Ejemplo n.º 19
0
        public static void EncodeMessage(Session session, WebMessage msg)
        {
            // do some complex encode actions here ...

            Encoding encode = Encoding.UTF8;
            Byte[] bytes = null;

            if (msg.IsBinary()) bytes = msg.RawContent;
            else if (msg.MessageContent.Length > 0)
            {
                bytes = encode.GetBytes(msg.MessageContent);
                msg.ContentSize = bytes.Length;
            }

            if (bytes == null) bytes = new byte[0];

            if (msg.ContentSize <= 0) msg.ContentSize = bytes.Length; // refresh size
            if (msg.RawContent == null) msg.RawContent = bytes; // refresh content

            if (msg.RawContent != null && msg.ContentSize > msg.RawContent.Length)
                msg.ContentSize = msg.RawContent.Length;
        }
Ejemplo n.º 20
0
        //public override int OnSend(Session session, object data)
        //{
        //    int result = base.OnSend(session, data);
        //    m_WebSocketServer.Logger.Info("On Send - " + data.ToString());
        //    return result;
        //}

        protected override void ProcessMessage(SessionContext ctx)
        {
            if (ctx == null)
            {
                return;
            }

            WebMessage msg = ctx.Data as WebMessage;

            if (msg == null || !msg.IsString())
            {
                ctx.Session.Close();
                return;
            }
            else
            {
                var reqctx = new RequestContext(new WebSocketSession(ctx.Session), msg.MessageContent, m_WebSocketServer.Flags);
                reqctx.RequestPath = WebMessage.GetSessionData(ctx.Session, "Path").ToString();
                reqctx.Headers     = new Dictionary <string, string>(msg.Headers);
                m_WebSocketServer.RequestHandler.HandleRequest(reqctx);
            }
        }
Ejemplo n.º 21
0
    private void Ws_OnMessage(object sender, MessageEventArgs e)
    {
        connected = true;
        WebMessage message = JsonUtility.FromJson <WebMessage>(e.Data);

        last = e.Data;

        if (message.type == "ff" || message.type == "FF")
        {
            FFQueue.Enqueue(message.body);
        }

        if (message.type == "bn" || message.type == "BN")
        {
            BNQueue.Enqueue(message.body);
        }

        if (message.type == "terminal")
        {
            TMQueue.Enqueue(message.body);
        }
    }
Ejemplo n.º 22
0
        protected void bCheck_Click(object sender, EventArgs e)
        {
            if (tb_sno.Text.Length == 0)
            {
                WebMessage.Show("请输入学号!");
            }
            else
            {
                ConnSql   con   = new ConnSql();
                DataTable table = new DataTable();
                table = con.RunSqlReturnTable("select * from student where sno = " + "'" + tb_sno.Text.Trim() + "'");
                if (table.Rows.Count.Equals(0))
                {
                    WebMessage.Show("学号不存在");
                    return;
                }
                else
                {
                    tb_sname.Text = table.Rows[0][1].ToString();
                    //获取出生年月日
                    string s = table.Rows[0]["birthday"].ToString();
                    tb_birth.Text = s.Substring(0, s.LastIndexOf(' '));

                    //获取性别
                    if (table.Rows[0]["sex"].Equals(true))
                    {
                        rb_girl.Checked = true;
                    }
                    else
                    {
                        rb_man.Checked = true;
                    }
                    tb_sno.BackColor = System.Drawing.Color.DarkGray;
                    tb_sno.ReadOnly  = true;
                }
            }
        }
Ejemplo n.º 23
0
    public static WebMessage GenerateMessage(string Sender, object message, RSACryptoServiceProvider receiver_rsa, string token)
    {
        IFormatter formatter = new BinaryFormatter();

        RijndaelManaged RMCrypto = new RijndaelManaged();

        RMCrypto.GenerateIV();
        RMCrypto.GenerateKey();

        MemoryStream ms = new MemoryStream();

        formatter.Serialize(ms, message);
        byte[] result_message = ms.ToArray();

        ms = new MemoryStream();
        CryptoStream CryptStream = new CryptoStream(ms, RMCrypto.CreateEncryptor(RMCrypto.Key, RMCrypto.IV), CryptoStreamMode.Write);

        CryptStream.Write(result_message, 0, result_message.Length);
        CryptStream.FlushFinalBlock();

        byte[] message_id_bytes = Guid.NewGuid().ToString().getBytes();

        RSACryptoServiceProvider my_rsa = CryptStream.getGlobalObject <IMyRsaProvider>().getMySra();

        WebMessage answer = new WebMessage {
            Sender            = Sender,
            IV                = receiver_rsa.Encrypt(RMCrypto.IV, false),
            Key               = receiver_rsa.Encrypt(RMCrypto.Key, false),
            Message           = ms.ToArray(),
            Signature         = my_rsa.SignData(result_message, new SHA1CryptoServiceProvider()),
            Token             = receiver_rsa.Encrypt(token.getBytes(), false),
            MessageID         = receiver_rsa.Encrypt(message_id_bytes, false),
            MessageIDSignaure = my_rsa.SignData(message_id_bytes, new SHA1CryptoServiceProvider())
        };

        return(answer);
    }
Ejemplo n.º 24
0
        public override async Task <Message> HandleMessage(Message msg)
        {
            // Find the original HTTP request, it'll have the context to respond on.
            WebMessage entry = msg.FirstAncestor <WebMessage>();

            if (entry == null ||
                entry.Context == null ||
                !entry.Context.Response.OutputStream.CanWrite)
            {
                return(msg);
            }

            try
            {
                await Task.Run(() =>
                {
                    int status       = int.Parse(Smart.Format(StatusCode, msg));
                    var contentType  = Smart.Format(ContentType, msg);
                    var payload      = Smart.Format(Body, msg);
                    var payloadBytes = Encoding.UTF8.GetBytes(payload);

                    var context = entry.Context;
                    context.Response.StatusCode      = status;
                    context.Response.ContentType     = contentType;
                    context.Response.ContentLength64 = payloadBytes.Length;

                    context.Response.OutputStream.Write(payloadBytes, 0, payloadBytes.Length);
                    context.Response.Close();
                }, _cancelSource.Token);
            }
            catch (Exception ex)
            {
                logger.Warn(ex, "Error sending HTTP response");
            }

            return(msg);
        }
Ejemplo n.º 25
0
        protected void btn_login_Click(object sender, EventArgs e)
        {
            string  sqltext = "select * from admini where username = '******' and pwd = '" + tb_password.Text + "'";
            ConnSql conn    = new ConnSql();

            System.Data.DataTable table = conn.RunSqlReturnTable(sqltext);
            if (tb_checkcode.Text == btn_img.Text)
            {
                if (table.Rows.Count != 1)
                {
                    WebMessage.Show("用户名或密码错误。");
                }
                else
                {
                    Session["username"] = table.Rows[0]["username"];
                    Response.Redirect("Index_Admin.aspx");
                }
                //return;
            }
            else
            {
                WebMessage.Show("验证码错误。");
            }
        }
Ejemplo n.º 26
0
 void Draw(WebData data, int color, int nose, int eyes, int mouth, int face, int rotate)
 {
     using (var stream = new MemoryStream())
         using (var bmp = new Bitmap32(AvatarSize, AvatarSize))
         {
             var faceColor = ARGB.FromHSI(color / 256.0f, 1, 1);
             DrawFace(face, faceColor, faces, bmp);
             DrawEyes(eyes, this.eyes, bmp);
             DrawMouth(mouth, mouths, bmp);
             DrawNose(nose, noses, bmp);
             using (var result = new Bitmap32(AvatarSize, AvatarSize))
             {
                 result.Draw(bmp, 0, 0, new Translation()
                 {
                     Rotation = ((rotate % 16) - 7) * 0.02f
                 });
                 result.Save(stream);
             }
             var msg = WebMessage.Create(data.Method, "Avatar created");
             data.Answer = WebAnswer.Raw(data.Request, msg, stream.GetBuffer(), "image/png");
             data.Answer.AllowCompression = false;
             data.Answer.SetCacheTime(TimeSpan.FromDays(1));
         }
 }
Ejemplo n.º 27
0
        void Check(IPAddress ip, int port, int streamBasePort)
        {
            try
            {
                this.LogDebug("Test mdb server <cyan>{0}<default> at <cyan>{1}:{2}", Host, ip, port);
                string server = (ip.AddressFamily == AddressFamily.InterNetworkV6) ? $"[{ip}]" : ip.ToString();

                var con = new HttpConnection();
                {
                    con.Timeout = TimeSpan.FromSeconds(2);
                    Image       = con.Download($"http://{server}:{port}/avatar/get?text={Host}");
                }
                var        req = new XmlRequest(new Uri($"http://{server}:{port}/mdb/player/state.xml"));
                WebMessage msg = req.Get();
                if (msg.Error == WebError.None)
                {
                    lock (this)
                    {
                        if (Checked)
                        {
                            return;
                        }
                        this.LogNotice("Selected mdb server <green>{0}<default> at <green>{1}:{2}", Host, ip, port);
                        Address        = ip;
                        Port           = port;
                        StreamBasePort = streamBasePort;
                        Checked        = true;
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                this.LogVerbose(ex, "Could not reach mdb server <red>{0}<default> at <red>{1}:{2}", Host, ip, port);
            }
        }
Ejemplo n.º 28
0
        // please know that function Decode() should be called in single thread
        public bool Decode(Session session, MemoryStream stream, List<Object> output)
        {
            bool isNew = false;
            WebMessage netMsg = null;

            bool hasKey = false;
            Stack<Object> stack = WebMessage.GetSessionBuffer(session);
            if (stack.Count > 0)
            {
                hasKey = true;
                netMsg = (WebMessage)stack.Peek();
            }
            if (netMsg == null)
            {
                isNew = true;
                netMsg = new WebMessage();
                if (hasKey) stack.Pop();
                stack.Push(netMsg);
            }

            if (isNew)
            {
                if (netMsg != null)
                {
                    netMsg.ReceivingState = WebMessage.STATE_WAIT_FOR_BODY;
                    netMsg.MessageType = WebMessage.MSG_TYPE_HANDSHAKE;
                }
            }

            int total = 0;

            if (netMsg.ReceivingState == WebMessage.STATE_WAIT_FOR_BODY)
            {
                if (netMsg.MessageType == WebMessage.MSG_TYPE_HANDSHAKE)
                {
                    long orgpos = stream.Position;
                    long msglen = stream.Length - stream.Position;

                    Byte[] bytes = new Byte[msglen];
                    stream.Read(bytes, 0, bytes.Length);

                    bool found = false;

                    int curpos = 0;
                    int maxpos = bytes.Length - 1;
                    int checkedlen = 0;
                    while (curpos <= maxpos && !found)
                    {
                        if (bytes[curpos] == '\r')
                        {
                            if (curpos + 1 <= maxpos && bytes[curpos + 1] == '\n')
                            {
                                if (curpos + 2 <= maxpos && bytes[curpos + 2] == '\r')
                                {
                                    if (curpos + 3 <= maxpos && bytes[curpos + 3] == '\n')
                                    {
                                        found = true;
                                        checkedlen = curpos + 3 + 1;
                                    }
                                }
                            }
                        }

                        curpos++;
                    }

                    if (found)
                    {
                        Encoding encode = Encoding.UTF8;
                        string headerContent = encode.GetString(bytes, 0, checkedlen);

                        string[] rawClientHandshakeLines = headerContent.Split(new string[] { "\r\n" },
                                                                System.StringSplitOptions.RemoveEmptyEntries);
                        string acceptKey = "";
                        bool foundKey = false;
                        bool foundUrl = false;
                        bool foundServerSign = false;

                        string handshakeMsg = "";

                        foreach (string oneline in rawClientHandshakeLines)
                        {
                            if (!foundUrl && oneline.Contains(HTTP_HEADER_SIGN))
                            {
                                if (oneline.Contains(HTTP_SERVER_HEADER_SIGN))
                                {
                                    foundServerSign = true;
                                }
                                else
                                {
                                    string reqline = oneline.Trim();
                                    int beginPos = reqline.IndexOf(' ') + 1;
                                    int endPos = reqline.LastIndexOf(' ');
                                    if (beginPos > 0 && endPos > beginPos)
                                    {
                                        WebMessage.SetSessionData(session, "Path", reqline.Substring(beginPos, endPos - beginPos).Trim());
                                    }
                                }
                                foundUrl = true;
                            }

                            if (!foundKey && !foundServerSign && oneline.Contains(WEBSOCK_CLIENT_HEADER_SIGN + ":"))
                            {
                                acceptKey = ComputeWebSocketHandshakeSecurityHash09(oneline.Substring(oneline.IndexOf(":") + 2));
                                foundKey = true;
                            }
                        }

                        if (acceptKey != null && acceptKey.Length > 0)
                            handshakeMsg = String.Format(WEBSOCK_HANDSHAKE_REPLY_MSG, acceptKey);

                        stream.Position = orgpos + checkedlen;

                        netMsg.ReceivingState = WebMessage.STATE_READY;
                        if (stack.Count > 0) stack.Pop();

                        netMsg.MessageContent = headerContent;
                        netMsg.MessageType = WebMessage.MSG_TYPE_HANDSHAKE;
                        output.Add(netMsg);
                        total++;

                        netMsg = new WebMessage();
                        netMsg.VirtualHeaderSize = 2;
                        stack.Push(netMsg);

                        if (handshakeMsg != null && handshakeMsg.Length > 0)
                            session.Send(handshakeMsg);
                    }
                    else
                    {
                        if (curpos > m_MaxMsgSize) session.Close();
                        else stream.Position = orgpos;
                        return false;
                    }
                }

                if (netMsg.ReceivingState == WebMessage.STATE_WAIT_FOR_BODY
                    && stream.Length - stream.Position >= netMsg.ContentSize)
                {
                    Byte[] bytes = new Byte[netMsg.ContentSize];
                    stream.Read(bytes, 0, netMsg.ContentSize);

                    netMsg.RawContent = bytes;

                    netMsg.ReceivingState = WebMessage.STATE_READY;
                    if (stack.Count > 0) stack.Pop();

                    output.Add(netMsg);
                    total++;

                    netMsg = new WebMessage();
                    netMsg.VirtualHeaderSize = 2;
                    stack.Push(netMsg);
                }

            }

            while (netMsg.ReceivingState == WebMessage.STATE_WAIT_FOR_HEADER
                    && stream.Length - stream.Position >= netMsg.VirtualHeaderSize)
            {
                if (netMsg.ReceivingState == WebMessage.STATE_WAIT_FOR_HEADER)
                {
                    if (stream.Length - stream.Position >= netMsg.VirtualHeaderSize)
                    {
                        Byte[] bytes = new Byte[netMsg.VirtualHeaderSize];
                        stream.Read(bytes, 0, netMsg.VirtualHeaderSize);

                        if (netMsg.VirtualHeaderSize == 2)
                        {
                            // first byte ...
                            sbyte opcode = (sbyte)(bytes[0] & 0x0f);

                            switch (opcode) // not support 0x00 for now ...
                            {
                                case 0x08:
                                    session.Close();
                                    return false;
                                case 0x09:
                                    netMsg.MessageType = WebMessage.MSG_TYPE_PING;
                                    break;
                                case 0x0A:
                                    netMsg.MessageType = WebMessage.MSG_TYPE_PONG;
                                    break;
                                case 0x01:
                                    netMsg.MessageType = WebMessage.MSG_TYPE_STRING;
                                    break;
                                case 0x02:
                                    netMsg.MessageType = WebMessage.MSG_TYPE_BINARY;
                                    break;
                                default:
                                    session.Close(); // just close it if undefined op code found
                                    return false;
                            }

                            bool needmask = (bytes[1] & 0x80) == 0x80;

                            if (needmask)
                            {
                                netMsg.VirtualHeaderSize += 4;
                                netMsg.MaskFlag = 1;
                            }
                            else
                            {
                                netMsg.MaskFlag = 0;
                            }

                            sbyte payloadlen = (sbyte)(bytes[1] & 0x7f);

                            if (payloadlen == 126)
                            {
                                netMsg.VirtualHeaderSize += 2;
                                netMsg.HeaderFlag = 1;
                            }
                            else if (payloadlen == 127)
                            {
                                netMsg.VirtualHeaderSize += 8;
                                netMsg.HeaderFlag = 2;
                            }
                            else
                            {
                                netMsg.HeaderFlag = 0;
                            }
                        }

                        if (netMsg.VirtualHeaderSize > bytes.Length)
                        {
                            stream.Position = stream.Position - bytes.Length;
                            continue;
                        }

                        if (netMsg.MaskFlag > 0)
                        {
                            netMsg.MaskBytes = new byte[4];
                            Buffer.BlockCopy(bytes, netMsg.VirtualHeaderSize - 4, netMsg.MaskBytes, 0, 4);
                        }

                        if (netMsg.HeaderFlag == 1)
                        {
                            netMsg.ContentSize = (int)bytes[2] * 256 + (int)bytes[3];
                        }
                        else if (netMsg.HeaderFlag == 2)
                        {
                            long len = 0;
                            int n = 1;
                            for (int i = 7; i >= 0; i--)
                            {
                                len += (int)bytes[i + 2] * n;
                                n *= 256;
                            }

                            netMsg.ContentSize = (int)len;
                        }
                        else
                        {
                            netMsg.ContentSize = (sbyte)(bytes[1] & 0x7f);
                        }

                        if (netMsg.ContentSize > m_MaxMsgSize) netMsg.ContentSize = 0;
                        if (netMsg.ContentSize < 0) netMsg.ContentSize = 0;

                        if (netMsg.ContentSize > 0)
                        {
                            netMsg.ReceivingState = WebMessage.STATE_WAIT_FOR_BODY;
                        }
                        else
                        {
                            netMsg.ReceivingState = WebMessage.STATE_READY;
                            if (stack.Count > 0) stack.Pop();

                            netMsg = new WebMessage();
                            netMsg.VirtualHeaderSize = 2;
                            stack.Push(netMsg);

                            continue;
                        }

                    }

                }

                if (netMsg.ReceivingState == WebMessage.STATE_WAIT_FOR_BODY)
                {

                    if (stream.Length - stream.Position >= netMsg.ContentSize)
                    {
                        Byte[] bytes = new Byte[netMsg.ContentSize];
                        stream.Read(bytes, 0, netMsg.ContentSize);

                        if (netMsg.MaskFlag > 0 && netMsg.MaskBytes != null)
                        {
                            int masklen = netMsg.MaskBytes.Length;
                            for (int i = 0; i < bytes.Length; i++)
                            {
                                bytes[i] = (byte)(bytes[i] ^ netMsg.MaskBytes[i % masklen]);
                            }
                        }

                        if (netMsg.MessageType == WebMessage.MSG_TYPE_STRING)
                        {
                            netMsg.MessageContent = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
                        }

                        if (netMsg.MessageType == WebMessage.MSG_TYPE_BINARY
                            || netMsg.MessageType == WebMessage.MSG_TYPE_PING
                            || netMsg.MessageType == WebMessage.MSG_TYPE_PONG)
                        {
                            netMsg.RawContent = bytes;
                            netMsg.ContentSize = bytes.Length;
                        }

                        output.Add(netMsg);
                        total++;

                        netMsg.ReceivingState = WebMessage.STATE_READY;
                        if (stack.Count > 0) stack.Pop();

                        netMsg = new WebMessage();
                        netMsg.VirtualHeaderSize = 2;
                        stack.Push(netMsg);
                    }

                }

            }

            if (total > 0 && stream.Length - stream.Position <= 0) return true;

            if (netMsg.ReceivingState != WebMessage.STATE_WAIT_FOR_HEADER
                    && netMsg.ReceivingState != WebMessage.STATE_WAIT_FOR_BODY
                    && netMsg.ReceivingState != WebMessage.STATE_READY)
            {
                session.Close();
            }

            return false;
        }
Ejemplo n.º 29
0
    public static object readMessage(WebMessage message, RSACryptoServiceProvider sender_rsa)
    {
        //VUNERABILTY
        //IN CASE OF client restart the fake server can resend the message, the token is still valid
        //sol: on boot reset all client token
        //this solve also reply attack as the message would all change token, so I need only 1 session message id
        //if the message id buffer if full receiver shall send an authentication request along with the correct answer (to avoid answer to be to different from normal message)

        if (message == null)
        {
            return(null);
        }
        byte[] signature = message.Signature;

        RSACryptoServiceProvider my_rsa = message.getGlobalObject <IMyRsaProvider>().getMySra();

        //checking unique id
        byte[] message_id_bytes = my_rsa.Decrypt(message.MessageID, false);
        if (!sender_rsa.VerifyData(message_id_bytes, new SHA1CryptoServiceProvider(), message.MessageIDSignaure))
        {
            return(null);
        }
        string message_id = message_id_bytes.getString();

        if (message_ids.Contains(message_id))
        {
            return(null);
        }
        //replay attack!!!
        if (message_ids.Count > replay_store_size)
        {
            message_ids = new HashSet <string>();
        }
        message_ids.Add(message_id);

        byte[] Key = my_rsa.Decrypt(message.Key, false);
        byte[] IV  = my_rsa.Decrypt(message.IV, false);

        //Create a new instance of the RijndaelManaged class
        //and decrypt the stream.
        RijndaelManaged RMCrypto = new RijndaelManaged();


        //Create an instance of the CryptoStream class, pass it the NetworkStream, and decrypt
        //it with the Rijndael class using the key and IV.
        MemoryStream ms          = new MemoryStream(message.Message);
        CryptoStream CryptStream = new CryptoStream(ms, RMCrypto.CreateDecryptor(Key, IV), CryptoStreamMode.Read);


        MemoryStream output = new MemoryStream();

        byte[] buffer = new byte[1024];
        int    read   = CryptStream.Read(buffer, 0, buffer.Length);

        while (read > 0)
        {
            output.Write(buffer, 0, read);
            read = CryptStream.Read(buffer, 0, buffer.Length);
        }
        CryptStream.Flush();
        CryptStream.Dispose();
        ms.Dispose();

        byte[] received_message = output.ToArray();

        if (!sender_rsa.VerifyData(received_message, new SHA1CryptoServiceProvider(), signature))
        {
            return(null);
        }

        //OK message verified and decrypted!
        IFormatter formatter = new BinaryFormatter();

        ms = new MemoryStream(received_message);
        object message_object = formatter.Deserialize(ms);

        ms.Dispose();

        return(message_object);
    }
Ejemplo n.º 30
0
        public virtual void ValidateClient(object client)
        {
            Session session = client as Session;

            if (session == null)
            {
                return;
            }

            Task.Factory.StartNew(() =>
            {
                try
                {
                    string target  = "";
                    string reqpath = WebMessage.GetSessionData(session, "Path").ToString();

                    if (m_ClientValidator != null)
                    {
                        target = m_ClientValidator.Validate(session.GetRemoteIp(), reqpath);
                    }
                    else
                    {
                        List <string> paramList = new List <string>();
                        string[] parts          = reqpath.Split('/');
                        foreach (var part in parts)
                        {
                            if (part.Trim().Length > 0)
                            {
                                paramList.Add(part.Trim());
                            }
                        }
                        if (paramList.Count > 0)
                        {
                            target = paramList.First();
                        }
                    }

                    if (target != null && target.Length > 0)
                    {
                        bool isOK = true;
                        try
                        {
                            byte[] welcomeData = null;
                            string welcomeText = "";

                            var channel = m_ResourceManager.GetChannel(target, false);
                            if (channel != null)
                            {
                                welcomeData = channel.GetWelcomeData();
                                welcomeText = channel.GetWelcomeText();
                            }
                            if (welcomeData != null && welcomeData.Length > 0)
                            {
                                session.Send(new WebMessage(welcomeData));
                            }
                            if (welcomeText != null && welcomeText.Length > 0)
                            {
                                session.Send(new WebMessage(welcomeText));
                            }
                        }
                        catch { isOK = false; }

                        if (isOK)
                        {
                            List <object> clients  = null;
                            int channelClientCount = 0;
                            lock (m_WebClients)
                            {
                                if (m_WebClients.ContainsKey(target))
                                {
                                    clients = m_WebClients[target];
                                }
                            }
                            if (clients != null)
                            {
                                lock (clients)
                                {
                                    clients.Add(session);
                                    channelClientCount = clients.Count;
                                }
                            }

                            if (m_InputPort <= 0)
                            {
                                // update state
                                lock (m_States)
                                {
                                    if (!m_States.ContainsKey(target))
                                    {
                                        var channelState         = new MediaChannelState();
                                        channelState.ChannelName = target;
                                        channelState.ClientCount = channelClientCount;
                                        channelState.ServerInfo  = m_ServerName + "(" + m_InputIp + ":" + m_InputPort + "/" + m_OutputIp + ":" + m_OutputPort + ")";
                                        m_States.Add(target, channelState);
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        session.Close(); // just close it if failed to validate
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error("Validation error: " + ex.Message);
                }
            });
        }
Ejemplo n.º 31
0
 /// <summary>Initializes a new instance of the <see cref="XAuthException"/> class.</summary>
 /// <param name="message">The message.</param>
 /// <param name="request">The request.</param>
 public XAuthException(WebMessage message, XmlRequest request)
     : base(message)
 {
     Request = request;
 }
Ejemplo n.º 32
0
 private void btnChat_Click(object sender, EventArgs e)
 {
     WebMessage.SendString(m_ChatClient.GetSession(), "CHAT|" + edtUser.Text + "|" + edtMsg.Text);
     edtMsg.Text = "";
 }
Ejemplo n.º 33
0
 private void btnJoin_Click(object sender, EventArgs e)
 {
     WebMessage.SendString(m_ChatClient.GetSession(), "JOIN|" + edtUser.Text);
 }