解读这段代码 int32_t ssl_recv_section(ssl_link_t *p_link, void *p_buf) { int ret = LINK_RECV_SECTION_RET_FAIL, _ret; mem_item_t *p_item = (mem_item_t *)p_buf; memory_uint_t *p_data = p_item->mem.pdata; switch (p_link->sectionStep) { case SSL_LINK_RECV_SECTION_START: p_link->surplusLen = sizeof(record_head_t); p_data = memunit_fetch(&(p_item->mem)); p_item->mem.pdata = p_data; p_link->sectionStep = SSL_LINK_RECV_SECTION_HEAD; case SSL_LINK_RECV_SECTION_HEAD: _ret = _recv_head(p_link, p_data); if (_ret == 0) { ret = LINK_RECV_SECTION_RET_ING; break; } else if (_ret == 2) { break; } //为1时跳到数据段接收 case SSL_LINK_RECV_SECTION_DATA: _ret = _recv_data(p_link, p_data); if (_ret == 0) { ret = LINK_RECV_SECTION_RET_ING; break; } else if (_ret == 1) { ret = LINK_RECV_SECTION_RET_OK; } break; default: break; } if (ret == LINK_RECV_SECTION_RET_FAIL) { DBG("fd:%d recv sectionStep:%d surplusLen:%d datalen:%d\n",p_link->fd, p_link->sectionStep,p_link->surplusLen,mem_datalen(p_data)); p_link->sectionStep = SSL_LINK_RECV_SECTION_START; } return ret; }
时间: 2024-04-26 11:22:04 浏览: 122
这段代码是一个函数,名为ssl_recv_section,接收一个ssl_link_t类型的指针p_link和一个void类型的指针p_buf作为参数,返回一个int32_t类型的值。该函数的作用是接收SSL连接中的数据段。
函数内部首先定义了一个int类型的变量ret,并将其初始化为LINK_RECV_SECTION_RET_FAIL。同时,定义了一个mem_item_t类型的指针变量p_item,将p_buf强制转换为mem_item_t类型后赋值给p_item。再定义一个memory_uint_t类型的指针变量p_data,将p_item->mem.pdata的值赋给p_data。
接下来是一个switch语句,根据p_link->sectionStep的值进行不同的操作。如果为SSL_LINK_RECV_SECTION_START,则将surplusLen赋值为sizeof(record_head_t),从内存池中获取数据并赋值给p_data,将p_data赋值给p_item->mem.pdata,然后将sectionStep赋值为SSL_LINK_RECV_SECTION_HEAD。如果为SSL_LINK_RECV_SECTION_HEAD,则调用函数_recv_head,将p_link和p_data作为参数传递给该函数,并将返回值赋给_ret。如果_ret等于0,则将ret赋值为LINK_RECV_SECTION_RET_ING,并跳出switch语句;如果_ret等于2,则直接跳出switch语句,否则执行case的下一条语句。如果为SSL_LINK_RECV_SECTION_DATA,则调用函数_recv_data,将p_link和p_data作为参数传递给该函数,并将返回值赋给_ret。如果_ret等于0,则将ret赋值为LINK_RECV_SECTION_RET_ING,并跳出switch语句;如果_ret等于1,则将ret赋值为LINK_RECV_SECTION_RET_OK。
最后,如果ret等于LINK_RECV_SECTION_RET_FAIL,则打印出一些调试信息,并将sectionStep赋值为SSL_LINK_RECV_SECTION_START。最终返回ret。
阅读全文