1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/epoc32/include/mw/http/framework/cprotocolhandler.h Wed Mar 31 12:27:01 2010 +0100
1.3 @@ -0,0 +1,555 @@
1.4 +// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// please do not delete
1.18 +//
1.19 +//
1.20 +
1.21 +
1.22 +
1.23 +/**
1.24 + @file CProtocolHandler.h
1.25 + @warning : This file contains Rose Model ID comments
1.26 +*/
1.27 +
1.28 +#ifndef __CPROTOCOLHANDLER_H__
1.29 +#define __CPROTOCOLHANDLER_H__
1.30 +
1.31 +// System includes
1.32 +#include <e32base.h>
1.33 +#include <http/framework/httplogger.h>
1.34 +#include <http/mhttpfilter.h>
1.35 +#include <http/rhttpsession.h>
1.36 +
1.37 +// Forward declarations
1.38 +class CHeaderCodec;
1.39 +class CProtTransaction;
1.40 +class CSecurityPolicy;
1.41 +class MProtHandlerInterface;
1.42 +
1.43 +/**
1.44 +The ECom protocol handler plugin interface UID.
1.45 +@publishedAll
1.46 +@released
1.47 +*/
1.48 +const TUid KUidProtocolHandlerPluginInterface = {0x1000A449};
1.49 +
1.50 +//
1.51 +/**
1.52 +Defined active object priorities for the Protocol Handler
1.53 +@publishedAll
1.54 +@released
1.55 +*/
1.56 +const TInt KProtocolHandlerActivePriority = CActive::EPriorityStandard;
1.57 +/**
1.58 +Defined active object priorities for the Transaction
1.59 +@publishedAll
1.60 +@released
1.61 +*/
1.62 +const TInt KTransactionActivePriority = KProtocolHandlerActivePriority+1;
1.63 +
1.64 +
1.65 +//##ModelId=3C4C186A02A3
1.66 +class CProtocolHandler : public CActive, public MHTTPFilter
1.67 +/**
1.68 +An abstract protocol handler. Protocol handlers are required to
1.69 +act as the bridge between abstract representations of sessions, transactions and
1.70 +headers (the client side of the HTTP architecture) and specific comms transports
1.71 +(the network side of the architecture).
1.72 +
1.73 +Each instance of a concrete subclass of CProtocolHandler is associated
1.74 +with a specific client session, and hence with a particular choice of proxy type,
1.75 +and by implication, transport type. It is designed to appear like a filter in
1.76 +order to be placed at the end of a session's filter queue. This allows it to
1.77 +receive transaction-related events in the same way that any other filter
1.78 +(or indeed, the client) does. An active object, it may implement a queuing
1.79 +system for submitted transactions, according to the chosen internal service
1.80 +model.
1.81 +
1.82 +In order to divide the abstract functionality associated with handling the HTTP
1.83 +protocol handler from the specifics needed for a particular choice of transport,
1.84 +this class defines a number of pure virtual methods which allow it to defer
1.85 +transport-specific choices or mechamisms. These are mainly concerned with the
1.86 +service model (ie. allocation of transactions to objects that can handle them), the
1.87 +codec model (ie. on-demand encoding/decoding of HTTP header data) and general
1.88 +housekeeping (eg. instantiation and cleanup of objects at particular points in
1.89 +a transaction lifecycle).
1.90 +@publishedAll
1.91 +@released
1.92 +*/
1.93 + {
1.94 +public: // Methods
1.95 +
1.96 +/**
1.97 + Standard factory constructor. This is the ECOM interface class from
1.98 + which concrete protocol handlers are derived. The method queries
1.99 + ECOM for the protocol handler plugin that matches the protocol
1.100 + description passed in.
1.101 + @param aProtocol (in) The name of the protocol required.
1.102 + @param aSession (in) The HTTP session on which this protocol handler
1.103 + will be installed.
1.104 + @leave KErrNoMemory if there was not enough memory to create the object.
1.105 +*/
1.106 + //##ModelId=3C4C186B007E
1.107 + static CProtocolHandler* NewL(const TDesC8& aProtocol, RHTTPSession aSession);
1.108 +
1.109 +/**
1.110 + Intended Usage: Class destructor.
1.111 +*/
1.112 + //##ModelId=3C4C186B0075
1.113 + IMPORT_C virtual ~CProtocolHandler();
1.114 +
1.115 +/**
1.116 + Obtain the protocol handler's header codec.
1.117 + @return The header codec owned by this protocol handler, or NULL if one
1.118 + has not yet been created.
1.119 + @see CHeaderCodec
1.120 +*/
1.121 + //##ModelId=3C4C186B0074
1.122 + IMPORT_C CHeaderCodec* Codec() const;
1.123 +
1.124 +
1.125 +/**
1.126 + Get the Server Certificate for the current session.
1.127 + @return The certificate information or NULL if it is not available
1.128 +*/
1.129 + IMPORT_C const CCertificate* SessionServerCert();
1.130 +
1.131 +/**
1.132 + Get the Server Certificate for the specified transaction.
1.133 + @param aTransaction The transaction for which the certificate is requested
1.134 + @return The certificate information or NULL if it is not available
1.135 +*/
1.136 + IMPORT_C const CCertificate* TransactionServerCert( RHTTPTransaction aTransaction);
1.137 +
1.138 +public: // Methods to be implemented in specific protocol handlers
1.139 +
1.140 +/**
1.141 + Intended Usage: Get the Server Certificate for the current session.
1.142 + @param aServerCert A TCertInfo which will be filled with the certificate information
1.143 + @return An error code. KErrNone if aServerCert has been completed, otherwise one of
1.144 + the system wide error codes
1.145 +*/
1.146 + virtual TInt SessionServerCert(TCertInfo& aServerCert) = 0;
1.147 +
1.148 +/**
1.149 + Intended Usage: Get the Server Certificate for the specified transaction.
1.150 + @param aServerCert A TCertInfo which will be filled with the certificate information
1.151 + @param aTransaction The transaction for which the certificate is requested
1.152 + @return An error code. KErrNone if aServerCert has been completed, otherwise one of
1.153 + the system wide error codes
1.154 +*/
1.155 + virtual TInt TransactionServerCert(TCertInfo& aServerCert, RHTTPTransaction aTransaction) = 0;
1.156 +
1.157 +public: // Methods from MHTTPFilterBase
1.158 +
1.159 +/**
1.160 + Intended Usage: Called when the filter's registration conditions are satisfied for events that
1.161 + occur on a transaction. Any Leaves must be handled by the appropriate MHFRunError.
1.162 + Note that this function is not allowed to leave if called with certain events.
1.163 + @see THTTPEvent
1.164 + @param aTransaction The transaction that the event has occurred on.
1.165 + @param aEvent aEvent The event that has occurred.
1.166 + @leave Standard Symbian OS error codes. e.g. KErrNoMemory.
1.167 + @see MHTTPFilterBase
1.168 +*/
1.169 + //##ModelId=3C4C186B0061
1.170 + IMPORT_C virtual void MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
1.171 +
1.172 +/**
1.173 + Intended Usage: Called when the filters registration conditions are satisfied for events that occur
1.174 + on the session. Any leaves must be handled by the appropriate MHFRunError.
1.175 + @param aEvent The session event that has occured.
1.176 + @leave KErrNoMemory if an attempt to allocate memory has failed
1.177 + @leave KErrHttpCantResetRequestBody if the request body needed to be rewound by the client
1.178 + but it doesn't support this
1.179 + @see MHTTPFilterBase
1.180 +*/
1.181 + //##ModelId=3C4C186B0057
1.182 + IMPORT_C virtual void MHFSessionRunL(const THTTPSessionEvent& aEvent);
1.183 +
1.184 +/**
1.185 + Intended Usage: Called when RunL leaves from a transaction event. This works in the same
1.186 + way as CActve::RunError; return KErrNone if you have handled the error.
1.187 + If you don't completely handle the error, a panic will occur.
1.188 + @param aError The leave code that RunL left with.
1.189 + @param aTransaction The transaction that was being processed.
1.190 + @param aEvent The Event that was being processed.
1.191 + @return KErrNone if the error has been cancelled or the code
1.192 + of the continuing error otherwise.
1.193 + @see MHTTPFilterBase
1.194 +*/
1.195 + //##ModelId=3C4C186B0043
1.196 + IMPORT_C virtual TInt MHFRunError(TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent);
1.197 +
1.198 +/**
1.199 + Intended Usage: Called when MHFRunL leaves from a session event. This works in the same
1.200 + way as CActve::RunError. If you don't completely handle the error, a panic will occur.
1.201 + @param aError The leave code that RunL left with.
1.202 + @param aEvent The Event that was being processed.
1.203 + @return KErrNone if the error has been cancelled or the code
1.204 + of the continuing error otherwise.
1.205 + @see MHTTPFilterBase
1.206 +*/
1.207 + //##ModelId=3C4C186B0038
1.208 + IMPORT_C virtual TInt MHFSessionRunError(TInt aError, const THTTPSessionEvent& aEvent);
1.209 +
1.210 +public: // Methods from MHTTPFilter
1.211 +
1.212 +/**
1.213 + Intended Usage: Called when the filter is being removed from a session's filter queue.
1.214 + @param aSession The session it's being removed from
1.215 + @param aHandle The filter handle. Complex filters may need to
1.216 + refer to this to keep track of which particular registration is
1.217 + being unloaded.
1.218 + @see MHTTFilter
1.219 +*/
1.220 + //##ModelId=3C4C186B0025
1.221 + IMPORT_C virtual void MHFUnload(RHTTPSession aSession, THTTPFilterHandle aHandle);
1.222 +
1.223 +/**
1.224 + Intended Usage: Called when the filter is being added to the session's filter queue.
1.225 + @param aSession The session it's being added to.
1.226 + @param aHandle The filter handle. Complex filters may need to keep
1.227 + track of this, for instance if generating events in response to
1.228 + external stimuli
1.229 + @see MHTTFilter
1.230 + */
1.231 + //##ModelId=3C4C186B001A
1.232 + IMPORT_C virtual void MHFLoad(RHTTPSession aSession, THTTPFilterHandle aHandle);
1.233 +
1.234 +protected: // callbacks/methods for sub-classes
1.235 +
1.236 +/**
1.237 + Callback method for concrete protocol handler sub-classes to
1.238 + inform the base protocol handler that a transaction has completed.
1.239 + The concrete protocol handler must call this method in order to
1.240 + supply a completion event that will be sent to the client.
1.241 + In addition, the method allows the base protocol handler to do some
1.242 + queue management.
1.243 + @param aTrans (in) the completed transaction
1.244 + @param aEventStatus (in) an event to be sent back to the client along
1.245 + the filter queue
1.246 + @leave THTTPPanic::EInvalidFilterHandle if unable to send event.
1.247 + */
1.248 + //##ModelId=3C4C186B0010
1.249 + IMPORT_C void TransactionCompletedL(RHTTPTransaction aTrans, THTTPEvent aEventStatus);
1.250 +
1.251 +/**
1.252 + Obtain the number of currently active transactions
1.253 + @return The number of currently active transactions
1.254 + */
1.255 + //##ModelId=3C4C186B0006
1.256 + IMPORT_C TInt NumActiveTransactions() const;
1.257 +
1.258 +/**
1.259 + Callback method for concrete protocol handler sub-classes to
1.260 + inform the base protocol handler that a transaction has failed
1.261 + utterly. (i.e. the sub-class used aTrans.Fail().) The base protocol
1.262 + handler sets the transaction state to be cancelled.
1.263 + @param aTrans (in) the completed transaction
1.264 + */
1.265 + //##ModelId=3C4C186A03E5
1.266 + IMPORT_C void TransactionFailed(RHTTPTransaction aTrans);
1.267 +
1.268 +/**
1.269 + Completes this active object - allows the protocol handler to
1.270 + reevaluate the queue of pending transactions and service new ones
1.271 + if possible.
1.272 + */
1.273 + //##ModelId=3C4C186A03E4
1.274 + IMPORT_C void CompleteSelf();
1.275 +
1.276 +/**
1.277 + Searches the array of CProtTransaction objects to if the
1.278 + aTransaction object is wrapped by one of them. If one is found aProtTransaction is set to it
1.279 + @param aTransaction The transaction to search for.
1.280 + @param aProtTransaction Reference to a CProtTransaction which will be set to the
1.281 + CProtTransaction which wraps the RHTTPTransaction.
1.282 + @return If a CProtTransaction object is found, a positive value is
1.283 + returned that is the index to that object in the array. If
1.284 + no object is found, KErrNotFound is returned.
1.285 + */
1.286 + IMPORT_C TInt FindTransaction(RHTTPTransaction aTransaction, const CProtTransaction*& aProtTransaction) const;
1.287 +
1.288 +private: // methods to be implemented in specific protocol handlers
1.289 +
1.290 +/** Intended usage: Creates the specific type of codec required for a specific type
1.291 + of protocol handler.
1.292 +
1.293 + This must be implemented by a concrete protocol handler sub-class.
1.294 + */
1.295 + //##ModelId=3C4C186A03DC
1.296 + virtual void CreateCodecL() = 0;
1.297 +
1.298 +/** Intended Usage: Creates a representation of a client transaction to be used in the
1.299 + protocol handler. Since the protocol handler deals with the low-
1.300 + level data for a transaction as sent over a particular transport,
1.301 + an appropriate CProtTransaction-derived class is used that owns a
1.302 + CRxData and a CTxData to handle the low-level data.
1.303 +
1.304 + This must be implemented by a concrete protocol handler sub-class.
1.305 + @leave KErrNoMemory if there was not enough memory to create the object.
1.306 + create the object.
1.307 + @param aTransaction The RHTTPTransaction object associated with
1.308 + this CProtTransaction object.
1.309 + @return A pointer to a created CProtTransaction-derived class.
1.310 + @see CRxData
1.311 + @see CTxData
1.312 + */
1.313 + //##ModelId=3C4C186A03DA
1.314 + virtual CProtTransaction* CreateProtTransactionL(RHTTPTransaction aTransaction) = 0;
1.315 +
1.316 +/** Intended Usage: Attempt to service the transaction. This implies that the concrete
1.317 + protocol handler will allocate some transport resources to the
1.318 + transaction - which could fail if the protocol handler has hit an
1.319 + internal limit of resources or bandwidth.
1.320 + Implementations of this interface may leave with any of KErrHttpInvalidUri,
1.321 + KErrGeneral, KErrNoMemory
1.322 +
1.323 + This must be implemented by a concrete protocol handler sub-class.
1.324 + @param aTrans The pending protocol transaction object which is to be
1.325 + serviced.
1.326 + @return A flag that indicates if the transaction can be serviced immediately.
1.327 + */
1.328 + //##ModelId=3C4C186A03D0
1.329 + virtual TBool ServiceL(CProtTransaction& aTrans) = 0;
1.330 +
1.331 +/** Intended Usage: Called when the RHTTPTransaction object corresponding to aTrans has
1.332 + been closed by the client. This allows the concrete protocol handler
1.333 + to do any cleanup required for this particular transaction.
1.334 +
1.335 + Ownership of the CProtTransaction object is transferred back to the
1.336 + concrete protocol handler, which then has deletion responsibility
1.337 + for it. By the time this function has been called, the base
1.338 + protocol handler will have dequeued the transaction.
1.339 +
1.340 + The client's RHTTPTransaction will be closed when this function
1.341 + returns, so it is not possible to send events to the client during
1.342 + the function's execution.
1.343 +
1.344 + This must be implemented by a concrete protocol handler sub-class.
1.345 + @param aTrans (in) A pointer to the transaction about to be closed.
1.346 + */
1.347 + //##ModelId=3C4C186A03C6
1.348 + virtual void ClosedTransactionHook(CProtTransaction* aTrans) = 0;
1.349 +
1.350 +/** Intended Usage: Called when the RHTTPTransaction object corresponding to aTrans has
1.351 + been cancelled by the client or an intermediate filter. This allows
1.352 + the concrete protocol handler to do any cleanup and to perform the
1.353 + necessary actions for cancellation on its transport layer.
1.354 +
1.355 + This must be implemented by a concrete protocol handler sub-class.
1.356 + @param aTrans (in) A reference to the transaction being cancelled.
1.357 + */
1.358 + //##ModelId=3C4C186A03B3
1.359 + virtual void CancelTransactionHook(CProtTransaction& aTransaction) = 0;
1.360 +
1.361 +/** Intended Usage: Called to notify the concrete protocol handler that new request
1.362 + body data is available for transmission.
1.363 +
1.364 + This must be implemented by a concrete protocol handler sub-class.
1.365 + @param aTrans (in) A reference to the transaction whose request body
1.366 + has new data available.
1.367 + */
1.368 + //##ModelId=3C4C186A03A8
1.369 + virtual void NotifyNewRequestBodyPart(CProtTransaction& aTransaction) = 0;
1.370 +
1.371 +protected: // Methods inherited from CActive
1.372 +
1.373 +/** Intended Usage: Do some processing when a previous asynchronous request made by
1.374 + this object has completed.
1.375 + */
1.376 + //##ModelId=3C4C186A0377
1.377 + IMPORT_C virtual void RunL();
1.378 +
1.379 +/** Intended Usage: Do any cleanup required should RunL leave
1.380 + @param aError (in) The error code that RunL left with
1.381 + @return A final error code - KErrNone if the error was handled by this
1.382 + method.
1.383 + */
1.384 + //##ModelId=3C4C186A036E
1.385 + IMPORT_C virtual TInt RunError(TInt aError);
1.386 +
1.387 +/** Intended Usage: Cancel outstanding asynchronous requests that this object has made
1.388 + */
1.389 + //##ModelId=3C4C186A036D
1.390 + IMPORT_C virtual void DoCancel();
1.391 +
1.392 +protected: // Methods
1.393 +
1.394 +/**
1.395 + Constructs a protocol handler associated with the supplied HTTP
1.396 + client session.
1.397 + @param aSession (in) The session on which the new protocol handler will
1.398 + be installed.
1.399 + */
1.400 + IMPORT_C CProtocolHandler(RHTTPSession aSession);
1.401 +
1.402 +/**
1.403 + Second phase construction in which any necessary allocation is done
1.404 + Implementations of this interface may leave with KErrNoMemory
1.405 + @param aSession The HTTP session on which this protocol handler
1.406 + will be installed.
1.407 + */
1.408 + //##ModelId=3C4C186A036C
1.409 + IMPORT_C void ConstructL(RHTTPSession aSession);
1.410 +
1.411 +protected: // Attributes
1.412 +
1.413 + /** The session to which this protocol handler is dedicated
1.414 + */
1.415 + //##ModelId=3C4C186A033C
1.416 + RHTTPSession iSession;
1.417 +
1.418 + /** The codec used for this protocol handler (to be specialised in subclasses)
1.419 + */
1.420 + //##ModelId=3C4C186A032F
1.421 + CHeaderCodec* iCodec;
1.422 +
1.423 + /** HTTP logger handle (debug only)
1.424 + */
1.425 + __DECLARE_LOG
1.426 +
1.427 + /** An interface providing the security policy. This may be NULL if there is no security policy plugin */
1.428 + //##ModelId=3C4C186A031D
1.429 + CSecurityPolicy* iSecurityPolicy;
1.430 +
1.431 +private: // Methods
1.432 +
1.433 +/**
1.434 + Called after a client RHTTPTransaction::SubmitL(), this method
1.435 + enqueues the supplied client transaction. It checks to see if there
1.436 + already exists a CProtTransaction for this transaction. If there is
1.437 + and its state is ECancelled, then the associated request data is
1.438 + reset and the state changed to EPending. A CompleteSelf() is issued.
1.439 + In the case of an existing CProtTransaction that has not been
1.440 + cancelled, the submit event is ignored. If no CProtTransaction
1.441 + object existed, then one is created for the transaction and a
1.442 + CompleteSelf() is issued.
1.443 + @leave KErrHttpCantResetRequestBody if the request body data cannot
1.444 + be reset. KErrNoMemory if a new CProtTransaction cannot be
1.445 + created or added to the transaction queue.
1.446 + @param aTransaction The submitted transaction.
1.447 + @pre None
1.448 + @post If there is a new pending CProtTransaction object the protocol
1.449 + handler will have been self-completed (i.e. the RunL will be
1.450 + called).
1.451 + */
1.452 + //##ModelId=3C4C186A0362
1.453 + void SubmitTransactionL(RHTTPTransaction aTransaction);
1.454 +
1.455 +/**
1.456 + Sets the state of the CProtTransaction object for this
1.457 + transaction to ECancelled, and resets the object. This
1.458 + object can be reused if the transaction is resubmitted.
1.459 + @param RHTTPTransaction aTrans
1.460 + @pre A CProtTransaction object exists for this transaction.
1.461 + @post The state of the CProtTransaction object is set to ECancelled
1.462 + and it has been reset.
1.463 + */
1.464 + //##ModelId=3C4C186A0359
1.465 + void HandleCancelTransaction(RHTTPTransaction aTrans);
1.466 +
1.467 +/**
1.468 + Removes the CProtTransaction object for the transaction
1.469 + from the queue of CProtTransaction objects.
1.470 + @param RHTTPTransaction aTrans
1.471 + @pre A CProtTransaction object exists for this transaction.
1.472 + @post The CProtTransaction object has been removed from the queue.
1.473 + */
1.474 + //##ModelId=3C4C186A034F
1.475 + void HandleClosedTransaction(RHTTPTransaction aTrans);
1.476 +
1.477 +/**
1.478 + Searches the array of CProtTransaction objects to if the
1.479 + aTransaction object is wrapped by one of them.
1.480 + @param aTransaction The transaction to search for.
1.481 + @return If a CProtTransaction object is found, a positive value is
1.482 + returned that is the index to that object in the array. If
1.483 + no object is found, KErrNotFound is returned.
1.484 + */
1.485 + //##ModelId=3C4C186A0346
1.486 + TInt FindTransaction(RHTTPTransaction aTransaction) const;
1.487 +
1.488 +protected:
1.489 +/**
1.490 + Intended Usage: This is a mechanism for allowing future change to CProtocolHandler API
1.491 + without breaking BC.
1.492 + @param aInterfaceId the UID of the API function being called.
1.493 + @param aInterfacePtr reference to pointer to actual function implementation (in the derived class)
1.494 + */
1.495 + inline virtual void GetInterfaceL(TUid aInterfaceId, MProtHandlerInterface*& aInterfacePtr);
1.496 +
1.497 +public:
1.498 +/** Intended Usage: Reserve a slot in the v-table to preserve future BC
1.499 + */
1.500 + //##ModelId=3C4C186A0344
1.501 + inline virtual void Reserved2();
1.502 +
1.503 +
1.504 +private: // Attributes
1.505 +
1.506 + /** A list of transactions. Each transaction has a list state, e.g. pending,
1.507 + active, etc.
1.508 + */
1.509 + //##ModelId=3C4C186A0313
1.510 + RPointerArray<CProtTransaction> iTransactions;
1.511 +
1.512 + /** The transaction which is currently being serviced - used in RunError so
1.513 + we know which transaction caused RunL to leave.
1.514 + */
1.515 + //##ModelId=3C4C186A02FF
1.516 + RHTTPTransaction iCurrentTransaction;
1.517 +
1.518 + /** The destructor key UID indentification required by ECom
1.519 + */
1.520 + //##ModelId=3C4C186A02F5
1.521 + TUid iDtor_ID_Key;
1.522 + };
1.523 +
1.524 +
1.525 +
1.526 +/**
1.527 +Interface for adding to ProtocolHandler API
1.528 +@publishedAll
1.529 +@released
1.530 +*/
1.531 +
1.532 +const TInt KProtHandlerSessionServerCertUid = 0x1028180D;
1.533 +const TInt KProtHandlerTransactionServerCertUid = 0x1028180E;
1.534 +
1.535 +class MProtHandlerInterface
1.536 + {
1.537 +public:
1.538 + /**
1.539 + Intended Usage: Get the Server Certificate for the current session.
1.540 + @return The certificate information or NULL if it is not available
1.541 + */
1.542 + virtual const CCertificate* SessionServerCert() = 0;
1.543 +
1.544 + /**
1.545 + Intended Usage: Get the Server Certificate for the specified transaction.
1.546 + @param aTransaction The transaction for which the certificate is requested
1.547 + @return The certificate information or NULL if it is not available
1.548 + */
1.549 + virtual const CCertificate* TransactionServerCert( RHTTPTransaction aTransaction) = 0;
1.550 + };
1.551 +
1.552 +inline void CProtocolHandler::GetInterfaceL(TUid, MProtHandlerInterface*&)
1.553 + {}
1.554 +
1.555 +inline void CProtocolHandler::Reserved2()
1.556 + {}
1.557 +
1.558 +#endif // __CPROTOCOLHANDLER_H__