第 3 章 - Azure RTOS NetX Duo HTTP 服务的说明

本章包含下面按字母顺序列出的所有 Azure RTOS NetX Duo HTTP 服务的说明,不过,在该列表中,相同服务的“NetX”(仅限 IPv4)等效项以固定搭配的形式组合在一起。

在以下 API 说明的“返回值”部分中,以粗体显示的值不受 NX_DISABLE_ERROR_CHECKING 定义(用于禁用 API 错误检查)影响,而不以粗体显示的值会被完全禁用。

nx_http_client_create

创建 PPPoE 客户端实例

原型

UINT nx_http_client_create(
    NX_HTTP_CLIENT *client_ptr,
    CHAR *client_name,
    NX_IP *ip_ptr,
    NX_PACKET_POOL *pool_ptr,
    ULONG window_size);

说明

此服务在指定的 IP 实例上创建 HTTP 客户端实例。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • client_name:HTTP 客户端实例的名称。
  • ip_ptr:指向 IP 实例的指针。
  • pool_ptr:指向默认数据包池的指针。 请注意,此池中的数据包必须具有足够大的有效负载才能处理完整响应头。 这是通过 nx_http.h 中的 NX_HTTP_CLIENT_MIN_PACKET_SIZE 定义的
  • window_size:客户端 TCP 套接字接收窗口的大小。

返回值

  • NX_SUCCESS:(0x00) 已成功创建 HTTP 客户端
  • NX_PTR_ERROR:(0x07) HTTP、ip_ptr 或数据包池指针无效
  • NX_HTTP_POOL_ERROR:(0xE9) 数据包池中的有效负载大小无效

允许来自

初始化、线程

示例

/* Create the HTTP Client instance “my_client” on “ip_0”. */
status =  nx_http_client_create(&my_client, “my client”, &ip_0, &pool_0, 100);

/* If status is NX_SUCCESS an HTTP Client instance was successfully created. */

nx_http_client_delete

删除 HTTP 客户端实例

原型

UINT nx_http_client_delete(NX_HTTP_CLIENT *client_ptr);

说明

此服务可删除以前创建的 HTTP 客户端实例。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。

返回值

  • NX_SUCCESS:(0x00) 已成功删除 HTTP 客户端
  • NX_PTR_ERROR:(0x07) HTTP 指针无效
  • NX_CALLER_ERROR:(0x11) 此服务的调用方无效

获准方式

线程数

示例

/* Delete the HTTP Client instance “my_client.”  */
status =  nx_http_client_delete(&my_client);

/* If status is NX_SUCCESS an HTTP Client instance was successfully deleted. */

nx_http_client_get_start

通过 IPv4 启动 HTTP GET 请求

原型

UINT nx_http_client_get_start(
    NX_HTTP_CLIENT *client_ptr,
    ULONG ip_address,
    CHAR *resource,
    CHAR *input_ptr,
    UINT input_size,
    CHAR *username,
    CHAR *password,
    ULONG wait_option);

说明

此服务尝试使用以前创建的 HTTP 客户端实例上的“resource”指针指定的资源来创建和发送 GET 请求。 如果此例程返回 NX_SUCCESS,则应用程序可以向 nx_http_client_get_packet 发出多次调用,以检索对应于所请求资源内容的数据包。

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 GET 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务仅适用于 IPv4 网络。 对于需要连接到 IPv6 网络的应用程序,应使用 nxd_http_client_get_start_extended。

此服务已弃用。 建议开发人员迁移到 nx_http_client_get_start_extended 或 nxd_http_client_get_start_extended。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • ip_address:HTTP 服务器的 IP 地址。
  • resource:指向所请求资源的 URL 字符串的指针。
  • input_ptr:指向 GET 请求的附加数据的指针。 此为可选项。 如果有效,则会将指定的输入放在消息的内容区域中,并使用 POST 而不是 GET 操作。
  • input_size:input_ptr 指向的可选附加输入中的字节数。
  • username:指向用于身份验证的可选用户名的指针。
  • password:指向用于身份验证的可选密码的指针。
  • wait_option:定义服务等待 HTTP 客户端 GET 启动请求的时长。 等待选项的定义方式如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 HTTP 客户端。 GET 启动消息。
  • NX_HTTP_ERROR:(0xE0) 内部 HTTP 客户端错误
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_FAILED:(0xE2) HTTP 客户端与 HTTP 服务器通信时出错。
  • NX_HTTP_AUTHENTICATION_ERROR:(0xEB) 名称和/或密码无效。
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效。

获准方式

线程数

示例

/* Start the GET operation on the HTTP Client “my_client.”  */
status =  nx_http_client_get_start(&my_client, IP_ADDRESS(1,2,3,5), “/TEST.HTM”,
                           NX_NULL, 0, “myname”, “mypassword”, 1000);

/* If status is NX_SUCCESS, the GET request for TEST.HTM is started and is so
   far successful. The client must now call nx_http_client_get_packet multiple
   times to retrieve the content associated with TEST.HTM. */


#define POST_MESSAGE   “Add this data to the message content”

/* Start the POST operation on the HTTP Client “my_client.”  */
status =  nx_http_client_get_start(&my_client, IP_ADDRESS(1,2,3,5), “/TEST.HTM”,
                            POST_MESSAGE, sizeof(POST_MESSAGE),
                            “myname”, “mypassword”, 1000);


/* If status is NX_SUCCESS, the POST_MESSAGE is added to the message in the POST request
   for TEST.HTM and successfully sent. */

nx_http_client_get_start_extended

通过 IPv4 启动 HTTP GET 请求

原型

UINT nx_http_client_get_start_extended(
    NX_HTTP_CLIENT *client_ptr,
    ULONG ip_address,
    CHAR *resource,
    UINT resource_length,
    CHAR *input_ptr,
    UINT input_size,
    CHAR *username,
    UINT username_length,
    CHAR *password,
    UINT password_length,
    ULONG wait_option);

说明

此服务尝试使用以前创建的 HTTP 客户端实例上的“resource”指针指定的资源来创建和发送 GET 请求。 如果此例程返回 NX_SUCCESS,则应用程序可以向 nx_http_client_get_packet 发出多次调用,以检索对应于所请求资源内容的数据包。

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 GET 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务仅适用于 IPv4 网络。 对于需要连接到 IPv6 网络的应用程序,应使用 nxd_http_client_get_start_extended。

此服务取代了 nx_http_client_get_start。 它要求调用方指定资源、用户名和密码的长度。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • ip_address:HTTP 服务器的 IP 地址。
  • resource:指向所请求资源的 URL 字符串的指针。
  • resource_length:所请求资源的 URL 字符串的长度。
  • input_ptr:指向 GET 请求的附加数据的指针。 此为可选项。 如果有效,则会将指定的输入放在消息的内容区域中,并使用 POST 而不是 GET 操作。
  • input_size:input_ptr 指向的可选附加输入中的字节数。
  • username:指向用于身份验证的可选用户名的指针。
  • username_length:用于身份验证的可选用户名的长度。
  • password:指向用于身份验证的可选密码的指针。
  • password_length:用于身份验证的可选密码的长度。
  • wait_option:定义服务等待 HTTP 客户端 GET 启动请求的时长。 等待选项的定义方式如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 HTTP 客户端。 GET 启动消息
  • NX_HTTP_ERROR:(0xE0) 内部 HTTP 客户端错误
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_FAILED:(0xE2) HTTP 客户端与 HTTP 服务器通信时出错。
  • NX_HTTP_AUTHENTICATION_ERROR:(0xEB) 名称和/或密码无效。
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效。

允许来自

线程数

示例

/* If status is NX_SUCCESS, the GET request for TEST.HTM is started and is so
   far successful. The client must now call nx_http_client_get_packet multiple
   times to retrieve the content associated with TEST.HTM. */


#define POST_MESSAGE   “Add this data to the message content”

/* Start the POST operation on the HTTP Client “my_client.”  */
status =  nx_http_client_get_start_extended(&my_client, IP_ADDRESS(1,2,3,5), “/TEST.HTM”,
                                     9, POST_MESSAGE, sizeof(POST_MESSAGE),
                                     “myname”, 6, “mypassword”, 10, 1000);


/* If status is NX_SUCCESS, the POST_MESSAGE is added to the message in the POST request
   for TEST.HTM and successfully sent. */

nxd_http_client_get_start

发送 HTTP GET 请求(IPv4 或 IPv6)

原型

UINT nxd_http_client_get_start(
    NX_HTTP_CLIENT *client_ptr,
    NXD_ADDRESS *server_ip,
    CHAR *resource,
    CHAR *input_ptr,
    UINT input_size,
    CHAR *username,
    CHAR *password,
    ULONG wait_option);

说明

此服务尝试使用以前创建的 HTTP 客户端实例上的“resource”指针指定的资源来创建和发送 GET 请求。 它可用于连接到 IPv4 或 IPv6 网络。 如果此例程返回 NX_SUCCESS,则应用程序可以向 nx_http_client_get_packet 发出多次调用,以检索对应于所请求资源内容的数据包

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 GET 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务已弃用。 建议开发人员迁移到 nxd_http_client_get_start_extended。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • server_ip:HTTP 服务器的 IP 地址。
  • resource:指向所请求资源的 URL 字符串的指针。
  • input_ptr:指向 GET 请求的附加数据的指针。 此为可选项。 如果有效,则会将指定的输入放在消息的内容区域中,并使用 POST 而不是 GET 操作。
  • input_size:input_ptr 指向的可选附加输入中的字节数。
  • username:指向用于身份验证的可选用户名的指针。
  • username_length:用于身份验证的可选用户名的长度。
  • password:指向用于身份验证的可选密码的指针。
  • password_length:用于身份验证的可选密码的长度。
  • wait_option:定义服务等待 HTTP 客户端 GET 启动请求的时长。 等待选项的定义方式如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 GET 请求
  • NX_HTTP_PASSWORD_TOO_LONG:(0xF0) 密码超过了缓冲区大小
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_FAILED:(0xE2) 数据包参数无效。
  • NX_HTTP_AUTHENTICATION_ERROR:(0xEB) 名称或密码无效
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

