24
|
1 |
/**
|
|
2 |
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
|
|
3 |
* All rights reserved.
|
|
4 |
* This component and the accompanying materials are made available
|
|
5 |
* under the terms of "Eclipse Public License v1.0"
|
|
6 |
* which accompanies this distribution, and is available
|
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
8 |
*
|
|
9 |
* Initial Contributors:
|
|
10 |
* Nokia Corporation - initial contribution.
|
|
11 |
*
|
|
12 |
* Contributors:
|
|
13 |
*
|
|
14 |
* Description: CUpnpTmServerDeviceXmlParser class implementation.
|
|
15 |
*
|
|
16 |
*/
|
|
17 |
|
|
18 |
// System Includes
|
|
19 |
#include <xml/parserfeature.h>
|
|
20 |
#include <xml/taginfo.h>
|
|
21 |
|
|
22 |
// User Includes
|
|
23 |
#include "upnptmserverdevicexmlparser.h"
|
|
24 |
#include "upnpterminalmodeicon.h"
|
|
25 |
#include "OstTraceDefinitions.h"
|
|
26 |
#ifdef OST_TRACE_COMPILER_IN_USE
|
|
27 |
#include "upnptmserverdevicexmlparserTraces.h"
|
|
28 |
#endif
|
|
29 |
|
|
30 |
|
|
31 |
//Literals
|
|
32 |
_LIT8(KTextXml, "text/xml");
|
|
33 |
_LIT8(KRootDeviceXmlLead, "<?xml version=\"1.0\" encoding=\"utf-8\"?><root xmlns=\"urn:schemas-upnp-org:device-1-0\"><specVersion><major>1</major><minor>0</minor></specVersion><device><deviceType>urn:schemas-upnp-org:device:TmServerDevice:1</deviceType><friendlyName>S60</friendlyName><manufacturer /><manufacturerURL>http://www.nokia.com</manufacturerURL><modelName /><serialNumber /><UDN /><X_connectivity><bluetooth><btAddr /><startConnection /></bluetooth></X_connectivity>");
|
|
34 |
_LIT8(KRootDeviceXmlTrail,"<serviceList><service><serviceType>urn:schemas-upnp-org:service:TmApplicationServer:1</serviceType><serviceId>urn:upnp-org:serviceId:TmApplicationServer1</serviceId><SCPDURL>/tmserverdevice1/tmapplicationserver1.xml</SCPDURL><controlURL>/tmserverdevice1/tmapplicationserver1/control</controlURL><eventSubURL>/tmserverdevice1/tmapplicationserver1/eventing</eventSubURL></service><service><serviceType>urn:schemas-upnp-org:service:TmClientProfile:1</serviceType>"
|
|
35 |
"<serviceId>urn:upnp-org:serviceId:TmClientProfile1</serviceId><SCPDURL>/tmserverdevice1/tmclientprofile1.xml</SCPDURL><controlURL>/tmserverdevice1/tmclientprofile1/control</controlURL><eventSubURL>/tmserverdevice1/tmclientprofile1/eventing</eventSubURL></service></serviceList></device></root>");
|
|
36 |
_LIT8(KAppServerSrvXml, "<?xml version=\"1.0\" encoding=\"utf-8\"?><scpd xmlns=\"urn:schemas-upnp-org:service-1-0\"><specVersion><major>1</major> <minor>0</minor> </specVersion><actionList><action><name>GetApplicationList</name><argumentList><argument><name>AppListingFilter</name><direction>in</direction> <relatedStateVariable>A_ARG_TYPE_String</relatedStateVariable> </argument><argument><name>ProfileID</name><direction>in</direction> <relatedStateVariable>A_ARG_TYPE_ProfileID</relatedStateVariable> "
|
|
37 |
"</argument><argument><name>AppListing</name><direction>out</direction><relatedStateVariable>A_ARG_TYPE_AppList</relatedStateVariable></argument></argumentList></action><action><name>LaunchApplication</name><argumentList><argument><name>AppID</name><direction>in</direction><relatedStateVariable>A_ARG_TYPE_AppID</relatedStateVariable></argument><argument><name>ProfileID</name><direction>in</direction><relatedStateVariable>A_ARG_TYPE_ProfileID</relatedStateVariable></argument><argument><name>AppURI</name>"
|
|
38 |
"<direction>out</direction><relatedStateVariable>A_ARG_TYPE_URI</relatedStateVariable></argument></argumentList></action><action><name>TerminateApplication</name><argumentList><argument><name>AppID</name><direction>in</direction><relatedStateVariable>A_ARG_TYPE_AppID</relatedStateVariable></argument><argument><name>ProfileID</name><direction>in</direction><relatedStateVariable>A_ARG_TYPE_ProfileID</relatedStateVariable></argument><argument><name>TerminationResult</name><direction>out</direction>"
|
|
39 |
"<relatedStateVariable>A_ARG_TYPE_Bool</relatedStateVariable></argument></argumentList></action><action><name>GetApplicationStatus</name><argumentList><argument><name>AppID</name><direction>in</direction><relatedStateVariable>A_ARG_TYPE_AppID</relatedStateVariable></argument><argument><name>AppStatus</name><direction>out</direction><relatedStateVariable>A_ARG_TYPE_AppStatus</relatedStateVariable></argument></argumentList></action></actionList><serviceStateTable><stateVariable sendEvents=\"yes\">"
|
|
40 |
"<name>AppStatusUpdate</name> <dataType>string</dataType></stateVariable><stateVariable sendEvents=\"yes\"><name>AppListUpdate</name> <dataType>string</dataType></stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_AppStatus</name> <dataType>string</dataType> </stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_AppList</name><dataType>string</dataType></stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_AppID</name><dataType>string</dataType></stateVariable>"
|
|
41 |
"<stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_ProfileID</name><dataType>ui4</dataType><defaultValue>0</defaultValue></stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_URI</name> <dataType>uri</dataType> </stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_String</name><dataType>string</dataType></stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_Bool</name><dataType>string</dataType><defaultValue>false</defaultValue><allowedValueList><allowedValue>false</allowedValue>"
|
|
42 |
"<allowedValue>true</allowedValue></allowedValueList></stateVariable></serviceStateTable></scpd>");
|
|
43 |
_LIT8(KClientProfSrvXml, "<?xml version=\"1.0\" encoding=\"utf-8\"?><scpd xmlns=\"urn:schemas-upnp-org:service-1-0\"><specVersion><major>1</major> <minor>0</minor> </specVersion><actionList><action><name>GetMaxNumProfiles</name><argumentList><argument><name>numProfilesAllowed</name><direction>out</direction> <relatedStateVariable>MaxNumProfiles</relatedStateVariable> </argument></argumentList></action><action><name>SetClientProfile</name><argumentList><argument><name>profileID</name><direction>in</direction>"
|
|
44 |
"<relatedStateVariable>A_ARG_TYPE_ProfileID</relatedStateVariable></argument><argument><name>clientProfile</name><direction>in</direction><relatedStateVariable>A_ARG_TYPE_ClientProfile</relatedStateVariable></argument><argument><name>resultProfile</name><direction>out</direction><relatedStateVariable>A_ARG_TYPE_ClientProfile</relatedStateVariable></argument></argumentList></action><action><name>GetClientProfile</name><argumentList><argument><name>profileID</name><direction>in</direction>"
|
|
45 |
"<relatedStateVariable>A_ARG_TYPE_ProfileID</relatedStateVariable></argument><argument><name>clientProfile</name><direction>out</direction><relatedStateVariable>A_ARG_TYPE_ClientProfile</relatedStateVariable></argument></argumentList></action></actionList><serviceStateTable><stateVariable sendEvents=\"yes\"><name>UnusedProfileIDs</name> <dataType>string</dataType></stateVariable><stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_ClientProfile</name> <dataType>string</dataType></stateVariable>"
|
|
46 |
"<stateVariable sendEvents=\"no\"><name>A_ARG_TYPE_ProfileID</name><dataType>ui4</dataType><defaultValue>0</defaultValue></stateVariable><stateVariable sendEvents=\"no\"><name>MaxNumProfiles</name> <dataType>ui2</dataType> <defaultValue>1</defaultValue> </stateVariable> </serviceStateTable></scpd>");
|
|
47 |
_LIT8(KStartLine, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
|
|
48 |
_LIT8(KRootAttrb, " xmlns=\"urn:schemas-upnp-org:device-1-0\"");
|
|
49 |
_LIT8(KScpdUrl, "/tmserverdevice1/");
|
|
50 |
_LIT8(KUpnpDeviceRoot, "root" );
|
|
51 |
_LIT8(KStartIconList, "<iconList>" );
|
|
52 |
_LIT8(KEndIconList, "</iconList>" );
|
|
53 |
_LIT8(KStartIcon, "<icon>" );
|
|
54 |
_LIT8(KEndIcon, "</icon>" );
|
|
55 |
_LIT8(KStartMimeType, "<mimetype>" );
|
|
56 |
_LIT8(KEndMimeType, "</mimetype>" );
|
|
57 |
_LIT8(KStartWidth, "<width>" );
|
|
58 |
_LIT8(KEndWidth, "</width>" );
|
|
59 |
_LIT8(KStartHeight, "<height>" );
|
|
60 |
_LIT8(KEndHeight, "</height>" );
|
|
61 |
_LIT8(KStartDepth, "<depth>" );
|
|
62 |
_LIT8(KEndDepth, "</depth>" );
|
|
63 |
_LIT8(KStartUrl, "<url>" );
|
|
64 |
_LIT8(KEndUrl, "</url>" );
|
|
65 |
_LIT8(KPhoneManufacturer, "manufacturer" );
|
|
66 |
_LIT8(KPhoneModel, "modelName" );
|
|
67 |
_LIT8(KPhoneSerialNumber, "serialNumber" );
|
|
68 |
_LIT8(KBtAddress, "btAddr" );
|
|
69 |
_LIT8(KStartConnection, "startConnection" );
|
|
70 |
_LIT8(KIconPath, "icon/");
|
|
71 |
_LIT8(KConnTrue, "true");
|
|
72 |
_LIT8(KConnFalse, "false");
|
|
73 |
_LIT(KPublicDevicePath, "public\\TmServerDevice1\\");
|
|
74 |
_LIT(KDeviceName, "TmServerDevice1.xml");
|
|
75 |
_LIT(KAppServerSrvName, "TmApplicationServer1.xml");
|
|
76 |
_LIT(KClientProfSrvName, "TmClientProfile1.xml");
|
|
77 |
_LIT(KIconDirectory, "icon\\");
|
|
78 |
|
|
79 |
|
|
80 |
// ============================ MEMBER FUNCTIONS ===================================
|
|
81 |
|
|
82 |
// ---------------------------------------------------------------------------------
|
|
83 |
// CUpnpTmServerDeviceXmlParser::NewL
|
|
84 |
// Two-phased constructor.
|
|
85 |
// ---------------------------------------------------------------------------------
|
|
86 |
//
|
|
87 |
CUpnpTmServerDeviceXmlParser* CUpnpTmServerDeviceXmlParser::NewL( CUpnpTmServerDeviceInfo& aDeviceInfo )
|
|
88 |
{
|
|
89 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_NEWL_ENTRY );
|
|
90 |
CUpnpTmServerDeviceXmlParser* self = new (ELeave) CUpnpTmServerDeviceXmlParser( aDeviceInfo );
|
|
91 |
CleanupStack::PushL(self);
|
|
92 |
self->ConstructL();
|
|
93 |
CleanupStack::Pop(self);
|
|
94 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_NEWL_EXIT );
|
|
95 |
return self;
|
|
96 |
}
|
|
97 |
|
|
98 |
// ---------------------------------------------------------------------------------
|
|
99 |
// CUpnpTmServerDeviceXmlParser::~CUpnpTmServerDeviceXmlParser
|
|
100 |
// Destructor
|
|
101 |
// ---------------------------------------------------------------------------------
|
|
102 |
//
|
|
103 |
CUpnpTmServerDeviceXmlParser::~CUpnpTmServerDeviceXmlParser()
|
|
104 |
{
|
|
105 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_CUPNPTMSERVERDEVICEXMLPARSER_ENTRY );
|
|
106 |
DeleteDirectory();
|
|
107 |
iPhone.Close();
|
|
108 |
iEtelSrv.Close();
|
|
109 |
delete iParser;
|
|
110 |
iAppServerSrvDescription.Close();
|
|
111 |
iClientProfSrvDescription.Close();
|
|
112 |
iReadBuf.Close();
|
|
113 |
iDeviceDescription.Close();
|
|
114 |
iDescFilePath.Close();
|
|
115 |
iClientProfSrvFilePath.Close();
|
|
116 |
iAppServerSrvFilePath.Close();
|
|
117 |
iDescriptionUri.Close();
|
|
118 |
iFs.Close();
|
|
119 |
iDeviceDir.Close();
|
|
120 |
iIconDirectory.Close();
|
|
121 |
delete iFileMan;
|
|
122 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_CUPNPTMSERVERDEVICEXMLPARSER_EXIT );
|
|
123 |
}
|
|
124 |
|
|
125 |
// ---------------------------------------------------------------------------------
|
|
126 |
// CUpnpTmServerDeviceXmlParser::DeleteDirectory
|
|
127 |
// Deletes device and service description files and device icon files related to
|
|
128 |
// Terminal Mode Service located in the private directory.
|
|
129 |
// ---------------------------------------------------------------------------------
|
|
130 |
//
|
|
131 |
void CUpnpTmServerDeviceXmlParser::DeleteDirectory()
|
|
132 |
{
|
|
133 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_DELETEDIRECTORY_ENTRY );
|
|
134 |
iFs.Delete(iDescFilePath);
|
|
135 |
iFs.Delete(iAppServerSrvFilePath);
|
|
136 |
iFs.Delete(iClientProfSrvFilePath);
|
|
137 |
iFileMan->RmDir(iIconDirectory);
|
|
138 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_DELETEDIRECTORY_EXIT );
|
|
139 |
}
|
|
140 |
// ---------------------------------------------------------------------------------
|
|
141 |
// CUpnpTmServerDeviceXmlParser::CUpnpTmServerDeviceXmlParser
|
|
142 |
// C++ default constructor can NOT contain any code, that
|
|
143 |
// might leave.
|
|
144 |
// ---------------------------------------------------------------------------------
|
|
145 |
//
|
|
146 |
CUpnpTmServerDeviceXmlParser::CUpnpTmServerDeviceXmlParser( CUpnpTmServerDeviceInfo& aDeviceInfo )
|
|
147 |
:iDeviceInfo(aDeviceInfo)
|
|
148 |
{
|
|
149 |
}
|
|
150 |
|
|
151 |
// ---------------------------------------------------------------------------------
|
|
152 |
// CUpnpTmServerDeviceXmlParser::ConstructL
|
|
153 |
// Symbian 2nd phase constructor can leave.
|
|
154 |
// ---------------------------------------------------------------------------------
|
|
155 |
//
|
|
156 |
void CUpnpTmServerDeviceXmlParser::ConstructL( )
|
|
157 |
{
|
|
158 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_CONSTRUCTL_ENTRY );
|
|
159 |
User::LeaveIfError(iEtelSrv.Connect());
|
|
160 |
User::LeaveIfError(iEtelSrv.LoadPhoneModule( KMmTsyModuleName ));
|
|
161 |
User::LeaveIfError(iPhone.Open( iEtelSrv, KMmTsyPhoneName ));
|
|
162 |
TRequestStatus status;
|
|
163 |
iPhone.GetPhoneId(status, iPhoneId);
|
|
164 |
User::WaitForRequest(status);
|
|
165 |
User::LeaveIfError(iFs.Connect());
|
|
166 |
iAppServerSrvDescription.CreateL( KAppServerSrvXml() );
|
|
167 |
iClientProfSrvDescription.CreateL( KClientProfSrvXml() );
|
|
168 |
iParser = CParser::NewL(KTextXml(), *this);
|
|
169 |
iParser->EnableFeature(ESendFullContentInOneChunk);
|
|
170 |
iReadBuf.CreateMaxL(KBufSize);
|
|
171 |
iDeviceDescription.CreateMaxL(KBufSize);
|
|
172 |
iDeviceDescription.SetLength(KErrNone);
|
|
173 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_CONSTRUCTL_EXIT );
|
|
174 |
}
|
|
175 |
|
|
176 |
// ---------------------------------------------------------------------------------
|
|
177 |
// CUpnpTmServerDeviceXmlParser::OnStartDocumentL
|
|
178 |
// Called when parser hits the start of the document
|
|
179 |
// ---------------------------------------------------------------------------------
|
|
180 |
//
|
|
181 |
void CUpnpTmServerDeviceXmlParser::OnStartDocumentL(const RDocumentParameters& /*aDocParam*/,
|
|
182 |
TInt aErrorCode )
|
|
183 |
{
|
|
184 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTDOCUMENTL_ENTRY );
|
|
185 |
User::LeaveIfError(aErrorCode);
|
|
186 |
|
|
187 |
TBuf<KMaxBufLength> tmpBuf(iDeviceDir);
|
|
188 |
tmpBuf.Append(KDeviceName());
|
|
189 |
iDescFilePath.CreateL(tmpBuf);
|
|
190 |
tmpBuf.Zero();
|
|
191 |
|
|
192 |
// Create TmAppServer service xml
|
|
193 |
tmpBuf.Copy(iDeviceDir);
|
|
194 |
tmpBuf.Append(KAppServerSrvName());
|
|
195 |
RFile appServerSrvFile;
|
|
196 |
CleanupClosePushL(appServerSrvFile);
|
|
197 |
TInt err(KErrNone);
|
|
198 |
err = appServerSrvFile.Create(iFs, tmpBuf, EFileWrite);
|
|
199 |
if ( err == KErrAlreadyExists )
|
|
200 |
{
|
|
201 |
User::LeaveIfError(appServerSrvFile.Open(iFs, tmpBuf, EFileWrite));
|
|
202 |
}
|
|
203 |
else
|
|
204 |
{
|
|
205 |
User::LeaveIfError(err);
|
|
206 |
}
|
|
207 |
User::LeaveIfError(appServerSrvFile.Write(iAppServerSrvDescription));
|
|
208 |
CleanupStack::PopAndDestroy( &appServerSrvFile );
|
|
209 |
iAppServerSrvFilePath.CreateL(tmpBuf);
|
|
210 |
tmpBuf.Zero();
|
|
211 |
|
|
212 |
// Create TmClientProfile service xml
|
|
213 |
tmpBuf.Copy(iDeviceDir);
|
|
214 |
tmpBuf.Append(KClientProfSrvName());
|
|
215 |
RFile clientProfSrvFile;
|
|
216 |
CleanupClosePushL(clientProfSrvFile);
|
|
217 |
err = clientProfSrvFile.Create(iFs, tmpBuf, EFileWrite);
|
|
218 |
if ( err == KErrAlreadyExists )
|
|
219 |
{
|
|
220 |
User::LeaveIfError(clientProfSrvFile.Open(iFs, tmpBuf, EFileWrite));
|
|
221 |
}
|
|
222 |
else
|
|
223 |
{
|
|
224 |
User::LeaveIfError(err);
|
|
225 |
}
|
|
226 |
User::LeaveIfError(clientProfSrvFile.Write(iClientProfSrvDescription));
|
|
227 |
CleanupStack::PopAndDestroy( &clientProfSrvFile );
|
|
228 |
iClientProfSrvFilePath.CreateL(tmpBuf);
|
|
229 |
|
|
230 |
iDeviceDescription.Append(KStartLine());
|
|
231 |
iDescriptionUri.CreateMaxL(UpnpString::KDefaultStringLength);
|
|
232 |
iDescriptionUri.SetLength(KErrNone);
|
|
233 |
iDescriptionUri.Append(KScpdUrl());
|
|
234 |
iDescriptionUri.Append(KDeviceName());
|
|
235 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTDOCUMENTL_EXIT );
|
|
236 |
}
|
|
237 |
|
|
238 |
// ---------------------------------------------------------------------------------
|
|
239 |
// CUpnpTmServerDeviceXmlParser::OnEndDocumentL
|
|
240 |
// Called when parser hits the end of the document
|
|
241 |
// ---------------------------------------------------------------------------------
|
|
242 |
//
|
|
243 |
void CUpnpTmServerDeviceXmlParser::OnEndDocumentL(TInt aErrorCode)
|
|
244 |
{
|
|
245 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDDOCUMENTL_ENTRY );
|
|
246 |
User::LeaveIfError(aErrorCode);
|
|
247 |
|
|
248 |
RFile deviceFile;
|
|
249 |
CleanupClosePushL(deviceFile);
|
|
250 |
TInt err = deviceFile.Create(iFs, iDescFilePath, EFileWrite);
|
|
251 |
OstTrace1( TRACE_NORMAL, CUPNPTMSERVERDEVICEXMLPARSER_ONENDDOCUMENTL, "CUpnpTmServerDeviceXmlParser::OnEndDocumentL;err=%d", err );
|
|
252 |
if ( err == KErrAlreadyExists )
|
|
253 |
{
|
|
254 |
User::LeaveIfError(deviceFile.Open(iFs, iDescFilePath, EFileWrite));
|
|
255 |
}
|
|
256 |
else
|
|
257 |
{
|
|
258 |
User::LeaveIfError(err);
|
|
259 |
}
|
|
260 |
User::LeaveIfError(deviceFile.Write(iDeviceDescription));
|
|
261 |
CleanupStack::PopAndDestroy(&deviceFile);
|
|
262 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDDOCUMENTL_EXIT );
|
|
263 |
}
|
|
264 |
|
|
265 |
// ---------------------------------------------------------------------------------
|
|
266 |
// CUpnpTmServerDeviceXmlParser::OnStartElementL
|
|
267 |
// Called when parser hits the opening tag
|
|
268 |
// ---------------------------------------------------------------------------------
|
|
269 |
//
|
|
270 |
void CUpnpTmServerDeviceXmlParser::OnStartElementL(const RTagInfo& aElement, const RAttributeArray& /*aAttributes*/, TInt aErrorCode)
|
|
271 |
{
|
|
272 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTELEMENTL_ENTRY );
|
|
273 |
User::LeaveIfError(aErrorCode);
|
|
274 |
|
|
275 |
iDeviceDescription.Append(UpnpCD::KKorp);
|
|
276 |
iDeviceDescription.Append(aElement.LocalName().DesC());
|
|
277 |
|
|
278 |
if(aElement.LocalName().DesC().Compare(KUpnpDeviceRoot) == 0)
|
|
279 |
{
|
|
280 |
iDeviceDescription.Append(KRootAttrb());
|
|
281 |
}
|
|
282 |
iDeviceDescription.Append(UpnpCD::KProk);
|
|
283 |
|
|
284 |
if(aElement.LocalName().DesC().Compare(KPhoneManufacturer) == 0)
|
|
285 |
{
|
|
286 |
iDeviceDescription.Append(iPhoneId.iManufacturer);
|
|
287 |
}
|
|
288 |
else if(aElement.LocalName().DesC().Compare(KPhoneModel) == 0)
|
|
289 |
{
|
|
290 |
iDeviceDescription.Append(iPhoneId.iModel);
|
|
291 |
}
|
|
292 |
else if(aElement.LocalName().DesC().Compare(KPhoneSerialNumber) == 0)
|
|
293 |
{
|
|
294 |
iDeviceDescription.Append(iPhoneId.iSerialNumber);
|
|
295 |
}
|
|
296 |
else if(aElement.LocalName().DesC().Compare(KBtAddress) == 0)
|
|
297 |
{
|
|
298 |
iDeviceDescription.Append(iDeviceInfo.BtAddress());
|
|
299 |
}
|
|
300 |
else if(aElement.LocalName().DesC().Compare(KStartConnection) == 0)
|
|
301 |
{
|
|
302 |
if ( iDeviceInfo.StartConn() )
|
|
303 |
{
|
|
304 |
iDeviceDescription.Append(KConnTrue);
|
|
305 |
}
|
|
306 |
else
|
|
307 |
{
|
|
308 |
iDeviceDescription.Append(KConnFalse);
|
|
309 |
}
|
|
310 |
}
|
|
311 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTELEMENTL_EXIT );
|
|
312 |
}
|
|
313 |
|
|
314 |
// ---------------------------------------------------------------------------------
|
|
315 |
// CUpnpTmServerDeviceXmlParser::OnEndElementL
|
|
316 |
// Called when parser hits the closing tag
|
|
317 |
// ---------------------------------------------------------------------------------
|
|
318 |
//
|
|
319 |
void CUpnpTmServerDeviceXmlParser::OnEndElementL( const RTagInfo& aElement, TInt aErrorCode )
|
|
320 |
{
|
|
321 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDELEMENTL_ENTRY );
|
|
322 |
User::LeaveIfError(aErrorCode);
|
|
323 |
|
|
324 |
iDeviceDescription.Append( UpnpCD::KKorp );
|
|
325 |
iDeviceDescription.Append( UpnpString::KSlash );
|
|
326 |
iDeviceDescription.Append( aElement.LocalName().DesC() );
|
|
327 |
iDeviceDescription.Append( UpnpCD::KProk );
|
|
328 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDELEMENTL_EXIT );
|
|
329 |
}
|
|
330 |
|
|
331 |
// ---------------------------------------------------------------------------------
|
|
332 |
// CUpnpTmServerDeviceXmlParser::OnContentL
|
|
333 |
// Provides the content/value of the element/tag
|
|
334 |
// ---------------------------------------------------------------------------------
|
|
335 |
//
|
|
336 |
void CUpnpTmServerDeviceXmlParser::OnContentL( const TDesC8& aBytes, TInt aErrorCode )
|
|
337 |
{
|
|
338 |
User::LeaveIfError(aErrorCode);
|
|
339 |
iDeviceDescription.Append(aBytes);
|
|
340 |
}
|
|
341 |
|
|
342 |
// ---------------------------------------------------------------------------------
|
|
343 |
// CUpnpTmServerDeviceXmlParser::StartL
|
|
344 |
// Method which inputs xml formatted buffer content to the XML Parser
|
|
345 |
// and invokes parsing
|
|
346 |
// ---------------------------------------------------------------------------------
|
|
347 |
//
|
|
348 |
void CUpnpTmServerDeviceXmlParser::StartL()
|
|
349 |
{
|
|
350 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_STARTL_ENTRY );
|
|
351 |
TDriveNumber drive = RFs::GetSystemDrive(); //Find system's drive
|
|
352 |
TBuf<UpnpString::KMaxFilenameLength> privatePath;
|
|
353 |
TInt err = iFs.PrivatePath(privatePath); //Find the application's private path
|
|
354 |
// a) If the Private Path is not found (for whatever reasons),
|
|
355 |
// Create a private path in the System Drive
|
|
356 |
if( err == KErrNotFound )
|
|
357 |
{
|
|
358 |
User::LeaveIfError( iFs.CreatePrivatePath(drive) );
|
|
359 |
}
|
|
360 |
// b) If Private Path is found but is a read-only or non-persistent drive
|
|
361 |
// Create a private path in the system drive else use it
|
|
362 |
else if( err == KErrNone )
|
|
363 |
{
|
|
364 |
TDriveInfo driveInfo;
|
|
365 |
User::LeaveIfError( iFs.Drive(driveInfo));
|
|
366 |
TUint driveAttr = driveInfo.iDriveAtt;
|
|
367 |
if ( driveAttr == KDriveAttRom )
|
|
368 |
{
|
|
369 |
User::LeaveIfError( iFs.CreatePrivatePath(drive) );
|
|
370 |
}
|
|
371 |
}
|
|
372 |
else
|
|
373 |
{
|
|
374 |
OstTrace1( TRACE_ERROR, CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;err=%d", err );
|
|
375 |
User::Leave(err);
|
|
376 |
}
|
|
377 |
privatePath.Append(KPublicDevicePath());
|
|
378 |
err = iFs.MkDirAll(privatePath);
|
|
379 |
if( err && err != KErrAlreadyExists )
|
|
380 |
{
|
|
381 |
OstTrace1( TRACE_ERROR, DUP1_CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;err=%d", err );
|
|
382 |
User::LeaveIfError(err);
|
|
383 |
}
|
|
384 |
iDeviceDir.CreateL(privatePath);
|
|
385 |
RBuf8 rootDeviceBuf;
|
|
386 |
CleanupClosePushL(rootDeviceBuf);
|
|
387 |
rootDeviceBuf.CreateL(KBufSize);
|
|
388 |
rootDeviceBuf.Append(KRootDeviceXmlLead());
|
|
389 |
// Appends the device icon list to the device xml buffer
|
|
390 |
const RPointerArray<CUpnpTerminalModeIcon>& deviceList = iDeviceInfo.DeviceIconList();
|
|
391 |
TInt iconCount = deviceList.Count();
|
|
392 |
if ( iconCount > KErrNone )
|
|
393 |
{
|
|
394 |
privatePath.Append(KIconDirectory());
|
|
395 |
err = iFs.MkDir(privatePath); // Creates icon directory
|
|
396 |
if( err && err != KErrAlreadyExists )
|
|
397 |
{
|
|
398 |
OstTrace1( TRACE_ERROR, DUP2_CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;err=%d", err );
|
|
399 |
User::LeaveIfError(err);
|
|
400 |
}
|
|
401 |
iIconDirectory.CreateL(privatePath);
|
|
402 |
OstTrace1( TRACE_ERROR, DUP3_CUPNPTMSERVERDEVICEXMLPARSER_STARTL, "CUpnpTmServerDeviceXmlParser::StartL;iconCount=%d", iconCount );
|
|
403 |
rootDeviceBuf.Append(KStartIconList);
|
|
404 |
for ( TInt i(0); i < iconCount; i++ )
|
|
405 |
{
|
|
406 |
rootDeviceBuf.Append(KStartIcon);
|
|
407 |
rootDeviceBuf.Append(KStartMimeType);
|
|
408 |
rootDeviceBuf.Append(deviceList[i]->MimeType());
|
|
409 |
rootDeviceBuf.Append(KEndMimeType);
|
|
410 |
rootDeviceBuf.Append(KStartWidth);
|
|
411 |
rootDeviceBuf.AppendNum(deviceList[i]->Width());
|
|
412 |
rootDeviceBuf.Append(KEndWidth);
|
|
413 |
rootDeviceBuf.Append(KStartHeight);
|
|
414 |
rootDeviceBuf.AppendNum(deviceList[i]->Height());
|
|
415 |
rootDeviceBuf.Append(KEndHeight);
|
|
416 |
rootDeviceBuf.Append(KStartDepth);
|
|
417 |
rootDeviceBuf.AppendNum(deviceList[i]->Depth());
|
|
418 |
rootDeviceBuf.Append(KEndDepth);
|
|
419 |
rootDeviceBuf.Append(KStartUrl);
|
|
420 |
|
|
421 |
TBuf8<KMaxPath> iconBuf;
|
|
422 |
const TDesC& fileName = deviceList[i]->IconFilename();
|
|
423 |
iconBuf.Copy(fileName);
|
|
424 |
TBuf8<UpnpString::KDefaultStringLength> iconRelativeUrl(KScpdUrl());
|
|
425 |
// Extracts the actual input filepath and creates the relative url for the icon
|
|
426 |
// to be provided in the device xml file
|
|
427 |
iconRelativeUrl.Append(KIconPath());
|
|
428 |
// Extracts only filename and appends the same to url
|
|
429 |
iconRelativeUrl.Append(iconBuf.Mid((iconBuf.LocateReverse(KDirectorySeparator))+1));
|
|
430 |
rootDeviceBuf.Append(iconRelativeUrl);
|
|
431 |
delete iFileMan;
|
|
432 |
iFileMan = NULL;
|
|
433 |
iFileMan = CFileMan::NewL(iFs) ;
|
|
434 |
// copies icon files to the private device directory
|
|
435 |
User::LeaveIfError(iFileMan->Copy(fileName,iIconDirectory));
|
|
436 |
rootDeviceBuf.Append(KEndUrl);
|
|
437 |
rootDeviceBuf.Append(KEndIcon);
|
|
438 |
}
|
|
439 |
rootDeviceBuf.Append(KEndIconList);
|
|
440 |
}
|
|
441 |
rootDeviceBuf.Append( iDeviceInfo.DeviceInfo());
|
|
442 |
rootDeviceBuf.Append( KRootDeviceXmlTrail() );
|
|
443 |
|
|
444 |
ParseL(*iParser, rootDeviceBuf );
|
|
445 |
CleanupStack::PopAndDestroy(&rootDeviceBuf);
|
|
446 |
|
|
447 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_STARTL_EXIT );
|
|
448 |
}
|
|
449 |
|
|
450 |
// ---------------------------------------------------------------------------------
|
|
451 |
// CUpnpTmServerDeviceXmlParser::OnStartPrefixMappingL
|
|
452 |
// ---------------------------------------------------------------------------------
|
|
453 |
//
|
|
454 |
void CUpnpTmServerDeviceXmlParser::OnStartPrefixMappingL(const RString& /*aPrefix*/, const RString& /*aUri*/, TInt aErrorCode)
|
|
455 |
{
|
|
456 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTPREFIXMAPPINGL_ENTRY );
|
|
457 |
User::LeaveIfError(aErrorCode);
|
|
458 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSTARTPREFIXMAPPINGL_EXIT );
|
|
459 |
}
|
|
460 |
|
|
461 |
// ---------------------------------------------------------------------------------
|
|
462 |
// CUpnpTmServerDeviceXmlParser::OnEndPrefixMappingL
|
|
463 |
// ---------------------------------------------------------------------------------
|
|
464 |
//
|
|
465 |
void CUpnpTmServerDeviceXmlParser::OnEndPrefixMappingL(const RString& /*aPrefix*/, TInt aErrorCode)
|
|
466 |
{
|
|
467 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDPREFIXMAPPINGL_ENTRY );
|
|
468 |
User::LeaveIfError(aErrorCode);
|
|
469 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONENDPREFIXMAPPINGL_EXIT );
|
|
470 |
}
|
|
471 |
|
|
472 |
// ---------------------------------------------------------------------------------
|
|
473 |
// CUpnpTmServerDeviceXmlParser::OnIgnorableWhiteSpaceL
|
|
474 |
// ---------------------------------------------------------------------------------
|
|
475 |
//
|
|
476 |
void CUpnpTmServerDeviceXmlParser::OnIgnorableWhiteSpaceL(const TDesC8& /*aBytes*/, TInt aErrorCode)
|
|
477 |
{
|
|
478 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONIGNORABLEWHITESPACEL_ENTRY );
|
|
479 |
User::LeaveIfError(aErrorCode);
|
|
480 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONIGNORABLEWHITESPACEL_EXIT );
|
|
481 |
}
|
|
482 |
|
|
483 |
// ---------------------------------------------------------------------------------
|
|
484 |
// CUpnpTmServerDeviceXmlParser::OnSkippedEntityL
|
|
485 |
// ---------------------------------------------------------------------------------
|
|
486 |
//
|
|
487 |
void CUpnpTmServerDeviceXmlParser::OnSkippedEntityL(const RString& /*aName*/, TInt aErrorCode)
|
|
488 |
{
|
|
489 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONSKIPPEDENTITYL_ENTRY );
|
|
490 |
User::LeaveIfError(aErrorCode);
|
|
491 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONSKIPPEDENTITYL_EXIT );
|
|
492 |
}
|
|
493 |
|
|
494 |
// ---------------------------------------------------------------------------------
|
|
495 |
// CUpnpTmServerDeviceXmlParser::OnProcessingInstructionL
|
|
496 |
// ---------------------------------------------------------------------------------
|
|
497 |
//
|
|
498 |
void CUpnpTmServerDeviceXmlParser::OnProcessingInstructionL(const TDesC8& /*aTarget*/, const TDesC8& /*aData*/, TInt aErrorCode)
|
|
499 |
{
|
|
500 |
OstTraceFunctionEntry0( CUPNPTMSERVERDEVICEXMLPARSER_ONPROCESSINGINSTRUCTIONL_ENTRY );
|
|
501 |
User::LeaveIfError(aErrorCode);
|
|
502 |
OstTraceFunctionExit0( CUPNPTMSERVERDEVICEXMLPARSER_ONPROCESSINGINSTRUCTIONL_EXIT );
|
|
503 |
}
|
|
504 |
|
|
505 |
|