IMSDroid Http Stack分析 -- 基本流程
来源:互联网 发布:2016手机记账软件 编辑:程序博客网 时间:2024/05/21 21:39
IMSDroid的tiny http stack是专用于其tiny xcap的,以下是摘自http://doubango.org/API/tinyHTTP/ 关于tinyHTTP的概述:
The HTTP/HTTPS stack is a basic thread-safe client API and is used in conjunction with the XCAP protocol. Almost all HTTP methods such as OPTIONS, HEAD, GET, DELETE, POST, CONNET, TRACE or PUT … are supported for outgoing requests. Only response messages will be correctly handled by the stack.
因此httpStack的创建以及启动都出现在Xcap中,在tinyXCAP/src/txcap.c中,函数tsk_object_t* _txcap_stack_create 通过以下两句分别创建http stack及http session:
/* HTTP/HTTPS stack and session */
stack->http_stack = thttp_stack_create(callback,
THTTP_STACK_SET_NULL());
stack->http_session = thttp_session_create(stack->http_stack ,
THTTP_SESSION_SET_NULL());
在txcap.c中,函数txcap_stack_start通过thttp_stack_start(stack->http_stack)来启动http stack。
具体实现是在tinyHTTP/src/thttp.c的thttp_stack_start函数中,关键代码如下:
if(!stack->transport){
stack->transport = tnet_transport_create(stack->local_ip, stack->local_port, tnet_socket_type_tcp_ipv46, "HTTP/HTTPS transport");
tnet_transport_set_callback(stack->transport, TNET_TRANSPORT_CB_F(thttp_transport_layer_stream_cb), self);
}
if(!(ret = tnet_transport_start(stack->transport))){
// Sets TLS certificates
if(stack->tls.ca){
tsk_strupdate(&stack->transport->tls.ca, stack->tls.ca);
tsk_strupdate(&stack->transport->tls.pvk, stack->tls.pvk);
tsk_strupdate(&stack->transport->tls.pbk, stack->tls.pbk);
}
stack->started = tsk_true;
}
设置好call back然后启动transport.
tnet_transport_start的具体实现在tinyNET/src/tnet_transport.c中,这个函数进而会调用tsk_runnable_start(TSK_RUNNABLE(transport), tnet_transport_event_def_t)),
在tinySAK/src/tsk_runnable.c中,函数tsk_runnable_start通过tsk_thread_create创建一个新的线程并执行run函数,具体run函数的定义在tnet_transport.c中:
static void *run(void* self)
{
int ret = 0;
tsk_list_item_t *curr;
tnet_transport_t *transport = self;
TSK_DEBUG_INFO("Transport::run() - enter");
//TSK_DEBUG_ERROR("HttpService: Runnable interface implementation.");
/* create main thread */
if((ret = tsk_thread_create(transport->mainThreadId, tnet_transport_mainthread, transport))){ /* More important than "tsk_runnable_start" ==> start it first. */
TSK_FREE(transport->context); /* Otherwise (tsk_thread_create is ok) will be freed when mainthread exit. */
TSK_DEBUG_FATAL("Failed to create main thread [%d]", ret);
return tsk_null;
}
TSK_RUNNABLE_RUN_BEGIN(transport);
if((curr = TSK_RUNNABLE_POP_FIRST_SAFE(TSK_RUNNABLE(transport)))){
const tnet_transport_event_t *e = (const tnet_transport_event_t*)curr->data;
if(transport->callback){
//TSK_DEBUG_ERROR("HttpService: transport callback.");
transport->callback(e);
}
tsk_object_unref(curr);
}
TSK_RUNNABLE_RUN_END(transport);
TSK_DEBUG_INFO("Transport::run() - exit");
return tsk_null;
}
当有事件的时候,会执行具体的call back: tinyHTTP/src/thttp.c中的thttp_transport_layer_stream_cb,在解析出消息以后执行状态机。
- IMSDroid Http Stack分析 -- 基本流程
- IMSDroid Http Stack分析 -- 基本流程
- IMSDroid Http Stack分析 -- 基本流程
- 基本HTTP流程
- imsdroid
- crtmpserver 基本流程分析
- crtmpserver 基本流程分析
- DA14580 --- 基本流程分析
- crtmpserver 基本流程分析
- Nginx源代码分析之HTTP请求响应基本流程(十四)
- 主叫基本呼叫流程分析
- RNA-seq 基本分析流程
- Struts2的基本流程分析
- 数据分析的基本流程
- 基本的HTTP流程有哪些?
- 基本的HTTP流程有哪些
- Z-Stack中OSAL定时器事件触发流程分析---转载
- Z-Stack中OSAL定时器事件触发流程分析
- Option Explicit
- POJ2182 HDU2711 Lost Cows
- 九度oj1020
- CPA、CPC、CPM、CPO、PPC、PPL、CPTM
- VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题
- IMSDroid Http Stack分析 -- 基本流程
- C# 多线程操作TreeView
- C语言里的左移和右移运算
- java中Map类
- return与break的区别
- C Runtime Library(MSVCRT)来历
- VMware7.1.5虚拟机安装Ubuntu 11.10使用share folders共享目录
- 初学Java,跳出外层循环(四)
- 多思考