Пример #1
0
 public Tag(TagID tagID, String tagIdentifier, List<Tag> payloadList, TagID listType)
 {
     this.tagID = tagID;
     this.tagIdentifier = tagIdentifier;
     this.payloadList = payloadList;
     this.listType = listType;
 }
Пример #2
0
        public Errorable <Tag> Retrieve(SqlCommand cmd, SqlDataReader dr, int expectedCapacity = 10)
        {
            if (!dr.Read())
            {
                return(this._idOrName.Collapse <ConsistencyError>(l => new TagIDRecordDoesNotExistError(l), r => new TagNameDoesNotExistError(r)));
            }

            TagID id = (TagID)dr.GetSqlBinary(0).Value;

            Tag.Builder tb = new Tag.Builder(
                pName: (TagName)dr.GetSqlString(1).Value,
                pCommitID: (CommitID)dr.GetSqlBinary(2).Value,
                pTagger: dr.GetSqlString(3).Value,
                pDateTagged: dr.GetDateTimeOffset(4),
                pMessage: dr.GetSqlString(5).Value
                );

            Tag tg = tb;

            if (tg.ID != id)
            {
                return(new ComputedTagIDMismatchError(tg.ID, id));
            }

            return(tg);
        }
Пример #3
0
        internal FileInfo getPathByID(TagID id)
        {
            DirectoryInfo objDir = getObjectsDirectory();
            string        idStr  = id.ToString();

            string path = System.IO.Path.Combine(objDir.FullName, idStr.Substring(0, 2), idStr.Substring(2));

            return(new FileInfo(path));
        }
        internal static Errorable <Tuple <Tag, Commit> > retrieve(ConsistencyError errorIfNotExist, SqlCommand cmd, SqlDataReader dr)
        {
            // If no result, return null:
            if (!dr.Read())
            {
                return(errorIfNotExist);
            }

            TagID tgid = (TagID)dr.GetSqlBinary(0).Value;

            Tag.Builder tgb = new Tag.Builder(
                pName:          (TagName)dr.GetSqlString(1).Value,
                pCommitID:      (CommitID)dr.GetSqlBinary(2).Value,
                pTagger:        dr.GetSqlString(3).Value,
                pDateTagged:    dr.GetDateTimeOffset(4),
                pMessage:       dr.GetSqlString(5).Value
                );

            Tag tg = tgb;

            if (tg.ID != tgid)
            {
                return(new ComputedTagIDMismatchError(tg.ID, tgid));
            }

            const int offs = 6;
            CommitID  id   = (CommitID)dr.GetSqlBinary(0 + offs).Value;

            Commit.Builder cmb = new Commit.Builder(
                pParents: new System.Collections.Generic.List <CommitID>(2),
                pTreeID: (TreeID)dr.GetSqlBinary(1 + offs).Value,
                pCommitter: dr.GetSqlString(2 + offs).Value,
                pDateCommitted: dr.GetDateTimeOffset(3 + offs),
                pMessage: dr.GetSqlString(4 + offs).Value
                );

            // Read the parent commit ids from the second result:
            if (dr.NextResult())
            {
                while (dr.Read())
                {
                    cmb.Parents.Add((CommitID)dr.GetSqlBinary(0).Value);
                }
                cmb.Parents.Sort(new CommitID.Comparer());
            }

            Commit cm = cmb;

            if (cm.ID != id)
            {
                return(new ComputedCommitIDMismatchError(cm.ID, id));
            }

            return(new Tuple <Tag, Commit>(tg, cm));
        }
Пример #5
0
        public TAG(ref byte[] rawdata, ref int offset)
        {
            _start_offset  = offset;
            _lenght_octets = 0;

            _tagclass = (TagClass)(rawdata[offset] & 0xc0);

            // verifica se a tag está em formato Short ou Long
            if ((rawdata[offset] & 0x1f) == 0x1f)
            { // formato Long, não usado nos certificados da ICP-Brasil
                _tagid = (TagID)CalculaBase128(rawdata, ref offset);
            }
            else
            { // formato Short
                _tagid = (TagID)(rawdata[offset] & 0x1f);
                offset++;
            }

            // Octetos de tamanho
            if ((rawdata[offset] & 0x80) == 0x00)
            { // Formato Short: tamanho de até 127 bytes
                _lenght_octets = (int)(rawdata[offset++] & 0x7f);
            }
            else
            { // Formato Long: tamanho em 2 até 127 octetos
                int lenoctetos = (int)rawdata[offset++] & 0x7f;
                _lenght_octets = CalculaBase256(rawdata, ref offset, lenoctetos);
            }
            _start_contents = offset;

            switch (_tagid)
            {
            case TagID.OBJECT_IDENTIFIER:
            case TagID.PrintableString:
            case TagID.OCTET_STRING:
            case TagID.UTF8_STRING:
            case TagID.BIT_STRING:
            case TagID.IA5String:
            case TagID.INTEGER:
            case TagID.RFC822NAME:
            case TagID.T61String:
            case TagID.UTCTime:
                offset += _lenght_octets;
                break;

            case TagID.NULL:
            case TagID.SEQUENCE:
            case TagID.SET:
                break;

            default:
                break;
            }
        }
