public static List<Uri> getPeerList() { using (MemoDbConnection conn = new MemoDbConnection ()) { conn.BeginTransaction (); try { List<Uri> list = new List<Uri>(); using (MemoDbContext ctx = new MemoDbContext (conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qp = from p in ctx.Peers select p; foreach(Peer p in qp){ list.Add(new Uri(p.Address)); } } conn.CommitTransaction (); return list; } catch { conn.RollbackTransaction (); return null; } } }
public static void registerNick(string nick, string macHash) { using (MemoDbConnection conn = new MemoDbConnection()) { try { refreshNick(nick, macHash); } catch {} conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qu = from u in ctx.Users where u.Username.Equals (nick) select u; if (qu.Count() > 0) { foreach(User u in qu){ if(u.LastOnline.Add(TIMEOUT).CompareTo(DateTime.UtcNow) > 0){ throw new NickAlreadyRegistratedException(); } else { ctx.Users.Remove(u); } } } User nu = new User { LastOnline = DateTime.UtcNow, Username = nick, Password = macHash }; ctx.Users.Add(nu); ctx.SaveChanges(); } conn.CommitTransaction(); } catch (NickAlreadyRegistratedException ne) { conn.RollbackTransaction(); throw ne; } catch (Exception e) { conn.RollbackTransaction(); System.Console.Error.WriteLine (e.Message); System.Console.Error.WriteLine (e.StackTrace); throw new NickRegistrationFailedException(e.Message, e); } } }
public static void refreshNick(string nick, string macHash) { using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qu = from u in ctx.Users where u.Username.Equals (nick) select u; if (qu.Count() != 1) { throw new NickNotFoundException(); } User user = qu.First(); if(user == null || user.Password == null || !user.Password.Equals(macHash)){ throw new NickPasswordException(); } user.LastOnline = DateTime.UtcNow; ctx.SaveChanges(); } conn.CommitTransaction(); } catch (NickNotFoundException ne) { conn.RollbackTransaction(); throw ne; } catch (NickPasswordException pe) { conn.RollbackTransaction(); throw pe; } catch (Exception e) { conn.RollbackTransaction(); System.Console.Error.WriteLine (e.Message); System.Console.Error.WriteLine (e.StackTrace); throw new NickRegistrationFailedException(e.Message, e); } } }
public static List<Memo> getMemos(string user) { List<Memo> memoList = new List<Memo>(); using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var q = from u in ctx.Users where u.Username.Equals (user) select u; if (q.Count() != 1) { conn.CommitTransaction(); return null; } User theUser = q.First(); foreach(Memo m in theUser.Memos) { if(m.Unread){ memoList.Add(new Memo{ Message = m.Message, Sender = m.Sender, Timestamp = m.Timestamp }); m.Unread = false; } else { theUser.Memos.Remove(m); } } ctx.SaveChanges(); } conn.CommitTransaction(); return memoList; } catch { conn.RollbackTransaction(); throw; } } }
public static void registerPeer(string hash, Uri clientUri) { using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qp = from p in ctx.Peers where p.MAC_AddressHash.Equals (hash) select p; if (qp.Count () > 1) { throw new PeerAlreadyRegistratedException(); } Peer peer; if (qp.Count () == 0) { peer = new Peer { Address = clientUri.ToString(), MAC_AddressHash = hash }; } else { peer = qp.First (); } ctx.Peers.Add(peer); ctx.SaveChanges(); } conn.CommitTransaction (); } catch (PeerAlreadyRegistratedException pare){ conn.RollbackTransaction(); throw pare; } catch (Exception e) { conn.RollbackTransaction(); System.Console.Error.WriteLine (e.Message); System.Console.Error.WriteLine (e.StackTrace); throw new PeerRegistrationFailedException(e.Message, e); } } }
public static User getAnon(MemoDbContext ctx) { bool loop = true; int threshold = 3; while (loop) { var q = from u in ctx.Users where u.Username.Equals (ANON_NAME) select u; if (q.Count () < 1) { initAnon (); threshold--; } else { return q.First (); } if (threshold < 1) { break; } } return null; }
public static void kickoutPeer(string hash, string kickerHash) { using (MemoDbConnection conn = new MemoDbConnection ()) { conn.BeginTransaction (); try { using (MemoDbContext ctx = new MemoDbContext (conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var qp = from p in ctx.Peers where p.MAC_AddressHash.Equals (kickerHash) select p; if (qp.Count () != 1) { throw new PeerPasswordException(); } var qk = from p in ctx.Peers where p.MAC_AddressHash.Equals (kickerHash) select p; foreach(Peer p in qk){ ctx.Peers.Remove(p); } ctx.SaveChanges(); } conn.CommitTransaction (); } catch (PeerPasswordException ppe){ conn.RollbackTransaction (); throw ppe; } catch (Exception e){ conn.RollbackTransaction (); throw new PeerRegistrationFailedException(e.Message, e); } } }
public static void initAnon() { using (MemoDbConnection conn = new MemoDbConnection()) { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { //var q = from u in ctx.Users where // u.Username.Equals (ANON_NAME) // select u; var q = from u in ctx.Users select u; if (q.Count() < 1) { var anon = new User (); anon.Username = ANON_NAME; anon.LastOnline = DateTime.Now; anon.Password = "******"; conn.BeginTransaction (); try { ctx.Database.UseTransaction (conn.Transaction); ctx.Users.Add (anon); ctx.SaveChanges (); conn.CommitTransaction (); } catch { conn.RollbackTransaction (); } } } } }
public static void putMemo(string message, string to, string from) { Memo memo = new Memo(message, from); using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.UseTransaction(conn.Transaction); var q = from u in ctx.Users where u.Username.Equals (to) select u; if (q.Count() != 1) { conn.CommitTransaction(); return; } User toUser = q.First(); ctx.Memos.Add(memo); toUser.Memos.Add(memo); ctx.SaveChanges(); } conn.CommitTransaction(); } catch { conn.RollbackTransaction(); throw; } } }
static void Debug() { Console.WriteLine ("Debug"); using (MemoDbConnection conn = new MemoDbConnection()) { conn.BeginTransaction(); try { using (MemoDbContext ctx = new MemoDbContext(conn.Connection, false)) { ctx.Database.Log = (string message) => { Console.WriteLine(message); }; ctx.Database.UseTransaction(conn.Transaction); Memo testMemo = new Memo("Hello", "d"); User anon = new User { Username = "******", Password = "******", LastOnline = DateTime.UtcNow }; Peer peer = new Peer { Address = new Uri("http://localhost:8088").ToString(), MAC_AddressHash = "pass" }; // ctx.Memos.Add(testMemo); // ctx.Users.Add(anon); // ctx.Peers.Add(peer); // anon.Memos.Add(testMemo); // ctx.SaveChanges(); } conn.CommitTransaction(); } catch { conn.RollbackTransaction(); throw; } } try { NickManager.registerNick ("nickkk", "MAChashMD5"); System.Console.WriteLine ("registration OK"); } catch (Exception ex) { System.Console.WriteLine (ex.Message); } try { NickManager.refreshNick ("nickkk", "MAChashMD5"); System.Console.WriteLine ("refresh OK"); } catch (Exception ex) { System.Console.WriteLine (ex.Message); } try { NickManager.refreshNick ("nickkkkk", "MAChashMD5"); System.Console.WriteLine ("refresh OK"); } catch (Exception ex) { System.Console.WriteLine (ex.Message); } System.Console.WriteLine (); try { PeerManager.registerPeer("ddsgsgsdffcdsfg", new Uri ("http://localhost:53215") ); System.Console.WriteLine ("peer registration OK"); } catch (Exception ex) { System.Console.WriteLine (ex.Message); } System.Console.WriteLine (); try { MemoManager.putMemo("hali", "Anonymous", "d"); MemoManager.putMemo("hali", "nickkk", "d"); MemoManager.putMemo("hali", "nickkkkkkkkkk", "d"); System.Console.WriteLine ("Memo added!"); } catch (Exception ex) { System.Console.WriteLine (ex.Message); } System.Console.WriteLine (); }