xmpp.go
changeset 62 6e2eea62ccca
parent 61 16513974d273
child 63 c7f2edd25f4a
--- a/xmpp.go	Sat Jan 07 22:22:18 2012 -0700
+++ b/xmpp.go	Sun Jan 08 09:11:14 2012 -0700
@@ -13,10 +13,10 @@
 	"bytes"
 	"fmt"
 	"io"
-	"log"
 	"net"
 	"os"
 	"sync"
+	"syslog"
 	"xml"
 )
 
@@ -36,12 +36,14 @@
 	// DNS SRV names
 	serverSrv = "xmpp-server"
 	clientSrv = "xmpp-client"
+)
 
-	// BUG(cjyar) Make this a parameter to NewClient, not a
-	// constant. We should have both a log level and a
-	// syslog.Writer, so the app can control how much time we
-	// spend generating log messages, as well as where they go.
-	debug = false
+var (
+	// If non-nil when NewClient() is called, log messages will be
+	// sent to this writer.
+	Log *syslog.Writer
+	// Threshold for which messages are logged.
+	Loglevel syslog.Priority = syslog.LOG_NOTICE
 )
 
 // This channel may be used as a convenient way to generate a unique
@@ -239,7 +241,7 @@
 func tee(r io.Reader, w io.Writer, prefix string) {
 	defer tryClose(r, w)
 
-	buf := bytes.NewBuffer(nil)
+	buf := bytes.NewBuffer([]uint8(prefix))
 	for {
 		var c [1]byte
 		n, _ := r.Read(c[:])
@@ -252,13 +254,13 @@
 		}
 		buf.Write(c[:n])
 		if c[0] == '\n' || c[0] == '>' {
-			fmt.Printf("%s%s\n", prefix, buf.String())
+			Log.Debug(buf.String())
 			buf.Reset()
 		}
 	}
 	leftover := buf.String()
 	if leftover != "" {
-		fmt.Printf("%s%s\n", prefix, leftover)
+		Log.Debug(buf.String())
 	}
 }
 
@@ -307,7 +309,10 @@
 	ch := make(chan os.Error)
 	f := func(st Stanza) bool {
 		if st.GetType() == "error" {
-			log.Printf("Can't start session: %v", st)
+			if Log != nil {
+				Log.Err(fmt.Sprintf("Can't start session: %v",
+					st))
+			}
 			ch <- st.GetError()
 			return false
 		}