NXD_ADDRESS server_ip_address;

/* for an IPv4 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
server_ip_address.nxd_ip_address.v4 = IP_ADDRESS(1,2,3,4);

/* for an IPv6 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
server_ip_address.nxd_ip_address.v6[0] = 0x20010db8;
server_ip_address.nxd_ip_address.v6[1] = 0x0;
server_ip_address.nxd_ip_address.v6[2] = 0xf101;
server_ip_address.nxd_ip_address.v6[3] = 0x106;


/* Start the GET operation on the HTTP Client “my_client.”  */
status =  nxd_http_client_get_start(&my_client, server_ip_address, “/TEST.HTM”,
NX_NULL, 0, “myname”, “mypassword”, 1000);


/* If status is NX_SUCCESS, the GET request for TEST.HTM is started and is so
   far successful. The client must now call nx_http_client_get_packet multiple
   times to retrieve the content associated with TEST.HTM. */

nxd_http_client_get_start_extended

发送 HTTP GET 请求(IPv4 或 IPv6)

原型

UINT nxd_http_client_get_start_extended(
    NX_HTTP_CLIENT *client_ptr,
    NXD_ADDRESS *server_ip,
    CHAR *resource,
    UINT resource_length,
    CHAR *input_ptr,
    UINT input_size,
    CHAR *username,
    UINT username_length,
    CHAR *password,
    UINT password_length,
    ULONG wait_option);

说明

此服务尝试使用以前创建的 HTTP 客户端实例上的“resource”指针指定的资源来创建和发送 GET 请求。 它可用于连接到 IPv4 或 IPv6 网络。 如果此例程返回 NX_SUCCESS,则应用程序可以向 nx_http_client_get_packet 发出多次调用,以检索对应于所请求资源内容的数据包。

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 GET 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务取代了 nxd_http_client_get_start。 它要求调用方指定资源、用户名和密码的长度。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。

  • server_ip:HTTP 服务器的 IP 地址。

  • resource:指向所请求资源的 URL 字符串的指针。

  • resource_length:所请求资源的 URL 字符串的长度。

  • input_ptr:指向 GET 请求的附加数据的指针。 此为可选项。 如果有效,则会将指定的输入放在消息的内容区域中,并使用 POST 而不是 GET 操作。

  • input_size:input_ptr 指向的可选附加输入中的字节数。

  • username:指向用于身份验证的可选用户名的指针。

  • username_length:用于身份验证的可选用户名的长度。

  • password:指向用于身份验证的可选密码的指针。

  • password_length:用于身份验证的可选密码的长度。

  • wait_option:定义服务在内部等待处理 HTTP 客户端 GET 启动请求的时长。 等待选项的定义方式如下:

    • 超时值(0x00000001 至 0xFFFFFFFE)
    • TX_WAIT_FOREVER (0xFFFFFFFF)

    选择 TX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。

    选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 GET 请求
  • NX_HTTP_PASSWORD_TOO_LONG:(0xF0) 密码超过了缓冲区大小
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_FAILED:(0xE2) 数据包参数无效。
  • NX_HTTP_AUTHENTICATION_ERROR:(0xEB) 名称或密码无效
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

NXD_ADDRESS server_ip_address;

/* for an IPv4 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
server_ip_address.nxd_ip_address.v4 = IP_ADDRESS(1,2,3,4);

/* for an IPv6 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
server_ip_address.nxd_ip_address.v6[0] = 0x20010db8;
server_ip_address.nxd_ip_address.v6[1] = 0x0;
server_ip_address.nxd_ip_address.v6[2] = 0xf101;
server_ip_address.nxd_ip_address.v6[3] = 0x106;


/* Start the GET operation on the HTTP Client “my_client.”  */
status =  nxd_http_client_get_start_extended(&my_client, server_ip_address,
                                             “/TEST.HTM”, 9, NX_NULL, 0, “myname”,
        6, “mypassword”, 10, 1000);


/* If status is NX_SUCCESS, the GET request for TEST.HTM is started and is so
   far successful. The client must now call nx_http_client_get_packet multiple
   times to retrieve the content associated with TEST.HTM. */

nx_http_client_get_packet

获取下一个资源数据包

原型

UINT nx_http_client_get_packet(
    NX_HTTP_CLIENT *client_ptr,
    NX_PACKET **packet_ptr,
    ULONG wait_option);

说明

此服务检索前一次 nx_http_client_get_start 调用请求的资源的下一个内容数据包。 对此例程的后续调用应在收到 NX_HTTP_GET_DONE 的返回状态之后发出。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • packet_ptr:包含部分资源内容的数据包指针的目标。
  • wait_option:定义服务等待 HTTP 客户端 GET 数据包的时长。 等待选项的定义如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) HTTP 客户端获取数据包成功。
  • NX_HTTP_GET_DONE:(0xEC) HTTP 客户端获取数据包已完成
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端不处于 get 模式。
  • NX_HTTP_BAD_PACKET_LENGTH:(0xED) 数据包长度无效
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Get the next packet of resource content on the HTTP Client “my_client.”
   Note that the nx_http_client_get_start routine must have been called
   previously. */
status =  nx_http_client_get_packet(&my_client, &next_packet, 1000);


/* If status is NX_SUCCESS, the next packet of content is pointed to
   by “next_packet”. */

nx_http_client_put_start

通过 IPv4 启动 HTTP PUT 请求

原型

UINT nx_http_client_put_start(
    NX_HTTP_CLIENT *client_ptr,
    ULONG ip_address,
    CHAR *resource,
    CHAR *username,
    CHAR *password,
    ULONG total_bytes,
    ULONG wait_option);

说明

此服务尝试使用指定的资源向位于所提供的 IP 地址的 HTTP 服务器发送 PUT 请求。 如果此例程成功,应用程序代码应向 nx_http_client_put_packet 例程发出后续调用,以将资源内容实际发送到 HTTP 服务器

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 PUT 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务已弃用。 建议开发人员迁移到 nxd_http_client_put_start_extended

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • ip_address:HTTP 服务器的 IP 地址。
  • resource:指向所请求资源的 URL 字符串的指针。
  • username:指向用于身份验证的可选用户名的指针。
  • password:指向用于身份验证的可选密码的指针。
  • total_bytes:正在发送的资源的总字节数。 请注意,通过对 nx_http_client_put_packet 进行后续调用发送的所有数据包的总长度必须等于此值。
  • wait_option:定义服务等待 HTTP 客户端 PUT 启动的时长。 等待选项的定义如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数

返回值

  • NX_SUCCESS:(0x00) 已成功发送 PUT 请求
  • NX_HTTP_USERNAME_TOO_LONG:(0xF1) 用户名太大,无法放入缓冲区
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_SIZE_ERROR (0x09):资源的总大小无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Start an HTTP PUT to place the 20-byte resource “/TEST.HTM” on the HTTP Server
   at IP address 1.2.3.5. */
status =  nx_http_client_put_start(&my_client, IP_ADDRESS(1, 2, 3, 5),
“/TEST.HTM”, “myname”, “mypassword”, 20, NX_WAIT_FOREVER);

/* If status is NX_SUCCESS, the PUT operation for TEST.HTM has successfully been
   started. */

nx_http_client_put_start_extended

通过 IPv4 启动 HTTP PUT 请求

原型

UINT nx_http_client_put_start_extended(
    NX_HTTP_CLIENT *client_ptr,
    ULONG ip_address,
    CHAR *resource,
    UINT resource_length,
    CHAR *username,
    UINT username_length,
    CHAR *password,
    UINT password_length,
    ULONG total_bytes,
    ULONG wait_option);

说明

此服务尝试使用指定的资源向位于所提供的 IP 地址的 HTTP 服务器发送 PUT 请求。 如果此例程成功,应用程序代码应向 nx_http_client_put_packet 例程发出后续调用,以将资源内容实际发送到 HTTP 服务器。

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 PUT 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务取代了 nx_http_client_put_start。 它要求调用方指定资源、用户名和密码的长度。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • ip_address:HTTP 服务器的 IP 地址。
  • resource:指向所请求资源的 URL 字符串的指针。
  • resource_length:要发送到服务器的资源的 URL 字符串长度。
  • username:指向用于身份验证的可选用户名的指针。
  • username_length:用于身份验证的可选用户名的长度。
  • password:指向用于身份验证的可选密码的指针。
  • password_length:用于身份验证的可选密码的长度。
  • total_bytes:正在发送的资源的总字节数。 请注意,通过对 nx_http_client_put_packet 进行后续调用发送的所有数据包的总长度必须等于此值。
  • wait_option:定义服务等待 HTTP 客户端 PUT 启动的时长。 等待选项的定义如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • *NX_SUCCESS:(0x00) 成功发送 PUT 请求
  • *NX_HTTP_USERNAME_TOO_LONG:(0xF1) 用户名太大,无法放入缓冲区
  • *NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_PTR_ERROR (0x07):指针输入无效
  • NX_SIZE_ERROR (0x09):资源的总大小无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Start an HTTP PUT to place the 20-byte resource “/TEST.HTM” on the HTTP Server
   at IP address 1.2.3.5. */
