Esempio n. 1
0
// decodes an nntp message and writes it to a section of the file.
func decodeMsg(c *nntp.Conn, f *file, groups []string, MsgID string) {
	defer f.Done()
	g, err := findGroup(c, groups)
	if err != nil {
		putBroken(c)
		glog.Errorf("switching to group %s: %s", g, err)
		return
	}
	rc, err := c.GetMessage(MsgID)
	if err != nil {
		glog.Errorf("getting message %s from group %s: %s", MsgID, g, err)
		if _, ok := err.(*textproto.Error); ok {
			putConn(c)
		} else {
			putBroken(c)
		}
		return
	}
	putConn(c)

	yread, err := yenc.NewPart(bytes.NewReader(rc))
	if err != nil {
		glog.Errorln(err)
		return
	}
	wr := f.WriterAt(yread.Begin)
	_, err = io.Copy(wr, yread)
	if err != nil {
		glog.Errorln(err)
	}
}