diff --git a/cmd/ximap/proxy/proxy b/cmd/ximap/proxy/proxy deleted file mode 100755 index 085dfb9..0000000 Binary files a/cmd/ximap/proxy/proxy and /dev/null differ diff --git a/cmd/ximap/proxy/proxy.go b/cmd/ximap/proxy/proxy.go deleted file mode 100644 index d5ceac6..0000000 --- a/cmd/ximap/proxy/proxy.go +++ /dev/null @@ -1,83 +0,0 @@ -package main - -import ( - "bufio" - "bytes" - "flag" - "fmt" - "net" - - "github.com/golang/glog" -) - -var ( - saddr = flag.String("saddr", ":11143", "address to listen on") - caddr = flag.String("caddr", "localhost:10143", "remote address to connect to") -) - -// scanLines reimplements bufio.ScanLines without eating '\r' in the input. -func scanLines(data []byte, atEOF bool) (advance int, token []byte, err error) { - if atEOF && len(data) == 0 { - return 0, nil, nil - } - if i := bytes.IndexByte(data, '\n'); i >= 0 { - // We have a full newline-terminated line. - return i + 1, data[0:i], nil - } - // If we're at EOF, we have a final, non-terminated line. Return it. - if atEOF { - return len(data), data, nil - } - // Request more data. - return 0, nil, nil -} - -func prefixCopy(prefix string, src, dst net.Conn) { - defer src.Close() - defer dst.Close() - - glog.Infof("%s proxying %s -> %s", prefix, src.LocalAddr(), dst.RemoteAddr()) - scanner := bufio.NewScanner(src) - scanner.Split(scanLines) - for scanner.Scan() { - glog.Infoln(prefix, scanner.Text()) // Println will add back the final '\n' - if _, err := fmt.Fprintln(dst, scanner.Text()); err != nil { - glog.Errorf("%s error writing to dst: %v", prefix, err) - return - } - } - if err := scanner.Err(); err != nil { - glog.Errorf("%s error reading from src: %v", prefix, err) - return - } -} - -func proxy(id int, client net.Conn, remoteAddr string) { - remote, err := net.Dial("tcp", remoteAddr) - if err != nil { - glog.Errorf("Failed to dial %s: %v", remoteAddr, err) - return - } - go prefixCopy(fmt.Sprintf("[%d] S:", id), remote, client) - go prefixCopy(fmt.Sprintf("[%d] C:", id), client, remote) -} - -func main() { - flag.Parse() - defer glog.Flush() - - glog.Infof("Proxying %s -> %s", *saddr, *caddr) - ln, err := net.Listen("tcp", *saddr) - if err != nil { - glog.Exitf("Failed to listen on %s: %v", *saddr, err) - } - var id int - for { - conn, err := ln.Accept() - if err != nil { - glog.Exitf("Failed to accept on %s: %v", *saddr, err) - } - proxy(id, conn, *caddr) - id++ - } -} diff --git a/cmd/ximap/test.muttrc b/cmd/ximap/test.muttrc deleted file mode 100644 index e0f958b..0000000 --- a/cmd/ximap/test.muttrc +++ /dev/null @@ -1,5 +0,0 @@ -set spoolfile=imap://username:password@localhost:10143/INBOX -set folder="imap://localhost:10143/INBOX" -set record="=Sent" -set postponed="=Drafts" - diff --git a/cmd/ximap/testclient/testclient b/cmd/ximap/testclient/testclient deleted file mode 100755 index 192f9b3..0000000 Binary files a/cmd/ximap/testclient/testclient and /dev/null differ diff --git a/cmd/ximap/testclient/testclient.go b/cmd/ximap/testclient/testclient.go deleted file mode 100644 index d4930bd..0000000 --- a/cmd/ximap/testclient/testclient.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "bytes" - "encoding/base64" - "flag" - "fmt" - "io" - "net" - "os" - "strings" - - "github.com/golang/glog" -) - -var addr = flag.String("addr", "localhost:10143", "IMAP addr") - -type client struct { - net.Conn - msgCount int -} - -func (c *client) cmd(tagged bool, msg ...string) { - w := io.MultiWriter(c.Conn, os.Stdout) - var b bytes.Buffer - if tagged { - fmt.Fprintf(&b, "a%04d ", c.msgCount) - c.msgCount++ - } - fmt.Fprintln(&b, strings.Join(msg, " ")) - if _, err := io.Copy(w, &b); err != nil { - panic(err) - } -} - -func (c *client) Close() error { - return c.Conn.Close() -} - -func main() { - flag.Parse() - defer glog.Flush() - - conn, err := net.Dial("tcp", *addr) - if err != nil { - glog.Exitf("Failed to connect to %q: %v", *addr, err) - } - c := &client{Conn: conn} - defer c.Close() - defer func() { - if _, err := io.Copy(os.Stdout, c); err != nil { - glog.Exitf("Failed to read from connection: %v", err) - } - }() - - c.cmd(true, "AUTHENTICATE PLAIN ") - c.cmd(false, base64.StdEncoding.EncodeToString([]byte("\x00username\x00password"))) - c.cmd(true, "SELECT INBOX") - c.cmd(true, "FETCH 1:* (FLAGS INTERNALDATE RFC822.SIZE BODY[HEADER])") - c.cmd(true, "CLOSE") - c.cmd(true, "LOGOUT") -} diff --git a/cmd/ximap/tmutt b/cmd/ximap/tmutt deleted file mode 100755 index 38fef53..0000000 --- a/cmd/ximap/tmutt +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -mutt -F test.muttrc diff --git a/cmd/ximap/ximap.go b/cmd/ximap/ximap.go deleted file mode 100644 index 131d971..0000000 --- a/cmd/ximap/ximap.go +++ /dev/null @@ -1,78 +0,0 @@ -package main - -import ( - "flag" - "fmt" - "net/http" - "net/textproto" - "os" - "time" - - xprometheus "xinu.tv/imapstore/prometheus" - "xinu.tv/lorem" - - "github.com/golang/glog" - "github.com/jordwest/imap-server" - "github.com/jordwest/imap-server/mailstore" - "github.com/prometheus/client_golang/prometheus/promhttp" -) - -var ( - imapAddr = flag.String("imap", ":10143", "listen address for IMAP") - httpAddr = flag.String("http", ":10080", "listen address for HTTP") - msgCount = flag.Int("msg", 0, "number of messages to generate and insert in to mailstore") -) - -func fill(ms mailstore.Mailstore, numMessages int) error { - glog.Infof("Generation of %d messages started...", numMessages) - defer glog.Infof("Done creating fake messages") - genEmail := func() string { - return lorem.Words(1, false) + "@" + lorem.Words(1, false) + ".com" - } - u, err := ms.Authenticate("username", "password") - if err != nil { - return err - } - mBoxes := u.Mailboxes() - for i := 0; i < numMessages; i++ { - mBox := mBoxes[i%len(mBoxes)] - msg := mBox.NewMessage() - date := time.Unix(int64(i)*17*24*60*60, 0).Format(time.RFC822Z) - msg.SetHeaders(textproto.MIMEHeader{ - "Subject": []string{lorem.Sentence()}, - "From": []string{genEmail()}, - "To": []string{genEmail()}, - "Date": []string{date}, - }).SetBody(lorem.Paragraph()) - if _, err := msg.Save(); err != nil { - return fmt.Errorf("creating %d message in %s failed; %v", i, mBox.Name()) - } - } - return nil -} - -func main() { - flag.Parse() - defer glog.Flush() - - http.Handle("/metrics", promhttp.Handler()) - go func() { - glog.Fatal(http.ListenAndServe(*httpAddr, nil)) - }() - - var store mailstore.Mailstore - store = mailstore.NewDummyMailstore() - if *msgCount != 0 { - if err := fill(store, *msgCount); err != nil { - glog.Errorf("Failed to fill dummy mailstore: %v", err) - } - } - store = xprometheus.NewMailstore(store) - s := imap.NewServer(store) - s.Transcript = os.Stdout - s.Addr = *imapAddr - - if err := s.ListenAndServe(); err != nil { - fmt.Printf("Error creating test connection: %s\n", err) - } -}