public static void ReadConfig() { if (!_regToDB) { DefaultSecurityLevel = int.Parse(ConfigurationManager.AppSettings["DefaultSecurityLevel"]); ConfigConnString = ConfigurationManager.AppSettings["ConnectionString"]; ExCodeDBConnString = ConfigurationManager.AppSettings["ExCodeDBConn"]; ExCodeDBType = int.Parse(ConfigurationManager.AppSettings["ExCodeDBType"]); ServiceName = ConfigurationManager.AppSettings["ServiceName"]; ServiceID = ConfigurationManager.AppSettings["ServiceID"]; int.TryParse(ConfigurationManager.AppSettings["IsWriteLog"], out IsWriteLog); int.TryParse(ConfigurationManager.AppSettings["MaxConnectPerSecond"], out MaxConnectPerSecond); int.TryParse(ConfigurationManager.AppSettings["VerifyMode"], out VerifyMode); int.TryParse(ConfigurationManager.AppSettings["loadExCode"], out LoadExCode); DefaultPrefix = ConfigurationManager.AppSettings["prefix"].ToString(); int.TryParse(ConfigurationManager.AppSettings["CommandTimeout"], out CommandTimeout); int.TryParse(ConfigurationManager.AppSettings["ReceiveStream"], out ReceiveStream); Computer com = new Computer(); IPAddress = com.IpAddress; if (ServiceID == string.Empty) { ServiceID = com.CPUID; } _regToDB = true; Thread t = new Thread(HeartBeat); t.IsBackground = true; t.Start(); } try { //读取可用渠道设置 using (SqlConnection conn = new SqlConnection(ConfigConnString)) { conn.Open(); SqlCommand command = new SqlCommand( "SELECT ClientID, ChannelName, UserID, Password, IsValid, ExpireDate," + "SecurityLevel, SecurityPassword FROM dbo.stb_Channels ORDER BY ClientID", conn); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { TEntityClient f = new TEntityClient(); f.ClientID = reader["ClientID"].ToString(); f.ChannelName = reader["ChannelName"].ToString(); f.UserID = reader["UserID"].ToString(); f.Password = reader["Password"].ToString(); f.IsValid = int.Parse(reader["IsValid"].ToString()); f.ExpireDate = (DateTime)reader["ExpireDate"]; f.SecurityLevel = int.Parse(reader["SecurityLevel"].ToString()); f.SecurityPassword = reader["SecurityPassword"].ToString(); if (!_clientInMemory.ContainsKey(f.ClientID)) { _clientInMemory.Add(f.ClientID, f); } } reader.Close(); conn.Close(); } } catch (Exception err) { WriteLog.Instance.WriteLocalMsg(9999, "读取渠道信息失败:" + err.Message); } }
/// <summary> /// 根据客户端标识中对于安全级别的配置,对报文进行响应的处理 /// </summary> /// <param name="clientID">客户端标识</param> /// <param name="msgContent">消息报文</param> private Stream EncryptContent(string clientID, string msgContent) { byte[] strBytes = null; string desPWD = "12345678"; TSecurityLevel thisSL = TSecurityLevel.None; try { if (TRegistClients.Instance.Clients.ContainsKey(clientID)) { TEntityClient clientEntity = TRegistClients.Instance.Clients[clientID]; thisSL = (TSecurityLevel)clientEntity.SecurityLevel; desPWD = clientEntity.SecurityPassword; } switch (thisSL) { case TSecurityLevel.None: strBytes = Encoding.UTF8.GetBytes(msgContent); break; case TSecurityLevel.Compressed: strBytes = Encoding.UTF8.GetBytes(IRAP.ZipUtil.Zip(msgContent)); break; case TSecurityLevel.DES: IRAP.DES des = new IRAP.DES(); string desStr = des.EncryptDES(msgContent, desPWD); string zipStr = IRAP.ZipUtil.Zip(desStr); strBytes = Encoding.UTF8.GetBytes(zipStr); break; case TSecurityLevel.AES: strBytes = Encoding.UTF8.GetBytes( IRAP.AES.Encrypt( msgContent, desPWD, desPWD)); break; default: strBytes = Encoding.UTF8.GetBytes( string.Format( "{ErrCode:999999,ErrText:'系统无法识别加密安全级别[{0}],无法完成加密操作'}", thisSL)); break; } } catch (Exception error) { strBytes = Encoding.UTF8.GetBytes( string.Format( "{ErrCode:999998,ErrText:'{0}'}", error.Message)); } return(new MemoryStream(strBytes)); }