Symbian 使用CEComFilter捕获系统HTTP请求
2010-07-21 04:24:00 来源:WEB开发网注意:两个工厂方法都会将RHTTPSession http会话的指针通过ECOM决议者创建“ECOM实现”时传入“ECOM实现”的构造函数。
系统创建了HTTP会话后,会遍历所有实现了CEComFilter接口的ECOM实现UID(implementation_uid),使用工厂方法将ECOM实现实例化,同时传入HTTP会话(RHTTPSession);这样,我们的CEComFilter的实现就能够针对此HTTP会话进行相关监控。
在此,系统只知道interface_uid,如何通过interface_uid知道有哪些implementation_uid的实现呢?很简单,使用如下函数即可获得:
class REComSession : public RSessionBase
{
...
IMPORT_C static void ListImplementationsL(TUid aInterfaceUid, RImplInfoPtrArray& aImplInfoArray);
...
}
具体流程如下(模拟实现):
三、如何实现CEComFilter接口
实现CEComFilter,其实就是实现一个普通的ECOM接口,步骤非常简单,在此不再说明具体步骤。重点在第5步:如何对传入的RHTTPSession进行监控。
SDK中关于RHTTPSession::FilterCollection()方法的解释:
Accessor for the filter collection. Note that the filter collection can't be edited after the first transaction has been created.
注意:如果已经在RHTTPSession上创建了RHTTPTransaction,则不能对Filter Collection进行修改。
此方法返回类型RHTTPFilterCollection,使用RHTTPFilterCollection::AddFilterL的重载函数向RHTTPSession的监视器队列中添加“监视器”,用于捕获HTTP请求信息:
IMPORT_C void AddFilterL(MHTTPFilter& aFilter, THTTPEvent aEvent, RStringF aHeader, TInt aStatusCode,TInt aPosition, RStringF aName);
参数说明:
aFilter:类型为MHTTPFilter的引用,MHTTPFilter的定义为:
1 class MHTTPFilter
2 {
3 public:
4 IMPORT_C virtual void MHFUnload(RHTTPSession aSession, THTTPFilterHandle aHandle);
5 IMPORT_C virtual void MHFLoad(RHTTPSession aSession, THTTPFilterHandle
Tags:Symbian 使用 CEComFilter
编辑录入:coldstar [复制链接] [打 印]更多精彩
赞助商链接