Пример #6
0
 public Task <Errorable <TagID> > ResolvePartialID(TagID.Partial id)
 {
     FileInfo[] fis = system.getPathsByPartialID(id);
     if (fis.Length == 1)
     {
         return(Task.FromResult(TagID.TryParse(id.ToString().Substring(0, 2) + fis[0].Name)));
     }
     if (fis.Length == 0)
     {
         return(Task.FromResult((Errorable <TagID>) new TagIDPartialNoResolutionError(id)));
     }
     return(Task.FromResult((Errorable <TagID>) new TagIDPartialAmbiguousResolutionError(id, fis.SelectAsArray(f => TagID.TryParse(id.ToString().Substring(0, 2) + f.Name).Value))));
 }
Пример #7
0
        /// <summary>
        /// Возвращает коллекцию параметров.
        /// </summary>
        public override Dictionary <string, string> GetParameters()
        {
            var parameters = base.GetParameters();

            parameters["tag_id"] = TagID.ToString();
            if (OwnerID != 0)
            {
                parameters["owner_id"] = OwnerID.ToString();
            }
            parameters["video_id"] = VideoID.ToString();

            return(parameters);
        }
Пример #8
0
        public async Task <Errorable <TagID> > DeleteTag(TagID id)
        {
            var etg = await getTag(id).ConfigureAwait(continueOnCapturedContext: false);

            if (etg.HasErrors)
            {
                return(etg.Errors);
            }

            Tag tg = etg.Value;

            deleteTag(tg);
            return(tg.ID);
        }
        public async Task <Errorable <Tuple <Tag, Commit> > > GetCommitByTag(TagID id)
        {
            var etg = await tgrepo.GetTag(id).ConfigureAwait(continueOnCapturedContext: false);

            if (etg.HasErrors)
            {
                return(etg.Errors);
            }

            Tag tg = etg.Value;

            var ecm = await getCommit(tg.CommitID).ConfigureAwait(continueOnCapturedContext: false);

            if (ecm.HasErrors)
            {
                return(ecm.Errors);
            }

            Commit cm = ecm.Value;

            return(new Tuple <Tag, Commit>(tg, cm));
        }
Пример #10
0
        private async Task <Errorable <TagID> > getTagIDByName(TagName tagName)
        {
            FileInfo fiTracker = system.getTagPathByTagName(tagName);

            Debug.Assert(fiTracker != null);
            if (!fiTracker.Exists)
            {
                return(new TagNameDoesNotExistError(tagName));
            }

            byte[] buf;
            int    nr = 0;

            using (var fs = new FileStream(fiTracker.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 16384, true))
            {
                // TODO: implement an async buffered Stream:
                buf = new byte[16384];
                nr  = await fs.ReadAsync(buf, 0, 16384).ConfigureAwait(continueOnCapturedContext: false);

                if (nr >= 16384)
                {
                    // My, what a large tag you have!
                    throw new NotSupportedException();
                }
            }

            // Parse the TagID:
            using (var ms = new MemoryStream(buf, 0, nr, false))
                using (var sr = new StreamReader(ms, Encoding.UTF8))
                {
                    string line = sr.ReadLine();
                    if (line == null)
                    {
                        return(new TagNameDoesNotExistError(tagName));
                    }

                    return(TagID.TryParse(line));
                }
        }
Пример #11
0
        public override string ToString()
        {
            List <TagKey> keys = TagMap.GetKeys(TagID);

            if (keys.Count == 0)
            {
                switch (Type)
                {
                case 1: return(String.Format("{0} = {1}", TagID.ToString(), Float));

                case 4: return(String.Format("{0} = {1}", TagID.ToString(), ScriptFormula));

                default: return(String.Format("{0} = {1}", TagID.ToString(), Int));
                }
            }

            if (keys.Count == 1)
            {
                var value = keys.First().GetType().GetMethod("GetValue").Invoke(keys.First(), new object[] { this });
                return(String.Format("{0} = {1}", keys.First().Name, value == null ? "null" : value.ToString()));
            }

            return(String.Format("Ambigious key: Depending of the context it one of {0}", String.Join(",", keys.Select(x => x.Name).ToArray())));
        }
