-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathhttpparse.cpp
86 lines (73 loc) · 1.46 KB
/
httpparse.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include "httpparse.h"
int httpparse::parse(char* data) {
for (size_t i = 0; i < 0x2000; i++)
{
if (data[i] == 0x0d) {
if (data[i + 1] == 0x0a && data[i + 2] == 0x0d && data[i + 3] == 0x0a) {
headerbegin = data;
headerend = &data[i];
httpheaderlength = headerend - headerbegin;
return 1;
}
}
}
return 0;
}
int httpparse::getlength() {
char lenflag[] = "Content-Length:";
//printf("out::%d\n", strlen(lenflag));
for (size_t i = 0; i < (headerend - headerbegin); i++)
{
int ok = 0;
for (int o = 0; o < strlen(lenflag); o++) {
if (lenflag[o] != headerbegin[i + o])
{
break;
}
ok++;
}
if (ok == strlen(lenflag))
{
char numbuf[10];
memset(numbuf, 0, 10);
for (size_t iu = 0; iu < 10; iu++)
{
if (headerbegin[i + strlen(lenflag) + iu] == 0x0d)
{
break;
}
numbuf[iu] = headerbegin[i + strlen(lenflag) + iu];
}
return atoi(numbuf);
}
}
return -1;
}
int httpparse::getflagvalue(char* flag, char* outbuf) {
for (size_t i = 0; i < (headerend - headerbegin); i++)
{
int ok = 0;
for (int o = 0; o < strlen(flag); o++) {
if (flag[o] != headerbegin[i + o])
{
break;
}
ok++;
}
if (ok == strlen(flag))
{
char numbuf[200];
memset(numbuf, 0, 200);
for (size_t iu = 0; iu < 200; iu++)
{
if (headerbegin[i + strlen(flag) + iu] == 0x0d)
{
break;
}
outbuf[iu] = headerbegin[i + strlen(flag) + iu];
}
return 1;
}
}
return -1;
}