#ifndef EHTTPSERVER_H
#define EHTTPSERVER_H

#include "esocket.h"

class ehttpServerConnection : public esocket
{
 public:
  int protstate;

  estr cmd;
  estr location;
  estr request_uri;
  estr protocol;

  estr sendbuffer;

  estrarray sendHeaders;
  estrarray requestHeaders;
  estr header;
  estr data;
  estr postdata;

  estrarray getVars;

  ehttpServerConnection();

  virtual void doRecv();
  virtual void doSend();

  virtual void doHandleWS(const estr& location)=0;
  virtual void doHandleGet(const estr& location)=0;
  virtual void doHandlePost(const estr& location)=0;

  bool send(const estr& data,int status=200,const estr& mimetype="text/html");
  bool wsSend(unsigned char op,const estr& data);

  virtual void doWSRecvText(const estr& data);
  virtual void doWSRecvBinary(const estr& data);
  virtual void doWSRecvPong(const estr& data);

  void parseLocation(estr& location,estrarray& vars);

  void sendRedirect(const estr& newurl);
  void sendNotFound();
  void sendError(int err,const estr& errtitle,const estr& errmsg);
  void sendFile(const estr& filename);
};

estr makeURI(const estr& host,const estr& location,estrarray& vars);

/*
template <class T,class K>
class ehttpServer : public eserver<T,K>
{
 public:
  estr htmldir;
  void doAccept(); 
};
*/

#endif

