Where does ICE negotiation actually start on Licode?

Can someone throw some light on ICE negotiation process in Licode ?

As per my understanding of webRTC ICE negotiation process is triggered when when we invoked a new RTCPeerConnection({iceServers: [stunServer]}) and then can listen to events on RTCPeerConnection object for gathering candidates.

However in the context of Licode I am not able to put things in order as to when it is triggered and how does the logic present on the server side ERIZO API come into to picture for ICE process.

Can someone help me connect both sides of the world ?