private void listenBroadcast() { Console.WriteLine("listen broadcast..."); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, Setting.Port); socket.Bind(endPoint); byte[] buffer = new byte[VERIFY_KEY_BUFFER_SIZE]; while (true) { int res = 0; try { res = socket.ReceiveFrom(buffer, ref mRemote); String msg = Encoding.Default.GetString(buffer, 0, res); Log.v("msg:" + msg); BroadcastMsg broadcastMsg = new BroadcastMsg(msg); if (Verify.verifyBroadcastMsg(broadcastMsg)) { addToPadList(broadcastMsg, ((IPEndPoint)mRemote).Address); } } catch (Exception e) { Console.WriteLine("illegal client request! from " + mRemote.ToString()); } } }
public static Boolean verifyBroadcastMsg(BroadcastMsg msg) { if (msg.Secret == null) return false; if (msg.Timestamp == null) return false; if (!Md5.Encrypt(msg.Timestamp + Setting.BroadcastSecretKey).Equals(msg.Secret)) return false; return true; }
private PadInfo makePadInfo(BroadcastMsg msg, IPAddress address) { PadInfo info = new PadInfo(msg.DeviceId, msg.DeviceName, address, msg.Port); return info; }
private void addToPadList(BroadcastMsg msg, IPAddress address) { PadInfo info = makePadInfo(msg, address); mPadContainer.addPad(info); }