126 CCCHSubsession* subsession = CCCHSubsession::NewLC( iCCHServer ); |
126 CCCHSubsession* subsession = CCCHSubsession::NewLC( iCCHServer ); |
127 iSubsessions->AddL( subsession ); |
127 iSubsessions->AddL( subsession ); |
128 const TInt handle( iObjectIx->AddL( subsession ) ); |
128 const TInt handle( iObjectIx->AddL( subsession ) ); |
129 CleanupStack::Pop( subsession ); |
129 CleanupStack::Pop( subsession ); |
130 TPckg<TInt> handlePckg( handle ); |
130 TPckg<TInt> handlePckg( handle ); |
131 TRAPD( err, aMessage.WriteL( 3, handlePckg ) ); |
131 TInt err = aMessage.Write( 3, handlePckg ); |
|
132 |
132 if ( KErrNone != err ) |
133 if ( KErrNone != err ) |
133 { |
134 { |
134 // Panic client |
135 // Panic client |
135 iObjectIx->Remove( handle ); |
136 iObjectIx->Remove( handle ); |
136 iCCHServer.PanicClient( aMessage, ECCHErrSubSessionOpen ); |
137 iCCHServer.PanicClient( aMessage, ECCHErrSubSessionOpen ); |
137 } |
138 } |
138 aMessage.Complete( KErrNone ); |
139 else |
|
140 { |
|
141 aMessage.Complete( KErrNone ); |
|
142 } |
139 } |
143 } |
140 break; |
144 break; |
141 case ECCHCloseSubSession: |
145 case ECCHCloseSubSession: |
142 { |
146 { |
143 const TInt handle( aMessage.Int3() ); |
147 const TInt handle( aMessage.Int3() ); |
144 if ( iObjectIx->At( handle ) ) |
148 if ( iObjectIx->At( handle ) ) |
145 { |
149 { |
146 iObjectIx->Remove( handle ); |
150 iObjectIx->Remove( handle ); |
|
151 aMessage.Complete( KErrNone ); |
147 } |
152 } |
148 else |
153 else |
149 { |
154 { |
150 // Panic client. Handle was not valid |
155 // Panic client. Handle was not valid |
151 iCCHServer.PanicClient( aMessage, ECCHErrSubSessionClose ); |
156 iCCHServer.PanicClient( aMessage, ECCHErrSubSessionClose ); |
152 } |
157 } |
153 aMessage.Complete( KErrNone ); |
|
154 } |
158 } |
155 break; |
159 break; |
156 /** |
160 /** |
157 * CCH subsession functions |
161 * CCH subsession functions |
158 */ |
162 */ |