def apply opts
@container = opts[:container]
cid = opts[:container_id] || (@container && @container.id) || SecureRandom.uuid
cid = cid.to_s if cid.is_a? Symbol
Cproton.pn_connection_set_container(@impl, cid)
Cproton.pn_connection_set_user(@impl, opts[:user]) if opts[:user]
Cproton.pn_connection_set_password(@impl, opts[:password]) if opts[:password]
Cproton.pn_connection_set_hostname(@impl, opts[:virtual_host]) if opts[:virtual_host]
@link_prefix = opts[:link_prefix] || cid
Codec::Data.from_object(Cproton.pn_connection_offered_capabilities(@impl), opts[:offered_capabilities])
Codec::Data.from_object(Cproton.pn_connection_desired_capabilities(@impl), opts[:desired_capabilities])
Codec::Data.from_object(Cproton.pn_connection_properties(@impl), opts[:properties])
end