mirror of
https://gitee.com/acl-dev/acl.git
synced 2024-12-15 17:30:53 +08:00
cf2528eb7c
完善了非阻塞IO的SSL功能;将 acl/samples/ 下的示例分别移到 lib_acl 及 lib_protocol 目录下
112 lines
2.2 KiB
C++
112 lines
2.2 KiB
C++
#include "acl_cpp/lib_acl.hpp"
|
|
|
|
#ifdef WIN32
|
|
#define strdup _strdup
|
|
#endif
|
|
|
|
int main(void)
|
|
{
|
|
char* s = strdup("aaa\r\n\r\n"
|
|
"bbb\r\n\n"
|
|
"ccc\n\r\n"
|
|
"ddd\n\n"
|
|
"eee\r\n"
|
|
"fff\n"
|
|
"ggg\r\n\r\r\n"
|
|
"hhh\r\r\r\n\r\n"
|
|
"iii\r\n");
|
|
char* ptr = s;
|
|
acl::string buf;
|
|
acl::string head;
|
|
int nleft;
|
|
|
|
std::vector<acl::string> first;
|
|
|
|
while (*ptr != 0)
|
|
{
|
|
buf += *ptr;
|
|
|
|
head.clear();
|
|
int offset = buf.find_blank_line(&nleft, &head);
|
|
if (offset > 0)
|
|
{
|
|
printf("ok, findit, offset: %d, offset: %d, "
|
|
"header: [%s]\r\n",
|
|
offset, nleft, head.c_str());
|
|
first.push_back(head);
|
|
}
|
|
ptr++;
|
|
}
|
|
|
|
printf("-------------------------------------------------------\r\n");
|
|
|
|
buf.find_reset();
|
|
printf("total len: %d\r\n", (int) buf.length());
|
|
|
|
std::vector<acl::string> second;
|
|
|
|
while (true)
|
|
{
|
|
head.clear();
|
|
int offset = buf.find_blank_line(&nleft, &head);
|
|
if (offset > 0)
|
|
{
|
|
printf("ok, findit, offset: %d, nleft: %d, len: %d,"
|
|
" header: [%s]\r\n", offset, nleft,
|
|
(int) head.length(), head.c_str());
|
|
second.push_back(head);
|
|
}
|
|
if (nleft == 0)
|
|
break;
|
|
}
|
|
|
|
printf("-------------------------------------------------------\r\n");
|
|
|
|
buf.find_reset();
|
|
int last_offset = 0;
|
|
|
|
std::vector<acl::string> third;
|
|
|
|
while (true)
|
|
{
|
|
int offset = buf.find_blank_line(&nleft);
|
|
if (offset > 0)
|
|
{
|
|
head.clear();
|
|
size_t len = buf.substr(head, last_offset,
|
|
offset - last_offset);
|
|
if (len == 0)
|
|
{
|
|
printf("error, last_offset: %d, offset: %d\r\n",
|
|
last_offset, offset);
|
|
break;
|
|
}
|
|
printf("ok, offset: %d, last_offset: %d, len: %d, %d,"
|
|
" buf: [%s]\r\n", offset, last_offset,
|
|
(int) len, (int) head.length(), head.c_str());
|
|
last_offset = offset;
|
|
third.push_back(head);
|
|
}
|
|
if (nleft == 0)
|
|
break;
|
|
}
|
|
|
|
free(s);
|
|
|
|
printf("-------------------------------------------------------\r\n");
|
|
|
|
if (first != second)
|
|
printf("error, first != second\r\n");
|
|
else if (second != third)
|
|
printf("error, second != third\r\n");
|
|
else
|
|
printf("All OK\r\n\r\n");
|
|
|
|
#ifdef WIN32
|
|
printf("enter any key to exit\r\n");
|
|
getchar();
|
|
#endif
|
|
|
|
return 0;
|
|
}
|