diff --git a/multiplexer/dialogue.go b/multiplexer/dialogue.go index 7a29dd6..3c5c4d6 100644 --- a/multiplexer/dialogue.go +++ b/multiplexer/dialogue.go @@ -489,10 +489,12 @@ func (dg *dialogue) handleInDimssAckPacket(pkt *packet.DismissAckPacket) iodefin } func (dg *dialogue) handleInDataPacket(pkt packet.Packet) iodefine.IORet { - ok := dg.fsm.InStates(SESSIONED) + // we regard statuses which include sessioned, dismiss_half, dismiss_sent as normal statuses + // and status dismiss_recv should be optimized from client side. + ok := dg.fsm.InStates(SESSIONED, DISMISS_HALF, DISMISS_SENT, DISMISS_RECV) if !ok { - dg.log.Debugf("data at non SESSIONED, clientID: %d, dialogueID: %d, packetID: %d", - dg.cn.ClientID(), dg.dialogueID, pkt.ID()) + dg.log.Debugf("data at non normal status, clientID: %d, dialogueID: %d, packetID: %d, status: %s", + dg.cn.ClientID(), dg.dialogueID, pkt.ID(), dg.fsm.State()) if dg.failedCh != nil { dg.failedCh <- pkt } diff --git a/multiplexer/dialogue_mgr.go b/multiplexer/dialogue_mgr.go index e322caa..8eb79e6 100644 --- a/multiplexer/dialogue_mgr.go +++ b/multiplexer/dialogue_mgr.go @@ -360,12 +360,16 @@ func (dm *dialogueMgr) handlePkt(pkt packet.Packet) { dm.mtx.RLock() dg, ok := dm.dialogues[dialogueID] if !ok { - dm.log.Errorf("clientID: %d, unable to find dialogueID: %d, packetID: %d, packetType: %s", - dm.cn.ClientID(), dialogueID, pkt.ID(), pkt.Type().String()) - dm.mtx.RUnlock() - return + // maybe the dialogue is in negotiating + dg, ok = dm.negotiatingDialogues[dialogueID] + if !ok { + dm.log.Errorf("clientID: %d, unable to find dialogueID: %d, packetID: %d, packetType: %s", + dm.cn.ClientID(), dialogueID, pkt.ID(), pkt.Type().String()) + dm.mtx.RUnlock() + return + } } - dm.log.Tracef("write to dialogue, clientID: %d, dialogueID: %d, packetID: %d, packetType %s", + dm.log.Tracef("read to dialogue, clientID: %d, dialogueID: %d, packetID: %d, packetType %s", dm.cn.ClientID(), dialogueID, pkt.ID(), pkt.Type().String()) dg.readInCh <- pkt dm.mtx.RUnlock() diff --git a/pkg/iodefine/iodefine.go b/pkg/iodefine/iodefine.go index e8359a8..59fb36e 100644 --- a/pkg/iodefine/iodefine.go +++ b/pkg/iodefine/iodefine.go @@ -30,7 +30,8 @@ const ( ) var ( - ErrIOTimeout = errors.New("io time out") + ErrIOTimeout = errors.New("io time out") + ErrIOBufferFull = errors.New("io buffer full") ) func ErrUseOfClosedNetwork(err error) bool {