code: func (c *xmppGcmClient) send(m XmppMessage) (string, int, error) {
  	if m.MessageId == "" {
  		m.MessageId = uuid.New()
  	}
  	c.messages.Lock()
  	if _, ok := c.messages.m[m.MessageId]; !ok {
  		b := newExponentialBackoff()
  		if b.b.Min < ccsMinBackoff {
  			b.setMin(ccsMinBackoff)
  		}
  		c.messages.m[m.MessageId] = &messageLogEntry{body: &m, backoff: b}
  	}
  	c.messages.Unlock()
  
  	stanza := `<message id=""><gcm xmlns="google:mobile:data">%v</gcm></message>`
  	body, err := json.Marshal(m)
  	if err != nil {
  		return m.MessageId, 0, fmt.Errorf("could not unmarshal body of xmpp message>%v", err)
  	}
  	bs := string(body)
  
  	debug("Sending XMPP: ", fmt.Sprintf(stanza, bs))
  	// Serialize wire access for thread safety.
  	c.Lock()
  	defer c.Unlock()
  	bytes, err := c.XmppClient.SendOrg(fmt.Sprintf(stanza, bs))
  	return m.MessageId, bytes, err
  }
docs: //TODO(silvano): add flow control (max 100 pending messages at one time)
  // xmppGcmClient implementation to send a message through Gcm Xmpp server (ccs).