// Handle a message of the specified type func (h *Handler) Handle(t message.Type, conn *message.Conn) error { if h.ctx.IsServer() { if t != message.Types["version"] && conn.Version == 0 { // Client didn't send his version number err := conn.Write(func(w io.Writer) error { return builder.SendExit(w, message.ExitCodes["client_outdated"]) }) if err != nil { return err } return conn.Close() } } if val, ok := h.handlers[t]; ok { err := val(h.ctx, conn) if err != nil { return err } } else { return fmt.Errorf("Unknown message type: %d", t) } return nil }