2 // Copyright © 2011-2017 Guy M. Allard
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
24 Unsubscribe from a STOMP subscription.
26 Headers MUST contain a "destination" header key, and for Stomp 1.1+,
27 a "id" header key per the specifications. The subscription MUST currently
28 exist for this session.
31 // Possible additional Header keys: "id".
32 h := stompngo.Headers{stompngo.HK_DESTINATION, "/queue/myqueue"}
35 // Do something sane ...
39 func (c
*Connection
) Unsubscribe(h Headers
) error
{
40 c
.log(UNSUBSCRIBE
, "start", h
)
44 e
:= checkHeaders(h
, c
.Protocol())
50 d
, okd
:= h
.Contains(HK_DESTINATION
)
51 //fmt.Printf("Unsubscribe Headers 01: <%q> <%t>\n", h, okd)
57 shid
, oki
:= h
.Contains(HK_ID
)
58 shaid
:= Sha1(h
.Value(HK_DESTINATION
)) // Special for 1.0
59 //fmt.Printf("Unsubscribe Headers 02: <%q> <%t>\n", h, oki)
60 // This is a read lock
61 //fmt.Printf("UNSUB DBG00 %q\n", c.subs)
64 _
, ps
:= c
.subs
[shaid
]
66 //fmt.Printf("UNSUB DBG01 %t %t\n", p, ps)
74 return EUNOSID
// id required
76 if !p
{ // subscription does not exist
77 return EBADSID
// invalid subscription-id
82 //fmt.Printf("SPL_10 D01 %v %v %vn", oki, p, ps)
88 panic("unsubscribe version not supported: " + c
.Protocol())
91 e
= c
.transmitCommon(UNSUBSCRIBE
, h
) // transmitCommon Clones() the headers
97 delete(c
.subs
, usekey
)
99 c
.log(UNSUBSCRIBE
, "end", h
)