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
)
41 // fmt.Printf("Unsub Headers: %v\n", h)
45 e
:= checkHeaders(h
, c
.Protocol())
50 // Specification Requirements:
51 // 1.0) requires either a destination header or an id header
52 // 1.1) ... requires ... the id header ....
53 // 1.2) an id header MUST be included in the frame
55 _
, okd
:= h
.Contains(HK_DESTINATION
)
56 shid
, oki
:= h
.Contains(HK_ID
)
71 panic("unsubscribe version not supported: " + c
.Protocol())
74 shaid
:= Sha1(h
.Value(HK_DESTINATION
)) // Special for 1.0
77 _
, ps
:= c
.subs
[shaid
]
86 return EUNOSID
// id required
88 if !p
{ // subscription does not exist
89 return EBADSID
// invalid subscription-id
98 panic("unsubscribe version not supported: " + c
.Protocol())
101 e
= c
.transmitCommon(UNSUBSCRIBE
, h
) // transmitCommon Clones() the headers
107 delete(c
.subs
, usekey
)
109 c
.log(UNSUBSCRIBE
, "end", h
)