@@ -24,23 +24,15 @@ func (s logonState) FixMsgIn(session *session, msg *Message) (nextState sessionS
24
24
if err := session .handleLogon (msg ); err != nil {
25
25
switch err := err .(type ) {
26
26
case RejectLogon :
27
- session .log .OnEvent (err .Text )
28
- logout := session .buildLogout (err .Text )
27
+ return shutdownWithReason (session , msg , true , err .Error ())
29
28
30
- if err := session .dropAndSendInReplyTo (logout , msg ); err != nil {
31
- session .logError (err )
32
- }
33
-
34
- if err := session .store .IncrNextTargetMsgSeqNum (); err != nil {
35
- session .logError (err )
36
- }
37
-
38
- return latentState {}
29
+ case targetTooLow :
30
+ return shutdownWithReason (session , msg , false , err .Error ())
39
31
40
32
case targetTooHigh :
41
33
var tooHighErr error
42
34
if nextState , tooHighErr = session .doTargetTooHigh (err ); tooHighErr != nil {
43
- return handleStateError (session , tooHighErr )
35
+ return shutdownWithReason (session , msg , false , tooHighErr . Error () )
44
36
}
45
37
46
38
return
@@ -64,3 +56,20 @@ func (s logonState) Timeout(session *session, e internal.Event) (nextState sessi
64
56
func (s logonState ) Stop (session * session ) (nextState sessionState ) {
65
57
return latentState {}
66
58
}
59
+
60
+ func shutdownWithReason (session * session , msg * Message , incrNextTargetMsgSeqNum bool , reason string ) (nextState sessionState ) {
61
+ session .log .OnEvent (reason )
62
+ logout := session .buildLogout (reason )
63
+
64
+ if err := session .dropAndSendInReplyTo (logout , msg ); err != nil {
65
+ session .logError (err )
66
+ }
67
+
68
+ if incrNextTargetMsgSeqNum {
69
+ if err := session .store .IncrNextTargetMsgSeqNum (); err != nil {
70
+ session .logError (err )
71
+ }
72
+ }
73
+
74
+ return latentState {}
75
+ }
0 commit comments