Skip to content

Commit 8b6150c

Browse files
Merge pull request #16 from FireTail-io/reopen-packetsource
Reinitialise packetsource
2 parents 8f0f27f + 25106be commit 8b6150c

File tree

2 files changed

+27
-6
lines changed

2 files changed

+27
-6
lines changed

src/main.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ func main() {
128128
"Content-Length", strconv.Itoa(int(requestAndResponse.request.ContentLength)),
129129
)
130130
requestAndResponse.request.Header.Set("Host", requestAndResponse.request.Host)
131+
var responseRecorder *httptest.ResponseRecorder
132+
if devEnabled {
133+
responseRecorder = httptest.NewRecorder()
134+
}
131135
firetailMiddleware(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
132136
w.WriteHeader(requestAndResponse.response.StatusCode)
133137
for key, values := range requestAndResponse.response.Header {
@@ -145,9 +149,17 @@ func main() {
145149
}
146150
w.Write(capturedResponseBody)
147151
})).ServeHTTP(
148-
httptest.NewRecorder(),
152+
responseRecorder,
149153
requestAndResponse.request,
150154
)
155+
if responseRecorder != nil {
156+
slog.Debug(
157+
"Response from Firetail middleware:",
158+
"StatusCode", responseRecorder.Code,
159+
"Header", responseRecorder.Header(),
160+
"Body", responseRecorder.Body.String(),
161+
)
162+
}
151163
default:
152164
}
153165
}

src/request_and_response.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,20 @@ type httpRequestAndResponseStreamer struct {
2929
maxBodySize int64
3030
}
3131

32-
func (s *httpRequestAndResponseStreamer) start() {
32+
func (s *httpRequestAndResponseStreamer) getHandleAndPacketsChannel() (*pcap.Handle, <-chan gopacket.Packet) {
3333
handle, err := pcap.OpenLive("any", 1600, true, pcap.BlockForever)
3434
if err != nil {
3535
log.Fatal(err)
3636
}
37-
defer handle.Close()
38-
3937
err = handle.SetBPFFilter(s.bpfExpression)
4038
if err != nil {
4139
log.Fatal(err)
4240
}
41+
packetsChannel := gopacket.NewPacketSource(handle, handle.LinkType()).Packets()
42+
return handle, packetsChannel
43+
}
4344

45+
func (s *httpRequestAndResponseStreamer) start() {
4446
assembler := tcpassembly.NewAssembler(
4547
tcpassembly.NewStreamPool(
4648
&bidirectionalStreamFactory{
@@ -50,11 +52,18 @@ func (s *httpRequestAndResponseStreamer) start() {
5052
},
5153
),
5254
)
55+
56+
handler, packetsChannel := s.getHandleAndPacketsChannel()
57+
5358
ticker := time.Tick(time.Minute)
54-
packetsChannel := gopacket.NewPacketSource(handle, handle.LinkType()).Packets()
5559
for {
5660
select {
57-
case packet := <-packetsChannel:
61+
case packet, ok := <-packetsChannel:
62+
if !ok {
63+
slog.Warn("Packet channel closed. Reinitializing...")
64+
handler.Close()
65+
handler, packetsChannel = s.getHandleAndPacketsChannel()
66+
}
5867
if packet.NetworkLayer() == nil || packet.TransportLayer() == nil {
5968
continue
6069
}

0 commit comments

Comments
 (0)