Example #1
0
            private void CheckRcn()
            {
                if (!Callsign.IsJACallsign(log.Callsign))
                {
                    log.Point = 0;
                    ErrorReason.Set(listErr, Reason.OmakuniNonJA.ToString());
                    return;
                }
                if (Contestno.HasPower(log.ReceivedCn) == false)
                {
                    ErrorReason.Set(listErr, Reason.InvalidReceivedCn.ToString());
                }

                var hasStroke     = Callsign.HasStroke(log.Callsign);
                var areano        = Contestno.GetAreano(log);
                var stationAreano = Areano.GetNoFromStation(station, SubSelecter ? listMainArea : listSubArea);
                var suggests      = Areano.GetSuggestFromStation(station, SubSelecter ? listMainArea : listSubArea);

                if (!Freq.IsBeen(log.Freq))
                {
                    ErrorReason.Set(listErr, Reason.InvalidFreq.ToString());
                }
                if (Contestno.GetRegion(Contestno.GetPrefno(log, SubSelecter ? false : true)) != Callsign.GetRegion(log.Callsign, hasStroke))
                {
                    ErrorReason.Set(listErr, Reason.RegionUnmatches.ToString());
                }
                if (!Station.IsMatched(areano, stationAreano) && station != null && !hasStroke)
                {
                    ErrorReason.Set(listErr, Reason.AddressUnmatches.ToString(), Utils.ConvTostrarrFromList(suggests));
                }
                if (!Areano.IsBeen(SubSelecter ? listMainArea : listSubArea, areano))
                {
                    ErrorReason.Set(listErr, Reason.ReceivedCnUnexists.ToString(), Utils.ConvTostrarrFromList(Areano.GetFromList(Station.GetList(station), listMainArea)));
                }
            }
Example #2
0
        public bool ValidateConfiguration()
        {
            bool callsignValidity     = Callsign.VerifyCallsign();
            bool passwordValidity     = Helpers.VerifyPassword(Callsign, Password);
            bool checkSoftwareName    = SoftwareName.IndexOf(' ') > -1;
            bool checkSoftwareVersion = SoftwareVersion.IndexOf(' ') > -1;

            if (!callsignValidity)
            {
                Trace.TraceWarning($"{nameof(Callsign)} could not be validated, see http://www.aprs-is.net/Connecting.aspx for more information");
            }

            if (!passwordValidity)
            {
                Trace.TraceWarning($"{nameof(Password)} is not valid for given callsign. Please request a valid password with the software vendor in case you need write access to the APRS server.");
            }

            if (Password == "-1")
            {
                Trace.TraceWarning("APRS client is in readonly mode. Request a valid password in case you need write access to the APRS server");
            }

            if (!checkSoftwareName)
            {
                Trace.TraceWarning($"{nameof(SoftwareName)} contains a space.Spaces are illegal. Your mileage may vary now.");
            }

            if (!checkSoftwareVersion)
            {
                Trace.TraceWarning($"{nameof(SoftwareVersion)} contains a space. Spaces are illegal. Your mileage may vary now.");
            }

            return(callsignValidity && passwordValidity && checkSoftwareName && checkSoftwareVersion);
        }
Example #3
0
        public IActionResult Post()
        {
            using (var context = new DataAccess.UserDBContext())
            {
                string name = GetRandomName(false);

                while (!context.ValidAnonName(name))
                {
                    name = GetRandomName(true);
                }

                User usr = new User();
                usr.verification_token = "ANON";
                usr.email    = name.ToLowerInvariant();
                usr.enabled  = 1;
                usr.hash     = context.GenEmailToken();
                usr.verified = 0;

                context.users.Add(usr);
                context.SaveChanges();

                Callsign callsign = new Callsign();
                callsign.user    = usr;
                callsign.name    = name;
                callsign.enabled = 1;
                callsign.created = DateTime.Now;
                context.callsigns.Add(callsign);
                context.SaveChanges();

                return(Ok(new string[] { name, usr.hash }));
            }
        }
Example #4
0
        public async Task SetCallsingAsync(Callsign callsign, OnSetCallsignDelegate onSetCallsign)
        {
            _callsignToSet = callsign ?? throw new ArgumentNullException(nameof(callsign));
            _onSetCallsign = onSetCallsign ?? throw new ArgumentNullException(nameof(onSetCallsign));

            // Checking if callsign changed
            _getCodeCommand.SetResponseDelegate(OnGetCodeResponse_SetCallsignPathway);
            _getCodeCommand.SendGetCodeCommand();
        }
Example #5
0
        private void OnGetCodeResponse(FoxCode code)
        {
            _callsign = new Callsign()
            {
                Code = code
            };

            _getSpeedCommand.SetResponseDelegate(OnGetSpeedResponse);
            _getSpeedCommand.SendGetSpeedCommand();
        }
Example #6
0
        /// <summary>
        /// Creates from string.
        /// </summary>
        /// <param name="packet">The packet string.</param>
        /// <param name="destCall">The dest call.</param>
        /// <returns>AprsPacket</returns>
        /// <exception cref="HamAprsParser.Exceptions.AprsParserException">Unable to parse message payload in packet</exception>
        public static MessagePayload CreateFromString(string packet, Callsign destCall)
        {
            var result = Patterns.MessageRegex.Match(packet);

            if (!result.Success)
                throw new AprsParserException(packet, "Unable to parse message payload in packet");

            var payload = new MessagePayload(packet)
            {
                Type = PayloadType.Message,
                TargetCall =  new Callsign(result.Groups["target"].Value),
                MessageBody = result.Groups["content"].Value.TrimEnd(),
                MessageId = null
            };

            if (destCall.Base == "BEACON")
                payload.TargetCall = destCall;

            // Check for Ack type message
            result = Patterns.AckRegex.Match(payload.MessageBody);
            if (result.Success)
            {
                payload.IsAck = true;
                payload.MessageId = result.Groups["ack"].Value;
                payload.MessageBody = null;
                return payload;
            }

            // Check for Rej type message
            result = Patterns.RejRegex.Match(payload.MessageBody);
            if (result.Success)
            {
                payload.IsRej = true;
                payload.MessageId = result.Groups["rej"].Value;
                payload.MessageBody = null;
                return payload;
            }

            // Attempt to seperate id from message if present
            result = Patterns.MsgIdRegex.Match(payload.MessageBody);
            if (result.Success)
            {
                payload.MessageId = result.Groups["msgid"].Value;
                payload.MessageBody = result.Groups["msg"].Value.TrimEnd();
                return payload;
            }

            // Check for telemetry indicator
            result = Patterns.TelemetryRegex.Match(payload.MessageBody);
            if (result.Success)
                payload.Type = PayloadType.Telemetry;

            return payload;
        }
