/// <summary> /// 处理设备注册 /// </summary> /// <param name="registerInfo"></param> /// <param name="con"></param> /// <param name="db"></param> public void ProcessReqest(Register registerInfo, SocketConnection con, IClientRequest db) { var registerBk = new CmdHeader { CmdCode = 0xFF01, Identity = registerInfo.Identity, ServerId = SocketConnectionServerDispatcher.ServerId, //TimeToken = registerInfo.TimeToken }; SocketConnection.ShowMsg(registerInfo.ToString()); var registerDto = new DtoRegister { Iccid = registerInfo.Iccid, ImeiNo = registerInfo.Identity, ImeiType = registerInfo.ImeiType, ImeiVersion = registerInfo.ImeiVersion, RemoteIpEndPoint = con.ConnectSocket.RemoteEndPoint.ToString(), ServerIp = con.ConnectSocket.LocalEndPoint.ToString(), ServerOutIp = SocketConnectionServerDispatcher.ServerOutIpEndPort, Lng = registerInfo.Lng, Lat = registerInfo.Lat }; registerBk.ResultCode = db.DeviceRegister(registerDto); con.Send(registerBk.ToByteArray()); SocketConnection.ShowMsg(registerBk.ToString()); }
public void StopServices(IClientRequest request) { Items input = request.GetInput <Items>(); ServiceStateProcessor.StopServices(input); // service.SendResult(new object()); }
IClientResponse Execute(IClientRequest request) { MemoryResource resource; if (!Resources.TryGetValue(request.RequestUri, out resource)) { return NotFoundResponse(request); } Func<IClientRequest, IClientResponse> methodHandler; if (!resource.Operations.TryGetValue(request.Method,out methodHandler)) { return new MemoryResponse { Status = new HttpStatus(405, "Method not allowed"), Headers = { { "Content-Length", "0" } } }; } if ( resource.Username != null && resource.Password != null && (request.Credentials == null || resource.Username != request.Credentials.UserName || resource.Password != request.Credentials.Password)) { return new MemoryResponse { Status = new HttpStatus(401, "Unauthorized"), Headers= {{"Content-Length", "0"}} }; } return methodHandler(request); }
/// <summary> /// 处理设备登录 /// </summary> /// <param name="loginInfo"></param> /// <param name="con"></param> /// <param name="db"></param> public void ProcessReqest(CmdHeader loginInfo, SocketConnection con, IClientRequest db) { con.Identity = loginInfo.Identity; con.SocketConnectType = SocketConnectType.DeviceSocket; SocketConnectionServerDispatcher.DicSockectConnection.AddOrUpdate(loginInfo.Identity, con, (key, old) => con); var loginDto = new DtoLogin { ImeiNo = loginInfo.Identity, RemoteIpEndPoint = con.ConnectSocket.RemoteEndPoint.ToString(), ServerIp = con.ConnectSocket.LocalEndPoint.ToString(), ServerOutIp = SocketConnectionServerDispatcher.ServerOutIpEndPort }; var res = db.DeviceLogin(loginDto); //con.StateData.BoundList = res.UsrClients; var loginBk = new LoginBk { CmdCode = 0xFF02, Identity = loginInfo.Identity, ServerId = SocketConnectionServerDispatcher.ServerId, TimeToken = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), ResultCode = res.Res }; //TODO 根据链接的多个服务器返回新的上位机地址 con.Send(loginBk.ToByteArray()); SocketConnection.ShowMsg(loginBk.ToString()); //var appconfig = CommCode.AppSettings("gettuiappid", "gettuiappkey", "gettuimasterkey"); //if (con.StateData.BoundList == null) return; //foreach (var usrClient in con.StateData.BoundList) //{ // CommCode.GeTuiMsg("设备通知", "设备" + con.Identity + "上线", appconfig[0], appconfig[1], appconfig[2], usrClient.ClientId, null); //} }
WebRequest ConvertRequestToWebClient(IClientRequest request) { var webRequest = WebRequest.Create(request.Uri); webRequest.Method = request.HttpMethod; if (request.Entity.ContentType != null) webRequest.ContentType = request.Entity.ContentType.ToString(); if (request.Credentials != null) webRequest.Credentials = new NetworkCredential(request.Credentials.Username, request.Credentials.Password); foreach (var header in request.Headers) { try { webRequest.Headers[header.Key] = header.Value; } catch (ArgumentException) { } } if (request.Entity.ContentLength != null && request.Entity.ContentLength > 0) { webRequest.ContentLength = request.Entity.Stream.Length; var requestStream = webRequest.GetRequestStream(); request.Entity.Stream.Position = 0; request.Entity.Stream.CopyTo(requestStream); } return webRequest; }
WebRequest ConvertRequestToWebClient(IClientRequest request) { var webRequest = WebRequest.Create(request.Uri); webRequest.Method = request.HttpMethod; if (request.Entity.ContentType != null) { webRequest.ContentType = request.Entity.ContentType.ToString(); } if (request.Credentials != null) { webRequest.Credentials = new NetworkCredential(request.Credentials.Username, request.Credentials.Password); } foreach (var header in request.Headers) { try { webRequest.Headers[header.Key] = header.Value; } catch (ArgumentException) { } } if (request.Entity.ContentLength != null && request.Entity.ContentLength > 0) { webRequest.ContentLength = request.Entity.Stream.Length; var requestStream = webRequest.GetRequestStream(); request.Entity.Stream.Position = 0; request.Entity.Stream.CopyTo(requestStream); } return(webRequest); }
public bool Validate(string ApiName, IClientRequest request) { try { lock (_writelock) { _requestsLog.Add(request); } var rulesToApply = ApiAndRulesMap[ApiName]; foreach (var rule in rulesToApply) { if (!rule.Validate(request, this)) { return(false); } } return(true); } catch (Exception ex) { return(false); // Log/Manage exception } }
/// <summary> /// </summary> /// <param name="request"></param> /// <param name="response"></param> public void Process(IClientRequest request, IServerResponse response) { string[] clientMessage = Encoding.Default.GetString(request.Read()).TrimEnd('\0').Split(' '); if (clientMessage.Length == 1 && clientMessage[0] != "BYE") { response.Write("-Error Unknown Command"); return; } Debug.WriteLine("Message received by mock server: " + clientMessage[0] + " " + (clientMessage.Length == 2 ? clientMessage[1] : string.Empty)); switch (clientMessage[0]) { case "CONN": response.Write(string.Format("+OK Hello {0}", clientMessage[1])); break; case "MESG": MessageCount++; response.Write("+OK Msg Received"); OnMessageReceived(new MessageReceivedEventArgs(clientMessage[1])); break; case "BYE": response.Write("+OK GoodBye"); response.EndConnection = true; break; } }
/// <summary> /// Processes a client request. /// </summary> /// <param name="request"></param> /// <param name="response"></param> public void Process(IClientRequest request, IServerResponse response) { Argument.Assert.IsNotNull(request, "request"); Argument.Assert.IsNotNull(response, "response"); string[] commandArgs = Encoding.Default.GetString(request.Read()).Split(' '); ProcessCommand(commandArgs, response); }
public static byte[] GetBytes(IClientRequest response) { using (MemoryStream stream = new MemoryStream()) { response.WriteTo(stream); return(stream.ToArray()); } }
public void ProcessReqest(Waring waringInfo, SocketConnection con, IClientRequest db) { var fbdb = db as StreetLightPersistence; if (fbdb == null) { return; } var comBk = new CmdHeader { CmdCode = 0xFF0F, Identity = waringInfo.Identity, ResultCode = fbdb.AddWaringMessage(new DtoWaring { ImeiNo = waringInfo.Identity, ImeiLightNo = waringInfo.LightNo, WaringCode = waringInfo.WaringCode, WaringMessage = waringInfo.WaringDesc, ImeiWaringMsgContent = JsonConvert.SerializeObject(waringInfo) }), ServerId = SocketConnectionServerDispatcher.ServerId, //TimeToken = waringInfo.TimeToken }; con.Send(comBk.ToByteArray()); switch (waringInfo.WaringCode) { case "0001": //设置门未开报警 break; } SocketConnection.ShowMsg(waringInfo.ToString()); //if (con.StateData?.BoundList == null) return; //foreach (var usr in con.StateData.BoundList) //{ // //if (string.IsNullOrWhiteSpace(usr.ClientId) || usr.ClientId.Equals("null")) continue; // //var res = CommCode.GeTuiMsg("设备报警", $"设备{waringInfo.Identity}发生警报,{waringInfo.WaringDesc}", _gettuiappid, _gettuiappkey, _gettuimasterkey, usr.ClientId, null); // //SocketConnection.ShowMsg(res); // #region 直接发送异常信息 // //SocketConnection clientSkt; // //if (SocketConnectionServerDispatcher.DicSockectConnection.TryGetValue(usr, out clientSkt) && clientSkt.ConnectSocket.Connected) // //{ // // var waringBk = new WaringBkPb // // { // // CmdCode = "FF06", // // Identity = usr, // // OppositeId = con.Identity, // // ResultCode = dealRes.res, // // ServerId = SocketConnectionServerDispatcher.ServerId, // // TimeToken = waringInfo.TimeToken, // // WaringCode = waringInfo.WaringCode, // // WaringDesc = waringInfo.WaringDesc // // }; // // clientSkt.Send(waringBk.ToByteArray()); // //} // #endregion //} }
public int ApiFunction2(IClientRequest request) { if (!_rate_limiter_service.Validate("ApiFunction2", request)) { return(-1); } return(200); }
public void CreateFolder(IClientRequest request) { NewName input = request.GetInput <NewName>(); try { FolderCreator.Create(input); } catch { } }
public IResponse ExecuteRequest(IClientRequest request) { if (request.Entity.Stream.Length > 0) request.Entity.Stream.Position = 0; var response = _host.ProcessRequest(request); if (response.StatusCode == 303) response = RedirectOn303SeeOther(response); else if (response.StatusCode == 401) response = RetryWithHttpAuthenticationCredentials(request, response); if (response.Entity.ContentLength > 0 && response.Entity.Stream.CanSeek) response.Entity.Stream.Position = 0; return response; }
public virtual async Task AuthenticateAsync(IClientRequest request, CancellationToken token = default) { var oAuthToken = await GetTokenAsync(token).ConfigureAwait(false); if (string.IsNullOrWhiteSpace(oAuthToken)) { if (Options.ThrowIfNoToken) { throw new NoTokenException("No token could be found in any stores"); } return; } request.AddHeader("Authorization", "Bearer " + oAuthToken); }
/// <summary> /// This will be called before a client Interface gets called. /// </summary> /// <param name="stream"></param> /// <returns></returns> public bool ProessRequest(NetworkStream stream) { try { BinaryBuffer buff = new BinaryBuffer(Database.ReadBuffer(stream)); buff.BeginRead(); int count = buff.ReadInt(); BinaryBuffer writeBuff = new BinaryBuffer(); writeBuff.BeginWrite(); for (int i = 0; i < count; i++) { IClientRequest Request = CurrentServer.GetRequest(buff.ReadByte()); // if a IClientRequest to close. we need to handle by not reading and writing back! if (!this.TcpConnection.Connected) { return(false); } byte[] data = buff.ReadByteArray(buff.ReadInt()); if (Request != null) { data = Request.Process(new BinaryBuffer(data), this); writeBuff.Write(data.Length); writeBuff.Write(data); } else { writeBuff.Write(0); // length; } } writeBuff.EndWrite(); Database.WriteBuffer(writeBuff.ByteBuffer, stream); return(true); } catch (Exception) { } return(false); }
public IResponse ExecuteRequest(IClientRequest request) { var webRequest = ConvertRequestToWebClient(request); HttpWebResponse response; try { response = webRequest.GetResponse() as HttpWebResponse; } catch (WebException exception) { response = exception.Response as HttpWebResponse; if (response == null) throw; } return new WebRequestResponse(response); }
public HttpResponseMessage Post(IClientRequest postRequest) { var client = new HttpClient(); if (postRequest.RequestHeaders != null && postRequest.RequestHeaders.Any()) { client.DefaultRequestHeaders.Clear(); foreach (var header in postRequest.RequestHeaders) { client.DefaultRequestHeaders.Add(header.Key, header.Value); } } var request = new HttpRequestMessage(HttpMethod.Post, postRequest.RequestUri) { Content = new StringContent(postRequest.RequestBody, Encoding.UTF8, "application/x-www-form-urlencoded") }; return client.PostAsync(postRequest.RequestUri, request.Content).Result; }
public IResponse ExecuteRequest(IClientRequest request) { var webRequest = ConvertRequestToWebClient(request); HttpWebResponse response; try { response = webRequest.GetResponse() as HttpWebResponse; } catch (WebException exception) { response = exception.Response as HttpWebResponse; if (response == null) { throw; } } return(new WebRequestResponse(response)); }
IResponse RetryWithHttpAuthenticationCredentials(IClientRequest request, IResponse response) { if (response.Headers["WWW-Authenticate"] != null && response.Headers["WWW-Authenticate"].Contains("Digest")) { var responseDigest = DigestHeader.Parse(response.Headers["WWW-Authenticate"]); var header = new OpenRasta.Security.DigestHeader(responseDigest) { Username = request.Credentials.Username, Password = request.Credentials.Password, Nonce = responseDigest.Nonce, ClientNonce = "none", Uri = request.Uri.GetLeftPart(UriPartial.Path) }; header.Response = header.GetCalculatedResponse(request.HttpMethod); request.Headers["Authorization"] = header.ClientRequestHeader; return(_host.ProcessRequest(request)); } return(response); }
IResponse RetryWithHttpAuthenticationCredentials(IClientRequest request, IResponse response) { if (response.Headers["WWW-Authenticate"] != null && response.Headers["WWW-Authenticate"].Contains("Digest")) { var responseDigest = DigestHeader.Parse(response.Headers["WWW-Authenticate"]); var header = new DigestHeader(responseDigest) { Username = request.Credentials.Username, Password = request.Credentials.Password, Nonce = responseDigest.Nonce, ClientNonce = "none", Uri = request.Uri.GetLeftPart(UriPartial.Path) }; header.Response = header.GetCalculatedResponse(request.HttpMethod); request.Headers["Authorization"] = header.ClientRequestHeader; return _host.ProcessRequest(request); } return response; }
public bool Validate(IClientRequest request, IRateLimiterManager rate_limiter) { try { if (RulesSettings.MaxRequestsLimit == -1) { return(true); // settings are not initiated == no limit. } if (rate_limiter.RequestsLog.Count(l => l.Token.Equals(request.Token) && l.CallDateTimeStamp >= DateTime.Now - RulesSettings.TimeSpanLimit) > RulesSettings.MaxRequestsLimit) { return(false); } return(true); } catch (Exception ex) { return(false); // Log/Manage exception } }
public IResponse ExecuteRequest(IClientRequest request) { if (request.Entity.Stream.Length > 0) { request.Entity.Stream.Position = 0; } var response = _host.ProcessRequest(request); if (response.StatusCode == 303) { response = RedirectOn303SeeOther(response); } else if (response.StatusCode == 401) { response = RetryWithHttpAuthenticationCredentials(request, response); } if (response.Entity.ContentLength > 0 && response.Entity.Stream.CanSeek) { response.Entity.Stream.Position = 0; } return(response); }
IClientResponse Execute(IClientRequest request) { MemoryResource resource; if (!Resources.TryGetValue(request.RequestUri, out resource)) { return(new MemoryResponse { Status = new HttpStatus(404, "Nout found"), Headers = { { "Content-Length", "0" } } }); } Func <IClientRequest, IClientResponse> methodHandler; if (!resource.Operations.TryGetValue(request.Method, out methodHandler)) { return(new MemoryResponse { Status = new HttpStatus(405, "Method not allowed"), Headers = { { "Content-Length", "0" } } }); } if ( resource.Username != null && resource.Password != null && (request.Credentials == null || resource.Username != request.Credentials.UserName || resource.Password != request.Credentials.Password)) { return(new MemoryResponse { Status = new HttpStatus(401, "Unauthorized"), Headers = { { "Content-Length", "0" } } }); } return(methodHandler(request)); }
// per specification: allow request only if a certain timespan passed since the last call per user (token) public bool Validate(IClientRequest request, IRateLimiterManager rate_limiter) { try { if (RulesSettings.TimeSpanLimit.Equals(new TimeSpan(0, 0, 0, 0, 0))) // setting is not enabled { return(true); } DateTime lastcall = rate_limiter.RequestsLog.Where(l => l.Token.Equals(request.Token)).Max(l => l.CallDateTimeStamp); if (lastcall != null && lastcall > DateTime.Now - RulesSettings.TimeSpanLimit) { return(false); } return(true); } catch (Exception ex) { return(false); // Log/Manage exception } }
/// <summary> /// 处理用户单点登录 /// </summary> /// <param name="clientInfo"></param> /// <param name="con"></param> /// <param name="db"></param> public void ProcessReqest(ClientLogin clientInfo, SocketConnection con, IClientRequest db) { con.Identity = clientInfo.Identity; con.PhoneMac = clientInfo.PhoneMac; SocketConnection oldSocket; var loginBk = new LoginBk { CmdCode = 0xFF02, Identity = clientInfo.Identity, ServerId = SocketConnectionServerDispatcher.ServerId, //TimeToken = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), ResultCode = 1 }; con.Send(loginBk.ToByteArray()); if (SocketConnectionServerDispatcher.DicSockectConnection.TryGetValue(clientInfo.Identity, out oldSocket) && !oldSocket.PhoneMac.Equals(con.PhoneMac)) { loginBk.ResultCode = 4; oldSocket.Send(loginBk.ToByteArray()); //返回处理结果 } SocketConnectionServerDispatcher.DicSockectConnection.AddOrUpdate(clientInfo.Identity, con, (key, old) => con); SocketConnection.ShowMsg(clientInfo.ToString()); }
static IClientResponse DefaultNotFoundResponse(IClientRequest request) { return new MemoryResponse { Status = new HttpStatus(404, "Not found"), Headers = { { "Content-Length", "0" } } }; }
public ClientRequestController(IClientRequest iClientRequest) { this._iClientRequest = iClientRequest; }
public static IClientRequest Handle(this IClientRequest request, Action <IClientResponse> response) { return(request.Handle(_ => true, response)); }
public Task AuthenticateAsync(IClientRequest request, CancellationToken token = default) { request.AddHeader(_key, _value); return(Task.CompletedTask); }
public static IClientRequest Handle(this IClientRequest request, Func <IClientResponse, bool> predicate, Action <IClientResponse> response) { request.RegisterHandler(predicate, response); return(request); }
public bool Validate(IClientRequest request, IRateLimiterManager rate_limiter) { return(request.GeoLocation == GeoLocation.US ? new RequestsPerTimespanLimit().Validate(request, rate_limiter) : new TimespanSinceLastCallLimit().Validate(request, rate_limiter)); }
public Task AuthenticateAsync(IClientRequest request, CancellationToken token = default) { request.AddHeader("Authorization", $"Basic {_encoded}"); return(Task.CompletedTask); }
/// <summary> /// 处理设备上报状态 /// </summary> /// <param name="statusInfo"></param> /// <param name="con"></param> /// <param name="db"></param> public void ProcessReqest(DeviceStatus statusInfo, SocketConnection con, IClientRequest db) { if (!string.IsNullOrWhiteSpace(statusInfo.OppositeId)) {//立即返回当前设备状态 SocketConnection client; if (SocketConnectionServerDispatcher.DicSockectConnection.TryGetValue(statusInfo.OppositeId, out client) && client.ConnectSocket.Connected) { client.Send(statusInfo.ToByteArray()); } } var statusBk = new CmdHeader { CmdCode = 0xFF03, Identity = con.Identity, ServerId = SocketConnectionServerDispatcher.ServerId, //TimeToken = statusInfo.TimeToken, }; if (statusInfo.LightStatus == null) { statusBk.ResultCode = 0; con.Send(statusBk.ToByteArray()); return; } var deviceStatus = new DtoStatusInfo { ImeiNo = statusInfo.Identity, LightStatus = new DtoLightStatus() { lightstatus = statusInfo.LightStatus.Status, CellAddr = statusInfo.LightStatus.CellAddr, lightBt = statusInfo.LightStatus.LightBt, lightBu = statusInfo.LightStatus.LightBu, lightLi = statusInfo.LightStatus.LightLi, lightLu = statusInfo.LightStatus.LightLu, lightPw = statusInfo.LightStatus.LightPw, lightUi = statusInfo.LightStatus.LightUi, lightUu = statusInfo.LightStatus.LightUu, lightBgu = JsonConvert.SerializeObject(statusInfo.LightStatus.LightBgus) } }; //foreach (var l in statusInfo.LightStatus) //{ // deviceStatus.LightStatus.Add(new DtoLightStatus // { // lightstatus = l.Status, // CellAddr = l.CellAddr, // //lightNo = l.LightNo, // lightBt = l.LightBt, // lightBu = l.LightBu, // lightLi = l.LightLi, // lightLu = l.LightLu, // lightPw = l.LightPw, // lightUi = l.LightUi, // lightUu = l.LightUu, // lightBgu = JsonConvert.SerializeObject(l.LightBgus) // }); //} statusBk.ResultCode = db.DeviceStatusInfo(deviceStatus); con.Send(statusBk.ToByteArray()); SocketConnection.ShowMsg(statusInfo.ToString()); }
public static IClientRequest Handle(this IClientRequest request, int statusCode, Action <IClientResponse> response) { return(request.Handle(_ => _.Status.Code == statusCode, response)); }
public MailSender(IClientRequest smtpRequest) { _smtpRequest = smtpRequest; }