43 EISIRouterNotUniqueUID, |
47 EISIRouterNotUniqueUID, |
44 EISIRouterNULLObjId, |
48 EISIRouterNULLObjId, |
45 EISIRouterNULLPtr, |
49 EISIRouterNULLPtr, |
46 EISIRouterNULLPtr1, |
50 EISIRouterNULLPtr1, |
47 EISIRouterNULLPtr2, |
51 EISIRouterNULLPtr2, |
|
52 EISIRouterNULLPtr3, |
48 EISIRouterNULLThreadPointer, |
53 EISIRouterNULLThreadPointer, |
|
54 EISIRouterRouterServiceNULLPtr, |
|
55 EISiShPipeHandlerNULLPtr, |
|
56 EISIRouterCommunicationManagerNULLPtr, |
|
57 EISIRouterNameServiceNULLPtr, |
|
58 EISIWrongObjectApiClient, |
49 }; |
59 }; |
50 |
60 |
51 |
61 const TInt KDfcPriority( 5 ); |
|
62 |
|
63 // #define WITHOUT_WRAPPERS_IN_USE // to be defined on when wrappers are not used anymore |
|
64 #ifndef WITHOUT_WRAPPERS_IN_USE |
|
65 #include <iscnokiadefinitions.h> // Only allowed to include when wrappers are used |
|
66 const TUint16 KFirstUserChannel( EIscNokiaUpdateApplication ); |
|
67 const TUint16 KLastKernelChannel( EIscNokiaLastKernelChannel ); |
|
68 #endif |
52 |
69 |
53 void DISIRouter::Connect( |
70 void DISIRouter::Connect( |
54 const TInt32 aUID, |
71 const TInt32 aUID, |
55 TUint8& aObjId, |
72 TUint8& aObjId, |
56 MISIRouterChannelIf* aCallback |
73 MISIRouterObjectIf* aCallback |
57 ) |
74 ) |
58 { |
75 { |
59 C_TRACE( ( _T( "DISIRouter::Connect %d 0x%x 0x%x>" ), aUID, aObjId, aCallback ) ); |
76 C_TRACE( ( _T( "DISIRouter::Connect 0x%x 0x%x 0x%x 0x%x>" ), aUID, aObjId, aCallback, this ) ); |
60 ASSERT_RESET_ALWAYS( aCallback, ( EISIRouterNULLPtr | EDISIRouterTraceId << KClassIdentifierShift ) ); |
77 ASSERT_RESET_ALWAYS( aCallback, ( EISIRouterNULLPtr | EDISIRouterTraceId << KClassIdentifierShift ) ); |
61 TISIClient* tmp = new TISIClient(); |
78 TISIClient* tmp = new TISIClient(); |
62 ASSERT_RESET_ALWAYS( tmp, ( EISIRouterMemAllocFailure | EDISIRouterTraceId << KClassIdentifierShift ) ); |
79 ASSERT_RESET_ALWAYS( tmp, ( EISIRouterMemAllocFailure | EDISIRouterTraceId << KClassIdentifierShift ) ); |
63 tmp->iUID = aUID; |
80 tmp->iUID = aUID; |
64 tmp->iChannel = aCallback; |
81 tmp->iChannel = aCallback; |
65 |
82 TUint8 staticObjId = ReserveStaticObjId( aUID ); |
66 TUint8 staticObjId = ReceiveStaticObjId( aUID ); |
|
67 NKern::FMWait( iClientTableFastMutex ); |
83 NKern::FMWait( iClientTableFastMutex ); |
68 CheckUIDUniqueness( aUID ); |
84 TBool reserved = CheckUIDUniqueness( aUID ); |
69 if( !staticObjId ) |
85 #ifndef WITHOUT_WRAPPERS_IN_USE |
70 { |
86 if( reserved ) |
71 tmp->iObjId = ReserveNewDynamicObjId(); |
87 { |
72 ASSERT_RESET_ALWAYS( tmp->iObjId, ( EISIRouterNULLObjId | EDISIRouterTraceId << KClassIdentifierShift ) ); |
88 NKern::FMSignal( iClientTableFastMutex ); |
|
89 aObjId = 0xEE; |
73 } |
90 } |
74 else |
91 else |
75 { |
92 { |
76 tmp->iObjId = staticObjId; |
93 #endif //WITHOUT_WRAPPERS_IN_USE |
77 } |
94 if( KNotInitializedId == staticObjId ) |
78 iClientTable[ tmp->iObjId ] = tmp; |
95 { |
79 NKern::FMSignal( iClientTableFastMutex ); |
96 tmp->iObjId = ReserveNewDynamicObjId(); |
80 aObjId = tmp->iObjId; |
97 ASSERT_RESET_ALWAYS( tmp->iObjId, ( EISIRouterNULLObjId | EDISIRouterTraceId << KClassIdentifierShift ) ); |
81 C_TRACE( ( _T( "DISIRouter::Connect %d 0x%x 0x%x<" ), aUID, aObjId, aCallback ) ); |
98 } |
82 } |
99 else |
83 |
100 { |
84 void DISIRouter::CheckUIDUniqueness( const TInt32 aUID ) |
101 tmp->iObjId = staticObjId;// check that dynamic allocation don't return statically reserved object identifiers |
85 { |
102 } |
|
103 iClientTable[ tmp->iObjId ] = tmp; |
|
104 NKern::FMSignal( iClientTableFastMutex ); |
|
105 aObjId = tmp->iObjId; |
|
106 #ifndef WITHOUT_WRAPPERS_IN_USE |
|
107 } |
|
108 #endif |
|
109 C_TRACE( ( _T( "DISIRouter::Connect 0x%x 0x%x 0x%x<" ), aUID, aObjId, aCallback ) ); |
|
110 } |
|
111 |
|
112 TBool DISIRouter::CheckUIDUniqueness( const TInt32 aUID ) |
|
113 { |
|
114 TBool ret(EFalse); |
86 // No tracing with mutex |
115 // No tracing with mutex |
87 for( TInt i( KFirstAllowedObjId ); i < KMaxAmountOfObjId; i++ ) |
116 for( TInt i( 0 ); i < KMaxAmountOfObjId; i++ ) |
88 { |
117 { |
89 if( iClientTable[ i ] && ( iClientTable[ i ]->iUID == aUID ) ) |
118 if( iClientTable[ i ] && ( iClientTable[ i ]->iUID == aUID ) ) |
90 { |
119 { |
91 ASSERT_RESET_ALWAYS( 0, ( EISIRouterNotUniqueUID | EDISIRouterTraceId << KClassIdentifierShift ) ); |
120 #ifndef WITHOUT_WRAPPERS_IN_USE |
92 } |
121 if( aUID <= KLastKernelChannel ) |
93 } |
122 { |
94 } |
123 ret = ETrue; |
95 |
124 } |
96 TUint8 DISIRouter::ReceiveStaticObjId( const TInt32 aUID ) |
125 else |
97 { |
126 { |
98 C_TRACE( ( _T( "DISIRouter::ReceiveStaticObjId 0x%x 0x%x>" ), aUID ) ); |
127 #endif //WITHOUT_WRAPPERS_IN_USE |
|
128 ASSERT_RESET_ALWAYS( 0, ( EISIRouterNotUniqueUID | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
129 #ifndef WITHOUT_WRAPPERS_IN_USE |
|
130 } |
|
131 #endif //WITHOUT_WRAPPERS_IN_USE |
|
132 } |
|
133 } |
|
134 return ret; |
|
135 } |
|
136 |
|
137 TUint8 DISIRouter::ReserveStaticObjId( const TInt32 aUID ) |
|
138 { |
|
139 C_TRACE( ( _T( "DISIRouter::ReserveStaticObjId 0x%x 0x%x>" ), aUID ) ); |
99 for( TUint8 i = 0; i < iStaticObjIdTable.Count(); i++ ) |
140 for( TUint8 i = 0; i < iStaticObjIdTable.Count(); i++ ) |
100 { |
141 { |
101 if( iStaticObjIdTable[ i ]->iUID == aUID ) |
142 if( iStaticObjIdTable[ i ]->iUID == aUID ) |
102 { |
143 { |
103 C_TRACE( ( _T( "DISIRouter::ReceiveStaticObjId 0x%x 0x%x 0x%x<" ), aUID, iStaticObjIdTable[i]->iUID, iStaticObjIdTable[i]->iObjId ) ); |
144 C_TRACE( ( _T( "DISIRouter::ReserveStaticObjId 0x%x 0x%x 0x%x<" ), aUID, iStaticObjIdTable[i]->iUID, iStaticObjIdTable[i]->iObjId ) ); |
104 return iStaticObjIdTable[i]->iObjId; |
145 return iStaticObjIdTable[i]->iObjId; |
105 } |
146 } |
106 } |
147 } |
107 return KNotInitializedId; |
148 return KNotInitializedId; |
108 } |
149 } |
109 |
150 |
110 TUint8 DISIRouter::ReserveNewDynamicObjId() |
151 TUint8 DISIRouter::ReserveNewDynamicObjId() |
111 { |
152 { |
112 // No tracing with mutex |
153 // No tracing with mutex |
113 for( TInt i( KFirstAllowedObjId ); i < KMaxAmountOfObjId; i++ ) |
154 #ifdef WITHOUT_WRAPPERS_IN_USE |
114 { |
155 TUint8 firstAllowedObjId = KFirstAllowedObjId; |
115 if( !iClientTable[ i ] ) |
156 #else |
116 { |
157 TUint8 firstAllowedObjId = KLastKernelChannel; |
117 TBool reserved( EFalse ); |
158 #endif |
118 for( TUint8 j = 0; j < iStaticObjIdTable.Count(); j++ ) |
159 |
119 { |
160 for( TInt i(firstAllowedObjId); i < KMaxAmountOfObjId; i++ ) |
120 if( j == iStaticObjIdTable[ j ]->iObjId ) |
161 { |
121 { |
162 if( !iClientTable[ i ] ) |
122 reserved = ETrue; |
163 { |
123 break; |
164 TBool reserved( EFalse ); |
124 } |
165 for( TUint8 j = 0; j < iStaticObjIdTable.Count(); j++ ) |
125 } |
166 { |
126 if( !reserved ) |
167 if( j == iStaticObjIdTable[ j ]->iObjId ) |
127 { |
168 { |
128 return i; |
169 reserved = ETrue; |
129 } |
170 break; |
130 } |
171 } |
131 } |
172 } |
132 return KNotInitializedId; |
173 if( !reserved ) |
|
174 { |
|
175 return i; |
|
176 } |
|
177 } |
|
178 } |
|
179 return KNotInitializedId; |
133 } |
180 } |
134 |
181 |
135 void DISIRouter::Disconnect( |
182 void DISIRouter::Disconnect( |
136 const TUint8 aObjId |
183 const TUint8 aObjId |
137 ) |
184 ) |
138 { |
185 { |
139 C_TRACE( ( _T( "DISIRouter::Disconnect 0x%x>" ), aObjId ) ); |
186 C_TRACE( ( _T( "DISIRouter::Disconnect 0x%x>" ), aObjId ) ); |
140 TISIClient* tmp = iClientTable[ aObjId ]; |
187 TISIClient* tmp = iClientTable[ aObjId ]; |
141 NKern::FMWait( iClientTableFastMutex ); |
188 NKern::FMWait( iClientTableFastMutex ); |
142 iClientTable[ aObjId ] = NULL; |
189 iClientTable[ aObjId ] = NULL; |
143 NKern::FMSignal( iClientTableFastMutex ); |
190 NKern::FMSignal( iClientTableFastMutex ); |
144 //Must exist |
191 //Must exist |
145 delete tmp; |
192 delete tmp; |
|
193 tmp = NULL; |
146 C_TRACE( ( _T( "DISIRouter::Disconnect 0x%x<" ), aObjId ) ); |
194 C_TRACE( ( _T( "DISIRouter::Disconnect 0x%x<" ), aObjId ) ); |
147 } |
195 } |
148 |
196 |
149 TDfcQue* DISIRouter::GetDfcThread( |
197 TDfcQue* DISIRouter::GetDfcThread( |
150 const TISIDfcQThreadType aType |
198 const TISIDfcQThreadType aType |
151 ) |
199 ) |
152 { |
200 { |
153 C_TRACE( ( _T( "DISIRouter::GetDfcThread<>" ) ) ); |
201 C_TRACE( ( _T( "DISIRouter::GetDfcThread<>" ) ) ); |
154 Kern::Printf( "ISIRouter::GetDfcThread" ); |
202 return iShClientThreadContainer->AllocateThread( aType ); |
155 return iClientThreadContainer->AllocateThread( aType ); |
|
156 } |
203 } |
157 |
204 |
158 void DISIRouter::FreeDfcThread( TDfcQue* aThread ) |
205 void DISIRouter::FreeDfcThread( TDfcQue* aThread ) |
159 { |
206 { |
160 C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x>" ), aThread ) ); |
207 C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x>" ), aThread ) ); |
161 Kern::Printf( "ISIRouter::FreeDfcThread" ); |
208 iShClientThreadContainer->DeallocateThread( aThread ); |
162 iClientThreadContainer->DeallocateThread( aThread ); |
|
163 C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x<" ), aThread ) ); |
209 C_TRACE( ( _T( "DISIRouter::FreeDfcThread 0x%x<" ), aThread ) ); |
164 } |
210 } |
165 |
211 |
166 MISIChannelRouterIf* MISIChannelRouterIf::GetIf() |
212 EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::GetIf() |
167 { |
213 { |
168 C_TRACE( ( _T( "MISIChannelRouterIf::GetIf<>" ) ) ); |
214 C_TRACE( ( _T( "MISIObjectRouterIf::GetIf<>" ) ) ); |
169 return DISIRouter::GetRouter(); |
215 return DISIRouter::GetRouter(); |
170 } |
216 } |
171 |
217 |
172 DISIRouter::DISIRouter( |
218 DISIRouter::DISIRouter( |
173 // None |
219 // None |
174 ) |
220 ) |
175 { |
221 { |
176 C_TRACE( ( _T( "DISIRouter::DISIRouter>" ) ) ); |
222 C_TRACE( ( _T( "DISIRouter::DISIRouter>" ) ) ); |
177 iClientThreadContainer = new DISIThreadContainer(); |
223 iShClientThreadContainer = new DISIThreadContainer(); |
178 ASSERT_RESET_ALWAYS( iClientThreadContainer, ( EISIRouterMemAllocFailure1 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
224 ASSERT_RESET_ALWAYS( iShClientThreadContainer, ( EISIRouterMemAllocFailure1 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
179 iInitThread = iClientThreadContainer->AllocateThread( MISIChannelRouterIf::EISIKernelMainThread ); |
225 iInitThread = iShClientThreadContainer->AllocateThread( MISIObjectRouterIf::EISIKernelMainThread ); |
180 ASSERT_RESET_ALWAYS( iInitThread, ( EISIRouterNULLThreadPointer | EDISIRouterTraceId << KClassIdentifierShift ) ); |
226 ASSERT_RESET_ALWAYS( iInitThread, ( EISIRouterNULLThreadPointer | EDISIRouterTraceId << KClassIdentifierShift ) ); |
181 iInitializeDfc = new TDfc( InitializeDfc, this, iInitThread, KDfcPriority ); |
227 iInitializeDfc = new TDfc( InitializeDfc, this, iInitThread, KDfcPriority ); |
182 ASSERT_RESET_ALWAYS( iInitializeDfc, ( EISIRouterMemAllocFailure2 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
228 ASSERT_RESET_ALWAYS( iInitializeDfc, ( EISIRouterMemAllocFailure2 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
183 iInitializeDfc->Enque(); |
229 iInitializeDfc->Enque(); |
184 C_TRACE( ( _T( "DISIRouter::DISIRouter<" ) ) ); |
230 C_TRACE( ( _T( "DISIRouter::DISIRouter<" ) ) ); |
196 |
242 |
197 void DISIRouter::Initialize( |
243 void DISIRouter::Initialize( |
198 // None |
244 // None |
199 ) |
245 ) |
200 { |
246 { |
201 C_TRACE( ( _T( "DISIRouter::Initialize>" ) ) ); |
247 C_TRACE( ( _T( "DISIRouter::Initialize> this: 0x%x" ), this ) ); |
202 |
248 iSelfPtr = this; |
203 iCLTransceiver = new DISICLTransceiver( this ); |
|
204 ASSERT_RESET_ALWAYS( iCLTransceiver, ( EISIRouterNULLPtr1 | EDISIRouterTraceId << KClassIdentifierShift ) ); //TODO error codes |
|
205 iClientTableFastMutex = new NFastMutex(); |
249 iClientTableFastMutex = new NFastMutex(); |
206 ASSERT_RESET_ALWAYS( iClientTableFastMutex, ( EISIRouterNULLPtr2 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
250 ASSERT_RESET_ALWAYS( iClientTableFastMutex, ( EISIRouterNULLPtr2 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
|
251 for( TInt i( 0 ); i < KMaxAmountOfObjId; i++) |
|
252 { |
|
253 iClientTable[ i ] = NULL; |
|
254 } |
|
255 // comment improve hex or des |
|
256 // nameservice, communication manager, routerservice... |
|
257 // UID ObjId |
|
258 iStaticObjIdTable.Append( new TStaticId( 123, 0x70 ) ); // for testing ISI API |
|
259 iStaticObjIdTable.Append( new TStaticId( 200, 0x71 ) ); // for testing ISI API |
|
260 iStaticObjIdTable.Append( new TStaticId( 201, 0x72 ) ); // for testing ISI API |
|
261 iStaticObjIdTable.Append( new TStaticId( 202, 0x73 ) ); // for testing ISI API |
|
262 // |
|
263 #ifndef WITHOUT_WRAPPERS_IN_USE |
|
264 // Map all the kernel channels as they used to be |
|
265 for( TInt id( KFirstUserChannel ); id < KLastKernelChannel; id++ ) |
|
266 { |
|
267 if ( ( id != KNotInitializedId ) && |
|
268 ( id != PN_OBJ_EVENT_MULTICAST ) && |
|
269 ( id != PN_OBJ_EVENT_MULTICAST ) && |
|
270 ( id != ROUTER_OBJECT_IDENTIFIER ) && |
|
271 ( id != PIPEHANDLER_OBJECT_IDENTIFIER ) ) |
|
272 { |
|
273 iStaticObjIdTable.Append( new TStaticId( id, id ) ); |
|
274 } |
|
275 else |
|
276 { |
|
277 iStaticObjIdTable.Append( new TStaticId( id, 0xEE ) ); |
|
278 } |
|
279 } |
|
280 // Map all the kernel channels as they used to be |
|
281 #endif // WITHOUT_WRAPPERS_IN_USE |
|
282 // ? vaikutus iShClientThreadContainer->DeallocateThread( iInitThread ); |
|
283 |
|
284 iStaticObjIdTable.Append( new TStaticId( 0xD11BADA1, KNotInitializedId ) );// Make sure no one can get KNotInitializedId obj id |
|
285 iStaticObjIdTable.Append( new TStaticId( KCommunicationManagerUID, PN_OBJ_EVENT_MULTICAST ) ); |
|
286 iStaticObjIdTable.Append( new TStaticId( KNameServiceUID, PN_OBJ_ROUTING_REQ ) ); |
|
287 iStaticObjIdTable.Append( new TStaticId( KIsiShRouterServiceUID, ROUTER_OBJECT_IDENTIFIER ) ); |
|
288 iStaticObjIdTable.Append( new TStaticId( KIsiShPipeHandlerUID, PIPEHANDLER_OBJECT_IDENTIFIER ) ); |
207 |
289 |
208 for( TInt i( 0 ); i < KMaxAmountOfObjId; i++) |
290 iShCLTransceiver = new DISICLTransceiver( *this, iInitThread ); |
209 { |
291 ASSERT_RESET_ALWAYS( iShCLTransceiver, ( EISIRouterNULLPtr1 | EDISIRouterTraceId << KClassIdentifierShift ) ); |
210 iClientTable[ i ] = NULL; |
|
211 } |
|
212 // UID ObjId |
|
213 iStaticObjIdTable.Append( new TStaticId( 123, 15 ) ); //NokiaTSY etc... |
|
214 iStaticObjIdTable.Append( new TStaticId( 200, 34 ) ); |
|
215 |
292 |
216 iSelfPtr = this; |
|
217 iClientThreadContainer->DeallocateThread( iInitThread ); |
|
218 C_TRACE( ( _T( "DISIRouter::Initialize<" ) ) ); |
293 C_TRACE( ( _T( "DISIRouter::Initialize<" ) ) ); |
219 } |
294 } |
220 |
295 |
221 DISIRouter::~DISIRouter( |
296 DISIRouter::~DISIRouter( |
222 // None |
297 // None |
255 TDes8& aMessage, |
329 TDes8& aMessage, |
256 const TUint8 aObjId |
330 const TUint8 aObjId |
257 ) |
331 ) |
258 { |
332 { |
259 C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
333 C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
260 Kern::Printf( "ISIRouter::Send" ); |
334 |
261 |
335 if( ( ( aObjId == EIscNokiaUsbPhonetLink ) && ( GET_SENDER_DEV( aMessage.Ptr() ) == PN_DEV_PC ) ) || |
262 if( ( aObjId != PN_OBJ_ROUTING_REQ ) |
336 ( aObjId == PN_OBJ_ROUTING_REQ ) || |
263 && ( aObjId != PN_OBJ_EVENT_MULTICAST ) ) |
337 ( aObjId == PN_OBJ_EVENT_MULTICAST ) || |
264 { |
338 ( aObjId == ROUTER_OBJECT_IDENTIFIER ) || |
265 TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); |
339 ( aObjId == PIPEHANDLER_OBJECT_IDENTIFIER ) ) |
|
340 { |
|
341 // No need to update sender dev and obj id |
|
342 C_TRACE( ( _T( "DISIRouter::Send message tx address not needed to updata 0x%x 0x%x>" ), aObjId, GET_SENDER_DEV( aMessage.Ptr() ) ) ); |
|
343 } |
|
344 else |
|
345 { |
|
346 TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); |
266 SET_SENDER_DEV( messageBlockPtr, PN_DEV_OWN ); |
347 SET_SENDER_DEV( messageBlockPtr, PN_DEV_OWN ); |
267 SET_SENDER_OBJ( messageBlockPtr, aObjId ); |
348 SET_SENDER_OBJ( messageBlockPtr, aObjId ); |
268 } |
349 } |
269 TInt error = iCLTransceiver->RouteISIMessage( aMessage ); |
350 TInt error = iShCLTransceiver->RouteISIMessage( aMessage ); |
270 C_TRACE( ( _T( "DISIRouter::Send 0x%x %d 0x%x<" ), &aMessage, aObjId ) ); |
351 C_TRACE( ( _T( "DISIRouter::Send 0x%x 0x%x<" ), &aMessage, aObjId ) ); |
271 return error; |
352 return error; |
272 } |
353 } |
273 |
354 |
274 TBool DISIRouter::Receive( TDes8& aMessage, const TUint8 aObjId ) |
355 TBool DISIRouter::Receive( TDes8& aMessage, const TUint8 aObjId ) |
275 { |
356 { |
276 C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
357 C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
277 TBool error( EFalse ); |
358 TBool error( EFalse ); |
278 TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); |
359 TUint8* messageBlockPtr( const_cast<TUint8*>( aMessage.Ptr() ) ); |
279 switch( GET_RECEIVER_OBJ( aMessage ) ) |
360 |
280 { |
361 NKern::FMWait( iClientTableFastMutex ); |
281 case PN_OBJ_ROUTING_REQ: |
362 if( iClientTable[ aObjId ] ) |
282 { |
363 { |
283 C_TRACE( ( _T( "DISIRouter msg to PN_OBJ_ROUTING_REQ: nameservice" ) ) ); |
364 NKern::FMSignal( iClientTableFastMutex ); |
284 //route with resource and nameservice |
365 ( iClientTable[ aObjId ]->iChannel )->Receive( aMessage ); //may not be safe, consider receive/delete sync |
285 iNameService->Receive( aMessage ); |
366 C_TRACE( ( _T( "DISIRouter::Receive ok 0x%x 0x%x" ), &aMessage, aObjId ) ); |
286 C_TRACE( ( _T( "DRouter::HandleIsiMessage to NAMESERVICE<" ) ) ); |
367 error = ETrue; |
287 error = ETrue; |
368 } |
288 break; |
369 else |
289 } |
370 { |
290 case PN_OBJ_EVENT_MULTICAST: |
371 NKern::FMSignal( iClientTableFastMutex ); |
291 { |
372 C_TRACE( ( _T( "DISIRouter::Receive failed 0x%x 0x%x" ), &aMessage, aObjId ) ); |
292 C_TRACE( ( _T( "DISIRouter msg to PN_OBJ_EVENT_MULTICAST: communication manager" ) ) ); |
373 error = EFalse; |
293 iCommunicationManager->Receive( aMessage ); |
374 } |
294 C_TRACE( ( _T( "DRouter::HandleIsiMessage to Communication Manager<" ) ) ); |
375 |
295 error = ETrue; |
376 C_TRACE( ( _T( "DISIRouter::Receive 0x%x 0x%x %d<" ), &aMessage, aObjId, error ) ); |
296 break; |
377 return error; |
297 } |
|
298 default: |
|
299 { //default regular channel |
|
300 NKern::FMWait( iClientTableFastMutex ); |
|
301 if( iClientTable[ aObjId ] ) |
|
302 { |
|
303 NKern::FMSignal( iClientTableFastMutex ); |
|
304 ( iClientTable[ aObjId ]->iChannel )->ReceiveMsg( aMessage ); //may not be safe, consider receive/delete sync |
|
305 C_TRACE( ( _T( "DISIRouter::Receive ok 0x%x 0x%x>" ), &aMessage, aObjId ) ); |
|
306 error = ETrue; |
|
307 } |
|
308 else |
|
309 { |
|
310 NKern::FMSignal( iClientTableFastMutex ); |
|
311 C_TRACE( ( _T( "DISIRouter::Receive failed 0x%x 0x%x<" ), &aMessage, aObjId ) ); |
|
312 error = EFalse; |
|
313 } |
|
314 break; |
|
315 } |
|
316 } |
|
317 return error; |
|
318 |
378 |
319 } |
379 } |
320 |
380 |
321 DECLARE_STANDARD_EXTENSION() |
381 DECLARE_STANDARD_EXTENSION() |
322 { |
382 { |
323 Kern::Printf( "ISI Router extension>" ); |
383 Kern::Printf( "ISI Router kext>" ); |
324 // Create a container extension |
384 // Create a container extension |
325 DISIRouter* extension = new DISIRouter(); |
385 DISIRouter* extension = new DISIRouter(); |
326 TRACE_ASSERT( extension ); |
386 TRACE_ASSERT( extension ); |
327 Kern::Printf( "ISI Router extension<" ); |
387 Kern::Printf( "ISI Router kext 0x%x<", extension ); |
328 return extension ? KErrNone : KErrNoMemory; |
388 return extension ? KErrNone : KErrNoMemory; |
329 } |
389 } |
330 |
390 |
331 DECLARE_EXTENSION_LDD() |
391 DECLARE_EXTENSION_LDD() |
332 { |
392 { |
333 Kern::Printf( "ISI Router ldd>" ); |
393 Kern::Printf( "ISI Router kextldd>" ); |
334 DLogicalDevice* device = new DISIDevice; |
394 DLogicalDevice* device = new DISIDevice; |
335 TRACE_ASSERT( device ); |
395 TRACE_ASSERT( device ); |
336 Kern::Printf( "ISI Router ldd 0x%x<", device ); |
396 Kern::Printf( "ISI Router kextldd 0x%x<", device ); |
337 return( device ); |
397 return device; |
338 } |
398 } |
339 |
|
340 //From objectapi |
|
341 EXPORT_C MISIObjectRouterIf* MISIObjectRouterIf::Connect( const TInt32 aUID, TUint8& aObjId, MISIRouterObjectIf* aCallback ) |
|
342 { |
|
343 C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x>" ), aUID, aObjId, aCallback ) ); |
|
344 |
|
345 Kern::Printf( "ISIRouter::Connect" ); |
|
346 if( aUID == KNameServiceUID ) |
|
347 { |
|
348 C_TRACE( ( _T( "MISIObjectRouterIf was nameservice" ) ) ); |
|
349 DISIRouter::iSelfPtr->iNameService = aCallback; |
|
350 aObjId = PN_OBJ_ROUTING_REQ; // 0x00 |
|
351 } |
|
352 else if( aUID == KCommunicationManagerUID ) |
|
353 { |
|
354 C_TRACE( ( _T( "MISIObjectRouterIf was communicationmanager" ) ) ); |
|
355 DISIRouter::iSelfPtr->iCommunicationManager = aCallback; |
|
356 aObjId = PN_OBJ_EVENT_MULTICAST; // 0x20 |
|
357 } |
|
358 else |
|
359 { |
|
360 C_TRACE( ( _T( "MISIObjectRouterIf unknown object api client" ) ) ); |
|
361 } |
|
362 MISIObjectRouterIf* tmp = DISIRouter::iSelfPtr; |
|
363 C_TRACE( ( _T( "MISIObjectRouterIf::Connect %d 0x%x 0x%x<" ), aUID, aObjId, aCallback ) ); |
|
364 return tmp; |
|
365 } |
|
366 |
|