Example #7
0
            private void CheckRcn()
            {
                if (!Callsign.IsJACallsign(log.Callsign))
                {
                    log.Point = 0;
                    ErrorReason.Set(listErr, Reason.OmakuniNonJA.ToString());
                    return;
                }

                var  hasStroke     = Callsign.HasStroke(log.Callsign);
                var  areano        = Contestno.GetAreano(log);
                var  phoneRegion   = Contestno.GetPhoneRegion(areano, listMainArea);
                var  stationAreano = Areano.GetNoFromStation(station, listMainArea);
                var  suggests      = Areano.GetSuggestFromStation(station, listMainArea);
                char lrc           = log.ReceivedCn[log.ReceivedCn.Length - 1];

                if (lrc != 'N' && !('0' <= lrc && lrc <= '9'))
                {
                    ErrorReason.Set(listErr, ExtraReason.InvalidSignOfCn.ToString());
                    log.Point = 0;
                }

                if (!Freq.IsBeen(log.Freq))
                {
                    ErrorReason.Set(listErr, Reason.InvalidFreq.ToString());
                }
                if (phoneRegion == null)
                {
                    switch (areano)
                    {
                    case "050":
                    case "070":
                    case "080":
                    case "090":
                        break;

                    default:
                        ErrorReason.Set(listErr, Reason.ReceivedCnUnexists.ToString(), Utils.ConvTostrarrFromList(Areano.GetFromList(Station.GetList(station), listMainArea)));
                        break;
                    }
                }
                else
                {
                    if (!phoneRegion.Any(x => x == Callsign.GetRegion(log.Callsign, hasStroke)))
                    {
                        ErrorReason.Set(listErr, Reason.RegionUnmatches.ToString());
                    }
                    if (!Station.IsMatched(areano, stationAreano) && station != null && !hasStroke)
                    {
                        ErrorReason.Set(listErr, Reason.AddressUnmatches.ToString(), Utils.ConvTostrarrFromList(suggests));
                    }
                }
            }
Example #8
0
        /// <summary>
        /// See base docs.
        /// </summary>
        /// <param name="fetchedDetail"></param>
        /// <returns></returns>
        protected override CallsignRouteDetail DoFetchAircraft(AircraftFetcher <CallsignRouteFetcher.Key, CallsignRouteDetail> .FetchedDetail fetchedDetail)
        {
            var key    = fetchedDetail.Key;
            var detail = fetchedDetail.Detail;

            if (!String.IsNullOrEmpty(key.Icao24) && !String.IsNullOrEmpty(key.Callsign))
            {
                var callsignUsed = key.Callsign;
                var parsed       = new Callsign(callsignUsed);

                var airlines      = _StandingDataManager.FindAirlinesForCode(parsed.Code);
                var isPositioning = airlines.Any(r => r.IsPositioningFlightNumber(parsed.TrimmedNumber));
                var isCharter     = airlines.Any(r => r.IsCharterFlightNumber(parsed.TrimmedNumber));

                Route route = null;
                if (!isPositioning && !isCharter)
                {
                    var callsigns = _CallsignParser.GetAllRouteCallsigns(key.Callsign, key.OperatorIcao);
                    foreach (var callsign in callsigns)
                    {
                        callsignUsed = callsign;
                        route        = _StandingDataManager.FindRoute(callsignUsed);
                        if (route != null)
                        {
                            break;
                        }
                    }
                    if (route == null)
                    {
                        callsignUsed = key.Callsign;
                    }
                }

                detail = new CallsignRouteDetail()
                {
                    Callsign            = key.Callsign,
                    UsedCallsign        = callsignUsed,
                    Icao24              = key.Icao24,
                    Route               = route,
                    IsCharterFlight     = isCharter,
                    IsPositioningFlight = isPositioning,
                };

                OnFetched(new EventArgs <CallsignRouteDetail>(detail));
            }

            return(detail);
        }
Example #9
0
        public void Callsign_Ctor_Parses_Callsigns_Correctly()
        {
            var worksheet    = new ExcelWorksheetData(TestContext);
            var callsignText = worksheet.EString("Callsign");

            var callsign = new Callsign(callsignText);

            var message = $"Callsign is '{callsignText}'";

            Assert.AreEqual(worksheet.EString("OriginalCallsign"), callsign.OriginalCallsign, message);
            Assert.AreEqual(worksheet.EString("Code"), callsign.Code, message);
            Assert.AreEqual(worksheet.EString("Number"), callsign.Number, message);
            Assert.AreEqual(worksheet.EString("TrimmedNumber"), callsign.TrimmedNumber, message);
            Assert.AreEqual(worksheet.EString("TrimmedCallsign"), callsign.TrimmedCallsign, message);
            Assert.AreEqual(worksheet.Bool("IsOriginalCallsignValid"), callsign.IsOriginalCallsignValid, message);
        }
Example #10
0
            /// <summary>
            /// 記念局であるか確認 記念局リストに存在しないもしくは、存在しない局ならエラーリストに追加
            /// </summary>
            /// <param name="callsign">確認先コールサイン</param>
            /// <param name="anvStr">記念局リスト</param>
            /// <param name="listError">エラーリスト</param>
            /// <param name="station">無線局情報</param>
            public static void Check(string callsign, string anvStr, Dictionary <string, ErrorReason> listError, StationData station)
            {
                if (callsign[0] != '8' || callsign.Substring(0, 2) != "8J")
                {
                    return;
                }
                string cs = Callsign.GetRemovedStroke(callsign);

                if (!anvStr.Contains(cs))
                {
                    ErrorReason.Set(listError, Reason.AnvUnchecked.ToString());
                }
                if (station == null && callsign[0] != '8')
                {
                    ErrorReason.Set(listError, Reason.GetDataFailed.ToString());
                }
            }
Example #11
0
            private void CheckRcn()
            {
                if (!Callsign.IsJACallsign(log.Callsign))
                {
                    log.Point = 0;
                    ErrorReason.Set(listErr, Reason.OmakuniNonJA.ToString());
                    return;
                }
                if (Contestno.HasPower(log.ReceivedCn) == true)
                {
                    ErrorReason.Set(listErr, Reason.InvalidReceivedCn.ToString());
                }

                var prefno = Contestno.GetPrefno(log);

                if (prefno.Length > 3)
                {
                    prefno = prefno.Substring(0, 2);
                }
                if (config.CategoryCode[0] == 'X' && prefno != "11")
                {
                    ErrorReason.Set(listErr, ExtraReason.NotInKanagawa.ToString());
                    log.Point = 0;
                }
                var hasStroke     = Callsign.HasStroke(log.Callsign);
                var areano        = Contestno.GetAreano(log);
                var stationAreano = Areano.GetNoFromStation(station, listMainArea);
                var suggests      = Areano.GetSuggestFromStation(station, listMainArea);

                if (!Freq.IsBeen(log.Freq))
                {
                    ErrorReason.Set(listErr, Reason.InvalidFreq.ToString());
                }
                if (Contestno.GetRegion(prefno) != Callsign.GetRegion(log.Callsign, hasStroke))
                {
                    ErrorReason.Set(listErr, Reason.RegionUnmatches.ToString());
                }
                if (!Station.IsMatched(areano, stationAreano) && station != null && !hasStroke)
                {
                    ErrorReason.Set(listErr, Reason.AddressUnmatches.ToString(), Utils.ConvTostrarrFromList(suggests));
                }
                if (!Areano.IsBeen(listMainArea, areano))
                {
                    ErrorReason.Set(listErr, Reason.ReceivedCnUnexists.ToString(), Utils.ConvTostrarrFromList(Areano.GetFromList(Station.GetList(station), listMainArea)));
                }
            }
Example #12
0
        private void _setDefaultButton_Click(object sender, EventArgs e)
        {
            if (_callsignListView.SelectedItems.Count == 0)
            {
                return;
            }

            var li    = _callsignListView.SelectedItems[0];
            var alias = li.Tag as Callsign;

            //Overwrite the server's default callsign for this account locally
            if (alias != null)
            {
                Callsign.SetDefaultAlias(alias);

                LoadCallsigns(true);
            }
        }
Example #13
0
 public override int GetHashCode()
 {
     unchecked
     {
         return(base.GetHashCode()
                + (Callsign.ToUpper().GetHashCode() * 3)
                + (VID.ToUpper().GetHashCode() * 3)
                + (Name.ToUpper().GetHashCode() * 3)
                + (ClientType.GetHashCode() * 3)
                + (GetItemHashCode(Location) * 3)
                + (Server.ToUpper().GetHashCode() * 3)
                + (Protocol.ToUpper().GetHashCode() * 3)
                + (ConnectionTime.GetHashCode() * 3)
                + (SoftwareName.ToUpper().GetHashCode() * 3)
                + (SoftwareVersion.ToUpper().GetHashCode() * 3)
                + (AdministrativeVersion.GetHashCode() * 3)
                + (ClientRating.GetHashCode() * 3) * 17);
     }
 }