status =  nx_http_client_put_start_extended(&my_client, IP_ADDRESS(1, 2, 3, 5),
“/TEST.HTM”, 9, “myname”, 6, “mypassword”, 10, 20, NX_WAIT_FOREVER);

/* If status is NX_SUCCESS, the PUT operation for TEST.HTM has successfully been
   started. */

nxd_http_client_put_start

启动 HTTP PUT 请求(IPv4 或 IPv6)

原型

UINT nxd_http_client_put_start(
    NX_HTTP_CLIENT *client_ptr,
    NXD_ADDRESS *server_ip,
    CHAR *resource,
    CHAR *username,
    CHAR *password,
    ULONG total_bytes,
    ULONG wait_option);

说明

此服务尝试通过 IPv6 来 PUT(发送)位于所提供 IP 地址的 HTTP 服务器上的指定资源。 如果此例程成功,应用程序代码应向 nx_http_client_put_packet 例程发出后续调用,以将资源内容实际发送到 HTTP 服务器。

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 PUT 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务已弃用。 建议开发人员迁移到 nxd_http_client_put_start_extended。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • server_ip:HTTP 服务器的 IP 地址。
  • resource:指向要发送到服务器的资源的 URL 字符串的指针。
  • username:指向用于身份验证的可选用户名的指针。
  • password:指向用于身份验证的可选密码的指针。
  • total_bytes:正在发送的资源的总字节数。 请注意,通过对 nx_http_client_put_packet 进行后续调用发送的所有数据包的总长度必须等于此值。
  • wait_option:定义服务等待 HTTP 客户端 PUT 启动的时长。 等待选项的定义如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 HTTP 客户端 PUT 请求
  • NX_HTTP_ERROR:(0xE0) HTTP 客户端内部错误
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_FAILED:(0xE2) HTTP 客户端与 HTTP 服务器通信时出错
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_SIZE_ERROR (0x09):资源的总大小无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

允许来自

线程数

示例

NXD_ADDRESS server_ip_address;

/* for an IPv4 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
server_ip_address.nxd_ip_address.v4 = IP_ADDRESS(1,2,3,4);

/* for an IPv6 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
server_ip_address.nxd_ip_address.v6[0] = 0x20010db8;
server_ip_address.nxd_ip_address.v6[1] = 0x0;
server_ip_address.nxd_ip_address.v6[2] = 0xf101;
server_ip_address.nxd_ip_address.v6[3] = 0x106;

/* Start an HTTP PUT to place the 20-byte resource Client_test.HTM” on the HTTPv6  
   Server. */
status =  nxd_http_client_put_start(&my_client, &server_ip_address,
 									"/client_test.htm", "name", "password", 103, 50);

/* If status is NX_SUCCESS, the PUT operation for Client_test.HTM has successfully
   been started. */

nxd_http_client_put_start_extended

启动 HTTP PUT 请求(IPv4 或 IPv6)

原型

UINT nxd_http_client_put_start_extended(
    NX_HTTP_CLIENT *client_ptr,
    NXD_ADDRESS *server_ip,
    CHAR *resource,
    UINT resource_length,
    CHAR *username,
    UINT username_length,
    CHAR *password,
    UINT password_length,
    ULONG total_bytes,
    ULONG wait_option);

说明

此服务尝试通过 IPv6 来 PUT(发送)位于所提供 IP 地址的 HTTP 服务器上的指定资源。 如果此例程成功,应用程序代码应向 nx_http_client_put_packet 例程发出后续调用,以将资源内容实际发送到 HTTP 服务器。

注意

