What is it for?
The TransportSelector is primarily responsible for:
1) Determining the fully-specified destination for an outgoing SipMessage, given a (possibly) partially-specified destination.
2) Deciding which instance of class Transport the outgoing SipMessage is to be sent on.
3) If necessary, filling out any fields in the SipMessage that depend on 1) (ie, the host in the topmost Via, unspecified hostparts in Contact header-field-values that refer to this UA, Record-Route header-field-values that depend on which transport the message is being sent on, etc)
4) Serializing the outgoing SipMessage, and passing the serialized form to the Transport instance chosen in 2).