public static FoeClientRequestItem Get(string requestId) { SQLiteConnection conn = FoeClientDb.Open(); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from requests where id=@id"; cmd.Parameters.Add("@id", System.Data.DbType.String, 128); cmd.Prepare(); cmd.Parameters["@id"].Value = requestId; // Read request FoeClientRequestItem req = null; SQLiteDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { req = new FoeClientRequestItem(); req.Id = requestId; req.Type = reader.GetString(reader.GetOrdinal("type")); req.DtRequested = reader.GetDateTime(reader.GetOrdinal("dtrequested")); } reader.Close(); conn.Close(); return(req); }
public static void SendRegistration() { // Check if user's email is available FoeClientRegistryEntry email = FoeClientRegistry.GetEntry("useremail"); if ((email == null) || (email.Value == null) || (email.Value.Length < 3)) { // Invalid user email return; } // Prepare message to send to server FoeMessage message = new FoeMessage(); message.Add(new FoeMessageItem("UserEmail", email.Value)); // Get SMTP server configurations SmtpServer server = null; try { server = FoeClientMessage.GetSmtpServer(); } catch (Exception except) { throw new Exception("Invalid SMTP configurations.\r\n" + except.ToString()); } // Send email try { string requestId = FoeClientRequest.GenerateId(); FoeClientMessage.SendMessage( server, email.Value, FoeClientRegistry.GetEntry("processoremail").Value, SubjectGenerator.RequestSubject(RequestType.Registration, requestId, "Newbie"), message); // Save request info FoeClientRequestItem req = new FoeClientRequestItem(); req.Id = requestId; req.Type = "reg"; req.DtRequested = DateTime.Now; FoeClientRequest.Add(req); } catch (Exception except) { throw new Exception("Error sending message.\r\n" + except.ToString()); } }
public static void Add(FoeClientRequestItem req) { SQLiteConnection conn = FoeClientDb.Open(); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = "insert into requests(id, type, dtrequested) values (@id, @type, @dtrequested)"; cmd.Parameters.Add("@id", System.Data.DbType.String, 128); cmd.Parameters.Add("@type", System.Data.DbType.String, 10); cmd.Parameters.Add("@dtrequested", System.Data.DbType.DateTime); cmd.Prepare(); // execute query cmd.Parameters["@id"].Value = req.Id; cmd.Parameters["@type"].Value = req.Type; cmd.Parameters["@dtrequested"].Value = req.DtRequested; cmd.ExecuteNonQuery(); conn.Close(); }
private void SendSubscriptionRequest() { try { // Delete all previous content requests FoeClientRequest.DeleteOldRequest(_requestInterval); // Create Foe Message string catalogs = ""; List<FoeClientCatalogItem> catalog = FoeClientCatalog.GetAll(); if (catalog.Count == 0) { return; } foreach (FoeClientCatalogItem item in catalog) { if (item.IsSubscribed) { catalogs += item.Code + ","; } } string requestId = FoeClientRequest.GenerateId(); FoeClientMessage.SendMessage( FoeClientMessage.GetSmtpServer(), FoeClientRegistry.GetEntry("useremail").Value, FoeClientRegistry.GetEntry("processoremail").Value, SubjectGenerator.RequestSubject(RequestType.Content, requestId, FoeClientRegistry.GetEntry("userid").Value), catalogs); // save requestid to DB FoeClientRequestItem reqItem = new FoeClientRequestItem(); reqItem.Id = requestId; reqItem.Type = "content"; reqItem.DtRequested = DateTime.Now; FoeClientRequest.Add(reqItem); // remember when the request was sent _lastRequestSent = DateTime.Now; // Set status tssStatus.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " requested update."; } catch (Exception) { tssStatus.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " error sending request."; } }
private void SendCatalogRequest() { try { // Delete all previous content requests FoeClientRequest.DeleteOldRequest(_requestInterval); // Create Foe Message string requestId = FoeClientRequest.GenerateId(); FoeClientMessage.SendMessage( FoeClientMessage.GetSmtpServer(), FoeClientRegistry.GetEntry("useremail").Value, FoeClientRegistry.GetEntry("processoremail").Value, SubjectGenerator.RequestSubject(RequestType.Catalog, requestId, FoeClientRegistry.GetEntry("userid").Value), ""); // save requestid to DB FoeClientRequestItem reqItem = new FoeClientRequestItem(); reqItem.Id = requestId; reqItem.Type = "catalog"; reqItem.DtRequested = DateTime.Now; FoeClientRequest.Add(reqItem); // remember when the request was sent _lastRequestSent = DateTime.Now; // Set status tssStatus.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " requested catalog."; } catch (Exception) { tssStatus.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " error sending request."; } }
public static FoeClientRequestItem Get(string requestId) { SQLiteConnection conn = FoeClientDb.Open(); SQLiteCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from requests where id=@id"; cmd.Parameters.Add("@id", System.Data.DbType.String, 128); cmd.Prepare(); cmd.Parameters["@id"].Value = requestId; // Read request FoeClientRequestItem req = null; SQLiteDataReader reader = cmd.ExecuteReader(); if (reader.Read()) { req = new FoeClientRequestItem(); req.Id = requestId; req.Type = reader.GetString(reader.GetOrdinal("type")); req.DtRequested = reader.GetDateTime(reader.GetOrdinal("dtrequested")); } reader.Close(); conn.Close(); return req; }
/// <summary> /// Download and process email messages from the POP3 server. /// </summary> /// <param name="server">POP3 server information</param> public static void DownloadMessages() { Trace.WriteLine("Entered DownloadMessages()."); // Get POP3 server info PopServer server = GetPopServer(); Trace.WriteLine(" Retrieved POP server info."); // connect to POP3 server and download messages //FoeDebug.Print("Connecting to POP3 server..."); POPClient popClient = new POPClient(); popClient.IsUsingSsl = server.SslEnabled; popClient.Disconnect(); popClient.Connect(server.ServerName, server.Port); popClient.Authenticate(server.UserName, server.Password); Trace.WriteLine(" Connected to POP3."); // get mail count int count = popClient.GetMessageCount(); Trace.WriteLine(" There are " + count.ToString() + " messages in inbox."); // go through each message, from newest to oldest for (int i = count; i >= 1; i -= 1) { Trace.WriteLine(" Opening message #" + i.ToString()); OpenPOP.MIMEParser.Message msg = popClient.GetMessage(i, true); if (msg != null) { string subject = msg.Subject; string fromEmail = msg.FromEmail; Trace.WriteLine(" Message came from " + msg.FromEmail + " with subject \"" + msg.Subject + "\""); // Check if fromEmail is the same as processor's email on file if (fromEmail.ToLower() == FoeClientRegistry.GetEntry("processoremail").Value.ToLower()) { Trace.WriteLine(" Message came from the processor."); // parse subject line string[] tokens = subject.Trim().Split(new char[] { ' ' }); // There should be 5 or 6 tokens if (tokens.Length == 5) { Trace.WriteLine(" There are 5 tokens."); // Get the request ID for this reply string requestId = tokens[2]; // Check if request ID matches any request the client sent FoeClientRequestItem req = FoeClientRequest.Get(requestId); if (req != null) { Trace.WriteLine(" Message Request ID matched."); // Found the matching request // Download the full reply OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; Trace.WriteLine(" Downloaded full message body."); try { // decompress it byte[] compressedMsg = Convert.FromBase64String(msgBody); Trace.WriteLine(" Decoded Base64 message."); byte[] decompressedMsg = CompressionManager.Decompress(compressedMsg); Trace.WriteLine(" Decompressed message."); string foe = Encoding.UTF8.GetString(decompressedMsg); Trace.WriteLine(" Retrieved original FOE message."); // Check what is the original request type if (req.Type.ToLower() == "registe") { Trace.WriteLine(" Registration reply. Processing message."); ProcessRegistrationReply(foe); Trace.WriteLine(" Registration reply processed."); } else if (req.Type.ToLower() == "catalog") { Trace.WriteLine(" Catalog reply. Processing message."); ProcessCatalogReply(foe); Trace.WriteLine(" Catalog reply processed."); } else if (req.Type.ToLower() == "feed") { Trace.WriteLine(" feed reply. Processing message."); ProcessCatalogReply(foe); Trace.WriteLine(" feed reply processed."); } } catch (Exception except) { // the message is likely malformed // so just ignore it Trace.WriteLine(" Exception detected: \r\n" + except.ToString()); } } else { Trace.WriteLine(" Message ID mismatched."); } } //content request's reply else if (tokens.Length == 6) { Trace.WriteLine(" There are 6 tokens."); // Get the request ID for this reply string catalog = tokens[1]; string requestId = tokens[3]; // Check if request ID matches any request the client sent FoeClientRequestItem req = FoeClientRequest.Get(requestId); if (req != null) { Trace.WriteLine(" Message Request ID matched."); // Found the matching request // Download the full reply OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; Trace.WriteLine(" Downloaded full message body."); try { byte[] compressed = Convert.FromBase64String(msgBody); byte[] decompressed = CompressionManager.Decompress(compressed); string foe = Encoding.UTF8.GetString(decompressed); // Check what is the original request type if (req.Type.ToLower() == "content") { Trace.WriteLine(" Content reply. Processing message."); ProcessContentReply(catalog, foe); Trace.WriteLine(" Content reply processed."); } } catch (Exception except) { // the message is likely malformed // so just ignore it Trace.WriteLine(" Exception detected: \r\n" + except.ToString()); } } else { Trace.WriteLine(" Message ID mismatched."); } } else { Trace.WriteLine(" Message does not have 5 tokens."); } } else { Trace.WriteLine(" Message did not come from processor."); } } // Delete the current message popClient.DeleteMessage(i); Trace.WriteLine(" Deleted current message in inbox."); } popClient.Disconnect(); Trace.WriteLine(" Disconnected from POP server."); Trace.WriteLine(" Exiting DownloadMessages()."); }
/// <summary> /// Download and process email messages from the POP3 server. /// </summary> /// <param name="server">POP3 server information</param> public static void DownloadMessages() { // Get POP3 server info PopServer server = GetPopServer(); // connect to POP3 server and download messages //FoeDebug.Print("Connecting to POP3 server..."); POPClient popClient = new POPClient(); popClient.IsUsingSsl = server.SslEnabled; popClient.Disconnect(); popClient.Connect(server.ServerName, server.Port); popClient.Authenticate(server.UserName, server.Password); FoeDebug.Print("Connected to POP3."); // get mail count int count = popClient.GetMessageCount(); // go through each message, from newest to oldest for (int i = count; i >= 1; i -= 1) { OpenPOP.MIMEParser.Message msg = popClient.GetMessage(i, true); if (msg != null) { string subject = msg.Subject; string fromEmail = msg.FromEmail; // Check if fromEmail is the same as processor's email on file if (fromEmail.ToLower() == FoeClientRegistry.GetEntry("processoremail").Value.ToLower()) { // parse subject line string[] tokens = subject.Trim().Split(new char[] { ' ' }); // There should be 5 tokens if (tokens.Length == 5) { // Get the request ID for this reply string requestId = tokens[2]; // Check if request ID matches any request the client sent FoeClientRequestItem req = FoeClientRequest.Get(requestId); if (req != null) { // Found the matching request // Download the full reply OpenPOP.MIMEParser.Message wholeMsg = popClient.GetMessage(i, false); string msgBody = (string)wholeMsg.MessageBody[0]; try { // decompress it byte[] compressedMsg = Convert.FromBase64String(msgBody); byte[] decompressedMsg = CompressionManager.Decompress(compressedMsg); string foeXml = Encoding.UTF8.GetString(decompressedMsg); // Check what is the original request type if (req.Type.ToLower() == "reg") { ProcessRegistrationReply(foeXml); } else if (req.Type.ToLower() == "content") { ProcessContentReply(foeXml); } else if (req.Type.ToLower() == "catalog") { ProcessCatalogReply(foeXml); } } catch (Exception) { // the message is likely malformed // so just ignore it } } } } } // Delete the current message popClient.DeleteMessage(i); } popClient.Disconnect(); }