func (connection *connection) Send(msg base.SipMessage) (err error) { log.Debug("Sending message over connection %p: %s", connection, msg.Short()) msgData := msg.String() n, err := connection.baseConn.Write([]byte(msgData)) if err != nil { return } if n != len(msgData) { return fmt.Errorf("not all data was sent when dispatching '%s' to %s", msg.Short(), connection.baseConn.RemoteAddr()) } return }
func sendAndCheckReceipt(from *Manager, to string, receiver chan base.SipMessage, msg base.SipMessage, timeout time.Duration) bool { from.Send(to, msg) select { case msgIn, ok := <-receiver: if !ok { return false } return msgIn.String() == msg.String() case <-time.After(timeout): return false } }
func (udp *Udp) Send(addr string, msg base.SipMessage) error { log.Debug("Sending message %s to %s", msg.Short(), addr) raddr, err := net.ResolveUDPAddr("udp", addr) if err != nil { return err } var conn *net.UDPConn conn, err = net.DialUDP("udp", nil, raddr) if err != nil { return err } defer conn.Close() _, err = conn.Write([]byte(msg.String())) return err }