00001
00002
00003
00004
00005
00006 #ifndef __WVHTTP_H
00007 #define __WVHTTP_H
00008
00009 #include "wvurl.h"
00010 #include "wvtcp.h"
00011 #include "wvstreamclone.h"
00012 #include "wvresolver.h"
00013 #include "wvhashtable.h"
00014
00015
00016 struct WvHTTPHeader
00017 {
00018 WvString name, value;
00019
00020 WvHTTPHeader(WvStringParm _name, WvStringParm _value)
00021 : name(_name), value(_value)
00022 {}
00023 };
00024
00025
00026 DeclareWvDict(WvHTTPHeader, WvString, name);
00027
00028
00029
00030
00031
00032 class WvHTTPStream : public WvStreamClone
00033 {
00034 public:
00035 enum State {Resolving = 0, Connecting, ReadHeader1, ReadHeader, ReadData,
00036 Done};
00037 WvHTTPHeaderDict headers;
00038 WvHTTPHeaderDict client_headers;
00039 size_t num_received;
00040 WvTCPConn *tcp;
00041
00042
00043
00044
00045
00046 WvHTTPStream(const WvURL &_url);
00047
00048 virtual bool isok() const;
00049 virtual int geterr() const;
00050 virtual WvString errstr() const;
00051 virtual bool pre_select(SelectInfo &si);
00052 virtual size_t uread(void *buf, size_t count);
00053
00054 public:
00055 WvURL url;
00056 State state;
00057 };
00058
00059 #endif // __WVHTTP_H