00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "driver.h"
00026 #include "clientsession.h"
00027
00028 CDriver::CDriver(RCobainClientSession &aClientSession,
00029 TProtocol aProtocol)
00030 : iClientSession(aClientSession),
00031 iProtocol(aProtocol),
00032 iPeerListPump(aProtocol, aClientSession)
00033 {
00034 }
00035
00036 CDriver::~CDriver()
00037 {
00038
00039 iPeerListPump.Cancel();
00040
00041 if( iConnectionListener != NULL ) {
00042 StopListeningL();
00043 }
00044 }
00045
00046 void CDriver::ListenL(TUint aServiceID, MConnectionListener *aListener, TUint aExtraInfo)
00047 {
00048
00049 __ASSERT_ALWAYS(iConnectionListener == NULL, User::Leave(KErrDriverAlreadyListening));
00050
00051
00052 switch( iProtocol ) {
00053 case EBluetooth:
00054 __ASSERT_ALWAYS((aExtraInfo == KRFCOMM) || (aExtraInfo == KL2CAP),
00055 User::Leave(KErrArgument));
00056 break;
00057 default:
00058 User::Panic(KCobainClientPanic, KErrNotSupported);
00059 break;
00060 }
00061
00062
00063 iConnectionListener = new (ELeave) CConnectionListener(iClientSession, this);
00064
00065
00066 iClientSession.StartListeningL(iProtocol, aServiceID, aExtraInfo);
00067
00068
00069 iConnectionListener->Listen(aListener);
00070 }
00071
00072 void CDriver::StopListeningL()
00073 {
00074
00075 __ASSERT_ALWAYS(iConnectionListener != NULL, User::Leave(KErrDriverNotListening));
00076
00077
00078 iConnectionListener->Cancel();
00079
00080 delete iConnectionListener;
00081 iConnectionListener;
00082
00083
00084 iListener = NULL;
00085 }
00086
00087 void CDriver::DiscoverPeersL(TUint aServiceClassID, MNetworkDriverListener *aListener)
00088 {
00089 iPeerListPump.DiscoverPeers(aServiceClassID, aListener);
00090 }
00091
00092 void CDriver::CancelPeerDiscovery()
00093 {
00094 iPeerListPump.Cancel();
00095 }
00096