@@ -20,120 +20,62 @@ import (
20
20
"io"
21
21
22
22
"github.com/lucas-clemente/quic-go"
23
- "github.com/netsec-ethz/scion-apps/pkg/appnet/appquic"
23
+ "inet.af/netaddr"
24
+
25
+ "github.com/netsec-ethz/scion-apps/pkg/pan"
26
+ "github.com/netsec-ethz/scion-apps/pkg/quicutil"
24
27
)
25
28
26
29
var (
27
- nextProtos = []string {
28
- // generic "proto" that we use e.g. for HTTP-over-QUIC
29
- "raw" ,
30
- // we accept anything -- use full list of protocol IDs from
31
- // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids
32
- "http/0.9" ,
33
- "http/1.0" ,
34
- "http/1.1" ,
35
- "spdy/1" ,
36
- "spdy/2" ,
37
- "spdy/3" ,
38
- "stun.turn" ,
39
- "stun.nat-discovery" ,
40
- "h2" ,
41
- "h2c" ,
42
- "webrtc" ,
43
- "c-webrtc" ,
44
- "ftp" ,
45
- "imap" ,
46
- "pop3" ,
47
- "managesieve" ,
48
- "coap" ,
49
- "xmpp-client" ,
50
- "xmpp-server" ,
51
- "acme-tls/1" ,
52
- "mqtt" ,
53
- "dot" ,
54
- "ntske/1" ,
55
- "sunrpc" ,
56
- "h3" ,
57
- "smb" ,
58
- "irc" ,
59
- "nntp" ,
60
- "nnsp" ,
61
- }
30
+ nextProtos = []string {quicutil .SingleStreamProto }
62
31
)
63
32
64
- type sessConn struct {
65
- sess quic.Session
66
- stream quic.Stream
67
- }
68
-
69
- func (conn * sessConn ) Read (b []byte ) (n int , err error ) {
70
- return conn .stream .Read (b )
71
- }
72
-
73
- func (conn * sessConn ) Write (b []byte ) (n int , err error ) {
74
- return conn .stream .Write (b )
75
- }
76
-
77
- func (conn * sessConn ) CloseWrite () error {
78
- return conn .stream .Close ()
79
- }
80
-
81
- func (conn * sessConn ) Close () error {
82
- err := conn .stream .Close ()
83
- if err != nil {
84
- return err
85
- }
86
-
87
- err = conn .sess .CloseWithError (quic .ApplicationErrorCode (0 ), "" )
88
- if err != nil {
89
- return err
90
- }
91
- return nil
92
- }
93
-
94
33
// DoListenQUIC listens on a QUIC socket
95
34
func DoListenQUIC (port uint16 ) (chan io.ReadWriteCloser , error ) {
96
- listener , err := appquic .ListenPort (
97
- port ,
35
+ quicListener , err := pan .ListenQUIC (
36
+ context .Background (),
37
+ netaddr .IPPortFrom (netaddr.IP {}, port ),
38
+ nil ,
98
39
& tls.Config {
99
- Certificates : appquic . GetDummyTLSCerts (),
40
+ Certificates : quicutil . MustGenerateSelfSignedCert (),
100
41
NextProtos : nextProtos ,
101
42
},
102
43
& quic.Config {KeepAlive : true },
103
44
)
104
45
if err != nil {
105
46
return nil , err
106
47
}
48
+ listener := quicutil.SingleStreamListener {Listener : quicListener }
107
49
108
50
conns := make (chan io.ReadWriteCloser )
109
51
go func () {
110
- for {
111
- sess , err := listener .Accept (context .Background ())
112
- if err != nil {
113
- logError ("Can't accept listener" , "err" , err )
114
- continue
115
- }
116
52
117
- stream , err := sess .AcceptStream (context .Background ())
53
+ for {
54
+ conn , err := listener .Accept ()
118
55
if err != nil {
119
- logError ("Can't accept stream " , "err" , err )
56
+ logError ("Can't accept" , "err" , err )
120
57
continue
121
58
}
122
-
123
- conns <- & sessConn {
124
- sess : sess ,
125
- stream : stream ,
126
- }
59
+ conns <- conn
127
60
}
128
61
}()
129
62
130
63
return conns , nil
131
64
}
132
65
133
66
// DoDialQUIC dials with a QUIC socket
134
- func DoDialQUIC (remoteAddr string ) (io.ReadWriteCloser , error ) {
135
- sess , err := appquic .Dial (
67
+ func DoDialQUIC (remote string , policy pan.Policy ) (io.ReadWriteCloser , error ) {
68
+ remoteAddr , err := pan .ResolveUDPAddr (remote )
69
+ if err != nil {
70
+ return nil , err
71
+ }
72
+ sess , err := pan .DialQUIC (
73
+ context .Background (),
74
+ netaddr.IPPort {},
136
75
remoteAddr ,
76
+ policy ,
77
+ nil ,
78
+ pan .MangleSCIONAddr (remote ),
137
79
& tls.Config {
138
80
InsecureSkipVerify : true ,
139
81
NextProtos : nextProtos ,
@@ -144,13 +86,5 @@ func DoDialQUIC(remoteAddr string) (io.ReadWriteCloser, error) {
144
86
return nil , err
145
87
}
146
88
147
- stream , err := sess .OpenStreamSync (context .Background ())
148
- if err != nil {
149
- return nil , err
150
- }
151
-
152
- return & sessConn {
153
- sess : sess ,
154
- stream : stream ,
155
- }, nil
89
+ return quicutil .NewSingleStream (sess )
156
90
}
0 commit comments