Example #14
0
            private void CheckRcn()
            {
                if (!Callsign.IsJACallsign(log.Callsign))
                {
                    log.Point = 0;
                    ErrorReason.Set(listErr, Reason.OmakuniNonJA.ToString());
                    return;
                }
                if (Contestno.HasPower(log.ReceivedCn) == true)
                {
                    ErrorReason.Set(listErr, Reason.InvalidReceivedCn.ToString());
                }

                //59##L
                var prefno = Contestno.GetPrefno(log, true);

                if (10 > int.Parse(prefno) || int.Parse(prefno) > 17)
                {
                    ErrorReason.Set(listErr, ExtraReason.NotInKanto.ToString());
                    log.Point = 0;
                }
                var hasStroke     = Callsign.HasStroke(log.Callsign);
                var areano        = Contestno.GetAreano(log);
                var stationAreano = Areano.GetNoFromStation(station, listMainArea);
                var suggests      = Areano.GetSuggestFromStation(station, listMainArea);

                if (!Freq.IsBeen(log.Freq))
                {
                    ErrorReason.Set(listErr, Reason.InvalidFreq.ToString());
                }
                if (Contestno.GetRegion(prefno) != Callsign.GetRegion(log.Callsign, hasStroke))
                {
                    ErrorReason.Set(listErr, Reason.RegionUnmatches.ToString());
                }
                if (!Station.IsMatched(areano, stationAreano) && station != null && !hasStroke)
                {
                    ErrorReason.Set(listErr, Reason.AddressUnmatches.ToString(), Utils.ConvTostrarrFromList(suggests));
                }
                if (!Areano.IsBeen(listMainArea, areano))
                {
                    ErrorReason.Set(listErr, Reason.ReceivedCnUnexists.ToString(), Utils.ConvTostrarrFromList(Areano.GetFromList(Station.GetList(station), listMainArea)));
                }
            }
Example #15
0
        /// <summary>
        /// Parses the specified MiCe payload bytes and destination call as position.
        /// </summary>
        /// <param name="payload">The payload.</param>
        /// <param name="destinationCall">The destination call.</param>
        /// <returns>PositionData.</returns>
        public static PositionData ParsePosition(string payload, Callsign destinationCall)
        {
            int posAmbiguity;
            float lat, lng;

            // Get latitude and position ambiguity followed by longitude
            GetLatitude(destinationCall.Base, out lat, out posAmbiguity);
            GetLongitude(destinationCall.Base, posAmbiguity, payload, out lng);

            // Return Position object
            return new PositionData
            {
                Latitude = lat,
                Longitude = lng,
                PositionAmbiguity = posAmbiguity,
                SymbolTable = payload[7],
                SymbolCode = payload[8],
                Source = PositionType.MicE
            };
        }
 public void ApplyStateVector(StateVector stateVector, long version)
 {
     lock (_SyncLock) {
         LastSeenInOpenSkyUtc = DateTime.UtcNow;
         Version = Math.Max(Version, Callsign.UpdateValue(stateVector.Callsign, version));
         Version = Math.Max(Version, OriginCountry.UpdateValue(stateVector.OriginCountry, version));
         Version = Math.Max(Version, LastPositionTime.UpdateValue(stateVector.TimeOfLastPosition, version));
         Version = Math.Max(Version, LastMessageTime.UpdateValue(stateVector.TimeOfLastMessage, version));
         Version = Math.Max(Version, Latitude.UpdateValue(stateVector.Latitude, version));
         Version = Math.Max(Version, Longitude.UpdateValue(stateVector.Longitude, version));
         Version = Math.Max(Version, AltitudeFeet.UpdateValue(stateVector.AltitudeFeet, version));
         Version = Math.Max(Version, OnGround.UpdateValue(stateVector.OnGround, version));
         Version = Math.Max(Version, GroundSpeedKnots.UpdateValue(stateVector.GroundSpeedKnots, version));
         Version = Math.Max(Version, Track.UpdateValue(stateVector.Track, version));
         Version = Math.Max(Version, VerticalRateFeetPerSecond.UpdateValue(stateVector.VerticalRateFeetPerSecond, version));
         Version = Math.Max(Version, Squawk.UpdateValue(stateVector.Squawk, version));
         Version = Math.Max(Version, SpecialPurposeIndicator.UpdateValue(stateVector.SpecialPurposeIndicator, version));
         Version = Math.Max(Version, PositionSource.UpdateValue(stateVector.PositionSource, version));
     }
 }
Example #17
0
        /// <summary>
        /// Creates from string.
        /// </summary>
        /// <param name="packet">The packet string.</param>
        /// <returns>AprsPacket</returns>
        /// <exception cref="AprsPacketException">Invalid packet format (regex failed)</exception>
        public static AprsPacket CreateFromString(string packet)
        {
            var result = Patterns.EnvelopeRegex.Match(packet);
            if (!result.Success)
                throw new AprsPacketException(packet, "Unable to parse APRS packet envelope");

            var source = new Callsign(result.Groups["source"].Value);
            var digis = result.Groups["dest"].Value.Split(',');
            var information = result.Groups["information"].Value;
            var dest = new Callsign(digis[0]);
            var payload = ParsePacketPayload(dest, information);

            return new AprsPacket
            {
                SourceCall = source,
                DestinationCall = dest,
                Digipeaters = digis,
                Payload = payload,
                Original = packet
            };
        }
Example #18
0
        internal void LoadCallsigns(bool reloadFromServer)
        {
            ACSSAuth.Client.Service.Callsign.RetrieveCallsignsCompleteDelegate signal = delegate(List <Callsign> callsigns, int availableAliasCount)
            {
                LoadCallsigns(callsigns);
                SetAvailableAliasControls(availableAliasCount);
                SetEnabled(true);
            };

            Callsign.RetrieveCallsigns(delegate(List <Callsign> callsigns, int availableAliasCount)
            {
                //Check if it is safe to interact with the form
                if (this.InvokeRequired)
                {
                    this.Invoke(signal, callsigns, availableAliasCount);
                }
                else
                {
                    signal(callsigns, availableAliasCount);
                }
            }, reloadFromServer);
        }
Example #19
0
        public LocationDesignator LocationFind(string call, string loc = "")
        {
            // check all parameters
            if (!Callsign.Check(call))
            {
                return(null);
            }
            if (!String.IsNullOrEmpty(loc) && !MaidenheadLocator.Check(loc))
            {
                return(null);
            }
            // get location info
            LocationDesignator ld = (String.IsNullOrEmpty(loc)) ? StationData.Database.LocationFind(call) : StationData.Database.LocationFind(call, loc);

            // return null if not found
            if (ld == null)
            {
                return(null);
            }
            // get elevation
            ld.Elevation         = GetElevation(ld.Lat, ld.Lon);
            ld.BestCaseElevation = false;
            // modify location in case of best case elevation is selected --> but do not store in database or settings!
            if (Properties.Settings.Default.Path_BestCaseElevation)
            {
                if (!MaidenheadLocator.IsPrecise(ld.Lat, ld.Lon, 3))
                {
                    ElvMinMaxInfo maxinfo = GetMinMaxElevationLoc(ld.Loc);
                    if (maxinfo != null)
                    {
                        ld.Lat               = maxinfo.MaxLat;
                        ld.Lon               = maxinfo.MaxLon;
                        ld.Elevation         = maxinfo.MaxElv;
                        ld.BestCaseElevation = true;
                    }
                }
            }
            return(ld);
        }
