Fix tests + refactoring

This commit is contained in:
Leonid Bugaev
2016-06-21 18:32:07 +03:00
parent f2c9aee4ac
commit 48fdc02d2f
2 changed files with 48 additions and 32 deletions
+19 -32
View File
@@ -516,11 +516,6 @@ func (t *Listener) isValidPacket(buf []byte) bool {
return false
}
var bExpectHeader = []byte("Expect:")
var bExpect100Value = []byte("100-continue")
var bPOST = []byte("POST")
var bCRLFx2 = []byte("\r\n\r\n")
// Trying to add packet to existing message or creating new message
//
// For TCP message unique id is Acknowledgment number (see tcp_packet.go)
@@ -592,38 +587,30 @@ func (t *Listener) processTCPPacket(packet *TCPPacket) {
message.AddPacket(packet)
// Handling Expect: 100-continue requests
if len(packet.Data) > 4 && bytes.Equal(packet.Data[0:4], bPOST) {
// reading last 8 bytes for double CRLF
if bytes.Equal(packet.Data[len(packet.Data)-4:], bCRLFx2) {
// look for an expect:100-continue header
if bytes.Equal(bExpect100Value, proto.Header(packet.Data, bExpectHeader)) {
seq := packet.Seq + uint32(len(packet.Data))
t.seqWithData[seq] = packet.Ack
message.DataSeq = seq
if message.Is100Continue() {
seq := packet.Seq + uint32(len(packet.Data))
t.seqWithData[seq] = packet.Ack
message.DataSeq = seq
// In case if sequence packet came first
for _, m := range t.messages {
if m.Seq == seq {
t.deleteMessage(m)
if m.AssocMessage != nil {
message.AssocMessage = m.AssocMessage
}
// log.Println("2: Adding ack alias:", m.Ack, packet.Ack)
t.ackAliases[m.Ack] = packet.Ack
for _, pkt := range m.packets {
pkt.UpdateAck(packet.Ack)
message.AddPacket(pkt)
}
}
// In case if sequence packet came first
for _, m := range t.messages {
if m.Seq == seq {
t.deleteMessage(m)
if m.AssocMessage != nil {
message.AssocMessage = m.AssocMessage
}
// log.Println("2: Adding ack alias:", m.Ack, packet.Ack)
t.ackAliases[m.Ack] = packet.Ack
// Removing `Expect: 100-continue` header
packet.Data = proto.DelHeader(packet.Data, bExpectHeader)
// log.Println(string(packet.Data))
for _, pkt := range m.packets {
pkt.UpdateAck(packet.Ack)
message.AddPacket(pkt)
}
}
}
// Removing `Expect: 100-continue` header
packet.Data = proto.DeleteHeader(packet.Data, bExpectHeader)
}
// log.Println("Received message:", string(message.Bytes()), message.ID(), t.messages)
+29
View File
@@ -227,6 +227,35 @@ func (t *TCPMessage) IsFinished() bool {
return false
}
var bExpectHeader = []byte("Expect:")
var bExpect100Value = []byte("100-continue")
var bPOST = []byte("POST")
var bCRLFx2 = []byte("\r\n\r\n")
func (t *TCPMessage) Is100Continue() bool {
d := t.packets[0].Data
if len(d) < 25 {
return false
}
if !bytes.Equal(d[0:4], bPOST) {
return false
}
// reading last 4 bytes for double CRLF
if !bytes.Equal(d[len(d)-4:], bCRLFx2) {
return false
}
// look for an expect:100-continue header
if !bytes.Equal(bExpect100Value, proto.Header(d, bExpectHeader)) {
return false
}
return true
}
func (t *TCPMessage) UUID() []byte {
var key []byte