Пример #12
0
 public override int GetHashCode()
 {
     return(TagID.GetHashCode() ^ AssetID.GetHashCode() ^ TagName.GetHashCode() ^
            AssetName.GetHashCode() ^ isEnabled.GetHashCode() ^ Target.GetHashCode());
 }
        public async Task<Errorable<Tuple<Tag, Commit>>> GetCommitByTag(TagID id)
        {
            var etg = await tgrepo.GetTag(id).ConfigureAwait(continueOnCapturedContext: false);
            if (etg.HasErrors) return etg.Errors;

            Tag tg = etg.Value;

            var ecm = await getCommit(tg.CommitID).ConfigureAwait(continueOnCapturedContext: false);
            if (ecm.HasErrors) return ecm.Errors;

            Commit cm = ecm.Value;
            return new Tuple<Tag, Commit>(tg, cm);
        }
Пример #14
0
 public override string ToString()
 {
     return(TagID.ToString());
 }
Пример #15
0
 public QueryTag(TagID id)
 {
     this._idOrName = id;
 }
        internal FileInfo[] getPathsByPartialID(TagID.Partial partial)
        {
            DirectoryInfo objDir = getObjectsDirectory();
            string idStr = partial.ToString();

            string path = System.IO.Path.Combine(objDir.FullName, idStr.Substring(0, 2));
            var di = new DirectoryInfo(path);
            if (!di.Exists) return new FileInfo[0];

            return di.GetFiles(idStr.Substring(2) + "*");
        }
Пример #17
0
 public TagRecordAlreadyExistsError(TagID id) : base("A tag with TagID {0} already exists", id)
 {
 }
