Browse Source

a big "aha!" moment with discovering why the type didn't borrow functions form bufio!

flashmob 9 years ago
parent
commit
b718babefc
1 changed files with 7 additions and 4 deletions
  1. 7 4
      smtpd.go

+ 7 - 4
smtpd.go

@@ -309,13 +309,15 @@ func newAdjustableLimitedReader(r io.Reader, n int64) *adjustableLimitedReader {
 
 
 // We need buffio to use the limited reader, and have access to the limited reader
 // We need buffio to use the limited reader, and have access to the limited reader
 type smtpBufferedReader struct {
 type smtpBufferedReader struct {
-	br  *bufio.Reader
+	*bufio.Reader
 	alr *adjustableLimitedReader
 	alr *adjustableLimitedReader
 }
 }
 
 
+
+
 // delegate to the bufio.Reader & detect if input limit exceeded
 // delegate to the bufio.Reader & detect if input limit exceeded
-func (sbr *smtpBufferedReader) ReadString(delim byte) (line string, err error) {
-	line, err = sbr.br.ReadString(delim)
+func (sbr *smtpBufferedReader) ReadLimitedString(delim byte) (line string, err error) {
+	line, err = sbr.ReadString(delim)
 	if err == io.EOF && sbr.alr.R.N <= 0 {
 	if err == io.EOF && sbr.alr.R.N <= 0 {
 		// return our custom error since std lib returns EOF
 		// return our custom error since std lib returns EOF
 		err = INPUT_LIMIT_EXCEEDED
 		err = INPUT_LIMIT_EXCEEDED
@@ -323,6 +325,7 @@ func (sbr *smtpBufferedReader) ReadString(delim byte) (line string, err error) {
 	return
 	return
 }
 }
 
 
+
 // delegate to the adjustable limited reader
 // delegate to the adjustable limited reader
 func (sbr *smtpBufferedReader) setLimit(n int64) {
 func (sbr *smtpBufferedReader) setLimit(n int64) {
 	sbr.alr.setLimit(n)
 	sbr.alr.setLimit(n)
@@ -347,7 +350,7 @@ func (server *SmtpdServer) readSmtp(client *Client) (input string, err error) {
 	}
 	}
 	for err == nil {
 	for err == nil {
 		client.conn.SetDeadline(time.Now().Add(server.timeout * time.Second))
 		client.conn.SetDeadline(time.Now().Add(server.timeout * time.Second))
-		reply, err = client.bufin.ReadString('\n')
+		reply, err = client.bufin.ReadLimitedString('\n')
 		if reply != "" {
 		if reply != "" {
 			input = input + reply
 			input = input + reply
 			if len(input) > server.Config.Max_size {
 			if len(input) > server.Config.Max_size {