1// Copyright 2017 syzkaller project authors. All rights reserved. 2// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4package email 5 6import ( 7 "bufio" 8 "bytes" 9 "strings" 10) 11 12func FormReply(email, reply string) string { 13 s := bufio.NewScanner(strings.NewReader(email)) 14 out := new(bytes.Buffer) 15 replied := false 16 for s.Scan() { 17 ln := s.Bytes() 18 out.WriteByte('>') 19 if len(ln) != 0 && ln[0] != '>' { 20 out.WriteByte(' ') 21 } 22 out.Write(ln) 23 out.WriteByte('\n') 24 if !replied && bytes.HasPrefix(ln, []byte(commandPrefix)) { 25 replied = true 26 writeReply(out, reply) 27 } 28 } 29 if !replied { 30 writeReply(out, reply) 31 } 32 return out.String() 33} 34 35func writeReply(out *bytes.Buffer, reply string) { 36 out.WriteByte('\n') 37 out.WriteString(reply) 38 if reply != "" && reply[len(reply)-1] != '\n' { 39 out.WriteByte('\n') 40 } 41 out.WriteByte('\n') 42} 43