http.h
上传用户:chn_coc
上传日期:2007-12-20
资源大小:563k
文件大小:5k
源码类别:

P2P编程

开发平台:

Windows_Unix

  1. // ------------------------------------------------ // File : http.h // Date: 4-apr-2002 // Author: giles // Desc:  // // (c) 2002 peercast.org // ------------------------------------------------ // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the // GNU General Public License for more details. // ------------------------------------------------ #ifndef _HTTP_H #define _HTTP_H #include "stream.h" // ------------------------------------- class HTTPException : public StreamException { public: HTTPException(const char *m, int c) : StreamException(m) {code=c;} int code; }; // -------------------------------------------- static const char *HTTP_SC_OK = "HTTP/1.0 200 OK"; static const char *HTTP_SC_NOTFOUND = "HTTP/1.0 404 Not Found"; static const char *HTTP_SC_UNAVAILABLE = "HTTP/1.0 503 Service Unavailable"; static const char *HTTP_SC_UNAUTHORIZED = "HTTP/1.0 401 Unauthorized"; static const char *HTTP_SC_FOUND = "HTTP/1.0 302 Found"; static const char *HTTP_SC_BADREQUEST = "HTTP/1.0 400 Bad Request"; static const char *HTTP_SC_FORBIDDEN = "HTTP/1.0 403 Forbidden"; static const char *HTTP_SC_SWITCH = "HTTP/1.0 101 Switch protocols";
  2. static const char *RTSP_SC_OK = "RTSP/1.0 200 OK"; static const char *HTTP_PROTO1 = "HTTP/1."; static const char *RTSP_PROTO1 = "RTSP/1."; static const char *HTTP_HS_SERVER = "Server:"; static const char *HTTP_HS_AGENT = "User-Agent:";  static const char *HTTP_HS_CONTENT = "Content-Type:";  static const char *HTTP_HS_CACHE = "Cache-Control:";  static const char *HTTP_HS_CONNECTION = "Connection:";  static const char *HTTP_HS_SETCOOKIE = "Set-Cookie:"; static const char *HTTP_HS_COOKIE = "Cookie:"; static const char *HTTP_HS_HOST = "Host:"; static const char *HTTP_HS_ACCEPT = "Accept:"; static const char *HTTP_HS_LENGTH = "Content-Length:"; static const char *MIME_MP3 = "audio/mpeg"; static const char *MIME_XMP3 = "audio/x-mpeg"; static const char *MIME_OGG = "application/ogg"; static const char *MIME_XOGG = "application/x-ogg"; static const char *MIME_MOV = "video/quicktime"; static const char *MIME_MPG = "video/mpeg"; static const char *MIME_NSV = "video/nsv"; static const char *MIME_ASF = "video/x-ms-asf"; static const char *MIME_ASX = "video/x-ms-asf"; // same as ASF static const char *MIME_MMS = "application/x-mms-framed";
  3. static const char *MIME_RAM = "audio/x-pn-realaudio";
  4. static const char *MIME_WMA = "audio/x-ms-wma"; static const char *MIME_WMV = "video/x-ms-wmv"; static const char *MIME_HTML = "text/html"; static const char *MIME_XML = "text/xml"; static const char *MIME_CSS = "text/css";
  5. static const char *MIME_TEXT = "text/plain"; static const char *MIME_PLS = "audio/mpegurl"; static const char *MIME_XPLS = "audio/x-mpegurl"; static const char *MIME_XSCPLS = "audio/x-scpls"; static const char *MIME_SDP = "application/sdp"; static const char *MIME_M3U = "audio/m3u";
  6. static const char *MIME_MPEGURL = "audio/mpegurl"; static const char *MIME_XM3U = "audio/x-mpegurl"; static const char *MIME_XPEERCAST = "application/x-peercast"; static const char *MIME_XPCP = "application/x-peercast-pcp";
  7. static const char *MIME_RAW = "application/binary"; static const char *MIME_JPEG = "image/jpeg";
  8. static const char *MIME_GIF = "image/gif";
  9. static const char *MIME_PNG = "image/png";
  10. // -------------------------------------------- class Cookie { public: Cookie() { clear(); } void clear() { time = 0; ip = 0; id[0]=0; } void set(const char *i, unsigned int nip) { strncpy(id,i,sizeof(id)-1); id[sizeof(id)-1]=0; ip = nip; } bool compare(Cookie &c) { if (c.ip == ip) if (strcmp(c.id,id)==0) return true; return false; } void logDebug(const char *,int); unsigned int ip; char id[64]; unsigned int time; }; // -------------------------------------------- class CookieList { public: enum { MAX_COOKIES = 32 }; void init(); bool add(Cookie &); void remove(Cookie &); bool contains(Cookie &); Cookie list[MAX_COOKIES]; bool neverExpire; }; // -------------------------------------------- class HTTP : public IndirectStream { public: HTTP(Stream &s) { init(&s); } void initRequest(const char *r) { strcpy(cmdLine,r); } void readRequest(); bool isRequest(const char *); int readResponse(); bool checkResponse(int); bool nextHeader(); bool isHeader(const char *); char *getArgStr(); int getArgInt(); void getAuthUserPass(char *, char *); char cmdLine[8192],*arg; }; #endif