Пример #18
0
        public bool LoadTagData(ref XtiveTag[] tagData, ref int RecordCount)
        {
            if (m_handle == IntPtr.Zero)
            {
                return(false);
            }

            RecordCount = 0;
            try
            {
                while (RecordCount < 100)
                {
                    if (!ReaderTag(m_handle, ref btTagType, ref TagID, ref bExcite, ref bLowPower, ref ExciteID, ref RID, ref fRSSI))   // get one tag once, FIFO
                    {
                        //     Debug.WriteLine("failed to ReaderTag");
                        break;
                    }
                    else
                    {
                        //     Debug.WriteLine(TagID.ToString());

                        /*tagData[RecordCount].RSSI = Convert.ToInt32(fRSSI);
                         * tagData[RecordCount].UID = TagID.ToString();
                         * //    tagData[RecordCount].RID = RID;
                         * tagData[RecordCount].bLowPower = bLowPower;
                         * tagData[RecordCount].bExcite = bExcite;
                         * tagData[RecordCount].An = "0";
                         * tagData[RecordCount].ReaderIP = ip;
                         * tagData[RecordCount].datetime = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");*/
                        XtiveTag tag = (new XtiveTag.Builder())
                                       .SetUid(TagID.ToString())
                                       .SetRssi(Convert.ToInt32(fRSSI))
                                       .SetBLowPower(bLowPower)
                                       .SetBExcite(bExcite)
                                       .SetReaderIP(ip)
                                       .SetAn("0")
                                       .SetDateTime(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")).Build();
                        tagData[RecordCount] = tag;
                        RecordCount++;
                    }
                }
                _ReaderErrorCode      = 0;
                _ReaderErrorSpecified = "";
            }
            catch (Exception e)
            {
                _ReaderErrorCode      = 42;
                _ReaderErrorSpecified = "读写器LoadTagData函数故障:" + m_handle.ToString() + "  " + e.Message.ToString();
                log.Error(_ReaderErrorSpecified);
                return(false);
            }
            finally
            {
            }
            if (RecordCount == 0)
            {
                return(false);
            }
            else
            {
                return(true);
            }
        }
Пример #19
0
 // override object.GetHashCode
 public override int GetHashCode()
 {
     return((GetType().FullName + "|" + TagID.ToString()).GetHashCode());
 }
        public async Task<Errorable<TagID>> DeleteTag(TagID id)
        {
            var etg = await getTag(id).ConfigureAwait(continueOnCapturedContext: false);
            if (etg.HasErrors) return etg.Errors;

            Tag tg = etg.Value;

            deleteTag(tg);
            return tg.ID;
        }
 public Task<Errorable<TagID>> ResolvePartialID(TagID.Partial id)
 {
     FileInfo[] fis = system.getPathsByPartialID(id);
     if (fis.Length == 1) return Task.FromResult(TagID.TryParse(id.ToString().Substring(0, 2) + fis[0].Name));
     if (fis.Length == 0) return Task.FromResult((Errorable<TagID>)new TagIDPartialNoResolutionError(id));
     return Task.FromResult((Errorable<TagID>)new TagIDPartialAmbiguousResolutionError(id, fis.SelectAsArray(f => TagID.TryParse(id.ToString().Substring(0, 2) + f.Name).Value)));
 }
Пример #22
0
 public Task <Errorable <TagID> > DeleteTag(TagID id)
 {
     return(db.ExecuteNonQueryAsync(new DestroyTag(id)));
 }
 public Task <Errorable <Tuple <Tag, Commit> > > GetCommitByTag(TagID id)
 {
     return(db.ExecuteSingleQueryAsync(new QueryCommitByTagID(id)));
 }
Пример #24
0
 public Tag(TagID tagID, String tagIdentifier, byte[] payload)
 {
     this.tagID = tagID;
     this.tagIdentifier = tagIdentifier;
     this.payload = payload;
 }
Пример #25
0
        private async Task <Errorable <Tag> > getTag(TagID id)
        {
            FileInfo fi = system.getPathByID(id);

            if (!fi.Exists)
            {
                return(new TagIDRecordDoesNotExistError(id));
            }

            byte[] buf;
            int    nr = 0;

            using (var fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 16384, true))
            {
                // TODO: implement an async buffered Stream:
                buf = new byte[16384];
                nr  = await fs.ReadAsync(buf, 0, 16384).ConfigureAwait(continueOnCapturedContext: false);

                if (nr >= 16384)
                {
                    // My, what a large tag you have!
                    throw new NotSupportedException();
                }
            }

            Tag.Builder tb = new Tag.Builder();

            // Parse the Tag:
            using (var ms = new MemoryStream(buf, 0, nr, false))
                using (var sr = new StreamReader(ms, Encoding.UTF8))
                {
                    string line = sr.ReadLine();

                    // Set CommitID:
                    if (line == null || !line.StartsWith("commit "))
                    {
                        return(new TagParseExpectedCommitError());
                    }
                    var ecid = CommitID.TryParse(line.Substring("commit ".Length));
                    if (ecid.HasErrors)
                    {
                        return(ecid.Errors);
                    }
                    tb.CommitID = ecid.Value;

                    // Set Name:
                    line = sr.ReadLine();
                    if (line == null || !line.StartsWith("name "))
                    {
                        return(new TagParseExpectedNameError());
                    }
                    tb.Name = (TagName)line.Substring("name ".Length);

                    // Set Tagger:
                    line = sr.ReadLine();
                    if (line == null || !line.StartsWith("tagger "))
                    {
                        return(new TagParseExpectedTaggerError());
                    }
                    tb.Tagger = line.Substring("tagger ".Length);

                    // Set DateTagged:
                    line = sr.ReadLine();
                    if (line == null || !line.StartsWith("date "))
                    {
                        return(new TagParseExpectedDateError());
                    }

                    // NOTE: date parsing will result in an inexact DateTimeOffset from what was created with, but it
                    // is close enough because the SHA-1 hash is calculated using the DateTimeOffset.ToString(), so
                    // only the ToString() representations of the DateTimeOffsets need to match.
                    DateTimeOffset tmpDate;
                    if (!DateTimeOffset.TryParse(line.Substring("date ".Length), out tmpDate))
                    {
                        return(new TagParseBadDateFormatError());
                    }

                    tb.DateTagged = tmpDate;

                    // Skip empty line:
                    line = sr.ReadLine();
                    if (line == null || line.Length != 0)
                    {
                        return(new TagParseExpectedBlankLineError());
                    }

                    // Set Message:
                    tb.Message = sr.ReadToEnd();
                }

            // Create the immutable Tag from the Builder:
            Tag tg = tb;

            // Validate the computed TagID:
            if (tg.ID != id)
            {
                return(new ComputedTagIDMismatchError(tg.ID, id));
            }

            return(tg);
        }
 public Task<Errorable<Tag>> GetTag(TagID id)
 {
     return getTag(id);
 }
 public TagRecordAlreadyExistsError(TagID id) : base("A tag with TagID {0} already exists", id) { }
