public NanoHttpResponse Handle(NanoHttpRequest request) { if (string.IsNullOrEmpty(request.Content)) { return(new ErrorHandler(StatusCode.BadRequest, "Empty message").Handle(request)); } Hash thread = new Hash(request.Address.Split('/').Last()); if (thread.Invalid) { return(new ErrorHandler(StatusCode.BadRequest, "Invalid hash").Handle(request)); } var str = Encoding.UTF8.GetString(request.Connection.Raw); str = str.Substring(str.IndexOf("\r\n\r\n") + 4); NanoPost post = null; if (thread.Value != NanoDB.CategoriesHashValue) { post = new NanoPost(thread, "[g]" + GetPostHeader() + "[/g]\n" + str); } else { post = new NanoPost(thread, str); } if (post.Invalid) { NotificationHandler.Instance.AddNotification("Превышен максимальный размер поста."); return(new NanoHttpResponse(StatusCode.BadRequest, "")); } if (SpamDetector.IsSpam(post.Message)) { NotificationHandler.Instance.AddNotification("Ваш пост из-за своего содержания будет считаться спамом."); return(new NanoHttpResponse(StatusCode.BadRequest, "")); } else { NotificationHandler.Instance.AddNotification( "Сообщение добавлено, " + post.SerializedBytes().Length + " байт (" + post.SerializedString().Length + " симв.)"); if (_db.AddPost(post)) { _db.WriteNewPosts(false); } return(new NanoHttpResponse(StatusCode.Ok, post.GetHash().Value)); } }
public void ReadInbox(NanoDB to) { if (_isReading) { return; } _isReading = true; if (Directory.Exists(Strings.Download)) { string[] files = Directory.GetFiles(Strings.Download); foreach (string f in files) { string pathToPng = f; byte[] packed = null; try { packed = new PngStegoUtil().ReadHiddenBytesFromPng(pathToPng); GC.Collect(); } catch { // invalid container } NanoPost[] posts = null; try { posts = NanoPostPackUtil.Unpack(packed); } catch { // inavlid container } bool any = false; if (posts != null) { foreach (var p in posts) { any |= to.AddPost(p); } } if (any) { NotificationHandler.Instance.AddNotification("Извлечены новые сообщения."); to.WriteNewPosts(false); } } try { foreach (string f in files) { File.Delete(f); } } catch { } } _isReading = false; }
public void ReadInbox(NanoDB to) { if (_isReading) return; _isReading = true; if (Directory.Exists(Strings.Download)) { string[] files = Directory.GetFiles(Strings.Download); foreach (string f in files) { string pathToPng = f; byte[] packed = null; try { packed = new PngStegoUtil().ReadHiddenBytesFromPng(pathToPng); GC.Collect(); } catch { // invalid container } NanoPost[] posts = null; try { posts = NanoPostPackUtil.Unpack(packed); } catch { // inavlid container } bool any = false; if (posts != null) { foreach (var p in posts) { any |= to.AddPost(p); } } if (any) { NotificationHandler.Instance.AddNotification("Извлечены новые сообщения."); to.WriteNewPosts(false); } } try { foreach (string f in files) { File.Delete(f); } } catch { } } _isReading = false; }