equal
deleted
inserted
replaced
5 package main |
5 package main |
6 |
6 |
7 import ( |
7 import ( |
8 xmpp ".." |
8 xmpp ".." |
9 "crypto/tls" |
9 "crypto/tls" |
|
10 "encoding/xml" |
10 "flag" |
11 "flag" |
11 "fmt" |
12 "fmt" |
12 "log" |
13 "log" |
13 "os" |
14 "os" |
|
15 "strings" |
14 ) |
16 ) |
15 |
17 |
16 type StdLogger struct { |
18 type StdLogger struct { |
17 } |
19 } |
18 |
20 |
19 func (s *StdLogger) Log(v ...interface{}) { |
21 func (s *StdLogger) Log(v ...interface{}) { |
20 log.Println(v) |
22 log.Println(v...) |
21 } |
23 } |
22 |
24 |
23 func (s *StdLogger) Logf(fmt string, v ...interface{}) { |
25 func (s *StdLogger) Logf(fmt string, v ...interface{}) { |
24 log.Printf(fmt, v) |
26 log.Printf(fmt, v...) |
25 } |
27 } |
26 |
28 |
27 func init() { |
29 func init() { |
28 logger := &StdLogger{} |
30 logger := &StdLogger{} |
29 // xmpp.Debug = logger |
31 // xmpp.Debug = logger |
59 fmt.Printf("%d roster entries:\n", len(roster)) |
61 fmt.Printf("%d roster entries:\n", len(roster)) |
60 for i, entry := range(roster) { |
62 for i, entry := range(roster) { |
61 fmt.Printf("%d: %v\n", i, entry) |
63 fmt.Printf("%d: %v\n", i, entry) |
62 } |
64 } |
63 |
65 |
64 go func(ch <-chan xmpp.Stanza) { |
66 go func(ch <-chan interface{}) { |
65 for obj := range ch { |
67 for obj := range ch { |
66 fmt.Printf("s: %v\n", obj) |
68 fmt.Printf("s: %v\n", obj) |
67 } |
69 } |
68 fmt.Println("done reading") |
70 fmt.Println("done reading") |
69 }(c.In) |
71 }(c.In) |
73 nr, _ := os.Stdin.Read(p) |
75 nr, _ := os.Stdin.Read(p) |
74 if nr == 0 { |
76 if nr == 0 { |
75 break |
77 break |
76 } |
78 } |
77 s := string(p) |
79 s := string(p) |
78 stan, err := xmpp.ParseStanza(s) |
80 dec := xml.NewDecoder(strings.NewReader(s)) |
|
81 t, err := dec.Token() |
|
82 if err != nil { |
|
83 fmt.Printf("token: %s\n", err) |
|
84 break |
|
85 } |
|
86 var se *xml.StartElement |
|
87 var ok bool |
|
88 if se, ok = t.(*xml.StartElement) ; !ok { |
|
89 fmt.Println("Couldn't find start element") |
|
90 break |
|
91 } |
|
92 var stan interface{} |
|
93 switch se.Name.Local { |
|
94 case "iq": |
|
95 stan = &xmpp.Iq{} |
|
96 case "message": |
|
97 stan = &xmpp.Message{} |
|
98 case "presence": |
|
99 stan = &xmpp.Presence{} |
|
100 default: |
|
101 fmt.Println("Can't parse non-stanza.") |
|
102 continue |
|
103 } |
|
104 err = dec.Decode(stan) |
79 if err == nil { |
105 if err == nil { |
80 c.Out <- stan |
106 c.Out <- stan |
81 } else { |
107 } else { |
82 fmt.Printf("Parse error: %v\n", err) |
108 fmt.Printf("Parse error: %v\n", err) |
83 break |
109 break |