Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/vendor/github.com/majestrate/i2p-tools/lib/i2p/listener.go
akuma06 a41f938cec Add Godep support (#758)
As we have seen, dependencies version can prevent the build. We should
user lock versions on dependencies that we know work:
* Packages are vendored
* Add Godep support
* Added addtional install step in readme
* Fix travis build error
2017-05-26 13:07:22 +02:00

81 lignes
1,5 Kio
Go

package i2p
import (
"bufio"
"errors"
"fmt"
"net"
"strings"
)
type i2pListener struct {
// parent session
session Session
// local address
laddr I2PAddr
}
// implements net.Listener
func (l *i2pListener) Addr() net.Addr {
return l.laddr
}
// implements net.Listener
func (l *i2pListener) Close() error {
l.session = nil
return nil
}
// implements net.Listener
func (l *i2pListener) Accept() (c net.Conn, err error) {
if l.session == nil {
err = errors.New("session closed")
return
}
var nc net.Conn
nc, err = l.session.OpenControlSocket()
if err == nil {
_, err = fmt.Fprintf(nc, "STREAM ACCEPT ID=%s SILENT=false\n", l.session.Name())
if err == nil {
r := bufio.NewReader(nc)
var line string
// read response line
line, err = r.ReadString(10)
if err == nil {
sc := bufio.NewScanner(strings.NewReader(line))
sc.Split(bufio.ScanWords)
for sc.Scan() {
text := sc.Text()
upper := strings.ToUpper(text)
if upper == "STREAM" {
continue
}
if upper == "RESULT" {
continue
}
if upper == "RESULT=OK" {
// we good
break
}
// error
err = errors.New(text)
}
}
// read address line
line, err = r.ReadString(10)
if err == nil {
// we got a new connection yeeeeh
c = &I2PConn{
c: nc,
laddr: l.laddr,
raddr: I2PAddr(line[:len(line)-1]),
}
}
}
if c == nil {
// we didn't get a connection
nc.Close()
}
}
return
}