本文整理汇总了Golang中net/textproto.Conn类的典型用法代码示例。如果您正苦于以下问题:Golang Conn类的具体用法?Golang Conn怎么用?Golang Conn使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Conn类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: handleList
func handleList(args []string, s *session, c *textproto.Conn) error {
ltype := "active"
if len(args) > 0 {
ltype = strings.ToLower(args[0])
}
if ltype == "overview.fmt" {
return handleListOverviewFmt(c)
}
groups, err := s.backend.ListGroups(-1)
if err != nil {
return err
}
c.PrintfLine("215 list of newsgroups follows")
dw := c.DotWriter()
defer dw.Close()
for _, g := range groups {
switch ltype {
case "active":
fmt.Fprintf(dw, "%s %d %d %v\r\n",
g.Name, g.High, g.Low, g.Posting)
case "newsgroups":
fmt.Fprintf(dw, "%s %s\r\n", g.Name, g.Description)
}
}
return nil
}
示例2: collectLines
func collectLines(c *textproto.Conn) ([]string, error) {
var ex error
var line string
var msg []string
var ended bool
line, ex = c.ReadLine()
if ex != nil {
return nil, ex
}
if !validLine(line) {
return nil, ErrShortResponse
}
msg = append(msg, line)
ended = line[3] != '-'
for ex == nil && !ended {
line, ex = c.ReadLine()
if ex != nil {
return nil, ex
}
msg = append(msg, line)
ended = line[3] != '-'
}
return msg, nil
}
示例3: GetRequest
func GetRequest(request Request, client *textproto.Conn) error {
var err error
defer func() {
if err != nil {
if err == io.EOF {
} else {
log.Println("Conn died with err %s", err)
}
}
}()
requestHeaders, err := client.ReadMIMEHeader()
if err != nil {
return err
}
response := fmt.Sprintf("Hello from Baboon!\nHave I seen you before?"+
"\nI know a bit about you.\n"+
"For example, your User Agent is %s", requestHeaders["User-Agent"])
serverHeaders := map[string]string{}
serverHeaders["Server"] = "Baboon/0.001"
serverHeaders["Content-Type"] = "text/plain"
serverHeaders["Content-Length"] = strconv.Itoa(len(response))
client.PrintfLine("HTTP/1.1 200 OK")
for key, value := range serverHeaders {
client.PrintfLine("%s: %s", key, value)
}
client.PrintfLine("")
client.PrintfLine(response)
return nil
}
示例4: processConnData
func processConnData(conn *textproto.Conn) response {
res := response{Data: make([]string, 0)}
for {
line, err := conn.ReadLine()
if err != nil {
res.Err = err
break
}
if line == "OK" {
break
}
match := mpdErrorRegexp.FindStringSubmatch(line)
if match != nil {
ack, err := strconv.ParseUint(match[1], 0, 0)
if err != nil {
res.Err = err
break
}
cln, err := strconv.ParseUint(match[2], 0, 0)
if err != nil {
res.Err = err
break
}
res.MPDErr = &MPDError{uint(ack), uint(cln), match[3], match[4]}
break
}
res.Data = append(res.Data, line)
}
return res
}
示例5: startReader
func (self *nntpConnection) startReader(daemon *NNTPDaemon, conn *textproto.Conn) {
log.Println(self.name, "run reader mode")
for {
var err error
select {
case chnl := <-self.die:
// we were asked to die
// send quit
conn.PrintfLine("QUIT")
chnl <- true
break
case msgid := <-self.article:
// next article to ask for
log.Println(self.name, "obtaining", msgid)
self.messageSetPendingState(msgid, "article")
err = self.requestArticle(daemon, conn, msgid)
self.messageSetProcessed(msgid)
if err != nil {
log.Println(self.name, "error while in reader mode:", err)
break
}
}
}
// close connection
conn.Close()
}
示例6: handleMode
func handleMode(args []string, s *session, c *textproto.Conn) error {
if s.backend.AllowPost() {
c.PrintfLine("200 Posting allowed")
} else {
c.PrintfLine("201 Posting prohibited")
}
return nil
}
示例7: handle
func handle(c *textproto.Conn, verifyOnly bool) {
defer c.Close()
defer func() {
if r := recover(); r != nil {
log.Println("Something went wrong:", r)
}
}()
converse(c, verifyOnly)
}
示例8: converse
func converse(c *textproto.Conn, verifyOnly bool) {
write(c, "220 At your service")
var msg Msg
for {
s, err := read(c)
if err == io.EOF {
return
}
if verifyOnly {
log.Println("Incoming:", s)
}
cmd := strings.ToUpper(s[:4])
switch cmd {
case "EHLO":
write(c, "250-8BITMIME")
fallthrough
case "HELO":
write(c, "250 I need orders")
case "MAIL":
msg.From = addrRegex.FindStringSubmatch(s)[1]
write(c, "250 In your name")
case "RCPT":
addr := addrRegex.FindStringSubmatch(s)[1]
msg.To = append(msg.To, addr)
write(c, "250 Defending your honour")
case "DATA":
if verifyOnly {
write(c, "502 Verification service only")
return
}
write(c, "354 Give me a quest!")
data, err := c.ReadDotBytes()
if err != nil {
panic(err)
}
msg.Data = data
defaultHandle(&msg)
write(c, "250 We move")
case "RSET":
write(c, "250 OK")
case "QUIT":
write(c, "221 For the king")
default:
log.Println("Unknown command:", s)
}
}
}
示例9: handleBody
func handleBody(args []string, s *session, c *textproto.Conn) error {
article, err := s.getArticle(args)
if err != nil {
return err
}
c.PrintfLine("222 1 %s", article.MessageId())
dw := c.DotWriter()
defer dw.Close()
_, err = io.Copy(dw, article.Body)
return err
}
示例10: newClient
func newClient(conn *textproto.Conn) (*Conn, error) {
_, msg, err := conn.ReadCodeLine(200)
if err != nil {
return nil, err
}
return &Conn{
conn: conn,
Banner: msg,
}, nil
}
示例11: startReader
func (self *nntpConnection) startReader(daemon NNTPDaemon, conn *textproto.Conn) {
log.Println(self.name, "run reader mode")
var err error
for err == nil {
// next article to ask for
msgid := <-self.article
err = self.requestArticle(daemon, conn, msgid)
}
// report error and close connection
log.Println(self.name, "error while in reader mode:", err)
conn.Close()
}
示例12: read
func read(c *textproto.Conn) (string, error) {
s, err := c.ReadLine()
if err == io.EOF {
return s, err
}
if err != nil {
panic(err)
}
return s, err
}
示例13: handleHead
func handleHead(args []string, s *session, c *textproto.Conn) error {
article, err := s.getArticle(args)
if err != nil {
return err
}
c.PrintfLine("221 1 %s", article.MessageId())
dw := c.DotWriter()
defer dw.Close()
for k, v := range article.Header {
fmt.Fprintf(dw, "%s: %s\r\n", k, v[0])
}
return nil
}
示例14: handleIHave
func handleIHave(args []string, s *session, c *textproto.Conn) error {
if !s.backend.AllowPost() {
return NotWanted
}
// XXX: See if we have it.
article, err := s.backend.GetArticle(nil, args[0])
if article != nil {
return NotWanted
}
c.PrintfLine("335 send it")
article = new(nntp.Article)
article.Header, err = c.ReadMIMEHeader()
if err != nil {
return PostingFailed
}
article.Body = c.DotReader()
err = s.backend.Post(article)
if err != nil {
return err
}
c.PrintfLine("235 article received OK")
return nil
}
示例15: handleListOverviewFmt
func handleListOverviewFmt(dw io.Writer, c *textproto.Conn) error {
err := c.PrintfLine("215 list of newsgroups follows")
if err != nil {
return err
}
_, err = fmt.Fprintln(dw, `Subject:
From:
Date:
Message-ID:
References:
:bytes
:lines`)
return err
}