예제 #1
0
파일: InitService.cs 프로젝트: fflorat/IRAP
        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);
            }
        }
예제 #2
0
        /// <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));
        }