// Send an encrypted message using the S2 network public static void sendMessage(StreamMessage msg, string hostname = null) { StreamClientManager.broadcastData(ProtocolMessageCode.s2data, msg.getBytes()); /* string pub_k = FriendList.findContactPubkey(msg.recipientAddress); * if (pub_k.Length < 1) * { * Console.WriteLine("Contact {0} not found, adding to offline queue!", msg.recipientAddress); * addOfflineMessage(msg); * return; * } * * * // Create a new IXIAN transaction * // byte[] checksum = Crypto.sha256(encrypted_message); * Transaction transaction = new Transaction(0, msg.recipientAddress, Node.walletStorage.address); * // transaction.data = Encoding.UTF8.GetString(checksum); * msg.transactionID = transaction.id; * //ProtocolMessage.broadcastProtocolMessage(ProtocolMessageCode.newTransaction, transaction.getBytes()); * * // Add message to the queue * messages.Add(msg); * * // Request a new keypair from the S2 Node * if(hostname == null) * ProtocolMessage.broadcastProtocolMessage(ProtocolMessageCode.s2generateKeys, Encoding.UTF8.GetBytes(msg.getID())); * else * { * NetworkClientManager.sendData(ProtocolMessageCode.s2generateKeys, Encoding.UTF8.GetBytes(msg.getID()), hostname); * }*/ }
private static int cooldownPeriod = 60; // cooldown period in seconds public static bool sendPushMessage(StreamMessage msg, bool push) { string receiver = Base58Check.Base58CheckEncoding.EncodePlain(msg.recipient); string sender = Base58Check.Base58CheckEncoding.EncodePlain(msg.sender); string data = HttpUtility.UrlEncode(Convert.ToBase64String(msg.getBytes())); string pub_key = ""; if (msg.id.Length == 1 && msg.id[0] == 1) { pub_key = HttpUtility.UrlEncode(Convert.ToBase64String(Node.walletStorage.getPrimaryPublicKey())); } Friend f = FriendList.getFriend(msg.recipient); if (f == null) { return(true); // return true to skip sending this message and remove it from the queue } string URI = String.Format("{0}/push.php", Config.pushServiceUrl); string parameters = String.Format("tag={0}&data={1}&pk={2}&push={3}&fa={4}", receiver, data, pub_key, push, sender); using (WebClient client = new WebClient()) { try { client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; string htmlCode = client.UploadString(URI, parameters); if (htmlCode.Equals("OK")) { if (msg.id.Length == 1 && msg.id[0] >= f.handshakeStatus) { f.handshakePushed = true; FriendList.saveToStorage(); } return(true); } }catch (Exception e) { Logging.error("Exception occured in sendPushMessage: " + e); } } return(false); }
public static bool sendPushMessage(StreamMessage msg, bool push) { string receiver = Base58Check.Base58CheckEncoding.EncodePlain(msg.recipient); string sender = Base58Check.Base58CheckEncoding.EncodePlain(msg.sender); string data = HttpUtility.UrlEncode(Convert.ToBase64String(msg.getBytes())); string pub_key = ""; if (msg.id.Length == 1 && msg.id[0] == 1) { pub_key = HttpUtility.UrlEncode(Convert.ToBase64String(IxianHandler.getWalletStorage().getPrimaryPublicKey())); } Friend f = FriendList.getFriend(msg.recipient); if (f == null) { return(true); // return true to skip sending this message and remove it from the queue } string url = string.Format("{0}/push.php", Config.pushServiceUrl); string parameters = string.Format("tag={0}&data={1}&pk={2}&push={3}&fa={4}", receiver, data, pub_key, push, sender); using (HttpClient client = new HttpClient()) { try { HttpContent httpContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded"); var response = client.PostAsync(url, httpContent).Result; string body = response.Content.ReadAsStringAsync().Result; if (body.Equals("OK")) { return(true); } }catch (Exception e) { Logging.error("Exception occured in sendPushMessage: " + e); } } return(false); }
// Send an encrypted message using the S2 network public static bool sendMessage(Friend friend, StreamMessage msg, bool add_to_offline_messages = true) { // TODO this function has to be improved and node's wallet address has to be added string hostname = friend.searchForRelay(); if (friend.publicKey != null && (msg.encryptionType == StreamMessageEncryptionCode.rsa || (friend.aesKey != null && friend.chachaKey != null))) { msg.encrypt(friend.publicKey, friend.aesKey, friend.chachaKey); } else if (msg.encryptionType != StreamMessageEncryptionCode.none || !friend.online) { if (friend.publicKey == null) { byte[] pub_k = FriendList.findContactPubkey(friend.walletAddress); friend.publicKey = pub_k; } StreamClientManager.connectTo(hostname, null); // TODO replace null with node address Logging.warn("Could not send message to {0}, due to missing encryption keys, adding to offline queue!", Base58Check.Base58CheckEncoding.EncodePlain(msg.recipient)); if (add_to_offline_messages) { addOfflineMessage(msg); } return(false); } if (!StreamClientManager.sendToClient(hostname, ProtocolMessageCode.s2data, msg.getBytes(), Encoding.UTF8.GetBytes(msg.getID()))) { StreamClientManager.connectTo(hostname, null); // TODO replace null with node address Logging.warn("Could not send message to {0}, adding to offline queue!", Base58Check.Base58CheckEncoding.EncodePlain(msg.recipient)); if (add_to_offline_messages) { addOfflineMessage(msg); } return(false); } return(true); /* string pub_k = FriendList.findContactPubkey(msg.recipientAddress); * if (pub_k.Length < 1) * { * Console.WriteLine("Contact {0} not found, adding to offline queue!", msg.recipientAddress); * addOfflineMessage(msg); * return; * } * * * // Create a new IXIAN transaction * // byte[] checksum = Crypto.sha256(encrypted_message); * Transaction transaction = new Transaction(0, msg.recipientAddress, Node.walletStorage.address); * // transaction.data = Encoding.UTF8.GetString(checksum); * msg.transactionID = transaction.id; * //ProtocolMessage.broadcastProtocolMessage(ProtocolMessageCode.newTransaction, transaction.getBytes()); * * // Add message to the queue * messages.Add(msg); * * // Request a new keypair from the S2 Node * if(hostname == null) * ProtocolMessage.broadcastProtocolMessage(ProtocolMessageCode.s2generateKeys, Encoding.UTF8.GetBytes(msg.getID())); * else * { * NetworkClientManager.sendData(ProtocolMessageCode.s2generateKeys, Encoding.UTF8.GetBytes(msg.getID()), hostname); * }*/ }