Example #20
0
        public List <LocationDesignator> LocationFindAll(string call)
        {
            // check all parameters
            if (!Callsign.Check(call))
            {
                return(null);
            }
            // get location info
            List <LocationDesignator> l = StationData.Database.LocationFindAll(call);

            // return null if not found
            if (l == null)
            {
                return(null);
            }
            foreach (LocationDesignator ld in l)
            {
                // get elevation
                ld.Elevation         = GetElevation(ld.Lat, ld.Lon);
                ld.BestCaseElevation = false;
                // modify location in case of best case elevation is selected --> but do not store in database or settings!
                if (Properties.Settings.Default.Path_BestCaseElevation)
                {
                    if (!MaidenheadLocator.IsPrecise(ld.Lat, ld.Lon, 3))
                    {
                        ElvMinMaxInfo maxinfo = GetMinMaxElevationLoc(ld.Loc);
                        if (maxinfo != null)
                        {
                            ld.Lat               = maxinfo.MaxLat;
                            ld.Lon               = maxinfo.MaxLon;
                            ld.Elevation         = maxinfo.MaxElv;
                            ld.BestCaseElevation = true;
                        }
                    }
                }
            }
            return(l);
        }
Example #21
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="callsign"></param>
        /// <returns></returns>
        public List <string> GetAllAlternateCallsigns(string callsign)
        {
            var result = new List <string>();

            if (!String.IsNullOrEmpty(callsign))
            {
                Initialise();
                result.Add(callsign);

                var parsed = new Callsign(callsign);
                if (parsed.IsOriginalCallsignValid)
                {
                    var processedCodes = new List <string>();
                    foreach (var airline in _StandingDataManager.FindAirlinesForCode(parsed.Code))
                    {
                        ProcessAlternateAirlineCode(callsign, result, parsed.TrimmedNumber, processedCodes, airline.IcaoCode);
                        ProcessAlternateAirlineCode(callsign, result, parsed.TrimmedNumber, processedCodes, airline.IataCode);
                    }
                }
            }

            return(result);
        }
Example #22
0
 private void gm_Callsign_MouseMove(object sender, MouseEventArgs e)
 {
     if ((UserPos != null) && IsDraggingMarker)
     {
         if (Callsign.Check(tb_Callsign.Text))
         {
             // get geographic coordinates of mouse pointer
             PointLatLng p = gm_Callsign.FromLocalToLatLng(e.X, e.Y);
             tb_Latitude.SilentValue  = p.Lat;
             tb_Longitude.SilentValue = p.Lng;
             UserPos.ToolTipMode      = MarkerTooltipMode.OnMouseOver;
             UserPos.ToolTipText      = tb_Callsign.Text;
             StationLocation.Lat      = p.Lat;
             StationLocation.Lon      = p.Lng;
             ValidateDetails();
         }
         else
         {
             UserPos.ToolTipMode = MarkerTooltipMode.OnMouseOver;
             UserPos.ToolTipText = "Please enter a valid callsign first.";
         }
     }
 }
Example #23
0
            public SearchData(string CallSign)
            {
                callsign = Callsign.GetRemovedStroke(CallSign);

                Condition = "GetFromDB";
                Station   = SearchDetailFromDB();
                if (Station != null)
                {
                    return;
                }

                Condition = "Failed to Get from DB, Try to Get from Web";
                Station   = GetTableData();
                if (Station == null)
                {
                    return;
                }
                Condition = "Existed at Web, Try to Get Details";
                System.Threading.Thread.Sleep(1000);

                Condition = "Succeeded!";
                InsertStationData(Station);
            }
Example #24
0
        private string DeliverQRV(string paramstr)
        {
            string json = "";
            // set default values
            string callstr = "";
            string locstr  = "";
            string bandstr = "";
            BAND   band    = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    callstr = pars.Get("CALL");
                    locstr  = pars.Get("LOC");
                    bandstr = pars.Get("BAND");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(callstr))
            {
                return("Error: " + callstr + " is not a valid callsign!");
            }
            if (!MaidenheadLocator.Check(locstr))
            {
                return("Error: " + locstr + " is not a valid Maidenhead locator!");
            }
            // set band to currently selected if empty
            if (string.IsNullOrEmpty(bandstr))
            {
                band = Properties.Settings.Default.Band;
            }
            else
            {
                band = Bands.ParseStringValue(bandstr);
            }
            if (band == BAND.BNONE)
            {
                return("Error: " + bandstr + " is not a valid band value!");
            }
            // search call in station database, return empty string if not found
            if (band != BAND.BALL)
            {
                QRVDesignator qrv = StationData.Database.QRVFind(callstr, locstr, band);
                if (qrv == null)
                {
                    return("Error: QRV info not found in database!");
                }
                json = qrv.ToJSON();
                return(json);
            }
            List <QRVDesignator> qrvs = StationData.Database.QRVFind(callstr, locstr);

            if ((qrvs == null) || (qrvs.Count() == 0))
            {
                return("Error: QRV info not found in database!");
            }
            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
            settings.FloatFormatHandling  = FloatFormatHandling.String;
            settings.Formatting           = Newtonsoft.Json.Formatting.Indented;
            json = JsonConvert.SerializeObject(qrvs, settings);
            return(json);
        }
Example #25
0
        private static Payload ParsePacketPayload(Callsign dest, string payload)
        {
            if (string.IsNullOrWhiteSpace(payload))
                throw new AprsParserException(payload, "Packet payload is empty");

            switch (payload[0])
            {
                case '`':  // Current Mic-E Data (not used in TM-D700)
                case '\'': // Old Mic-E Data (but current data for TM-D700)
                case '!':
                case '=':
                case '/':
                case '@':
                case '$':
                    var timestamp = (payload[0] == '/' || payload[0] == '@') ? TimestampParser.CreateFromString(payload) : null;
                    var position = PositionParser.CreateFromString(payload, dest);
                    var weather = WeatherParser.CreateFromString(payload);
                    // TODO: This should support compressed too! Move into PositionParser
                    var extension = UnCompressedPosition.ParseUnCompressedExtension(payload);

                    if (weather != null)
                    {
                        return new WeatherPayload(payload)
                        {
                            Timestamp = timestamp,
                            Position = position,
                            Weather = weather,
                            Extension = extension,
                            Comment = null // TODO
                        };
                    }

                    return new PositionPayload(payload)
                    {
                        Timestamp = timestamp,
                        Position = position,
                        Extension = extension,
                        Comment = null // TODO: Get comment from position packet
                    };

                case ':': // Message
                    return MessagePayload.Create(payload, dest);

                case ';': // Object
                    return ObjectParser.CreateFromString(payload);

                case '>': // Status
                    return new UnsupportedPayload(payload) { Type = PayloadType.Status };

                case '<': // Station Capabilities
                    return new UnsupportedPayload(payload) { Type = PayloadType.StationCapabilities };

                case '?': // Query
                    return new UnsupportedPayload(payload) { Type = PayloadType.Query };

                case ')': // Item
                    return ItemParser.CreateFromString(payload);

                //case 'T': // Telemetry
                //    return new UnsupportedPayload(payload) { Type = PayloadType.Telemetry };

                case '#': // Peet Bros U-II Weather Station
                case '*':
                    return new UnsupportedPayload(payload)
                    {
                        Type = PayloadType.Wx,
                        Comment = "Peet Bros U-II Weather Station"
                    };

                case '_': // Weather report without position
                    return WeatherPayload.Create(payload);

                case '{': // User Defined
                    return new UnsupportedPayload(payload) { Type = PayloadType.UserDefined };

                case '}': // 3rd-party
                    return new UnsupportedPayload(payload) { Type = PayloadType.Thirdparty };
            }

            return new UnsupportedPayload(payload) { Type = PayloadType.Unspecified };
        }