资源字符串可以引用本地文件(例如 “/index.htm”);如果 HTTP 服务器指示它支持引用 PUT 请求,则资源字符串也可以引用另一个 URL(例如 http://abc.website.com/index.htm)。

此服务取代了 nxd_http_client_put_start。 它要求调用方指定资源、用户名和密码的长度。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • ip_address:HTTP 服务器的 IP 地址。
  • resource:指向所请求资源的 URL 字符串的指针。
  • resource_length:要发送到服务器的资源的 URL 字符串长度。
  • username:指向用于身份验证的可选用户名的指针。
  • username_length:用于身份验证的可选用户名的长度。
  • password:指向用于身份验证的可选密码的指针。
  • password_length:用于身份验证的可选密码的长度。
  • total_bytes:正在发送的资源的总字节数。 请注意,通过对 nx_http_client_put_packet 进行后续调用发送的所有数据包的总长度必须等于此值。
  • wait_option:定义服务等待 HTTP 客户端 PUT 启动的时长。 等待选项的定义如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 HTTP 客户端 PUT 请求
  • NX_HTTP_ERROR:(0xE0) HTTP 客户端内部错误
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_FAILED:(0xE2) HTTP 客户端与 HTTP 服务器通信时出错
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_SIZE_ERROR (0x09):资源的总大小无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

NXD_ADDRESS server_ip_address;

/* for an IPv4 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V4;
server_ip_address.nxd_ip_address.v4 = IP_ADDRESS(1,2,3,4);

/* for an IPv6 address, define as follows: */
server_ip_address.nxd_ip_version = NX_IP_VERSION_V6;
server_ip_address.nxd_ip_address.v6[0] = 0x20010db8;
server_ip_address.nxd_ip_address.v6[1] = 0x0;
server_ip_address.nxd_ip_address.v6[2] = 0xf101;
server_ip_address.nxd_ip_address.v6[3] = 0x106;

/* Start an HTTP PUT to place the 20-byte resource Client_test.HTM” on the HTTPv6  
   Server. */
status =  nxd_http_client_put_start_extended(&my_client, &server_ip_address,
											"/client_test.htm", 16, "name", 4, "password", 8, 103, 50);

/* If status is NX_SUCCESS, the PUT operation for Client_test.HTM has successfully
   been started. */

nx_http_client_put_packet

发送下一个资源数据包

原型

UINT nx_http_client_put_packet(
    NX_HTTP_CLIENT *client_ptr,
    NX_PACKET *packet_ptr,
    ULONG wait_option);

说明

此服务尝试将下一个资源内容数据包发送到 HTTP 服务器。

注意

应反复调用此例程,直到发送的数据包总长度等于前一次 nx_http_client_put_start 调用中指定的“total_bytes”为止。

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • packet_ptr:指向要发送到 HTTP 服务器的资源的下一个内容的指针。
  • wait_option:定义服务在内部等待处理 HTTP 客户端 PUT 数据包的时长。 等待选项的定义如下:
    • 超时值(0x00000001 至 0xFFFFFFFE)
    • NX_WAIT_FOREVER:(0xFFFFFFFF) 选择 NX_WAIT_FOREVER 会导致调用线程无限期挂起,直到 HTTP 服务器响应请求。 选择数值 (0x1-0xFFFFFFFE) 可指定等待 HTTP 服务器响应时调用线程保持挂起状态的最大计时器时钟周期数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送 HTTP 客户端数据包。
  • NX_HTTP_NOT_READY:(0xEA) HTTP 客户端未准备就绪
  • NX_HTTP_REQUEST_UNSUCCESSFUL_CODE:(0xEE) 收到了服务器错误代码
  • NX_HTTP_BAD_PACKET_LENGTH:(0xED) 数据包长度无效
  • NX_HTTP_AUTHENTICATION_ERROR:(0xEB) 名称和/或密码无效
  • NX_HTTP_INCOMPLETE_PUT_ERROR:(0xEF) 服务器在 PUT 完成之前做出响应
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_INVALID_PACKET (0x12):数据包太小,无法用于 TCP 标头
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

允许来自

线程数

示例

/* Send a 20-byte packet representing the content of the resource
   “/TEST.HTM” to the HTTP Server. */
status =  nx_http_client_put_packet(NX_HTTP_CLIENT *client_ptr, NX_PACKET *packet_ptr, ULONG wait_option);

/* If status is NX_SUCCESS, the 20-byte resource contents of TEST.HTM has
   successfully been sent. */

nx_http_client_set_connect_port

设置用于连接到服务器的端口

原型

UINT nx_http_client_set_connect_port(
    NX_HTTP_CLIENT *client_ptr,
    UINT port);

说明

在运行时,此服务在连接到 HTTP 服务器时会将连接端口更改为指定的端口。 否则,连接端口默认为 80。 必须在 nx_http_client_get_start 和 nx_http_client_put_start 之前调用此服务,例如,在 HTTP 客户端连接到服务器时

输入参数

  • client_ptr:指向 HTTP 客户端控制块的指针。
  • port:用于连接到服务器的端口。

返回值

  • NX_SUCCESS:(0x00) 已成功更改端口
  • NX_INVALID_PORT:(0x46) 端口超出最大值 (0xFFFF) 或为零
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程、初始化

示例

NX_HTTP_CLIENT *client_ptr;

/* Change the connect port to 114. */
status =  nx_http_client_set_connect_port(client_ptr, 114);

/* If status is NX_SUCCESS, the connect port is successfully changed. */

nx_http_server_cache_info_callback_set

设置回调以检索 URL 最大期限和日期

原型

UINT nx_http_server_cache_info_callback_set(
    NX_HTTP_SERVER *server_ptr,
    UINT (*cache_info_get)(
        CHAR *resource,
        UINT *max_age,
        NX_HTTP_SERVER_DATE *date));

说明

此服务可设置所调用的回调服务,以获取指定资源的最长使用时间和上次修改日期。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • cache_info_get:指向回调的指针
  • max_age:指向资源最长存在时间的指针
  • data:指向返回的上次修改日期的指针。

返回值

  • NX_SUCCESS (0x00):成功设置回调
  • NX_PTR_ERROR (0x07):指针输入无效

允许来自

初始化

示例

NX_HTTP_SERVER my_server;

UINT cache_info_get(CHAR *resource, UINT *max_age,
                           NX_HTTP_SERVER_DATE *last_modified);

/* After my_server is created with nx_http_server_create and before the HTTP  
   server is set by nx_http_server_start, set the cache info callback: */

status = nx_http_server_cache_info_callback_set(&my_server, cache_info_get);


/* If status is NX_SUCCESS, the callback was successfully sent. */

nx_http_server_callback_data_send

从回调函数发送数据

原型

UINT nx_http_server_callback_data_send(
    NX_HTTP_SERVER *server_ptr,
    VOID *data_ptr,
    ULONG data_length);

说明

此服务可从应用程序的回调例程发送提供的数据包中的数据。 此服务通常用于发送与 GET/POST 请求关联的动态数据。

注意

如果使用此函数,则回调例程将负责以正确的格式发送整个响应。 此外,回调例程必须返回 NX_HTTP_CALLBACK_COMPLETED 状态。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • data_ptr:指向要发送的数据的指针。
  • data_length:要发送的字节数。

返回值

  • NX_SUCCESS:(0x00) 已成功发送服务器数据
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

UINT  my_request_notify(NX_HTTP_SERVER *server_ptr, UINT request_type,
  CHAR *resource, NX_PACKET *packet_ptr)
{

    /* Look for the test resource!  */
    if ((request_type == NX_HTTP_SERVER_GET_REQUEST) &&
                (strcmp(resource, "/test.htm") == 0))
    {

        /* Found it, override the GET processing by sending the resource
    contents directly. */

        nx_http_server_callback_data_send(server_ptr,
    "HTTP/1.0 200 \r\nContent-Length:
    103\r\nContent-Type: text/html\r\n\r\n",
    63);

        nx_http_server_callback_data_send(server_ptr, "<HTML>\r\n<HEAD><TITLE>NetX
    HTTP Test </TITLE></HEAD>\r\n
    <BODY>\r\n<H1>NetX Test Page
    </H1>\r\n</BODY>\r\n</HTML>\r\n", 103);

        /* Return completion status. */
        return(NX_HTTP_CALLBACK_COMPLETED);
    }

    return(NX_SUCCESS);
}

nx_http_server_callback_generate_response_header

在回调函数中创建响应头

原型

UINT nx_http_server_callback_generate_response_header(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET **packet_pptr,
    CHAR *status_code,
    UINT content_length,
    CHAR *content_type,
    CHAR* additional_header);

说明

当 HTTP 服务器响应客户端 get、put 和 delete 请求时,此服务将调用内部函数 _nx_http_server_generate_response_header。 它适合在 HTTP 服务器回调函数中使用(当 HTTP 服务器应用程序正在设计要向客户端做出的响应时)。

此服务已弃用。 建议开发人员迁移到 nxd_http_server_callback_generate_response_header_extended。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • packet_pptr:指向分配给消息的数据包指针的指针
  • status_code:指示资源的状态。 示例:
    • NX_HTTP_STATUS_OK
    • NX_HTTP_STATUS_MODIFIED
    • NX_HTTP_STATUS_INTERNAL_ERROR
  • content_length:内容大小(以字节为单位)
  • content_type:HTTP 的类型,例如“text/plain”
  • additional_header:指向附加标头文本的指针

返回值

  • NX_SUCCESS:(0x00) 已成功创建头
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

CHAR demotestbuffer[] = "<html>\r\n\r\n<head>\r\n\r\n<title>Main   \
			Window</title>\r\n</head>\r\n\r\n<body>Test message\r\n   \  </body>\r\n</html>\r\n";

     /* my_request_notify is the application request notify callback registered with
      the HTTP server in nx_http_server_create, creates a response to the received  
      Client request. */

      UINT  my_request_notify(NX_HTTP_SERVER *server_ptr, UINT request_type,
 CHAR *resource, NX_PACKET *recv_packet_ptr)
      {

NX_PACKET   *sresp_packet_ptr;
ULONG       string_length;
CHAR        temp_string[30];
ULONG       length = 0;


   length = sizeof(demotestbuffer) - 1;

/* Derive the client request type from the client request. */
   string_length =  (ULONG) nx_http_server_type_retrieve(server_ptr, server_ptr ->
nx_http_server_request_resource, temp_string,
sizeof(temp_string));

       /* Null terminate the string. */
   temp_string[temp] = 0;

       /* Now build a response header with server status is OK and no additional header  
          info. */
   status = nx_http_server_callback_generate_response_header(http_server_ptr,
                  &resp_packet_ptr, NX_HTTP_STATUS_OK,
                  length, temp_string, NX_NULL);

/* If status is NX_SUCCESS, the header was successfully appended. */

/* Now add data to the packet. */
   status = nx_packet_data_append(resp_packet_ptr, &demotestbuffer[0],
                 length,  server_ptr ->
                 nx_http_server_packet_pool_ptr, NX_WAIT_FOREVER);
   if (status != NX_SUCCESS)
   {
       nx_packet_release(resp_packet_ptr);
       return status;
   }



/* Now send the packet! */
           status = nx_tcp_socket_send(&(server_ptr -> nx_http_server_socket),
                                      resp_packet_ptr, NX_HTTP_SERVER_TIMEOUT_SEND);

   if (status != NX_SUCCESS)
   {
      nx_packet_release(resp_packet_ptr);

      return status;
   }

/* Let HTTP server know the response has been sent. */
  return NX_HTTP_CALLBACK_COMPLETED;

     }

nx_http_server_callback_generate_response_header_extended

在回调函数中创建响应头

原型

UINT nx_http_server_callback_generate_response_header_extended(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET **packet_pptr,
    CHAR *status_code,
    UINT status_code_length,
    UINT content_length,
    CHAR *content_type,
    UINT content_type_length,
    CHAR *additional_header,
    UINT additional_header_length);

说明

当 HTTP 服务器响应客户端 get、put 和 delete 请求时,此服务将调用内部函数 _nx_http_server_generate_response_header。 它适合在 HTTP 服务器回调函数中使用(当 HTTP 服务器应用程序正在设计要向客户端做出的响应时)。

此服务取代了 nx_http_server_callback_generate_response_header。 此版本向回调函数提供附加长度信息。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • packet_pptr:指向分配给消息的数据包指针的指针
  • status_code:指示资源的状态。 示例:
    • NX_HTTP_STATUS_OK
    • NX_HTTP_STATUS_MODIFIED
    • NX_HTTP_STATUS_INTERNAL_ERROR
  • status_code:状态代码的长度
  • content_length:内容大小(以字节为单位)
  • content_type:HTTP 的类型,例如“text/plain”
  • content_type_length:HTTP 类型的长度
  • additional_header:指向附加标头文本的指针
  • additional_header_length:附加标头文本的长度

返回值

  • NX_SUCCESS:(0x00) 已成功创建头
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

CHAR demotestbuffer[] = "<html>\r\n\r\n<head>\r\n\r\n<title>Main   \
	 Window</title>\r\n</head>\r\n\r\n<body>Test message\r\n   \  </body>\r\n</html>\r\n";

     /* my_request_notify is the application request notify callback registered with
      the HTTP server in nx_http_server_create, creates a response to the received  
      Client request. */

      UINT  my_request_notify(NX_HTTP_SERVER *server_ptr, UINT request_type,
 CHAR *resource, NX_PACKET *recv_packet_ptr)
      {

NX_PACKET   *sresp_packet_ptr;
ULONG       string_length;
CHAR        temp_string[30];
ULONG       length = 0;


   length = sizeof(demotestbuffer) - 1;

/* Derive the client request type from the client request. */
   string_length =  (ULONG) nx_http_server_type_retrieve(server_ptr, server_ptr ->
nx_http_server_request_resource, temp_string,
sizeof(temp_string));

       /* Null terminate the string. */
   temp_string[temp] = 0;

       /* Now build a response header with server status is OK and no additional header  
          info. */
   status = nx_http_server_callback_generate_response_header_extended(
                             http_server_ptr, &resp_packet_ptr, NX_HTTP_STATUS_OK,
              sizeof(NX_HTTP_STATUS_OK) - 1, length,
              temp_string, string_length, NX_NULL, 0);

/* If status is NX_SUCCESS, the header was successfully appended. */

/* Now add data to the packet. */
   status = nx_packet_data_append(resp_packet_ptr, &demotestbuffer[0],
                 length,  server_ptr ->
                 nx_http_server_packet_pool_ptr, NX_WAIT_FOREVER);
   if (status != NX_SUCCESS)
   {
       nx_packet_release(resp_packet_ptr);
       return status;
   }



/* Now send the packet! */
           status = nx_tcp_socket_send(&(server_ptr -> nx_http_server_socket),
                                      resp_packet_ptr, NX_HTTP_SERVER_TIMEOUT_SEND);

   if (status != NX_SUCCESS)
   {
      nx_packet_release(resp_packet_ptr);

      return status;
   }

/* Let HTTP server know the response has been sent. */
  return NX_HTTP_CALLBACK_COMPLETED;

     }

nx_http_server_callback_packet_send

从回调函数发送 HTTP 数据包

原型

UINT nx_http_server_callback_packet_send(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET *packet_ptr);

说明

此服务从 HTTP 回调发送完整的 HTTP 服务器响应。 HTTP 服务器将在指定 NX_HTTP_SERVER_TIMEOUT_SEND 的情况下发送数据包。 HTTP 头和数据必须追加到数据包。 如果返回状态指示错误,则 HTTP 应用程序必须释放该数据包。

回调应返回 NX_HTTP_CALLBACK_COMPLETED。

有关更详细的示例,请参阅“nx_http_server_callback_generate_response_header”。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • packet_ptr:指向要发送的数据包的指针

返回值

  • NX_SUCCESS:(0x00) 已成功发送服务器数据包
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

/* The packet is appended with HTTP header and data and is ready to send to the
   Client directly. */

   status = nx_http_server_callback_response_send(server_ptr, packet_ptr);

   if (status != NX_SUCCESS)
   {

	nx_packet_release(packet_ptr);
   }

    return(NX_HTTP_CALLBACK_COMPLETED);

nx_http_server_callback_response_send

从回调函数发送响应

原型

UINT nx_http_server_callback_response_send(
    NX_HTTP_SERVER *server_ptr,
    CHAR *header,
    CHAR *information,
    CHAR additional_info);

说明

此服务可从应用程序的回调例程发送提供的响应信息。 此服务通常用于发送与 GET/POST 请求关联的自定义响应。

注意

如果使用此函数,则回调例程必须返回 NX_HTTP_CALLBACK_COMPLETED 状态。

此服务已弃用。 建议开发人员迁移到 nxd_http_server_callback_response_send_extended。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • header:指向响应标头字符串的指针。
  • information:指向信息字符串的指针。
  • additional_info:指向附加信息字符串的指针。

返回值

  • NX_SUCCESS:(0x00) 已成功发送服务器响应

允许来自

线程数

示例

UINT  my_request_notify(NX_HTTP_SERVER *server_ptr, UINT request_type,
					    CHAR *resource, NX_PACKET *packet_ptr)
{

    /* Look for the test resource!  */
    if ((request_type == NX_HTTP_SERVER_GET_REQUEST) &&
               (strcmp(resource, "/test.htm") == 0))
    {

        /* In this example, we will complete the GET processing with
           a resource not found response. */
	 nx_http_server_callback_response_send(server_ptr,
                      "HTTP/1.0 404 ",
                      "NetX HTTP Server unable to find  
                       file: ", resource);

        /* Return completion status. */
        return(NX_HTTP_CALLBACK_COMPLETED);
    }

    return(NX_SUCCESS);
}

nx_http_server_callback_response_send_extended

从回调函数发送响应

原型

UINT nx_http_server_callback_response_send_extended(
    NX_HTTP_SERVER *server_ptr,
    CHAR *header,
    UINT header_length,
    CHAR *information,
    UINT information_length,
    CHAR *additional_info,
    UINT additional_info_length);

说明

此服务可从应用程序的回调例程发送提供的响应信息。 此服务通常用于发送与 GET/POST 请求关联的自定义响应。

注意

如果使用此函数,则回调例程必须返回 NX_HTTP_CALLBACK_COMPLETED 状态。

此服务取代了 nx_http_server_callback_response_send。 此版本采用附加长度信息作为自变量。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • header:指向响应标头字符串的指针。
  • header_length:响应标头字符串的长度。
  • information:指向信息字符串的指针。
  • information_length:信息字符串的长度。
  • additional_info:指向附加信息字符串的指针。
  • additional_info_length:附加信息字符串的长度。

返回值

  • NX_SUCCESS:(0x00) 已成功发送服务器响应

允许来自

线程数

示例

UINT  my_request_notify(NX_HTTP_SERVER *server_ptr, UINT request_type,
						CHAR *resource, NX_PACKET *packet_ptr)
{

    /* Look for the test resource!  */
    if ((request_type == NX_HTTP_SERVER_GET_REQUEST) &&
               (strcmp(resource, "/test.htm") == 0))
    {

        /* In this example, we will complete the GET processing with
           a resource not found response. */
	 nx_http_server_callback_response_send_extended(
                                             server_ptr,
                      "HTTP/1.0 404 ", 12,
                      "NetX HTTP Server unable to find  
                       file: ", 38, resource, 9);

        /* Return completion status. */
        return(NX_HTTP_CALLBACK_COMPLETED);
    }

    return(NX_SUCCESS);
}

nx_http_server_content_get

从请求获取内容

原型

UINT nx_http_server_content_get(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET *packet_ptr,
    ULONG byte_offset,
    CHAR *destination_ptr,
    UINT destination_size,
    UINT *actual_size);

说明

此服务尝试从 POST 或 PUT HTTP 客户端请求中检索指定数量的内容。 应从创建 HTTP 服务器 (nx_http_server_create) 期间指定的应用程序请求通知回调调用此服务

此服务已弃用。 建议开发人员迁移到 nx_http_server_content_get_extended。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • packet_ptr:指向 HTTP 客户端请求数据包的指针。 请注意,请求通知回调不得释放此数据包。
  • byte_offset:要偏移到内容区域中的字节数。
  • destination_ptr:指向内容目标区域的指针。
  • destination_size:目标区域中可用的最大字节数。
  • actual_size:指向目标变量的指针,该变量将设置为已复制内容的实际大小。

返回值

  • NX_SUCCESS:(0x00) 已成功获取 HTTP 服务器内容
  • NX_HTTP_ERROR:(0xE0) HTTP 服务器内部错误
  • NX_HTTP_DATA_END:(0xE7) 请求内容结束
  • NX_HTTP_TIMEOUT:(0xE1) HTTP 服务器在获取下一个内容数据包时超时
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Assuming we are in the application’s request notify callback
   routine, retrieve up to 100 bytes of content starting at offset
   0. */
status =  nx_http_server_content_get(&my_server, packet_ptr,
                      0, my_buffer, 100, &actual_size);

/* If status is NX_SUCCESS, “my_buffer” contains “actual_size” bytes of
   request content. */

nx_http_server_content_get_extended

从请求中获取内容/支持零长度内容

原型

UINT nx_http_server_content_get_extended(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET *packet_ptr,
    ULONG byte_offset,
    CHAR *destination_ptr,
    UINT destination_size,
    UINT *actual_size);

说明

此服务与 nx_http_server_content_get 几乎完全相同;它尝试从 POST 或 PUT HTTP 客户端请求中检索指定数量的内容。 但是,此服务可将“内容长度”值为零的请求(“空请求”)作为有效请求进行处理。 应从创建 HTTP 服务器 (nx_http_server_create) 期间指定的应用程序请求通知回调调用此服务

此服务取代了 nx_http_server_content_get。 此版本要求调用方提供附加长度信息。

输入参数

  • server_ptr:指向 HTTP 服务器控制块的指针。
  • packet_ptr:指向 HTTP 客户端请求数据包的指针。 请注意,请求通知回调不得释放此数据包。
  • byte_offset:要偏移到内容区域中的字节数。
  • destination_ptr:指向内容目标区域的指针。
  • destination_size:目标区域中可用的最大字节数。
  • actual_size:指向目标变量的指针,该变量将设置为已复制内容的实际大小。

返回值

  • NX_SUCCESS:(0x00) 已成功获取 HTTP 内容
  • NX_HTTP_ERROR:(0xE0) HTTP 服务器内部错误
  • NX_HTTP_DATA_END:(0xE7) 请求内容结束
  • NX_HTTP_TIMEOUT:(0xE1) HTTP 服务器在获取下一个数据包时超时
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

允许来自

线程数

示例

/* Assuming we are in the application’s request notify callback
   routine, retrieve up to 100 bytes of content starting at offset
   0. */
status =  nx_http_server_content_get_extended(&my_server, packet_ptr,
                               0, my_buffer, 100, &actual_size);

/* If status is NX_SUCCESS, “my_buffer” contains “actual_size” bytes of
   request content. */

nx_http_server_content_length_get

获取请求中内容的长度

原型

UINT nx_http_server_content_length_get(NX_PACKET *packet_ptr);

说明

此服务尝试在提供的数据包中检索 HTTP 内容长度。 如果没有 HTTP 内容,此例程将返回零值。 应从创建 HTTP 服务器 (nx_http_server_create) 期间指定的应用程序请求通知回调调用此服务。

此服务已弃用。 建议开发人员迁移到 nx_http_server_content_length_get_extended。

输入参数

  • packet_ptr:指向 HTTP 客户端请求数据包的指针。 请注意,请求通知回调不得释放此数据包。

返回值

  • 内容长度:出错时将返回零值

允许来自

线程数

示例

/* Assuming we are in the application’s request notify callback
   routine, get the content length of the HTTP Client request. */
length =  nx_http_server_content_length_get(packet_ptr);

/* The “length” variable now contains the length of the HTTP Client
   request content area. */

nx_http_server_content_length_get_extended

获取请求中内容的长度/支持零值内容长度

原型

UINT nx_http_server_content_length_get_extended(
    NX_PACKET *packet_ptr,
    UINT *content_length);

说明

此服务类似于 nx_http_server_content_length_get;尝试在提供的数据包中检索 HTTP 内容长度。 但是,返回值指示成功完成状态,并且实际长度值是在输入指针 content_length 中返回的。 如果 HTTP 内容/“内容长度”不等于 0,则此例程仍会返回成功完成状态,并且 content_length 输入指针将指向有效长度(零)。 应从创建 HTTP 服务器 (nx_http_server_create) 期间指定的应用程序请求通知回调调用此服务

此服务取代了 nx_http_server_content_length_get

输入参数

  • packet_ptr:指向 HTTP 客户端请求数据包的指针。 请注意,请求通知回调不得释放此数据包。
  • content_length:指向从“内容长度”字段中检索到的值的指针

返回值

  • NX_SUCCESS:(0x00) 已成功获取服务器内容
  • NX_HTTP_INCOMPLETE_PUT_ERROR:(0xEF) HTTP 头格式不正确
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

/* Assuming we are in the application’s request notify callback
   routine, get the content length of the HTTP Client request. */
ULONG content_length;

status =  nx_http_server_content_length_get_extended(packet_ptr, &content_length);

/* If the “status” variable indicates successful completion, the“length” variable
   contains the length of the HTTP Client request content area. */

nx_http_server_create

创建 HTTP 服务器实例

原型

UINT nx_http_server_create(
    NX_HTTP_SERVER *http_server_ptr,
	 CHAR *http_server_name,
    NX_IP *ip_ptr,
    FX_MEDIA *media_ptr,
    VOID *stack_ptr,
    ULONG stack_size,
    NX_PACKET_POOL *pool_ptr,
    UINT (*authentication_check)(
        NX_HTTP_SERVER *server_ptr,
        UINT request_type,
        CHAR *resource,
        CHAR **name,
        CHAR **password,
        CHAR **realm),
	  UINT (*request_notify)(
        NX_HTTP_SERVER *server_ptr,
        INT request_type,
        CHAR *resource,
        NX_PACKET *packet_ptr));

说明

此服务创建 HTTP 服务器实例,该实例在其自己的 ThreadX 线程上下文中运行。 可选的 authentication_check 和 request_notify 应用程序回调例程可让应用程序软件控制 HTTP 服务器的基本操作。

输入参数

  • http_server_ptr:指向 HTTP 服务器控制块的指针。
  • http_server_name:指向 HTTP 服务器名称的指针。
  • ip_ptr:指向以前所创建 IP 实例的指针。
  • media_ptr:指向先前创建的 FileX 媒体实例的指针。
  • stack_ptr:指向 HTTP 服务器线程堆栈区域的指针。
  • stack_size:指向 HTTP 服务器线程堆栈大小的指针。
  • authentication_check:指向应用程序身份验证检查例程的函数指针。 如果已指定,则将对每个 HTTP 客户端请求调用此例程。 如果此参数为 NULL,则不执行任何身份验证。
  • request_notify:指向应用程序请求通知例程的函数指针。 如果已指定,则会在 HTTP 服务器处理请求之前调用此例程。 这样便可在完成 HTTP 客户端请求之前,重定向资源名称或更新资源中的字段。

返回值

  • NX_SUCCESS (0x00):成功创建 HTTP 服务器。
  • NX_PTR_ERROR:(0x07) HTTP 服务器、IP、媒体、堆栈或数据包池指针无效。
  • NX_HTTP_POOL_ERROR:(0xE9) 池的数据包有效负载不够大,无法包含整个 HTTP 请求。

允许来自

初始化、线程

示例

/* Create an HTTP Server instance called “my_server.”  */
status =  nx_http_server_create(&my_server, “my server”, &ip_0, &ram_disk,
			  stack_ptr, stack_size, &pool_0,
			  my_authentication_check, my_request_notify);

/* If status equals NX_SUCCESS, the HTTP Server creation was successful. */

nx_http_server_delete

删除 HTTP 服务器实例

原型

UINT nx_http_server_delete(NX_HTTP_SERVER *http_server_ptr);

说明

此服务可删除先前创建的 HTTP 服务器实例。

输入参数

  • http_server_ptr:指向 HTTP 服务器控制块的指针。

返回值

  • NX_SUCCESS (0x00):成功删除 HTTP 服务器
  • NX_PTR_ERROR (0x07):HTTP 服务器指针无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Delete the HTTP Server instance called “my_server.”  */
status =  nx_http_server_delete(&my_server);

/* If status equals NX_SUCCESS, the HTTP Server delete was successful. */

nx_http_server_get_entity_content

检索实体数据的位置和长度

原型

UINT nx_http_server_get_entity_content(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET **packet_pptr,
    ULONG *available_offset,
    ULONG *available_length);

说明

此服务确定已收到的客户端消息中当前多部分实体内的数据开始位置,以及不包括边界字符串的数据的长度。 HTTP 服务器在内部更新其自己的偏移量,以便可以对包含多个实体的消息的相同客户端数据报再次调用此函数。 数据包指针将更新为指向下一个数据包,该数据包中的客户端消息是多数据包数据报。

注意

必须启用 NX_HTTP_MULTIPART_ENABLE 才能使用此服务。

有关更多详细信息,请参阅 nx_http_server_get_entity_header

输入参数

  • server_ptr:指向 HTTP 服务器的指针
  • packet_pptr:指向数据包指针位置的指针。 请注意,应用程序不应释放此数据包。
  • available_offset:指向实体数据相对于数据包预置指针的偏移量的指针
  • available_length:指向实体数据长度的指针

返回值

  • NX_SUCCESS:(0x00) 已成功检索到实体内容的大小和位置
  • NX_HTTP_BOUNDARY_ALREADY_FOUND:(0xF4) 已找到 HTTP 服务器内部多部分标记的内容
  • NX_HTTP_ERROR:(0xE0) 内部 HTTP 错误
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

NX_HTTP_SERVER my_server;

UINT        offset, length;
NX_PACKET  *packet_ptr;

/* Inside the request notify callback, the HTTP server application first obtains
   the entity header to determine details about the multipart data. If
   successful, it then calls this service to get the location of entity data: */

status =  nx_http_server_get_entity_content(&my_server, &packet_ptr, *offset,
&length);

/* If status equals NX_SUCCESS, offset and location determine the location of the
   entity data. */

nx_http_server_get_entity_header

检索实体头的内容

原型

UINT nx_http_server_get_entity_header(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET **packet_pptr,
    UCHAR *entity_header_buffer,
    ULONG buffer_size);

说明

此服务可将实体标头检索到指定的缓冲区中。 HTTP 服务器在内部更新其自身的指针,以在具有多个实体标头的客户端数据报中找到下一个多部分实体。 数据包指针将更新为指向下一个数据包,该数据包中的客户端消息是多数据包数据报。

注意

必须启用 NX_HTTP_MULTIPART_ENABLE 才能使用此服务。

输入参数

  • server_ptr:指向 HTTP 服务器的指针
  • packet_pptr:指向数据包指针位置的指针。 请注意,应用程序不应释放此数据包。
  • entity_header_buffer:指向实体标头存储位置的指针
  • buffer_size:输入缓冲区的大小

返回值

  • NX_SUCCESS:(0x00) 已成功检索到实体头
  • NX_HTTP_NOT_FOUND:(0xE6) 找不到实体头字段
  • NX_HTTP_TIMEOUT:(0xE1) 接收多数据包客户端消息的下一个数据包时超过了过期时间
  • NX_HTTP_ERROR:(0xE0) 内部 HTTP 错误
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* my_request_notify is the application request notify callback registered with
      the HTTP server in nx_http_server_create, creates a response to the received  
      Client request. */

      UINT  my_request_notify(NX_HTTP_SERVER *server_ptr, UINT request_type,
 							  CHAR *resource, NX_PACKET *packet_ptr)
      {

		NX_PACKET   *sresp_packet_ptr;
		UINT        offset, length;
		NX_PACKET   *response_pkt;
		UCHAR       buffer[1440];

    	/* Process multipart data. */
    	if(request_type == NX_HTTP_SERVER_POST_REQUEST)
    	{

	   /* Get the content header. */
	   while(nx_http_server_get_entity_header(server_ptr, &packet_ptr, buffer,
                                         sizeof(buffer)) == NX_SUCCESS)
   {

      /* Header obtained successfully. Get the content data location. */
      while(nx_http_server_get_entity_content(server_ptr, &packet_ptr, &offset,
                                              &length) == NX_SUCCESS)
      {
           /* Write content data to buffer. */
           nx_packet_data_extract_offset(packet_ptr, offset, buffer, length,
                                         &length);
           buffer[length] = 0;
      }

    }

    /* Generate HTTP header. */
    status = nx_http_server_callback_generate_response_header(server_ptr,
                         &response_pkt, NX_HTTP_STATUS_OK, 800, "text/html",
                         "Server: NetXDuo HTTP 5.3\r\n");

    if(status == NX_SUCCESS)
    {
        if(nx_http_server_callback_packet_send(server_ptr, response_pkt) !=
  NX_SUCCESS)
 {
                nx_packet_release(response_pkt);
	 }
    }


}
else
{
	/* Indicate we have not processed the response to client yet.*/
	return(NX_SUCCESS);
}

/* Indicate the response to client is transmitted. */
return(NX_HTTP_CALLBACK_COMPLETED);

nx_http_server_gmt_callback_set

设置回调以获取 GMT 日期和时间

原型

UINT nx_http_server_gmt_callback_set(
    NX_HTTP_SERVER *server_ptr,
    VOID (*gmt_get)(NX_HTTP_SERVER_DATE *date);

说明

此服务可设置回调以获取先前创建的 HTTP 服务器的 GMT 日期和时间。 当 HTTP 服务器在其对客户端的响应中创建标头时,将调用此服务。

输入参数

  • server_ptr:指向 HTTP 服务器的指针
  • gmt_getv:指向 GMT 回调的指针
  • datev:指向检索到的日期的指针

返回值

  • NX_SUCCESS (0x00):成功设置回调
  • NX_PTR_ERROR (0x07):数据包或参数指针无效。

允许来自

线程数

示例

NX_HTTP_SERVER my_server;

VOID get_gmt(NX_HTTP_SERVER_DATE *now);

/* After the HTTP server is created by calling nx_http_server_create, and before
   starting HTTP services when nx_http_server_start is called, set the GMT
   retrieve callback: */

status =  nx_http_server_gmt_callback_set(&my_server, gmt_get);

/* If status equals NX_SUCCESS, the gmt_get will be called to set the HTTP server
   response header date. */

nx_http_server_invalid_userpassword_notify_set

设置回调以处理无效的用户/密码

原型

UINT nx_http_server_invalid_userpassword_notify_set(
    NX_HTTP_SERVER *http_server_ptr,
    UINT (*invalid_username_password_callback)
        (CHAR *resource,
        NXD_ADDRESS *client_address,
        UINT request_type));

说明

此服务可通过摘要式或基本身份验证,设置在客户端 get、put 或 delete 请求中接收到无效用户名和密码时调用的回调。 先前必须已创建 HTTP 服务器。

输入参数

  • server_ptr:指向 HTTP 服务器的指针
  • invalid_username_password_callback:指向无效用户/密码回调的指针
  • resource:指向客户端指定的资源的指针
  • client_address:指向客户端地址的指针。 可以是 IPv4 或 IPv6
  • request_type:指示客户端请求类型。 可以为以下类型:
    • NX_HTTP_SERVER_GET_REQUEST
    • NX_HTTP_SERVER_POST_REQUEST
    • NX_HTTP_SERVER_HEAD_REQUEST
    • NX_HTTP_SERVER_PUT_REQUEST
    • NX_HTTP_SERVER_DELETE_REQUEST

返回值

  • NX_SUCCESS (0x00):成功设置回调
  • NX_PTR_ERROR (0x07):指针输入无效

允许来自

线程数

示例

NX_HTTP_SERVER my_server;
VOID invalid_username_password_callback (NX_ CHAR *resource,
										 NXD_ADDRESS *client_address,
										 UINT   request_type);

/* After the HTTP server is created by calling nx_http_server_create, and before
   starting HTTP services when nx_http_server_start is called, set the invalid
   username password callback: */

status =  nx_http_server_gmt_callback_set(&my_server,
										  invalid_username_password_callback);

/* If status equals NX_SUCCESS, the invalid_username_password_callback function
   will be called when the HTTP server receives an invalid username/password. */

nx_http_server_mime_maps_additional_set

为 HTML 设置其他 MIME 映射

原型

UINT nx_http_server_mime_maps_additional_set(
    NX_HTTP_SERVER *server_ptr,
    NX_HTTP_SERVER_MIME_MAP *mime_maps,
    UINT mime_maps_num);

说明

使用此服务,HTTP 应用程序开发人员可以添加除 NetX Duo HTTP 服务器所提供的默认 MIME 类型以外的其他 MIME 类型(有关已定义类型的列表,请参阅“nx_http_server_get_type”)。

收到客户端请求(例如 GET 请求)时,HTTP 服务器将优先使用设置的附加 MIME 映射来分析 HTTP 头中请求的文件类型,如果找不到匹配项,则它会在 HTTP 服务器的默认 MIME 映射中查找匹配项。 如果未找到匹配项,MIME 类型将默认为“text/plain”。

如果已将请求通知函数注册到 HTTP 服务器,则请求通知回调可以调用 nx_http_server_type_retrieve 来分析文件类型

输入参数

  • server_ptr:指向 HTTP 服务器实例的指针
  • mime_maps:指向 MIME 映射数组的指针
  • mime_map_num:数组中 MIME 映射的数量

返回值

  • NX_SUCCESS (0x00):成功设置 HTTP 服务器 MIME 映射
  • NX_PTR_ERROR (0x07):指针输入无效

允许来自

初始化、线程

示例

/* my_server is an NX_HTTP_SERVER previously created. */

NX_HTTP_SERVER_MIME_MAP my_mime_maps [2];

static NX_HTTP_SERVER_MIME_MAP my_mime_maps[] =
{
    {"abc",      "yourtype/abc"},
    {"xyz",      "mytype/xyz"},
};

status =  nx_http_server_mime_maps_additional_set(&my_server,
												  &my_mime_maps[0], 2);

/* If status equals NX_SUCCESS, two additional MIME types are added to the HTTP  
  server MIME map set.” */

nx_http_server_packet_content_find

提取内容长度,并设置指向数据开始位置的指针

原型

UINT nx_http_server_packet_content_find(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET **packet_ptr,
    UINT *content_length);

说明

此服务可从 HTTP 标头中提取内容长度。 此服务还可按以下方式更新所提供的数据包:将数据包预置指针(要写入的数据包缓冲区的起始位置)设置为紧随 HTTP 标头之后的 HTTP 内容(数据)。

如果在当前数据包中找不到内容开头位置,该函数将使用 NX_HTTP_SERVER_TIMEOUT_RECEIVE 等待选项等待接收下一个数据包。

注意

不应在调用 nx_http_server_get_entity_header 之前调用此函数,因为它会修改实体头后面的预置指针

输入参数

  • server_ptr:指向 HTTP 服务器实例的指针
  • packet_ptr:指向数据包指针的指针,用于返回带有更新的预置指针的数据包
  • content_length:指向已提取的 content_length 的指针

返回值

  • NX_SUCCESS:(0x00) 已找到 HTTP 内容长度,并且已成功更新数据包
  • NX_HTTP_TIMEOUT:(0xE1) 等待下一个数据包时超过了过期时间
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

/* The HTTP server pointed to by server_ptr is previously created and started.
The server has received a Client request packet, recv_packet_ptr, and the packet
content find service is called from the request notify callback function
registered with the HTTP server. */

UINT content_length;

status =  nx_http_server_packet_content_find(server_ptr, recv_packet_ptr,
                                             &content_length);

/* If status equals NX_SUCCESS, the content length specifies the content length
   and the packet pointer prepend pointer is set to the HTTP content (data). */

nx_http_server_packet_get

接收下一个 HTTP 数据包

原型

UINT nx_http_server_packet_get(
    NX_HTTP_SERVER *server_ptr,
    NX_PACKET **packet_ptr);

说明

此服务返回 HTTP 服务器套接字上收到的下一个数据包。 用于接收数据包的等待选项是 NX_HTTP_SERVER_TIMEOUT_RECEIVE。

输入参数

  • server_ptr:指向 HTTP 服务器实例的指针
  • packet_ptr:指向已接收的数据包的指针

返回值

  • NX_SUCCESS:(0x00) 已成功接收下一个数据包
  • NX_HTTP_TIMEOUT:(0xE1) 等待下一个数据包时超过了过期时间
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

线程数

示例

/* The HTTP server pointed to by server_ptr is previously created and started. */

UINT content_length;
NX_PACKET *recv_packet_ptr;

status =  nx_http_server_packet_get(server_ptr, &recv_packet_ptr);

/* If status equals NX_SUCCESS, a Client packet is obtained. */

nx_http_server_param_get

获取请求中的参数

原型

UINT nx_http_server_param_get(
    NX_PACKET *packet_ptr,
    UINT param_number, CHAR *param_ptr,
    UINT max_param_size);

说明

此服务尝试在提供的请求数据包中检索指定的 HTTP URL 参数。 如果请求的 HTTP 参数不存在,此例程将返回 NX_HTTP_NOT_FOUND 状态。 应从创建 HTTP 服务器 (nx_http_server_create) 期间指定的应用程序请求通知回调调用此例程

输入参数

  • packet_ptr:指向 HTTP 客户端请求数据包的指针。 请注意,应用程序不应释放此数据包。
  • param_number:参数列表中从左到右从零开始的参数逻辑编号。
  • param_ptr:用于复制参数的目标区域。
  • max_param_size:参数目标区域的最大大小。

返回值

  • NX_SUCCESS:(0x00) 已成功获取 HTTP 服务器参数
  • NX_HTTP_NOT_FOUND:(0xE6) 找不到指定的参数
  • NX_HTTP_IMPROPERLY_TERMINATED_PARAM:(0xF3) 请求参数未正确终止
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Assuming we are in the application’s request notify callback
   routine, get the first parameter of the HTTP Client request. */

status =  nx_http_server_param_get(request_packet_ptr, 0, param_destination,
			   30);

/* If status equals NX_SUCCESS, the NULL-terminated first parameter can be found
   in “param_destination.” */

nx_http_server_query_get

获取请求中的查询

原型

UINT nx_http_server_query_get(
    NX_PACKET *packet_ptr,
    UINT query_number,
    CHAR *query_ptr,
    UINT max_query_size);

说明

此服务尝试在提供的请求数据包中检索指定的 HTTP URL 查询。 如果请求的 HTTP 查询不存在,此例程将返回 NX_HTTP_NOT_FOUND 状态。 应从创建 HTTP 服务器 (nx_http_server_create) 期间指定的应用程序请求通知回调调用此例程

输入参数

  • packet_ptr:指向 HTTP 客户端请求数据包的指针。 请注意,应用程序不应释放此数据包。
  • query_number:查询列表中从左到右从零开始的参数逻辑编号。
  • query_ptr:用于复制查询的目标区域。
  • max_query_size:查询目标区域的最大大小。

返回值

  • NX_SUCCESS:(0x00) 已成功获取 HTTP 服务器查询
  • NX_HTTP_FAILED:(0xE2) 查询太小。
  • NX_HTTP_NOT_FOUND:(0xE6) 找不到指定的查询
  • NX_HTTP_NO_QUERY_PARSED:(0xF2) 客户端请求中没有查询
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

获准方式

线程数

示例

/* Assuming we are in the application’s request notify callback
   routine, get the first query of the HTTP Client request. */
status =  nx_http_server_query_get(request_packet_ptr, 0, query_destination,
				30);

/* If status equals NX_SUCCESS, the NULL-terminated first query can be found
   in “query_destination.” */

nx_http_server_start

启动 HTTP 服务器

原型

UINT nx_http_server_start(NX_HTTP_SERVER *http_server_ptr);

说明

此服务启动以前创建的 HTTP 服务器实例。

输入参数

  • http_server_ptr:指向 HTTP 服务器实例的指针。

返回值

  • NX_SUCCESS:(0x00) 已成功启动服务器
  • NX_PTR_ERROR:(0x07) 指针输入无效

允许来自

初始化、线程

示例

/* Start the HTTP Server instance “my_server.”  */
status =  nx_http_server_start(&my_server);

/* If status equals NX_SUCCESS, the HTTP Server has been started. */

nx_http_server_stop

停止 HTTP 服务器

原型

UINT nx_http_server_stop(NX_HTTP_SERVER *http_server_ptr);

说明

此服务可停止先前创建的 HTTP 服务器实例。 应在删除 HTTP 服务器实例之前调用此例程。

输入参数

  • http_server_ptr:指向 HTTP 服务器实例的指针。

返回值

  • NX_SUCCESS:(0x00) 已成功停止服务器
  • NX_PTR_ERROR:(0x07) 指针输入无效
  • NX_CALLER_ERROR (0x11):此服务的调用方无效

允许来自

线程数

示例

/* Stop the HTTP Server instance “my_server.”  */
status =  nx_http_server_stop(&my_server);

/* If status equals NX_SUCCESS, the HTTP Server has been stopped. */

nx_http_server_type_get

从客户端 HTTP 请求中提取文件类型

原型

UINT nx_http_server_type_get(
    NX_HTTP_SERVER *http_server_ptr,
    CHAR *name,
    CHAR *http_type_string);

说明

注意

此服务已弃用。 建议用户使用服务 nx_http_server_type_retrieve。

此服务从输入缓冲区名称(通常是 URL)将 HTTP 请求类型提取到缓冲区 http_type_string 中,并将其长度提取到返回值中。 如果找不到 MIME 映射,则默认为“text/plain”类型。 否则,此服务会将提取的类型与 HTTP 服务器默认 MIME 映射进行比较,以查找匹配项。 NetX Duo HTTP 服务器中的默认 MIME 映射为:

  • html:text/html
  • htm:text/html
  • txt:text/plain
  • gif:image/gif
  • jpg:image/jpeg
  • ico:image/x-icon

如果已提供,则它还会搜索用户定义的一组附加 MIME 映射。 有关用户定义的映射的更多详细信息,请参阅“nx_http_server_mime_maps_addtional_set”。

此服务已弃用。 建议开发人员迁移到 nx_http_server_type_get_extended。

输入参数

  • http_server_ptr:指向 HTTP 服务器实例的指针
  • name:指向要搜索的缓冲区的指针
  • http_type_string:指向已提取的 HTML 类型的指针

返回值

  • 以字节为单位的字符串长度:非零值表示成功。 零表示出错。

允许来自

应用程序

示例

/* my_server is a previously created HTTP server, which starts accepting client
   requests when nx_http_server_start is called*/

CHAR temp_string[20];
UINT string_length;

/* Extract the HTTP type. */
    string_length =  nx_http_server_type_get(&my_server_ptr,
				my_server.nx_http_server_request_resource, temp_string);

/* If string_length is non zero, the HTTP string is extracted. */

nx_http_server_type_get_extended

从客户端 HTTP 请求中提取文件类型

原型

UINT nx_http_server_type_get_extended(
    NX_HTTP_SERVER *http_server_ptr,
    CHAR *name, CHAR *http_type_string,
    UINT http_type_string_max_size);

说明

此服务从输入缓冲区名称(通常是 URL)将 HTTP 请求类型提取到缓冲区 http_type_string 中,并将其长度提取到返回值中 。 如果找不到 MIME 映射,则默认为“text/plain”类型。 否则,此服务会将提取的类型与 HTTP 服务器默认 MIME 映射进行比较,以查找匹配项。 NetX Duo HTTP 服务器中的默认 MIME 映射为:

  • html:text/html
  • htm:text/html
  • txt:text/plain
  • gif:image/gif
  • jpg:image/jpeg
  • ico:image/x-icon

如果已提供,则它还会搜索用户定义的一组附加 MIME 映射。 有关用户定义的映射的更多详细信息,请参阅“nx_http_server_mime_maps_addtional_set”。

此服务取代了 nx_http_server_type_get。 此版本提供附加长度信息。

输入参数

  • http_server_ptr:指向 HTTP 服务器实例的指针
  • name:指向要搜索的缓冲区的指针
  • name_length:要搜索的缓冲区的长度
  • http_type_string:指向已提取的 HTML 类型的指针
  • http_type_string_max_size:http_type_string 缓冲区的大小

返回值

  • 以字节为单位的字符串长度:非零值表示成功。 零表示出错。

允许来自

应用程序

示例

/* my_server is a previously created HTTP server, which starts accepting client
   requests when nx_http_server_start is called*/

CHAR temp_string[20];
UINT string_length;

/* Get the length of request resource. */
	if (_nx_utility_string_length_check(
					my_server.nx_http_server_request_resource, &resource_length,
                    sizeof(my_server.nx_http_server_request_resource) - 1))
           {
               return;
           }

/* Extract the HTTP type. */
    string_length =  nx_http_server_type_get_extended(&my_server,
			   my_server.nx_http_server_request_resource, resource_length,
			   temp_string, sizeof(temp_string));

/* If string_length is non zero, the HTTP string is extracted. */

有关更详细示例,请参阅 nx_http_server_callback_generate_response_header 的说明。

nx_http_server_digest_authenticate_notify_set

设置摘要身份验证回调函数

原型

UINT nx_http_server_digest_authenticate_notify_set(
    NX_HTTP_SERVER *http_server_ptr,
    UINT (*digest_authenticate_callback)(
        NX_HTTP_SERVER *server_ptr,
        CHAR *name_ptr,
        CHAR *realm_ptr,
        CHAR *password_ptr,
        CHAR *method,
        CHAR *authorization_uri,
        CHAR *authorization_nc,
        CHAR *authorization_cnonce));

说明

此服务可设置执行摘要式身份验证时调用的回调。

输入参数

  • http_server_ptr:指向 HTTP 服务器实例的指针
  • digest_authenticate_callback:指向摘要式身份验证回调的指针

返回值

  • NX_SUCCESS (0x00):成功设置回调
  • NX_PTR_ERROR (0x07):指针输入无效
  • NX_NOT_SUPPORTED (0x4B):未启用摘要式身份验证

允许来自

应用程序

示例

UINT digest_authenticate_callback(NX_HTTP_SERVER *server_ptr, CHAR *name_ptr,
                                  CHAR *realm_ptr, CHAR *password_ptr, CHAR *method,
                                  CHAR *authorization_uri, CHAR *authorization_nc,
                                  CHAR *authorization_cnonce)
{
    return(NX_SUCCESS);
}

NX_HTTP_SERVER my_server;

/* After the HTTP server is created by calling nx_http_server_create, and before
   starting HTTP services when nx_http_server_start is called, set the digest authenticate callback: */

status =  nx_http_server_digest_authenticate_notify_set (&my_server,
    digest_authenticate_callback);

/* If status equals NX_SUCCESS, the digest_authenticate_callback function
   will be called when the HTTP server performs digest authenticate. */

nx_http_server_authentication_check_set

设置身份验证检查回调函数

原型

UINT nx_http_server_authentication_check_set(
    NX_HTTP_SERVER *http_server_ptr,
    UINT (*authentication_check_extended)(
        NX_HTTP_SERVER *server_ptr,
        UINT request_type,
        CHAR *resource,
        CHAR **name,
        UINT *name_length,
        CHAR **password,
        UINT *password_length,
        CHAR **realm,
        UINT *realm_length));

说明

此服务设置身份验证检查的回调函数。

输入参数

  • http_server_ptr:指向 HTTP 服务器实例的指针
  • authentication_check_extended:指向应用程序身份验证检查的指针

返回值

  • NX_SUCCESS (0x00):成功设置回调
  • NX_PTR_ERROR (0x07):指针输入无效

允许来自

应用程序

示例

static UINT  authentication_check_extended(NX_HTTP_SERVER *server_ptr,
                                           UINT request_type, CHAR *resource,
                                           CHAR **name, UINT *name_length,
                                           CHAR **password, UINT *password_length,
                                           CHAR **realm, UINT *realm_length)
{

    /* Just use a simple name, password, and realm for all
       requests and resources. */
    *name =     "name";
    *password = "password";
    *realm =    "NetX Duo HTTP demo";
    *name_length = 4;
    *password_length = 8;
    *realm_length = 18;

    /* Request basic authentication. */
    return(NX_HTTP_BASIC_AUTHENTICATE);
}

NX_HTTP_SERVER my_server;

/* After the HTTP server is created by calling nx_http_server_create, and before
   starting HTTP services when nx_http_server_start is called, set the
   authentication checking callback: */

nx_http_server_authentication_check_set (&my_server,
										 authentication_check_extended);