@@ -62,6 +62,7 @@ func (e *encoder) Encode(messages <-chan message.Message, storage storage.Writer
6262 startTime := int64 (0 )
6363 headerWritten := false
6464 var ip = ""
65+ var proxy * string
6566 var username * string
6667 const shell = "/bin/sh"
6768 for {
@@ -70,11 +71,12 @@ func (e *encoder) Encode(messages <-chan message.Message, storage storage.Writer
7071 break
7172 }
7273 var err error
73- startTime , headerWritten , ip , username , err = e .encodeMessage (
74+ startTime , headerWritten , ip , proxy , username , err = e .encodeMessage (
7475 startTime ,
7576 msg ,
7677 & asciicastHeader ,
7778 ip ,
79+ proxy ,
7880 storage ,
7981 username ,
8082 headerWritten ,
@@ -106,11 +108,12 @@ func (e *encoder) encodeMessage(
106108 msg message.Message ,
107109 asciicastHeader * Header ,
108110 ip string ,
111+ proxy * string ,
109112 storage storage.Writer ,
110113 username * string ,
111114 headerWritten bool ,
112115 shell string ,
113- ) (int64 , bool , string , * string , error ) {
116+ ) (int64 , bool , string , * string , * string , error ) {
114117 if msg .MessageType == message .TypeConnect {
115118 startTime = msg .Timestamp
116119 asciicastHeader .Timestamp = int (startTime / 1000000000 )
@@ -121,11 +124,11 @@ func (e *encoder) encodeMessage(
121124 case message .TypeConnect :
122125 ip , username = e .handleConnect (storage , msg , startTime , country , username )
123126 case message .TypeAuthPasswordSuccessful :
124- ip , username = e .handleAuthPasswordSuccessful (storage , msg , startTime , ip , country )
127+ ip , username = e .handleAuthPasswordSuccessful (storage , msg , startTime , ip , proxy , country )
125128 case message .TypeAuthPubKeySuccessful :
126- ip , username = e .handleAuthPubkeySuccessful (storage , msg , startTime , ip , country )
129+ ip , username = e .handleAuthPubkeySuccessful (storage , msg , startTime , ip , proxy , country )
127130 case message .TypeHandshakeSuccessful :
128- ip , username = e .handleHandshakeSuccessful (storage , msg , startTime , ip , country )
131+ ip , username = e .handleHandshakeSuccessful (storage , msg , startTime , ip , proxy , country )
129132 case message .TypeChannelRequestSetEnv :
130133 payload := msg .Payload .(message.PayloadChannelRequestSetEnv )
131134 asciicastHeader .Env [payload .Name ] = payload .Value
@@ -142,36 +145,40 @@ func (e *encoder) encodeMessage(
142145 startTime , headerWritten , err = e .handleIO (startTime , msg , asciicastHeader , headerWritten , shell , storage )
143146 }
144147 if err != nil {
145- return startTime , headerWritten , ip , username , err
148+ return startTime , headerWritten , ip , proxy , username , err
146149 }
147- return startTime , headerWritten , ip , username , nil
150+ return startTime , headerWritten , ip , proxy , username , nil
148151}
149152
150153func (e * encoder ) handleConnect (storage storage.Writer , msg message.Message , startTime int64 , country string , username * string ) (string , * string ) {
151154 payload := msg .Payload .(message.PayloadConnect )
152155 ip := payload .RemoteAddr
153- storage .SetMetadata (startTime / 1000000000 , ip , country , username )
156+ var proxy * string
157+ if payload .ProxyAddr != "" {
158+ proxy = & payload .ProxyAddr
159+ }
160+ storage .SetMetadata (startTime / 1000000000 , ip , proxy , country , username )
154161 return ip , username
155162}
156163
157- func (e * encoder ) handleAuthPasswordSuccessful (storage storage.Writer , msg message.Message , startTime int64 , ip string , country string ) (string , * string ) {
164+ func (e * encoder ) handleAuthPasswordSuccessful (storage storage.Writer , msg message.Message , startTime int64 , ip string , proxy * string , country string ) (string , * string ) {
158165 payload := msg .Payload .(message.PayloadAuthPassword )
159166 username := & payload .Username
160- storage .SetMetadata (startTime / 1000000000 , ip , country , username )
167+ storage .SetMetadata (startTime / 1000000000 , ip , proxy , country , username )
161168 return ip , username
162169}
163170
164- func (e * encoder ) handleAuthPubkeySuccessful (storage storage.Writer , msg message.Message , startTime int64 , ip string , country string ) (string , * string ) {
171+ func (e * encoder ) handleAuthPubkeySuccessful (storage storage.Writer , msg message.Message , startTime int64 , ip string , proxy * string , country string ) (string , * string ) {
165172 payload := msg .Payload .(message.PayloadAuthPubKey )
166173 username := & payload .Username
167- storage .SetMetadata (startTime / 1000000000 , ip , country , username )
174+ storage .SetMetadata (startTime / 1000000000 , ip , proxy , country , username )
168175 return ip , username
169176}
170177
171- func (e * encoder ) handleHandshakeSuccessful (storage storage.Writer , msg message.Message , startTime int64 , ip string , country string ) (string , * string ) {
178+ func (e * encoder ) handleHandshakeSuccessful (storage storage.Writer , msg message.Message , startTime int64 , ip string , proxy * string , country string ) (string , * string ) {
172179 payload := msg .Payload .(message.PayloadHandshakeSuccessful )
173180 username := & payload .Username
174- storage .SetMetadata (startTime / 1000000000 , ip , country , username )
181+ storage .SetMetadata (startTime / 1000000000 , ip , proxy , country , username )
175182 return ip , username
176183}
177184
0 commit comments