Example #26
0
        private string DeliverLocation(string paramstr)
        {
            string json = "";
            // set default values
            string callstr = "";
            string locstr  = "";

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    callstr = pars.Get("CALL");
                    locstr  = pars.Get("LOC");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(callstr))
            {
                return("Error: " + callstr + " is not a valid callsign!");
            }
            LocationDesignator ld = null;

            // locstr == null or empty --> return last recent location
            if (String.IsNullOrEmpty(locstr))
            {
                ld = LocationFind(callstr);
                if (ld == null)
                {
                    return("Error: Location not found in database!");
                }
                json = ld.ToJSON();
                return(json);
            }
            if (locstr == "ALL")
            {
                List <LocationDesignator> l = LocationFindAll(callstr);
                if (l == null)
                {
                    return("Error: Location not found in database!");
                }
                JsonSerializerSettings settings = new JsonSerializerSettings();
                settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
                settings.FloatFormatHandling  = FloatFormatHandling.String;
                settings.Formatting           = Newtonsoft.Json.Formatting.Indented;
                settings.Culture = CultureInfo.InvariantCulture;
                json             = JsonConvert.SerializeObject(l, settings);
                return(json);
            }
            if (!MaidenheadLocator.Check(locstr))
            {
                return("Error: " + locstr + " is not a valid Maidenhead locator!");
            }
            // search call in station database, return empty string if not found
            ld = LocationFind(callstr, locstr);
            if (ld == null)
            {
                return("Error: Location not found in database!");
            }
            json = ld.ToJSON();
            return(json);
        }
Example #27
0
        void _timer_Tick(object sender, EventArgs e)
        {
            string        usernameAvailableMessage         = "Callsign is available";
            string        usernameUnavailableMessage       = "Callsign is unavailable";
            string        usernameAlreadyRegisteredMessage = "Callsign is Already Registered";
            List <string> responseMessages = new List <string>(new string[] { usernameAvailableMessage, usernameUnavailableMessage, usernameAlreadyRegisteredMessage });

            _timer.Stop();

            if (_activeThread != null)
            {
                _activeThread.Abort();
            }

            if (_callsignTextBox.Text.Length == 0)
            {
                _activeThread = null;
                return;
            }

            string errorMessage;

            if (Validation.ValidateAlias(_callsignTextBox.Text, out errorMessage) == false)
            {
                _setCheckMessage(errorMessage);
                _errorProvider.SetError(_callsignTextBox, errorMessage);
            }
            else
            {
                _errorProvider.SetError(_callsignTextBox, "");
            }

            string currentValidationMessage = _errorProvider.GetError(_callsignTextBox);

            // If there is any validation message other than an account status message.
            if (responseMessages.Contains(currentValidationMessage) == false && string.IsNullOrEmpty(currentValidationMessage) == false)
            {
                return;
            }

            _setCheckMessage("Checking Availability...");

            //Check if requested callsign is available (every n milliseconds at most)
            var signal = new TaskDelegate(delegate(object input)
            {
                var result  = (CheckAliasResult)input;
                var message = string.Empty;

                switch (result)
                {
                case CheckAliasResult.Available:
                    message = usernameAvailableMessage;
                    _continueButton.Enabled      = true;
                    _legacyPasswordPanel.Visible = false;
                    _errorProvider.SetError(_callsignTextBox, "");
                    break;

                case CheckAliasResult.Unavailable:
                    message = usernameUnavailableMessage;
                    _errorProvider.SetError(_callsignTextBox, usernameUnavailableMessage);
                    break;

                case CheckAliasResult.Registered:
                    message = usernameAlreadyRegisteredMessage;
                    _errorProvider.SetError(_callsignTextBox, usernameAlreadyRegisteredMessage);
                    break;

                case CheckAliasResult.InvalidLogin:
                    message = "Invalid Credentials";
                    break;

                case CheckAliasResult.AliasLimit:
                    message = "You already have the maximum number of callsigns.";
                    break;

                case CheckAliasResult.LegacyExists:
                    message = "Please use ASGS password to create callsign!";
                    _continueButton.Enabled      = true;
                    _legacyPasswordPanel.Visible = true;
                    _errorProvider.SetError(_callsignTextBox, "");
                    break;
                }

                _setCheckMessage(message);
            });

            _activeThread = Callsign.CheckUsernameAvailability(_callsignTextBox.Text, delegate(object data)
            {
                if (System.Threading.Thread.CurrentThread != _activeThread)
                {
                    return;
                }

                if (_callsignTextBox.InvokeRequired)
                {
                    _callsignTextBox.Invoke(signal, data);
                }
                else
                {
                    signal(data);
                }
            });
        }
