testhttpmsg.cpp
2.2 KB
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
/*
* Copyright 2007 Stephen Liu
* For license terms, see the file COPYING along with this library.
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include "sphttpmsg.hpp"
void printMessage( SP_HttpMessage * message )
{
for( int i = 0; i < message->getHeaderCount(); i++ ) {
printf( "%s: %s\n", message->getHeaderName( i ), message->getHeaderValue( i ) );
}
printf( "\n" );
if( NULL != message->getContent() ) {
printf( "%s", (char*)message->getContent() );
}
printf( "\n" );
}
void printRequest( SP_HttpRequest * request )
{
printf( "%s %s %s\n", request->getMethod(), request->getURI(), request->getVersion() );
for( int i = 0; i < request->getParamCount(); i++ ) {
printf( "Param: %s=%s\n", request->getParamName(i), request->getParamValue(i) );
}
printMessage( request );
}
void printResponse( SP_HttpResponse * response )
{
printf( "%s %d %s\n", response->getVersion(), response->getStatusCode(),
response->getReasonPhrase() );
printMessage( response );
}
int main( int argc, char * argv[] )
{
char * filename = NULL;
if( argc < 2 ) {
printf( "Usage: %s <file>\n", argv[0] );
exit( -1 );
} else {
filename = argv[1];
}
FILE * fp = fopen ( filename, "r" );
if( NULL == fp ) {
printf( "cannot not open %s\n", filename );
exit( -1 );
}
struct stat aStat;
char * source = NULL;
stat( filename, &aStat );
source = ( char * ) malloc ( aStat.st_size + 1 );
fread ( source, aStat.st_size, sizeof ( char ), fp );
fclose ( fp );
source[ aStat.st_size ] = 0;
SP_HttpMsgParser parser;
//parser.setIgnoreContent( 1 );
int parsedLen = 0;
for( int i = 0; i < (int)strlen( source ); i++ ) {
parsedLen += parser.append( source + parsedLen, i - parsedLen + 1 );
//printf( "%d, %d\n", i, parsedLen );
}
printf( "source length : %d, parsed length : %d\n", strlen( source ), parsedLen );
printf( "parse complete : %s\n", parser.isCompleted() ? "Yes" : "No" );
printf( "ignore content: %s\n", parser.isIgnoreContent() ? "Yes" : "No" );
puts( "\n" );
if( NULL != parser.getRequest() ) {
printRequest( parser.getRequest() );
}
if( NULL != parser.getResponse() ) {
printResponse( parser.getResponse() );
}
free( source );
return 0;
}