code: func (c *Connection) Ack(h Headers) error {
  	c.log(ACK, "start", h, c.Protocol())
  	if !c.connected {
  		return ECONBAD
  	}
  	e := checkHeaders(h, c.Protocol())
  	if e != nil {
  		return e
  	}
  	switch c.Protocol() {
  	case SPL_12:
  		if _, ok := h.Contains(HK_ID); !ok {
  			return EREQIDACK
  		}
  	case SPL_11:
  		if _, ok := h.Contains(HK_SUBSCRIPTION); !ok {
  			return EREQSUBACK
  		}
  		if _, ok := h.Contains(HK_MESSAGE_ID); !ok {
  			return EREQMIDACK
  		}
  	default: // SPL_10
  		if _, ok := h.Contains(HK_MESSAGE_ID); !ok {
  			return EREQMIDACK
  		}
  	}
  
  	e = c.transmitCommon(ACK, h) // transmitCommon Clones() the headers
  	c.log(ACK, "end", h, c.Protocol())
  	return e
  }
docs: /*
  	Ack a STOMP MESSAGE.
  
  	For Stomp 1.0 Headers MUST contain a "message-id" header key.
  
  
  	For Stomp 1.1	Headers must contain a "message-id" key and a "subscription"
  	header key.
  
  
  	For Stomp 1.2 Headers must contain a unique "id" header key.
  
  	See the specifications at http://stomp.github.com/ for details.
  
  	Example:
  		h := stompngo.Headers{stompngo.HK_MESSAGE_ID, "message-id1",
  			"subscription", "d2cbe608b70a54c8e69d951b246999fbc20df694"}
  		e := c.Ack(h)
  		if e != nil {
  			// Do something sane ...
  		}
  
  */