public TorrentReader(string archivo) { FileStream f = new FileStream(archivo, FileMode.Open, FileAccess.Read); BEncodeDecoder parser = new BEncodeDecoder(); decodedTorrent = parser.parse(f); comment = ((BEncodeString)decodedTorrent.getValue(new BEncodeString("comment"))).ToString(); announceURL = ((BEncodeString)decodedTorrent.getValue(new BEncodeString("announce"))).ToString(); announceList = (BEncodeList)decodedTorrent.getValue(new BEncodeString("announce-list")); try { encoding = ((BEncodeString)decodedTorrent.getValue(new BEncodeString("encoding"))).ToString(); } catch (Exception e) { } string test = ((BEncodeDictionary)decodedTorrent.getValue(new BEncodeString("info"))).ToBencodeDictionary(); char[] tester = test.ToCharArray(); byte[] total = new byte[tester.Length]; int counter = 0; foreach(char chars in tester) { total[counter] = (byte)chars; counter += 1; } info_hash_byte = SHA1CryptoServiceProvider.Create().ComputeHash(total); info_hash = BitConverter.ToString(info_hash_byte).Replace("-", ""); content_length = ((BEncodeInteger)((BEncodeDictionary)decodedTorrent.getValue(new BEncodeString("info"))).getValue(new BEncodeString("length"))).getValue(); filename = ((BEncodeString)((BEncodeDictionary)decodedTorrent.getValue(new BEncodeString("info"))).getValue(new BEncodeString("name"))).ToString(); created_by = ((BEncodeString)decodedTorrent.getValue(new BEncodeString("created by"))).ToString(); }
private BEncodeDictionary decodeDictionary() { BEncodeDictionary value = new BEncodeDictionary(); char start = (char)reader.ReadByte(); bool hasFinal = false; if (start == 'd') { while (true) { char actual = (char)reader.PeekChar(); if (actual == 'e') { reader.ReadByte(); hasFinal = true; break; } else if (actual == 'd') { if ((innerDictionaries == 0) && (keys.Count % 2 == 1)) { innerDictionaries += 1; BEncodeDictionary dic = decodeDictionary(); value.Add(keys.Pop(), dic); innerDictionaries -= 1; } else if ((innerDictionaries == 0) && (keys.Count % 2 == 0)) { throw new BEncodeException("key must be a string, not dictionary"); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 0)) { innerDictionaries += 1; BEncodeDictionary dic = decodeDictionary(); value.Add(keys.Pop(), dic); innerDictionaries -= 1; } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 1)) { throw new BEncodeException("key must be a string, not dictionary"); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 1)) { innerDictionaries += 1; BEncodeDictionary dic = decodeDictionary(); value.Add(keys.Pop(), dic); innerDictionaries -= 1; } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 0)) { throw new BEncodeException("key must be a string, not dictionary"); } } else if (actual == 'l') { if ((innerDictionaries == 0) && (keys.Count % 2 == 1)) { value.Add(keys.Pop(), decodeList()); } else if ((innerDictionaries == 0) && (keys.Count % 2 == 0)) { throw new BEncodeException("key must be a string, not dictionary"); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 0)) { value.Add(keys.Pop(), decodeList()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 1)) { throw new BEncodeException("key must be a string, not dictionary"); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 1)) { value.Add(keys.Pop(), decodeList()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 0)) { throw new BEncodeException("key must be a string, not dictionary"); } } else if (actual == 'i') { if ((innerDictionaries == 0) && (keys.Count % 2 == 1)) { value.Add(keys.Pop(), decodeInteger()); } else if ((innerDictionaries == 0) && (keys.Count % 2 == 0)) { throw new BEncodeException("key must be a string, not dictionary"); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 0)) { value.Add(keys.Pop(), decodeInteger()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 1)) { throw new BEncodeException("key must be a string, not dictionary"); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 1)) { value.Add(keys.Pop(), decodeInteger()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 0)) { throw new BEncodeException("key must be a string, not dictionary"); } } else if (char.IsDigit(actual)) { if ((innerDictionaries == 0) && (keys.Count % 2 == 1)) { value.Add(keys.Pop(), decodeString()); } else if ((innerDictionaries == 0) && (keys.Count % 2 == 0)) { keys.Push(decodeString()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 0)) { value.Add(keys.Pop(), decodeString()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 1) && (keys.Count % 2 == 1)) { keys.Push(decodeString()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 1)) { value.Add(keys.Pop(), decodeString()); } else if ((innerDictionaries > 0) && (innerDictionaries % 2 == 0) && (keys.Count % 2 == 0)) { keys.Push(decodeString()); } else { throw new BEncodeException("cant recognize type in dictionary"); } } } } else { throw new BEncodeException("dictionary must start with d"); } if (!hasFinal) { throw new BEncodeException("dictionary must finish with e"); } return value; }
public void Add(BEncodeString key, BEncodeDictionary value) { data.Add(key, value); }
public void Add(BEncodeDictionary value) { data.Add(value); }