private static PaymentDetails Load(Stream source) { var reader = new Protobuf.ProtobufReaderWriter(source); var result = new PaymentDetails(); int key; while (reader.TryReadKey(out key)) { switch (key) { case 1: var network = reader.ReadString(); result.Network = network.Equals("main", StringComparison.OrdinalIgnoreCase) ? Network.Main : network.Equals("test", StringComparison.OrdinalIgnoreCase) ? Network.TestNet : network.Equals("regtest", StringComparison.OrdinalIgnoreCase) ? Network.RegTest : null; if (result.Network == null) { throw new NotSupportedException("Invalid network"); } break; case 2: result.Outputs.Add(PaymentOutput.Load(reader.ReadBytes())); break; case 3: result.Time = Utils.UnixTimeToDateTime(reader.ReadULong()); break; case 4: result.Expires = Utils.UnixTimeToDateTime(reader.ReadULong()); break; case 5: result.Memo = reader.ReadString(); break; case 6: result.PaymentUrl = new Uri(reader.ReadString()); break; case 7: result.MerchantData = reader.ReadBytes(); break; default: break; } } return(result); }
public static PaymentMessage Load(Stream source) { if (source.CanSeek && source.Length > MaxLength) { throw new ArgumentException("Payment messages larger than " + MaxLength + " bytes should be rejected by the merchant's server", "source"); } PaymentMessage message = new PaymentMessage(); ProtobufReaderWriter proto = new ProtobufReaderWriter(source); int key; while (proto.TryReadKey(out key)) { switch (key) { case 1: message.MerchantData = proto.ReadBytes(); break; case 2: message.Transactions.Add(new Transaction(proto.ReadBytes())); break; case 3: message.RefundTo.Add(PaymentOutput.Load(proto.ReadBytes())); break; case 4: message.Memo = proto.ReadString(); break; default: break; } } return(message); }