code: func (c *Conversation) Send(m ValidMessage, trace ...interface{}) ([]ValidMessage, error) {
  	message := makeCopy(m)
  	defer wipeBytes(message)
  
  	if !c.Policies.isOTREnabled() {
  		return []ValidMessage{makeCopy(message)}, nil
  	}
  
  	if c.debug && bytes.Index(message, []byte(debugString)) != -1 {
  		c.dump(bufio.NewWriter(standardErrorOutput))
  		return nil, nil
  	}
  
  	switch c.msgState {
  	case plainText:
  		return c.withInjections(c.sendMessageOnPlaintext(message, trace...))
  	case encrypted:
  		return c.withInjections(c.sendMessageOnEncrypted(message))
  	case finished:
  		c.messageEvent(MessageEventConnectionEnded)
  		return c.withInjections(nil, newOtrError("cannot send message because secure conversation has finished"))
  	}
  
  	return c.withInjections(nil, newOtrError("cannot send message in current state"))
  }
docs: // Send takes a human readable message from the local user, possibly encrypts
  // it and returns zero or more messages to send to the peer.