Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "flag"
- "fmt"
- "os"
- )
- const (
- choke = iota
- unchoke
- interested
- not_intereste
- have
- bitfield
- request
- piece
- cancel
- )
- type Element interface{}
- func buncode(in *os.File) (e Element) {
- var c [1]byte
- n, err := in.Read(c[:])
- if err != nil {
- panic(err)
- }
- if n == 0 {
- return nil
- }
- switch c[0] {
- case 'd':
- e = make(map[string]interface{})
- for {
- var k string = buncode(in).(string)
- v := buncode(in)
- e[k] = v
- }
- return
- case 'l':
- return "list"
- case 'i':
- return "int"
- default:
- panic("unknown type specified")
- }
- return nil
- }
- func main() {
- port := flag.Uint("port", 6881, "listen port for peers")
- flag.Parse()
- torrent_file := flag.Arg(0)
- if flag.NArg() > 2 {
- fmt.Println("Too many arguments")
- os.Exit(2)
- }
- fmt.Println("port is", *port, "torrent file at", torrent_file)
- file, err := os.Open(torrent_file)
- if err != nil {
- panic(err.String())
- }
- fmt.Println(buncode(file))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement