注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

mongoose.h接口介绍  

2015-05-15 17:17:07|  分类: C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

#ifndef MONGOOSE_HEADER_INCLUDED

#define  MONGOOSE_HEADER_INCLUDED

 

#define MONGOOSE_VERSION "5.6"

 

#include <stdio.h>      /* required for FILE*/

#include <stddef.h>     /* required for size_t*/

#include <sys/types.h>  /* required for time_t*/

 

#ifdef __cplusplus

extern "C" {

#endif /* __cplusplus*/

 

/* This structure contains information about HTTP request.*/

struct mg_connection {

  const char *request_method/* "GET", "POST", etc*/

  const char *uri;            /* URL-decoded URI*/

  const char *http_version;   /* E.g. "1.0", "1.1"*/

  const char *query_string;   /* URL part after '?', not including '?', or NULL*/

 

  char remote_ip[48];         /* Max IPv6 string length is 45 characters*/

  char local_ip[48];          /* Local IP address*/

  unsigned short remote_port/* Client's port*/

  unsigned short local_port;  /* Local port number*/

 

  int num_headers;            /* Number of HTTP headers*/

  struct mg_header {

    const char *name;         /* HTTP header name*/

    const char *value;        /* HTTP header value*/

  } http_headers[30];

 

  char *content;              /* POST (or websocket message) data, or NULL*/

  size_t content_len;         /* Data length*/

 

  int is_websocket;           /* Connection is a websocket connection*/

  int status_code;            /* HTTP status code for HTTP error handler*/

  int wsbits;                 /* First byte of the websocket frame*/

  void *server_param;         /* Parameter passed to mg_create_server()*/

  void *connection_param;     /* Placeholder for connection-specific data*/

  void *callback_param;

};

 

struct mg_server/* Opaque structure describing server instance*/

enum mg_result { MG_FALSEMG_TRUEMG_MORE };

enum mg_event {

  MG_POLL = 100,  /* If callback returns MG_TRUE connection closes*/

                  /* after all of data is sent*/

  MG_CONNECT,     /* If callback returns MG_FALSE, connect fails*/

  MG_AUTH,        /* If callback returns MG_FALSE, authentication fails*/

  MG_REQUEST,     /* If callback returns MG_FALSE, Mongoose continues with req*/

  MG_REPLY,       /* If callback returns MG_FALSE, Mongoose closes connection*/

  MG_RECV,        /* Mongoose has received POST data chunk.*/

                  /* Callback should return a number of bytes to discard from*/

                  /* the receive buffer, or -1 to close the connection.*/

  MG_CLOSE,       /* Connection is closed, callback return value is ignored*/

  MG_WS_HANDSHAKE,  /* New websocket connection, handshake request*/

  MG_WS_CONNECT,  /* New websocket connection established*/

  MG_HTTP_ERROR   /* If callback returns MG_FALSE, Mongoose continues with err*/

};

typedef int (*mg_handler_t)(struct mg_connection *, enum mg_event);

 

/* Websocket opcodes, from http://tools.ietf.org/html/rfc6455*/

enum {

  WEBSOCKET_OPCODE_CONTINUATION = 0x0,

  WEBSOCKET_OPCODE_TEXT = 0x1,

  WEBSOCKET_OPCODE_BINARY = 0x2,

  WEBSOCKET_OPCODE_CONNECTION_CLOSE = 0x8,

  WEBSOCKET_OPCODE_PING = 0x9,

  WEBSOCKET_OPCODE_PONG = 0xa

};

 

/* Server management functions

创建web server实例,但是不会使server运行,handler是一个函数指针

*/

struct mg_server *mg_create_server(void *server_parammg_handler_t handler);

/*销毁实例*/

void mg_destroy_server(struct mg_server **);

/*设置参数*/

const char *mg_set_option(struct mg_server *, const char *optconst char *val);

/*通过遍历所有活动连接进行IO循环的一个迭代,在milliseconds毫秒超时后执行select系统调用*/

time_t mg_poll_server(struct mg_server *, int milliseconds);

/*返回以NULL结束的options名字和值数组*/

const char **mg_get_valid_option_names(void);

/*设置server的参数,包括listening_port端口、document_root目录*/

const char *mg_get_option(const struct mg_server *serverconst char *name);

/*这是新增的函数,主要用于多线程操作*/

void mg_copy_listeners(struct mg_server *fromstruct mg_server *to);

struct mg_connection *mg_next(struct mg_server *, struct mg_connection *);

void mg_wakeup_server(struct mg_server *);

/*发送字符串消息给server*/

void mg_wakeup_server_ex(struct mg_server *, mg_handler_tconst char *, ...);

struct mg_connection *mg_connect(struct mg_server *, const char *);

 

/* Connection management functions

这几个函数都是发送消息给浏览器的,格式不一样,功能都差不多

*/

void mg_send_status(struct mg_connection *, int status_code);

void mg_send_header(struct mg_connection *, const char *nameconst char *val);

size_t mg_send_data(struct mg_connection *, const void *dataint data_len);

size_t mg_printf_data(struct mg_connection *, const char *format, ...);

size_t mg_write(struct mg_connection *, const void *bufsize_t len);

size_t mg_printf(struct mg_connection *connconst char *fmt, ...);

 

/*websocket协议函数,它是HTML5支持的协议*/

size_t mg_websocket_write(struct mg_connection *, int opcode,

                          const char *datasize_t data_len);

size_t mg_websocket_printf(struct mg_connectionconnint opcode,

                           const char *fmt, ...);

 

void mg_send_file(struct mg_connection *, const char *pathconst char *);

void mg_send_file_data(struct mg_connection *, int fd);

 

const char *mg_get_header(const struct mg_connection *, const char *name);

const char *mg_get_mime_type(const char *nameconst char *default_mime_type);

int mg_get_var(const struct mg_connection *connconst char *var_name,

               char *bufsize_t buf_len);

/*解析header*/

int mg_parse_header(const char *hdrconst char *var_namechar *bufsize_t);

/*解析多个部分,可以用于文件上传功能*/

int mg_parse_multipart(const char *bufint buf_len,

                       char *var_nameint var_name_len,

                       char *file_nameint file_name_len,

                       const char **dataint *data_len);

 

 

/* Utility functions*/

void *mg_start_thread(void *(*func)(void *), void *param);

char *mg_md5(char buf[33], ...);

int mg_authorize_digest(struct mg_connection *cFILE *fp);

size_t mg_url_encode(const char *srcsize_t s_lenchar *dstsize_t dst_len);

int mg_url_decode(const char *srcsize_t src_lenchar *dstsize_t dst_lenint);

int mg_terminate_ssl(struct mg_connection *cconst char *cert);

int mg_forward(struct mg_connection *cconst char *addr);

void *mg_mmap(FILE *fpsize_t size);

void mg_munmap(void *psize_t size);

 

 

/* Templates support*/

struct mg_expansion {

  const char *keyword;

  void (*handler)(struct mg_connection *);

};

void mg_template(struct mg_connection *, const char *text,

                 struct mg_expansion *expansions);

 

#ifdef __cplusplus

}

#endif /* __cplusplus*/

 

#endif /* MONGOOSE_HEADER_INCLUDED*/

 

  评论这张
 
阅读(138)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017