-
Notifications
You must be signed in to change notification settings - Fork 2
/
HttpUtil.c
110 lines (85 loc) · 2.29 KB
/
HttpUtil.c
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "HttpUtil.h"
#include "Encodings.h"
void HTTPDecodeBasicAuth(const char *Auth, char **UserName, char **Password)
{
char *Tempstr=NULL;
const char *ptr;
Tempstr=DecodeToText(Tempstr, Auth, ENCODE_BASE64);
ptr=GetToken(Tempstr, ":", UserName, 0);
ptr=GetToken(ptr, ":", Password, 0);
Destroy(Tempstr);
}
char *HTTPUnQuote(char *RetBuff, const char *Str)
{
char *RetStr=NULL, *Token=NULL;
const char *ptr;
int olen=0, ilen;
RetStr=CopyStr(RetStr,"");
ilen=StrLen(Str);
for (ptr=Str; ptr < (Str+ilen); ptr++)
{
switch (*ptr)
{
case '+':
RetStr=AddCharToBuffer(RetStr,olen,' ');
olen++;
break;
case '%':
ptr++;
Token=CopyStrLen(Token,ptr,2);
ptr++; //not +=2, as we will increment again
RetStr=AddCharToBuffer(RetStr,olen,strtol(Token,NULL,16) & 0xFF);
olen++;
break;
default:
RetStr=AddCharToBuffer(RetStr,olen,*ptr);
olen++;
break;
}
}
StrLenCacheAdd(RetStr, olen);
DestroyString(Token);
return(RetStr);
}
char *HTTPQuoteChars(char *RetBuff, const char *Str, const char *CharList)
{
char *RetStr=NULL, *Token=NULL;
const char *ptr;
int olen=0, ilen;
RetStr=CopyStr(RetStr,"");
ilen=StrLen(Str);
for (ptr=Str; ptr < (Str+ilen); ptr++)
{
if (strchr(CharList,*ptr))
{
// replacing ' ' with '+' should work, but some servers seem to no longer support it
/*
if (*ptr==' ')
{
RetStr=AddCharToBuffer(RetStr,olen,'+');
olen++;
}
else
*/
{
Token=FormatStr(Token,"%%%02X",*ptr);
StrLenCacheAdd(RetStr, olen);
RetStr=CatStr(RetStr,Token);
olen+=StrLen(Token);
}
}
else
{
RetStr=AddCharToBuffer(RetStr,olen,*ptr);
olen++;
}
}
RetStr[olen]='\0';
StrLenCacheAdd(RetStr, olen);
DestroyString(Token);
return(RetStr);
}
char *HTTPQuote(char *RetBuff, const char *Str)
{
return(HTTPQuoteChars(RetBuff, Str, " \t\r\n\"#%()[]{}<>?&!,+':;/@"));
}