00001 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 00002 // All rights reserved. 00003 // This component and the accompanying materials are made available 00004 // under the terms of "Eclipse Public License v1.0" 00005 // which accompanies this distribution, and is available 00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". 00007 // 00008 // Initial Contributors: 00009 // Nokia Corporation - initial contribution. 00010 // 00011 // Contributors: 00012 // 00013 // Description: 00014 // 00015 00016 00017 #include "RTPFileStreamer.h" 00018 #include "ExampleApp.h" 00019 00020 00021 //CActiveConsole 00022 CActiveConsole::CActiveConsole(MActiveConsoleNotify& aNotify):CActive(EPriorityStandard), iNotify(aNotify) 00023 { 00024 CActiveScheduler::Add(this); 00025 } 00026 00027 CActiveConsole::~CActiveConsole() 00028 { 00029 delete iConsole; 00030 Cancel(); 00031 } 00032 00033 CActiveConsole* CActiveConsole::NewL(MActiveConsoleNotify& aNotify,const TDesC& aTitle,const TSize& aSize) 00034 { 00035 CActiveConsole* console = new (ELeave) CActiveConsole(aNotify); 00036 CleanupStack::PushL(console); 00037 console->ConstructL(aTitle,aSize); 00038 CleanupStack::Pop(); 00039 return console; 00040 } 00041 00042 void CActiveConsole::ConstructL(const TDesC& aTitle,const TSize& aSize) 00043 { 00044 iConsole = Console::NewL(aTitle,aSize); 00045 } 00046 00047 void CActiveConsole::DoCancel() 00048 { 00049 iConsole->ReadCancel(); 00050 } 00051 00052 void CActiveConsole::RequestKey() 00053 { 00054 DrawCursor(); 00055 iConsole->Read(iStatus); 00056 SetActive(); 00057 } 00058 00059 void CActiveConsole::DrawCursor() 00060 { 00061 iConsole->Printf(_L(">>")); 00062 } 00063 00064 void CActiveConsole::RunL() 00065 { 00066 TChar ch = iConsole->KeyCode(); 00067 iNotify.KeyPressed(ch); 00068 } 00069 00070 //CExampleApp 00071 CExampleApp::CExampleApp() 00072 { 00073 } 00074 00075 CExampleApp::~CExampleApp() 00076 { 00077 delete iActiveConsole; 00078 delete iMonitorConsole; 00079 iSockServ.Close(); 00080 } 00081 00082 CExampleApp* CExampleApp::NewL() 00083 { 00084 CExampleApp* thisapp = new (ELeave) CExampleApp(); 00085 CleanupStack::PushL(thisapp); 00086 thisapp->ConstructL(); 00087 CleanupStack::Pop(); 00088 return thisapp; 00089 } 00090 00091 static TSize gMainConsole(KConsFullScreen,KConsFullScreen); 00092 static TSize gTinyConsole(40,10); 00093 00094 void CExampleApp::ConstructL() 00095 { 00096 iActiveConsole = CActiveConsole::NewL(*this,_L("Status"),gMainConsole); 00097 iMonitorConsole = CActiveConsole::NewL(*this,_L("RtpExample"),gTinyConsole); 00098 User::LeaveIfError(iSockServ.Connect()); 00099 } 00100 00101 void CExampleApp::StartL() 00102 { 00103 _LIT(KTextWelcome, " ### RTP Example ### \n"); 00104 iMonitorConsole->Console().Printf(KTextWelcome); 00105 00106 _LIT(KTextStartApp, "\n\n Starting the RTP application"); 00107 iMonitorConsole->Console().Printf ( KTextStartApp ); 00108 00109 _LIT(KTextPressAKey, "\n\n Press any key to step through the example"); 00110 iMonitorConsole->Console().Printf ( KTextPressAKey ); 00111 iMonitorConsole->Console().Getch (); 00112 00113 _LIT(KDAddr,"\n\n Local address: "); 00114 iMonitorConsole->Console().Printf(KDAddr); 00115 iMonitorConsole->Console().Printf(KDestAddr); 00116 iMonitorConsole->Console().Getch (); 00117 _LIT(KLPort,"\n\n Address family: "); 00118 iMonitorConsole->Console().Printf(KLPort); 00119 iMonitorConsole->Console().Printf(KLocalPort); 00120 iMonitorConsole->Console().Getch (); 00121 _LIT(KDPort,"\n\n RTP port number: "); 00122 iMonitorConsole->Console().Printf(KDPort); 00123 iMonitorConsole->Console().Printf(KDestPort); 00124 iMonitorConsole->Console().Getch (); 00125 _LIT(KSFile,"\n\n Source file name: "); 00126 iMonitorConsole->Console().Printf(KSFile); 00127 iMonitorConsole->Console().Printf(KsFileName); 00128 iMonitorConsole->Console().Getch (); 00129 _LIT(KTFile,"\n\n Target file name: "); 00130 iMonitorConsole->Console().Printf(KTFile); 00131 iMonitorConsole->Console().Printf(KdFileName); 00132 iMonitorConsole->Console().Getch (); 00133 _LIT(KBufSize,"\n\n Buffer size: "); 00134 iMonitorConsole->Console().Printf(KBufSize); 00135 iMonitorConsole->Console().Printf(KSize); 00136 iMonitorConsole->Console().Getch (); 00137 00138 TInt dport; 00139 TInt lport; 00140 TInt psize; 00141 TInetAddr daddr; 00142 TLex parser; 00143 parser.Assign(KDestPort); 00144 User::LeaveIfError(parser.Val(dport)); 00145 parser.Assign(KSize); 00146 User::LeaveIfError(parser.Val(psize)); 00147 parser.Assign(KLocalPort); 00148 User::LeaveIfError(parser.Val(lport)); 00149 00150 RHostResolver resolver; 00151 User::LeaveIfError(resolver.Open(iSockServ,KAfInet,KProtocolInetUdp)); 00152 CleanupClosePushL(resolver); 00153 TNameEntry entry; 00154 TRequestStatus status; 00155 resolver.GetByName(KDestAddr,entry,status); 00156 User::WaitForRequest(status); 00157 User::LeaveIfError(status.Int()); 00158 CleanupStack::PopAndDestroy(1);//close resolver 00159 00160 TSockAddr remote = entry().iAddr; 00161 remote.SetPort(dport); 00162 00163 TInt connId=KErrNotFound; 00164 iMonitorConsole->Console().Printf(_L("\n\n Sending RTP packet from %S file to %S file."),&KsFileName,&KdFileName); 00165 iMonitorConsole->Console().Getch(); 00166 iStreamer = CRtpFileStreamer::NewL(iSockServ,KsFileName,KdFileName,psize,remote,lport,connId); 00167 iStreamer->SetObserver(*this); 00168 iStreamer->StartL(); 00169 CActiveScheduler::Start(); 00170 } 00171 00172 void CExampleApp::Stop() 00173 { 00174 if (iStreamer) 00175 { 00176 delete iStreamer; 00177 } 00178 CActiveScheduler::Stop(); 00179 } 00180 00181 void CExampleApp::DrawMonitor() 00182 { 00183 iMonitorConsole->Console().Printf(_L("\n Sent: %d\n Recv: %d"),iSent,iRecv); 00184 } 00185 00186 void CExampleApp::NotifyPacketSent() 00187 { 00188 iSent++; 00189 DrawMonitor(); 00190 iActiveConsole->Console().Printf(_L("s")); 00191 } 00192 00193 void CExampleApp::NotifyPacketReceived() 00194 { 00195 iRecv++; 00196 DrawMonitor(); 00197 iActiveConsole->Console().Printf(_L("r")); 00198 } 00199 00200 void CExampleApp::NotifyComplete() 00201 { 00202 iMonitorConsole->Console().Printf(_L("\n\n Successfully sent %d RTP packet(s)"),iRecv); 00203 iMonitorConsole->Console().Getch(); 00204 00205 _LIT(KExit,"\n\n Press any key to exit the application "); 00206 iMonitorConsole->Console().Printf(KExit); 00207 iMonitorConsole->Console().Getch(); 00208 00209 if (iStreamer) 00210 { 00211 delete iStreamer; 00212 } 00213 CActiveScheduler::Stop(); 00214 } 00215 00216 void CExampleApp::NotifyError() 00217 { 00218 iMonitorConsole->Console().Printf(_L("Error\n")); 00219 iMonitorConsole->Console().Getch(); 00220 iActiveConsole->Console().Printf(_L("E")); 00221 } 00222 00223 void CExampleApp::KeyPressed(TChar /*aKey*/) 00224 { 00225 } 00226 00227 void MainL() 00228 { 00229 CExampleApp* app = CExampleApp::NewL(); 00230 CleanupStack::PushL(app); 00231 app->StartL(); 00232 CleanupStack::PopAndDestroy(app); 00233 } 00234 00235 TInt E32Main() 00236 { 00237 __UHEAP_MARK; 00238 CTrapCleanup* cleanupStack=CTrapCleanup::New(); 00239 CActiveScheduler* activescheduler=new CActiveScheduler; 00240 CActiveScheduler::Install(activescheduler); 00241 00242 TRAPD(err, MainL()); 00243 _LIT(KTxtEPOC32EX,"EXAMPLES"); 00244 __ASSERT_ALWAYS(!err,User::Panic(KTxtEPOC32EX,err)); 00245 00246 delete activescheduler; 00247 delete cleanupStack; 00248 __UHEAP_MARKEND; 00249 return KErrNone; 00250 }
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.