public byte[] Encode(SubtConnectedPeerStream connectedStream) { var ms = new MemoryStream(); using (var writer = new BinaryWriter(ms)) { ExtensionProcedures.InitializeExtensionSignalingPacket(writer, connectedStream.SubtLocalPeer.LocalPeer.LocalPeerId, connectedStream.SubtConnectedPeer.RemotePeerId, connectedStream.StreamId, connectedStream.SubtLocalPeer.ExtensionId); writer.Write((byte)SubtPacketType.RemoteStatus); writer.Write(RecentRxBandwidth); writer.Write(RecentRxPacketLoss); writer.Write(RecentTxBandwidth); byte flags = 0; if (IwantToIncreaseBandwidthUntilHighPacketLoss) { flags |= 0x01; } if (IhavePassiveRole) { flags |= 0x02; } writer.Write(flags); } return(ms.ToArray()); }
internal void ProcessReceivedExtensionSignalingPacket(BinaryReader reader, IPEndPoint remoteEndpoint) { // enqueue into manager thread // reduce load of the receiver thread _actionsQueue.Enqueue(() => { (var fromPeerId, var toPeerId, var streamId, var extensionId) = ExtensionProcedures.ParseExtensionSignalingPacket(reader); if (_localPeer.LocalPeerId.Equals(toPeerId) == false) { _localPeer.Firewall.OnUnauthenticatedReceivedPacket(remoteEndpoint); return; } if (fromPeerId == null || !_connectedPeers.TryGetValue(fromPeerId, out var connectedPeer)) { _localPeer.Firewall.OnUnauthenticatedReceivedPacket(remoteEndpoint); return; } if (!connectedPeer.Streams.TryGetValue(streamId, out var stream)) { _localPeer.Firewall.OnUnauthenticatedReceivedPacket(remoteEndpoint); return; } if (_localPeer.ExtensionsById.TryGetValue(extensionId, out var extension)) { if (stream.Extensions.TryGetValue(extension, out var streamExtension)) { streamExtension.OnReceivedSignalingPacket(reader); } } }, "ProcessReceivedExtensionSignalingPacket3458"); }
void InitializePayloadPacket() { _payloadPacket = new byte[LocalLogicConfiguration.UdpMaxPacketSizeWithoutHeadersBytes]; var rnd = new Random(); rnd.NextBytes(_payloadPacket); _payloadPacketIndex = ExtensionProcedures.InitializePayloadPacketForExtension(PacketHeaders.SubtPayload, _payloadPacket, _stream.StreamId); }
public byte[] Encode(SubtConnectedPeerStream connectedStream) { PacketProcedures.CreateBinaryWriter(out var ms, out var writer); ExtensionProcedures.InitializeExtensionSignalingPacket(writer, connectedStream.SubtLocalPeer.LocalPeer.LocalPeerId, connectedStream.SubtConnectedPeer.RemotePeerId, connectedStream.StreamId, connectedStream.SubtLocalPeer.ExtensionId); writer.Write((byte)SubtPacketType.AdjustmentResponse); byte flags = 0; // not used now writer.Write(flags); writer.Write(TxTargetBandwidth); return(ms.ToArray()); }
public byte[] Encode(SubtConnectedPeerStream connectedStream) { PacketProcedures.CreateBinaryWriter(out var ms, out var writer); ExtensionProcedures.InitializeExtensionSignalingPacket(writer, connectedStream.SubtLocalPeer.LocalPeer.LocalPeerId, connectedStream.SubtConnectedPeer.RemotePeerId, connectedStream.StreamId, connectedStream.SubtLocalPeer.ExtensionId); writer.Write((byte)SubtPacketType.RemoteStatus); writer.Write(RecentRxBandwidth); writer.Write(RecentRxPacketLoss); writer.Write(RecentTxBandwidth); byte flags = 0; if (IhavePassiveRole) { flags |= 0x02; } if (ImHealthyAndReadyFor100kbpsU2uSymbiosis) { flags |= 0x04; } writer.Write(flags); return(ms.ToArray()); }
void ThreadEntry() { IPEndPoint remoteEndpoint = default(IPEndPoint); while (!_disposing) { try { _actionsQueue.ExecuteQueued(); var udpData = UdpSocket.Receive(ref remoteEndpoint); var timestamp32 = _localPeer.Time32; if (_previousTimestamp32.HasValue) { var timePassed32 = unchecked (timestamp32 - _previousTimestamp32.Value); _pps.Input(1, timePassed32); _bps.Input((udpData.Length + LocalLogicConfiguration.IpAndUdpHeadersSizeBytes) * 8, timePassed32); } _previousTimestamp32 = timestamp32; var manager = _localPeer.Manager; if (manager != null && _localPeer.Firewall.PacketIsAllowed(remoteEndpoint) && udpData.Length > 4) { if (udpData[0] == (byte)PacketTypes.NatTest1Request) { manager.ProcessReceivedNat1TestRequest(this, udpData, remoteEndpoint); return; } var packetType = P2ptpCommon.DecodeHeader(udpData); if (packetType.HasValue) { switch (packetType.Value) { case PacketTypes.hello: manager.ProcessReceivedHello(udpData, remoteEndpoint, this, timestamp32); break; case PacketTypes.peersListIpv4: manager.ProcessReceivedSharedPeers(udpData, remoteEndpoint); break; case PacketTypes.extensionSignaling: manager.ProcessReceivedExtensionSignalingPacket(BinaryProcedures.CreateBinaryReader(udpData, P2ptpCommon.HeaderSize), remoteEndpoint); break; } } else { (var extension, var streamId, var index) = ExtensionProcedures.ParseReceivedExtensionPayloadPacket(udpData, _localPeer.Configuration.Extensions); if (extension != null) { if (_streams.TryGetValue(streamId, out var stream)) { stream.Extensions.TryGetValue(extension, out var streamExtension); streamExtension.OnReceivedPayloadPacket(udpData, index); } //else _localPeer.WriteToLog(LogModules.Receiver, $"receiver {SocketInfo} got packet from bad stream id {streamId}"); } } } } // catch (InvalidOperationException) // {// intentionally ignored (before "connection") // } catch (SocketException exc) { if (_disposing) { return; } if (exc.ErrorCode != 10054) // forcibly closed - ICMP port unreachable - it is normal when peer gets down { _localPeer.HandleException(LogModules.Receiver, exc); } // else ignore it } catch (Exception exc) { _localPeer.HandleException(LogModules.Receiver, exc); } } }
private void showPawnLoanData() { if (currIndex >= 0) { var pl = selectedLoans[currIndex]; siteID = new SiteId { Alias = GlobalDataAccessor.Instance.CurrentSiteId.Alias, Company = GlobalDataAccessor.Instance.CurrentSiteId.Company, Date = ShopDateTime.Instance.ShopDate, LoanAmount = pl.Amount, State = pl.OrgShopState, StoreNumber = pl.OrgShopNumber, TerminalId = GlobalDataAccessor.Instance.CurrentSiteId.TerminalId }; var businessRulesProcedures = new BusinessRulesProcedures(DS); partialPaymentAllowed = businessRulesProcedures.IsPartialPaymentAllowed(siteID); var partialPaymentInLastMonth = pl.PartialPayments.Any(pp => pp.Date_Made > pl.PfiNote && pp.Date_Made < pl.PfiEligible); var allowFutureInterestPayments = businessRulesProcedures.AllowFutureInterestPayments(siteID); var storageFee = businessRulesProcedures.GetStorageFee(siteID); labelLoanNumber.Text = pl.TicketNumber.ToString(); labelCurrDueDate.Text = pl.DueDate.FormatDate(); DateTime PartialPmtDate = DateTime.MaxValue; if (pl.PartialPaymentPaid) { Common.Libraries.Objects.Pawn.PartialPayment pmt = pl.PartialPayments.OrderByDescending(pp => pp.Time_Made).FirstOrDefault(); PartialPmtDate = pmt.Date_Made; interestAmount = pmt.CUR_FIN_CHG; serviceAmount = pmt.Cur_Srv_Chg; } else { interestAmount = pl.InterestAmount; serviceAmount = pl.ServiceCharge; } if (partialPaymentAllowed && _extensionType != ExtensionTerms.DAILY) { ExtensionProcedures.GetExtensionPeriod(PartialPmtDate, pl.DateMade, ShopDateTime.Instance.ShopDate, pl.DueDate, pl.PfiNote, pl.PfiEligible, pl.ExtensionType, out daysToPay, out monthsToPay, out LastCycleEnd); } else { pl.ExtensionType = _extensionType; //daysToPay = 30; } int daysToAdd; decimal amountToExtend; dailyAmount = ServiceLoanProcedures.GetDailyAmount(pl.ExtensionType, interestAmount, serviceAmount); if (pl.ExtensionType == ExtensionTerms.MONTHLY) { customTextBoxNumDaystoExtend.Visible = false; ddlNumDaystoExtend.Visible = true; suppressDaysChangedEvent = true; for (int i = 1; i <= monthsToPay; i++) { ddlNumDaystoExtend.Items.Add(i.ToString()); } if (ddlNumDaystoExtend.Items.Count > 0) { ddlNumDaystoExtend.SelectedIndex = 0; } suppressDaysChangedEvent = false; customTextBoxAmtToExtend.Visible = false; lblAmtToExtend.Visible = true; int monthsToExtendBy = 1; if (partialPaymentAllowed && pl.PartialPaymentPaid) { monthsToExtendBy = GetDaysToExtendFromUI() - 1; amountToExtend = (monthsToExtendBy * dailyAmount) + (daysToPay * interestAmount / 30) + (daysToPay * serviceAmount / 30); } else { monthsToExtendBy = GetDaysToExtendFromUI(); amountToExtend = monthsToExtendBy * dailyAmount; } lblAmtToExtend.Text = amountToExtend.ToString("f2"); this.ActiveControl = this.ddlNumDaystoExtend; var pfiDateAdjusted = false; labelAdjustedDueDate.Text = new BusinessRulesProcedures(DS).GetValidDueDate(pl.DueDate.AddMonths(Utilities.GetIntegerValue(ddlNumDaystoExtend.Text, 1)), siteID); dateCalendarLastPickupDate.SelectedDate = new BusinessRulesProcedures(GlobalDataAccessor.Instance.DesktopSession).GetValidPFIDate( pl.PfiEligible.AddMonths(Utilities.GetIntegerValue(ddlNumDaystoExtend.Text, 1)), siteID, ref pfiDateAdjusted); dateCalendarLastPickupDate.Enabled = false; } else { customTextBoxNumDaystoExtend.Visible = true; ddlNumDaystoExtend.Visible = false; customTextBoxNumDaystoExtend.Text = "30"; labelNumDaysToExtendHeading.Visible = true; customTextBoxAmtToExtend.Visible = true; lblAmtToExtend.Visible = false; SetAmountToExtendToUI(ServiceLoanProcedures.GetAmountToExtend(GetDaysToExtendFromUI(), dailyAmount)); daysToAdd = GetDaysToExtendFromUI(); this.ActiveControl = this.customTextBoxNumDaystoExtend; var pfiDateAdjusted = false; labelDailyAmtHeading.Text = "Daily Amount:"; if (partialPaymentAllowed && pl.PartialPaymentPaid && !allowFutureInterestPayments) { labelNumDaysToExtendHeading.Text = "One Month's Full Charge"; //customTextBoxNumDaystoExtend.Visible = false; ddlNumDaystoExtend.Visible = false; lblNumDaysToExtend.Visible = true; //customTextBoxAmtToExtend.Visible = false; lblAmtToExtend.Visible = false; //lblNumDaysToExtend.Text = fullMonth; customTextBoxAmtToExtend.Visible = true; customTextBoxAmtToExtend.Text = (daysToPay * dailyAmount).ToString("f2"); customTextBoxNumDaystoExtend.Text = (interestAmount + serviceAmount).ToString("f2"); labelAdjustedDueDate.Text = new BusinessRulesProcedures(DS).GetValidDueDate(LastCycleEnd.AddMonths(1), siteID); dateCalendarLastPickupDate.SelectedDate = new BusinessRulesProcedures(GlobalDataAccessor.Instance.DesktopSession).GetValidPFIDate( pl.PfiEligible.AddMonths(1), siteID, ref pfiDateAdjusted); dateCalendarLastPickupDate.Enabled = false; customTextBoxAmtToExtend.Enabled = false; customTextBoxNumDaystoExtend.Enabled = false; } else { labelAdjustedDueDate.Text = new BusinessRulesProcedures(DS).GetValidDueDate(pl.DueDate.AddDays(daysToAdd), siteID); dateCalendarLastPickupDate.SelectedDate = new BusinessRulesProcedures(GlobalDataAccessor.Instance.DesktopSession).GetValidPFIDate( pl.PfiEligible.AddDays(daysToAdd), siteID, ref pfiDateAdjusted); } } lblNumDaysToExtend.Visible = false; labelDailyAmount.Text = String.Format("{0:0.0000}", dailyAmount); daysToExtend = GetDaysToExtendFromUI(); AmtToExtend = GetAmountToExtendFromUI(); newPickupDate = dateCalendarLastPickupDate.SelectedDate; labelLoanSelection.Text = (this.currIndex + 1) + " of " + this.numberOfLoansToExtend; //} currentPFIDate = pl.PfiEligible; //Show the selection for printing memo of extension in single page //if this is the last loan to be processed if (currIndex + 1 == numberOfLoansToExtend) { //Check if there are any service loans set for extension already var idx = GlobalDataAccessor.Instance.DesktopSession.ServiceLoans.FindIndex(ploan => ploan.TempStatus == StateStatus.E); if (new BusinessRulesProcedures(GlobalDataAccessor.Instance.DesktopSession).PrintMultipleMemoOfExtension(siteID) && (numberOfLoansToExtend > 1 || idx >= 0) && !GlobalDataAccessor.Instance.DesktopSession.PrintSingleMemoOfExtension) { this.checkBoxPrintSingleMemoForExtn.Visible = true; } this.customButtonContinue.Text = "Submit"; } if (numberOfLoansToExtend == 1) { this.customButtonSkip.Visible = false; } } }