small-package/luci-app-nginx-pingos/modules/nginx-toolkit-module/ngx_toolkit_misc.h

127 lines
3.2 KiB
C
Raw Normal View History

2021-09-24 23:37:27 +08:00
/*
* Copyright (C) AlexWoo(Wu Jie) wj19840501@gmail.com
*/
#ifndef _NGX_TOOLKIT_MISC_H_INCLUDED_
#define _NGX_TOOLKIT_MISC_H_INCLUDED_
#include <ngx_config.h>
#include <ngx_core.h>
/*
* scheme://[user@]host[:port]/path[?args][#fragment]
*/
typedef struct {
ngx_str_t scheme;
ngx_str_t user;
ngx_str_t host;
ngx_str_t port;
ngx_str_t path;
ngx_str_t args;
ngx_str_t fragment;
ngx_str_t host_with_port; /* host[:port] */
ngx_str_t uri_with_args; /* /path[?args][#fragment] */
} ngx_request_url_t;
#define NGX_MD5KEY_LEN 32
/*
* parse request url format as:
* scheme://[user@]host[:port]/path[?args][#fragment]
*
* return value:
* NGX_OK : parse success
* NGX_ERROR: request url format error
* paras:
* request_url: url parse result return to user,
* all paras in request url is segment point to url
* url : request url for parse
*/
ngx_int_t ngx_parse_request_url(ngx_request_url_t *request_url, ngx_str_t *url);
/*
* convert port to in_port_t according to scheme and port
*
* return value:
* If port is set to correct number range in [1, 65535], return port
* If port is set to non correct value, return 0
* If port is not set, return default value for scheme:
* 80 for http
* 443 for https
* 1935 for rtmp
* 0 for others now
* values:
* scheme : sheme string like http https or rtmp
* port : port for convert to in_port_t
*/
in_port_t ngx_request_port(ngx_str_t *scheme, ngx_str_t *port);
/*
* calculating file md5key as md5sum in shell
*
* return value:
* NGX_OK : calculating success
* NGX_ERROR: calculating error such as file is not exist
* paras:
* fd : file desc for calculating md5key
* md5key: md5key result
*/
ngx_int_t ngx_md5_file(ngx_fd_t fd, u_char md5key[NGX_MD5KEY_LEN]);
/*
* copy str
*
* return value:
* NGX_OK: copy successd
* NGX_ERROR: copy failed
* paras:
* pool: for alloc space for storing str
* dst: str copy to
* src: str copy from
*/
ngx_int_t ngx_copy_str(ngx_pool_t *pool, ngx_str_t *dst, ngx_str_t *src);
/*
* parse text to struct sockaddr
*
* return value:
* 0: if text is not ipv4/ipv6/unix address
* >0: socklen for sa
*
* paras:
* sa: struct sockadd parse to
* text: ipv4/ipv6/unix address for parsing, text could have port
* len: text's length
*/
socklen_t ngx_sock_pton(struct sockaddr *sa, u_char *text, size_t len);
#ifdef NGX_DEBUG
#define NGX_START_TIMING \
struct timeval __start, __end; \
ngx_gettimeofday(&__start);
#define NGX_STOP_TIMING(log, msg) \
ngx_gettimeofday(&__end); \
ngx_log_error(NGX_LOG_INFO, log, 0, msg " spend %ui us", \
(__end.tv_sec - __start.tv_sec) * 1000000 \
+ (__end.tv_usec - __start.tv_usec));
#else
#define NGX_START_TIMING
#define NGX_STOP_TIMING(log, msg)
#endif
#endif