Example #28
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="callsign"></param>
        /// <param name="operatorIcao"></param>
        /// <returns></returns>
        public List <string> GetAllRouteCallsigns(string callsign, string operatorIcao)
        {
            var result = new List <string>();

            if (!String.IsNullOrEmpty(callsign))
            {
                Initialise();
                result.Add(callsign);

                if (callsign.Length >= 1)
                {
                    if (Char.IsDigit(callsign[0]) && (callsign.Length == 1 || Char.IsDigit(callsign[1])))
                    {
                        if (!String.IsNullOrEmpty(operatorIcao) && callsign.Length + operatorIcao.Length <= 8)
                        {
                            result.Add(String.Format("{0}{1}", operatorIcao, callsign));
                        }
                    }
                }

                var parsed = new Callsign(callsign);
                if (parsed.IsOriginalCallsignValid)
                {
                    var code   = parsed.Code;
                    var number = parsed.Number;

                    if (!String.IsNullOrEmpty(number))
                    {
                        if (String.IsNullOrEmpty(code) && !String.IsNullOrEmpty(operatorIcao))
                        {
                            code = operatorIcao;
                        }

                        var trimmedNumber = parsed.TrimmedNumber;
                        if (trimmedNumber != number)
                        {
                            result.Add(String.Format("{0}{1}", code, trimmedNumber));
                        }

                        if (code.Length == 2)
                        {
                            foreach (var airline in _StandingDataManager.FindAirlinesForCode(code).Where(r => !String.IsNullOrEmpty(r.IcaoCode)).OrderBy(r => r.IcaoCode))
                            {
                                result.Add(String.Format("{0}{1}", airline.IcaoCode, number));
                                if (number != trimmedNumber)
                                {
                                    result.Add(String.Format("{0}{1}", airline.IcaoCode, trimmedNumber));
                                }
                            }
                        }
                        else if (code.Length == 3)
                        {
                            var isNumeric = number.Count(r => Char.IsDigit(r)) == number.Length;
                            if (isNumeric)
                            {
                                var airlines = _StandingDataManager.FindAirlinesForCode(code).Where(r => r.IcaoCode == code && !String.IsNullOrEmpty(r.IataCode)).ToList();
                                if (airlines.Count == 1)
                                {
                                    var icaoCodes = _StandingDataManager.FindAirlinesForCode(airlines[0].IataCode)
                                                    .Where(r => !String.IsNullOrEmpty(r.IcaoCode) && r.IcaoCode != code)
                                                    .OrderBy(r => r.IcaoCode)
                                                    .Select(r => r.IcaoCode)
                                                    .Distinct();
                                    foreach (var icaoCode in icaoCodes)
                                    {
                                        result.Add(String.Format("{0}{1}", icaoCode, number));
                                        if (number != trimmedNumber)
                                        {
                                            result.Add(String.Format("{0}{1}", icaoCode, trimmedNumber));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(result);
        }
Example #29
0
        private string DeliverElevationPath(string paramstr)
        {
            string json = "";
            // set default values
            string mycallstr = "";
            string mylocstr  = "";
            string dxcallstr = "";
            string dxlocstr  = "";
            BAND   band      = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    mycallstr = pars.Get("MYCALL");
                    mylocstr  = pars.Get("MYLOC");
                    dxcallstr = pars.Get("DXCALL");
                    dxlocstr  = pars.Get("DXLOC");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(mycallstr))
            {
                return("Error: " + mycallstr + " is not a valid callsign!");
            }
            if (!Callsign.Check(dxcallstr))
            {
                return("Error: " + dxcallstr + " is not a valid callsign!");
            }
            if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr))
            {
                return("Error: " + mylocstr + " is not a valid Maidenhead locator!");
            }
            if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr))
            {
                return("Error: " + dxlocstr + " is not a valid Maidenhead locator!");
            }
            // search call in station database, return empty string if not found
            LocationDesignator myloc = LocationFind(mycallstr, mylocstr);

            if (myloc == null)
            {
                return("Error: MyLocation not found in database!");
            }
            LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr);

            if (dxloc == null)
            {
                return("Error: DXLocation not found in database!");
            }

            // get qrv info or create default
            QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band);

            // set qrv defaults if zero
            if (myqrv.AntennaHeight == 0)
            {
                myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (myqrv.AntennaGain == 0)
            {
                myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (myqrv.Power == 0)
            {
                myqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get qrv info or create default
            QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band);

            // set qrv defaults if zero
            if (dxqrv.AntennaHeight == 0)
            {
                dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (dxqrv.AntennaGain == 0)
            {
                dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (dxqrv.Power == 0)
            {
                dxqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get or calculate elevation path
            ElevationPathDesignator epath = ElevationData.Database.ElevationPathFindOrCreateFromLatLon(
                this,
                myloc.Lat,
                myloc.Lon,
                dxloc.Lat,
                dxloc.Lon,
                ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel),
                Properties.Settings.Default.ElevationModel);

            if (epath == null)
            {
                return(json);
            }
            // add additional info to ppath
            epath.Location1 = myloc;
            epath.Location2 = dxloc;
            epath.QRV1      = myqrv;
            epath.QRV2      = dxqrv;
            // convert path to json
            json = epath.ToJSON();
            return(json);
        }
Example #30
0
        private string DeliverNearestPlanes(string paramstr, List <PlaneInfo> allplanes)
        {
            string json = "";
            // set default values
            string mycallstr = "";
            string mylocstr  = "";
            string dxcallstr = "";
            string dxlocstr  = "";
            string bandstr   = "";
            BAND   band      = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    mycallstr = pars.Get("MYCALL");
                    mylocstr  = pars.Get("MYLOC");
                    dxcallstr = pars.Get("DXCALL");
                    dxlocstr  = pars.Get("DXLOC");
                    bandstr   = pars.Get("BAND");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(mycallstr))
            {
                return("Error: " + mycallstr + " is not a valid callsign!");
            }
            if (!Callsign.Check(dxcallstr))
            {
                return("Error: " + dxcallstr + " is not a valid callsign!");
            }
            if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr))
            {
                return("Error: " + mylocstr + " is not a valid Maidenhead locator!");
            }
            if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr))
            {
                return("Error: " + dxlocstr + " is not a valid Maidenhead locator!");
            }
            // set band to currently selected if empty
            if (string.IsNullOrEmpty(bandstr))
            {
                band = Properties.Settings.Default.Band;
            }
            else
            {
                band = Bands.ParseStringValue(bandstr);
            }
            if (band == BAND.BNONE)
            {
                return("Error: " + bandstr + " is not a valid band value!");
            }
            // search call in station database, return empty string if not found
            LocationDesignator myloc = LocationFind(mycallstr, mylocstr);

            if (myloc == null)
            {
                return("Error: MyLocation not found in database!");
            }
            LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr);

            if (dxloc == null)
            {
                return("Error: DXLocation not found in database!");
            }

            // get qrv info or create default
            QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band);

            // set qrv defaults if zero
            if (myqrv.AntennaHeight == 0)
            {
                myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (myqrv.AntennaGain == 0)
            {
                myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (myqrv.Power == 0)
            {
                myqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get qrv info or create default
            QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band);

            // set qrv defaults if zero
            if (dxqrv.AntennaHeight == 0)
            {
                dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (dxqrv.AntennaGain == 0)
            {
                dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (dxqrv.Power == 0)
            {
                dxqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // find local obstruction, if any
            LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel);
            double mybearing             = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon);
            double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue;

            // get or calculate propagation path
            PropagationPathDesignator ppath = PropagationData.Database.PropagationPathFindOrCreateFromLatLon(
                this,
                myloc.Lat,
                myloc.Lon,
                GetElevation(myloc.Lat, myloc.Lon) + myqrv.AntennaHeight,
                dxloc.Lat,
                dxloc.Lon,
                GetElevation(dxloc.Lat, dxloc.Lon) + dxqrv.AntennaHeight,
                Bands.ToGHz(band),
                LatLon.Earth.Radius * Properties.Settings.Default.Path_Band_Settings[band].K_Factor,
                Properties.Settings.Default.Path_Band_Settings[band].F1_Clearance,
                ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel),
                Properties.Settings.Default.ElevationModel,
                myobstr);

            if (ppath == null)
            {
                return(json);
            }
            // add additional info to ppath
            ppath.Location1 = myloc;
            ppath.Location2 = dxloc;
            ppath.QRV1      = myqrv;
            ppath.QRV2      = dxqrv;

            /*
             * // estimate positions according to time
             * DateTime time = DateTime.UtcNow;
             * foreach(PlaneInfo plane in allplanes.Planes)
             * {
             *  // change speed to km/h
             *  double speed = plane.Speed_kmh;
             *  // calculate distance after timespan
             *  double dist = speed * (time - allplanes.At).TotalHours;
             *  LatLon.GPoint newpos = LatLon.DestinationPoint(plane.Lat, plane.Lon, plane.Track, dist);
             *  plane.Lat = newpos.Lat;
             *  plane.Lon = newpos.Lon;
             *  plane.Time = time;
             * }
             */
            // get nearest planes
            List <PlaneInfo> nearestplanes = AircraftData.Database.GetNearestPlanes(DateTime.UtcNow, ppath, allplanes, Properties.Settings.Default.Planes_Filter_Max_Circumcircle, Properties.Settings.Default.Path_Band_Settings[band].MaxDistance, Properties.Settings.Default.Planes_MaxAlt);
            // convert nearestplanes to json
            JsonSerializerSettings settings = new JsonSerializerSettings();

            settings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
            settings.FloatFormatHandling  = FloatFormatHandling.String;
            settings.Formatting           = Newtonsoft.Json.Formatting.Indented;
            json = JsonConvert.SerializeObject(nearestplanes, settings);
            return(json);
        }
Example #31
0
        public IActionResult Put(UserUpdateAction request)
        {
            using (var context = new DataAccess.UserDBContext())
            {
                var user = context.FindUserByToken(request.Token);
                if (user == null || user.email == "ANON")
                {
                    return(Forbid());
                }

                switch (request.EditAction)
                {
                case UserUpdateAction.Actions.ChangeCallsign:
                {
                    var callsign = context.CallsignsForUser(user).First(x => x.name.ToLowerInvariant() == request.OldValue.ToLowerInvariant());
                    if (callsign == null || request.NewValue.Length < 4)
                    {
                        return(NotFound());
                    }

                    if (!context.CallsignAvailable(request.NewValue))
                    {
                        return(NoContent());
                    }

                    callsign.name = request.NewValue;
                    context.SaveChanges();

                    return(Ok(callsign.callsign_id));
                }

                case UserUpdateAction.Actions.AddCallsign:
                {
                    var callsigns = context.CallsignsForUser(user);
                    if (callsigns.First(x => x.name.ToLowerInvariant() == request.NewValue.ToLowerInvariant()) != null)
                    {
                        return(Forbid());
                    }

                    if (callsigns.Count() >= 3 || request.NewValue.Length < 4)
                    {
                        return(NoContent());
                    }

                    if (!context.CallsignAvailable(request.NewValue))
                    {
                        return(NoContent());
                    }

                    Callsign newCallsign = new Callsign();
                    newCallsign.user    = user;
                    newCallsign.name    = request.NewValue;
                    newCallsign.enabled = 1;
                    newCallsign.created = DateTime.Now;

                    context.callsigns.Add(newCallsign);
                    context.SaveChanges();

                    return(Ok(newCallsign.callsign_id));
                }


                case UserUpdateAction.Actions.RemoveCallsign:
                {
                    var callsign = context.CallsignsForUser(user).First(x => x.name.ToLowerInvariant() == request.OldValue.ToLowerInvariant());
                    if (callsign == null)
                    {
                        return(NotFound());
                    }

                    callsign.enabled = 0;
                    context.SaveChanges();

                    return(Ok(callsign.callsign_id));
                }

                case UserUpdateAction.Actions.VerifyEmail:
                {
                    if (user.verified != 0 || user.verification_token != request.NewValue)
                    {
                        return(NotFound());
                    }

                    user.verified           = 1;
                    user.verification_token = string.Empty;
                    context.SaveChanges();

                    return(Ok(user.email));
                }

                case UserUpdateAction.Actions.ChangePassword:
                {
                    var hasher = new PasswordHasher <User>();
                    var result = hasher.VerifyHashedPassword(user, user.hash, request.OldValue);
                    if (result == PasswordVerificationResult.Failed)
                    {
                        return(Forbid());
                    }

                    user.hash = hasher.HashPassword(user, request.NewValue);
                    context.SaveChanges();
                    return(Ok(user.user_id));
                }


                case UserUpdateAction.Actions.ChangeEmail:
                {
                    var existingUser = context.FindByEmail(request.NewValue);
                    if (existingUser != null || user.email != request.OldValue.ToLowerInvariant())
                    {
                        return(Forbid());
                    }

                    if (!request.NewValue.Contains("@") || !request.NewValue.Contains("."))
                    {
                        return(NotFound());
                    }

                    user.email              = request.NewValue;
                    user.verified           = 0;
                    user.verification_token = context.GenEmailToken();
                    context.SaveChanges();

                    Emailer.SendVerificationEmail(user);

                    return(Ok(user.email));
                }

                case UserUpdateAction.Actions.RecoverPassword:
                {
                    if (user.verification_token != request.OldValue)
                    {
                        return(Forbid());
                    }

                    var hasher = new PasswordHasher <User>();

                    user.hash               = hasher.HashPassword(user, request.NewValue);
                    user.verified           = 1;
                    user.verification_token = string.Empty;
                    context.SaveChanges();
                    return(Ok(user.user_id));
                }
                }

                return(NoContent());
            }
        }
Example #32
0
        private string DeliverPropagationPath(string paramstr)
        {
            string json = "";
            // set default values
            string mycallstr = "";
            string mylocstr  = "";
            string dxcallstr = "";
            string dxlocstr  = "";
            string bandstr   = "";
            BAND   band      = Properties.Settings.Default.Band;

            // get parameters
            try
            {
                if (paramstr.Contains("?"))
                {
                    // OK, we have parameters --> cut them out and make all uppercase
                    paramstr = paramstr.Substring(paramstr.IndexOf("?") + 1).ToUpper();
                    var pars = System.Web.HttpUtility.ParseQueryString(paramstr);
                    mycallstr = pars.Get("MYCALL");
                    mylocstr  = pars.Get("MYLOC");
                    dxcallstr = pars.Get("DXCALL");
                    dxlocstr  = pars.Get("DXLOC");
                    bandstr   = pars.Get("BAND");
                }
            }
            catch (Exception ex)
            {
                // return error
                return("Error while parsing parameters!");
            }
            // check parameters
            if (!Callsign.Check(mycallstr))
            {
                return("Error: " + mycallstr + " is not a valid callsign!");
            }
            if (!Callsign.Check(dxcallstr))
            {
                return("Error: " + dxcallstr + " is not a valid callsign!");
            }
            if (!String.IsNullOrEmpty(mylocstr) && !MaidenheadLocator.Check(mylocstr))
            {
                return("Error: " + mylocstr + " is not a valid Maidenhead locator!");
            }
            if (!String.IsNullOrEmpty(dxlocstr) && !MaidenheadLocator.Check(dxlocstr))
            {
                return("Error: " + dxlocstr + " is not a valid Maidenhead locator!");
            }
            // set band to currently selected if empty
            if (string.IsNullOrEmpty(bandstr))
            {
                band = Properties.Settings.Default.Band;
            }
            else
            {
                band = Bands.ParseStringValue(bandstr);
            }
            if (band == BAND.BNONE)
            {
                return("Error: " + bandstr + " is not a valid band value!");
            }
            // search call in station database, return empty string if not found
            LocationDesignator myloc = LocationFind(mycallstr, mylocstr);

            if (myloc == null)
            {
                return("Error: MyLocation not found in database!");
            }
            LocationDesignator dxloc = LocationFind(dxcallstr, dxlocstr);

            if (dxloc == null)
            {
                return("Error: DXLocation not found in database!");
            }

            // get qrv info or create default
            QRVDesignator myqrv = StationData.Database.QRVFindOrCreateDefault(myloc.Call, myloc.Loc, band);

            // set qrv defaults if zero
            if (myqrv.AntennaHeight == 0)
            {
                myqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (myqrv.AntennaGain == 0)
            {
                myqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (myqrv.Power == 0)
            {
                myqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // get qrv info or create default
            QRVDesignator dxqrv = StationData.Database.QRVFindOrCreateDefault(dxloc.Call, dxloc.Loc, band);

            // set qrv defaults if zero
            if (dxqrv.AntennaHeight == 0)
            {
                dxqrv.AntennaHeight = StationData.Database.QRVGetDefaultAntennaHeight(band);
            }
            if (dxqrv.AntennaGain == 0)
            {
                dxqrv.AntennaGain = StationData.Database.QRVGetDefaultAntennaGain(band);
            }
            if (dxqrv.Power == 0)
            {
                dxqrv.Power = StationData.Database.QRVGetDefaultPower(band);
            }

            // find local obstruction, if any
            LocalObstructionDesignator o = ElevationData.Database.LocalObstructionFind(myloc.Lat, myloc.Lon, Properties.Settings.Default.ElevationModel);
            double mybearing             = LatLon.Bearing(myloc.Lat, myloc.Lon, dxloc.Lat, dxloc.Lon);
            double myobstr = (o != null) ? o.GetObstruction(myqrv.AntennaHeight, mybearing) : double.MinValue;

            // get or calculate propagation path
            PropagationPathDesignator ppath = PropagationData.Database.PropagationPathFindOrCreateFromLatLon(
                this,
                myloc.Lat,
                myloc.Lon,
                GetElevation(myloc.Lat, myloc.Lon) + myqrv.AntennaHeight,
                dxloc.Lat,
                dxloc.Lon,
                GetElevation(dxloc.Lat, dxloc.Lon) + dxqrv.AntennaHeight,
                Bands.ToGHz(band),
                LatLon.Earth.Radius * Properties.Settings.Default.Path_Band_Settings[band].K_Factor,
                Properties.Settings.Default.Path_Band_Settings[band].F1_Clearance,
                ElevationData.Database.GetDefaultStepWidth(Properties.Settings.Default.ElevationModel),
                Properties.Settings.Default.ElevationModel,
                myobstr);

            if (ppath == null)
            {
                return(json);
            }
            // add additional info to ppath
            ppath.Location1 = myloc;
            ppath.Location2 = dxloc;
            ppath.QRV1      = myqrv;
            ppath.QRV2      = dxqrv;
            // convert path to json
            json = ppath.ToJSON();
            return(json);
        }
Example #33
0
        public bool Equals(GroupEditAction input)
        {
            if (input == null)
            {
                return(false);
            }

            return
                ((
                     Name == input.Name ||
                     (Name != null && Name.Equals(input.Name))
                     ) &&
                 (
                     About == input.About ||
                     (About != null && About.Equals(input.About))
                 ) &&
                 (
                     Motto == input.Motto ||
                     (Motto != null && Motto.Equals(input.Motto))
                 ) &&
                 (
                     Theme == input.Theme ||
                     (Theme != null && Theme.Equals(input.Theme))
                 ) &&
                 (
                     AvatarImageIndex == input.AvatarImageIndex ||
                     (AvatarImageIndex.Equals(input.AvatarImageIndex))
                 ) &&
                 (
                     Tags == input.Tags ||
                     (Tags != null && Tags.Equals(input.Tags))
                 ) &&
                 (
                     IsPublic == input.IsPublic ||
                     (IsPublic != null && IsPublic.Equals(input.IsPublic))
                 ) &&
                 (
                     MembershipOption == input.MembershipOption ||
                     (MembershipOption.Equals(input.MembershipOption))
                 ) &&
                 (
                     IsPublicTopicAdminOnly == input.IsPublicTopicAdminOnly ||
                     (IsPublicTopicAdminOnly != null && IsPublicTopicAdminOnly.Equals(input.IsPublicTopicAdminOnly))
                 ) &&
                 (
                     AllowChat == input.AllowChat ||
                     (AllowChat != null && AllowChat.Equals(input.AllowChat))
                 ) &&
                 (
                     ChatSecurity == input.ChatSecurity ||
                     (ChatSecurity.Equals(input.ChatSecurity))
                 ) &&
                 (
                     Callsign == input.Callsign ||
                     (Callsign != null && Callsign.Equals(input.Callsign))
                 ) &&
                 (
                     Locale == input.Locale ||
                     (Locale != null && Locale.Equals(input.Locale))
                 ) &&
                 (
                     Homepage == input.Homepage ||
                     (Homepage.Equals(input.Homepage))
                 ) &&
                 (
                     EnableInvitationMessagingForAdmins == input.EnableInvitationMessagingForAdmins ||
                     (EnableInvitationMessagingForAdmins != null && EnableInvitationMessagingForAdmins.Equals(input.EnableInvitationMessagingForAdmins))
                 ) &&
                 (
                     DefaultPublicity == input.DefaultPublicity ||
                     (DefaultPublicity.Equals(input.DefaultPublicity))
                 ));
        }
Example #34
0
        private bool ValidateDetails()
        {
            // validates user details and sets position on map
            // enables/disables next button
            double mlat, mlon;

            // colour Textbox if more precise lat/lon information is available
            if (MaidenheadLocator.IsPrecise(tb_Latitude.Value, tb_Longitude.Value, 3))
            {
                if (tb_Locator.BackColor != Color.PaleGreen)
                {
                    tb_Locator.BackColor = Color.PaleGreen;
                }
            }
            else
            {
                if (tb_Locator.BackColor != Color.FloralWhite)
                {
                    tb_Locator.BackColor = Color.FloralWhite;
                }
            }
            if (GeographicalPoint.Check(tb_Latitude.Value, tb_Longitude.Value))
            {
                // update locator text if not focusd
                if (!tb_Locator.Focused)
                {
                    tb_Locator.SilentText = MaidenheadLocator.LocFromLatLon(tb_Latitude.Value, tb_Longitude.Value, Properties.Settings.Default.Locator_SmallLettersForSubsquares, (int)Properties.Settings.Default.Locator_MaxLength / 2, true);
                }
                // get locator polygon
                Callsignpolygons.Clear();
                List <PointLatLng> l = new List <PointLatLng>();
                // add loc bounds to map polygons
                MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.TopLeft, out mlat, out mlon);
                l.Add(new PointLatLng(mlat, mlon));
                MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.TopRight, out mlat, out mlon);
                l.Add(new PointLatLng(mlat, mlon));
                MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.BottomRight, out mlat, out mlon);
                l.Add(new PointLatLng(mlat, mlon));
                MaidenheadLocator.LatLonFromLoc(tb_Locator.Text, PositionInRectangle.BottomLeft, out mlat, out mlon);
                l.Add(new PointLatLng(mlat, mlon));
                GMapPolygon p = new GMapPolygon(l, tb_Locator.Text.ToString());
                p.Stroke = new Pen(Color.FromArgb(255, Color.Magenta), 3);
                p.Fill   = new SolidBrush(Color.FromArgb(0, Color.Magenta));
                Callsignpolygons.Polygons.Add(p);
                // update user position
                UserPos.Position = new PointLatLng(tb_Latitude.Value, tb_Longitude.Value);
                // update map position
                if (!IsDraggingMarker)
                {
                    string loc = MaidenheadLocator.LocFromLatLon(tb_Latitude.Value, tb_Longitude.Value, Properties.Settings.Default.Locator_SmallLettersForSubsquares, (int)Properties.Settings.Default.Locator_MaxLength / 2, true);
                    MaidenheadLocator.LatLonFromLoc(loc, PositionInRectangle.MiddleMiddle, out mlat, out mlon);
                    gm_Callsign.Position = new PointLatLng(mlat, mlon);
                    // adjust map zoom level
                    int zoom = loc.Length;
                    switch (zoom)
                    {
                    case 6:
                        gm_Callsign.Zoom = 12;
                        break;

                    case 8:
                        gm_Callsign.Zoom = 15;
                        break;

                    case 10:
                        gm_Callsign.Zoom = 17;
                        break;
                    }
                }
            }
            // check all values
            if (Callsign.Check(tb_Callsign.Text) && MaidenheadLocator.Check(tb_Locator.Text) && !double.IsNaN(tb_Latitude.Value) && !double.IsNaN(tb_Longitude.Value))
            {
                StationLocation.Lat      = tb_Latitude.Value;
                StationLocation.Lon      = tb_Longitude.Value;
                StationLocation.Source   = MaidenheadLocator.IsPrecise(tb_Latitude.Value, tb_Longitude.Value, 3) ? GEOSOURCE.FROMUSER : GEOSOURCE.FROMLOC;
                StationLocation.Loc      = MaidenheadLocator.LocFromLatLon(StationLocation.Lat, StationLocation.Lon, false, 3);
                tb_Elevation.SilentValue = GetElevation(StationLocation.Lat, StationLocation.Lon);
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #35
0
 /// <summary>
 /// Creates the specified body.
 /// </summary>
 /// <param name="body">The body.</param>
 /// <param name="destCall">The dest call.</param>
 /// <returns></returns>
 public static MessagePayload Create(string body, Callsign destCall) => MessageParser.CreateFromString(body, destCall);