A Framework For Device-To-Device Communication Between Mobile Devices Using Heterogeneous Channels