Пример #28
0
 public TagIDRecordDoesNotExistError(TagID tagID) : base("A tag with TagID {0} does not exist", tagID)
 {
 }
 public ComputedTagIDMismatchError(TagID computedID, TagID expectedID) : base("Computed TagID {0} does not match expected TagID {1}", computedID, expectedID) { }
Пример #30
0
 public ComputedTagIDMismatchError(TagID computedID, TagID expectedID) : base("Computed TagID {0} does not match expected TagID {1}", computedID, expectedID)
 {
 }
        internal FileInfo getPathByID(TagID id)
        {
            DirectoryInfo objDir = getObjectsDirectory();
            string idStr = id.ToString();

            string path = System.IO.Path.Combine(objDir.FullName, idStr.Substring(0, 2), idStr.Substring(2));
            return new FileInfo(path);
        }
 public QueryCommitByTagID(TagID id)
 {
     this._id = id;
 }
Пример #33
0
 public Task <Errorable <Tag> > GetTag(TagID id)
 {
     return(getTag(id));
 }
Пример #34
0
 public Task <Errorable <Tag> > GetTag(TagID id)
 {
     return(db.ExecuteSingleQueryAsync(new QueryTag(id)));
 }
 public TagIDPartialNoResolutionError(TagID.Partial id) : base("Partial TagID {0} does not resolve to a TagID", id) { }
 public TagIDPartialAmbiguousResolutionError(TagID.Partial id, params TagID[] ids) : base("Partial TagID {0} resolves to multiple TagID", id, ids) { }
 public TagIDRecordDoesNotExistError(TagID tagID) : base("A tag with TagID {0} does not exist", tagID) { }
 public Task<Errorable<Tuple<Tag, Commit>>> GetCommitByTag(TagID id)
 {
     return db.ExecuteSingleQueryAsync(new QueryCommitByTagID(id));
 }
        private async Task<Errorable<Tag>> getTag(TagID id)
        {
            FileInfo fi = system.getPathByID(id);
            if (!fi.Exists) return new TagIDRecordDoesNotExistError(id);

            byte[] buf;
            int nr = 0;
            using (var fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 16384, true))
            {
                // TODO: implement an async buffered Stream:
                buf = new byte[16384];
                nr = await fs.ReadAsync(buf, 0, 16384).ConfigureAwait(continueOnCapturedContext: false);
                if (nr >= 16384)
                {
                    // My, what a large tag you have!
                    throw new NotSupportedException();
                }
            }

            Tag.Builder tb = new Tag.Builder();

            // Parse the Tag:
            using (var ms = new MemoryStream(buf, 0, nr, false))
            using (var sr = new StreamReader(ms, Encoding.UTF8))
            {
                string line = sr.ReadLine();

                // Set CommitID:
                if (line == null || !line.StartsWith("commit ")) return new TagParseExpectedCommitError();
                var ecid = CommitID.TryParse(line.Substring("commit ".Length));
                if (ecid.HasErrors) return ecid.Errors;
                tb.CommitID = ecid.Value;

                // Set Name:
                line = sr.ReadLine();
                if (line == null || !line.StartsWith("name ")) return new TagParseExpectedNameError();
                tb.Name = (TagName)line.Substring("name ".Length);

                // Set Tagger:
                line = sr.ReadLine();
                if (line == null || !line.StartsWith("tagger ")) return new TagParseExpectedTaggerError();
                tb.Tagger = line.Substring("tagger ".Length);

                // Set DateTagged:
                line = sr.ReadLine();
                if (line == null || !line.StartsWith("date ")) return new TagParseExpectedDateError();

                // NOTE: date parsing will result in an inexact DateTimeOffset from what was created with, but it
                // is close enough because the SHA-1 hash is calculated using the DateTimeOffset.ToString(), so
                // only the ToString() representations of the DateTimeOffsets need to match.
                DateTimeOffset tmpDate;
                if (!DateTimeOffset.TryParse(line.Substring("date ".Length), out tmpDate))
                    return new TagParseBadDateFormatError();

                tb.DateTagged = tmpDate;

                // Skip empty line:
                line = sr.ReadLine();
                if (line == null || line.Length != 0) return new TagParseExpectedBlankLineError();

                // Set Message:
                tb.Message = sr.ReadToEnd();
            }

            // Create the immutable Tag from the Builder:
            Tag tg = tb;
            // Validate the computed TagID:
            if (tg.ID != id) return new ComputedTagIDMismatchError(tg.ID, id);

            return tg;
        }