From e8a8f36d73c7be82895e31da4596c93e99a1b09d Mon Sep 17 00:00:00 2001 From: patacongo Date: Sun, 23 Sep 2007 16:58:09 +0000 Subject: [PATCH] Add framework for listen() and connect() -- still missing logic git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@353 7fd9a85b-ad96-42d3-883c-3090e2eb8679 --- nuttx/ChangeLog | 1 + nuttx/Documentation/NuttX.html | 1 + nuttx/Documentation/NuttxUserGuide.html | 147 +++++++++++++++++++++--- nuttx/Makefile | 5 +- nuttx/arch/sim/src/Makefile | 19 ++- nuttx/include/sys/socket.h | 3 + nuttx/net/Makefile | 4 +- nuttx/net/accept.c | 129 +++++++++++++++++++++ nuttx/net/listen.c | 94 +++++++++++++++ nuttx/netutils/uiplib/makestrings.c | 21 ++-- nuttx/netutils/webclient/Make.defs | 2 +- nuttx/netutils/webclient/webclient.h | 2 +- nuttx/netutils/webserver/Make.defs | 2 +- nuttx/netutils/webserver/httpd.c | 2 +- 14 files changed, 391 insertions(+), 41 deletions(-) create mode 100644 nuttx/net/accept.c create mode 100644 nuttx/net/listen.c diff --git a/nuttx/ChangeLog b/nuttx/ChangeLog index 4038d05ba..7f5500337 100644 --- a/nuttx/ChangeLog +++ b/nuttx/ChangeLog @@ -212,4 +212,5 @@ * Implemented receive timeouts via setsockopt(SO_RCVTIMEO). * Provide support for multiple network devices * Implement socket ioctl() calls to set addresses + * Added listen() and accept() diff --git a/nuttx/Documentation/NuttX.html b/nuttx/Documentation/NuttX.html index 43b85d5e9..3369857b3 100644 --- a/nuttx/Documentation/NuttX.html +++ b/nuttx/Documentation/NuttX.html @@ -645,6 +645,7 @@ Other memory: * Implemented receive timeouts via setsockopt(SO_RCVTIMEO). * Provide support for multiple network devices * Implement socket ioctl() calls to set addresses + * Added listen() and accept() diff --git a/nuttx/Documentation/NuttxUserGuide.html b/nuttx/Documentation/NuttxUserGuide.html index 8ba152184..8485f287c 100644 --- a/nuttx/Documentation/NuttxUserGuide.html +++ b/nuttx/Documentation/NuttxUserGuide.html @@ -21,7 +21,7 @@ User's Manual

Gregory Nutt

-Last Update: September 8, 2007 +Last Update: September 23, 2007

1.0 Introduction

@@ -5780,12 +5780,14 @@ Those socket APIs are discussed in the following paragraphs.

  • 2.12.1 socket
  • 2.12.2 bind
  • 2.12.3 connect
  • -
  • 2.12.4 send
  • -
  • 2.12.5 sendto
  • -
  • 2.12.6 recv
  • -
  • 2.12.7 recvfrom
  • -
  • 2.12.8 setsockopt
  • -
  • 2.12.9 getsockopt
  • +
  • 2.12.4 listen
  • +
  • 2.12.5 accept
  • +
  • 2.12.6 send
  • +
  • 2.12.7 sendto
  • +
  • 2.12.8 recv
  • +
  • 2.12.9 recvfrom
  • +
  • 2.12.10 setsockopt
  • +
  • 2.12.11 getsockopt
  • 2.12.1 socket

    @@ -5951,7 +5953,122 @@ Those socket APIs are discussed in the following paragraphs.

    to accept new connections. -

    2.12.4 send

    +

    2.12.4 listen

    +

    + Function Prototype: +

    +
    +  #include 
    +  int listen(int sockfd, int backlog);
    +
    +

    + Description: + To accept connections, a socket is first created with socket(), a + willingness to accept incoming connections and a queue limit for incoming + connections are specified with listen(), and then the connections are + accepted with accept(). The listen() call applies only to sockets of + type SOCK_STREAM or SOCK_SEQPACKET. +

    +

    + Input Parameters: +

    + +

    + Returned Values: + On success, zero is returned. On error, -1 is returned, and errno is set appropriately. +

    + + +

    2.12.5 accept

    +

    + Function Prototype: +

    +
    +  #include 
    +  int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
    +
    +

    + Description: + The accept() function is used with connection-based socket types + (SOCK_STREAM, SOCK_SEQPACKET and SOCK_RDM). + It extracts the first connection request on the queue of pending connections, + creates a new connected socket with most of the same properties as sockfd, + and allocates a new socket descriptor for the socket, which is returned. The + newly created socket is no longer in the listening state. The original + socket sockfd is unaffected by this call. Per file descriptor flags + are not inherited across an accept. +

    +

    + The sockfd argument is a socket descriptor that has been created with + socket(), bound to a local address with bind(), and is listening for + connections after a call to listen(). +

    +

    + On return, the addr structure is filled in with the address of the + connecting entity. The addrlen argument initially contains the size + of the structure pointed to by addr; on return it will contain the + actual length of the address returned. +

    +

    + If no pending connections are present on the queue, and the socket is + not marked as non-blocking, accept blocks the caller until a connection + is present. If the socket is marked non-blocking and no pending + connections are present on the queue, accept returns EAGAIN. +

    +

    + Input Parameters: +

    + +

    + Returned Values: + Returns -1 on error. If it succeeds, it returns a non-negative integer + that is a descriptor for the accepted socket. +

    + + +

    2.12.6 send

    Function Prototype:

    @@ -5983,7 +6100,7 @@ Those socket APIs are discussed in the following paragraphs.

    See sendto().

    -

    2.12.5 sendto

    +

    2.12.7 sendto

    Function Prototype:

    @@ -6055,7 +6172,7 @@ Those socket APIs are discussed in the following paragraphs.

    MSG_NOSIGNAL is set. -

    2.12.6 recv

    +

    2.12.8 recv

    Function Prototype:

    @@ -6086,7 +6203,7 @@ Those socket APIs are discussed in the following paragraphs.

    Zero on success.

    -

    2.12.7 recvfrom

    +

    2.12.9 recvfrom

    Function Prototype:

    @@ -6148,7 +6265,7 @@ Those socket APIs are discussed in the following paragraphs.

    The argument sockfd does not refer to a socket. -

    2.12.8 setsockopt

    +

    2.12.10 setsockopt

    Function Prototype:

    @@ -6208,7 +6325,7 @@ Those socket APIs are discussed in the following paragraphs.

    Insufficient resources are available in the system to complete the call. -

    2.12.9 getsockopt

    +

    2.12.11 getsockopt

    Function Prototype:

    @@ -6469,6 +6586,7 @@ notify a task when a message is available on a queue.
    +
  • accept
  • bind
  • clock_getres
  • clock_gettime
  • @@ -6485,6 +6603,7 @@ notify a task when a message is available on a queue.
  • gmtime_r
  • Introduction
  • kill
  • +
  • listen
  • localtime_r
  • Named Message Queue Interfaces
  • mktime
  • @@ -6541,9 +6660,9 @@ notify a task when a message is available on a queue.
  • pthread_mutexattr_init
  • pthread_mutexattr_setpshared
  • pthread_mutex_destroy
  • -
  • pthread_mutex_init
  • +
  • pthread_mutex_init
  • pthread_mutex_lock
  • pthread_mutex_trylock
  • pthread_mutex_unlock
  • diff --git a/nuttx/Makefile b/nuttx/Makefile index 73197c65b..0f8704a80 100644 --- a/nuttx/Makefile +++ b/nuttx/Makefile @@ -211,10 +211,7 @@ $(BIN): context depend $(LINKLIBS) $(MAKE) -C $(ARCH_SRC) TOPDIR=$(TOPDIR) LINKLIBS="$(LINKLIBS)" $(BIN) depend: - echo "CLEANDIRS: $(CLEANDIRS)" - echo "MAKEDIRS: $(MAKEDIRS)" - for dir in $(MAKEDIRS) ; do \ - echo "-- DEPS in $$dir --" ; \ + @for dir in $(MAKEDIRS) ; do \ $(MAKE) -C $$dir TOPDIR=$(TOPDIR) depend ; \ done diff --git a/nuttx/arch/sim/src/Makefile b/nuttx/arch/sim/src/Makefile index 75ea07eee..6e5af4253 100644 --- a/nuttx/arch/sim/src/Makefile +++ b/nuttx/arch/sim/src/Makefile @@ -83,30 +83,29 @@ $(SPECOBJS): %$(OBJEXT): %.c $(CC) -c $(HOSTCFLAGS) $< -o $@ libarch$(LIBEXT): $(OBJS) - ( for obj in $(OBJS) ; do \ + @( for obj in $(OBJS) ; do \ $(AR) $@ $${obj} || \ { echo "$(AR) $@ $obj FAILED!" ; exit 1 ; } ; \ done ; ) -nuttx: $(LINKOBJS) +nuttx$(EXEEXT): $(LINKOBJS) $(CC) $(LDFLAGS) $(LDPATHES) -o $(TOPDIR)/$@ $(LINKOBJS) \ -Wl,--start-group $(LDLIBS) -Wl,--end-group $(EXTRA_LIBS) @$(NM) $(TOPDIR)/$@ | \ - grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ - sort > $(TOPDIR)/System.map - + grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \ + sort > $(TOPDIR)/System.map .depend: Makefile $(SRCS) - $(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep - touch $@ + @$(MKDEP) $(CC) -- $(CFLAGS) -- $(SRCS) >Make.dep + @touch $@ depend: .depend clean: - rm -f libarch$(LIBEXT) *~ - if [ ! -z "$(OBJEXT)" ]; then rm -f *$(OBJEXT); fi + @rm -f libarch$(LIBEXT) *~ + @if [ ! -z "$(OBJEXT)" ]; then rm -f *$(OBJEXT); fi distclean: clean - rm -f Make.dep .depend + @rm -f Make.dep .depend -include Make.dep diff --git a/nuttx/include/sys/socket.h b/nuttx/include/sys/socket.h index 865b1f69e..c384d1e3a 100644 --- a/nuttx/include/sys/socket.h +++ b/nuttx/include/sys/socket.h @@ -180,6 +180,9 @@ EXTERN int socket(int domain, int type, int protocol); EXTERN int bind(int sockfd, FAR const struct sockaddr *addr, socklen_t addrlen); EXTERN int connect(int sockfd, FAR const struct sockaddr *addr, socklen_t addrlen); +EXTERN int listen(int sockfd, int backlog); +EXTERN int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); + EXTERN ssize_t send(int sockfd, FAR const void *buf, size_t len, int flags); EXTERN ssize_t sendto(int sockfd, FAR const void *buf, size_t len, int flags, FAR const struct sockaddr *to, socklen_t tolen); diff --git a/nuttx/net/Makefile b/nuttx/net/Makefile index 680db599d..fa0175409 100644 --- a/nuttx/net/Makefile +++ b/nuttx/net/Makefile @@ -40,8 +40,8 @@ MKDEP = $(TOPDIR)/tools/mkdeps.sh ifeq ($(CONFIG_NET),y) SOCK_ASRCS = -SOCK_CSRCS = socket.c bind.c connect.c send.c sendto.c recv.c recvfrom.c \ - net-sockets.c net-close.c +SOCK_CSRCS = socket.c bind.c connect.c listen.c accept.c send.c sendto.c \ + recv.c recvfrom.c net-sockets.c net-close.c ifeq ($(CONFIG_NET_SOCKOPTS),y) SOCK_CSRCS += setsockopt.c getsockopt.c diff --git a/nuttx/net/accept.c b/nuttx/net/accept.c new file mode 100644 index 000000000..c54b49d37 --- /dev/null +++ b/nuttx/net/accept.c @@ -0,0 +1,129 @@ +/**************************************************************************** + * net/accept.c + * + * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0 + +#include +#include +#include + +#include "net-internal.h" + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: accept + * + * Description: + * The accept function is used with connection-based socket types + * (SOCK_STREAM, SOCK_SEQPACKET and SOCK_RDM). It extracts the first + * connection request on the queue of pending connections, creates a new + * connected socket with mostly the same properties as 'sockfd', and + * allocates a new socket descriptor for the socket, which is returned. The + * newly created socket is no longer in the listening state. The original + * socket 'sockfd' is unaffected by this call. Per file descriptor flags + * are not inherited across an accept. + * + * The 'sockfd' argument is a socket descriptor that has been created with + * socket(), bound to a local address with bind(), and is listening for + * connections after a call to listen(). + * + * On return, the 'addr' structure is filled in with the address of the + * connecting entity. The 'addrlen' argument initially contains the size + * of the structure pointed to by 'addr'; on return it will contain the + * actual length of the address returned. + * + * If no pending connections are present on the queue, and the socket is + * not marked as non-blocking, accept blocks the caller until a connection + * is present. If the socket is marked non-blocking and no pending + * connections are present on the queue, accept returns EAGAIN. + * + * Parameters: + * sockfd The listening socket descriptior + * addr Receives the address of the connecting client + * addrlen Input: allocated size of 'addr', Return: returned size of 'addr' + * + * Returned Value: + * Returns -1 on error. If it succeeds, it returns a non-negative integer + * that is a descriptor for the accepted socket. + * + * EAGAIN or EWOULDBLOCK + * The socket is marked non-blocking and no connections are present to + * be accepted. + * EBADF + * The descriptor is invalid. + * ENOTSOCK + * The descriptor references a file, not a socket. + * EOPNOTSUPP + * The referenced socket is not of type SOCK_STREAM. + * EINTR + * The system call was interrupted by a signal that was caught before + * a valid connection arrived. + * ECONNABORTED + * A connection has been aborted. + * EINVAL + * Socket is not listening for connections. + * EMFILE + * The per-process limit of open file descriptors has been reached. + * ENFILE + * The system maximum for file descriptors has been reached. + * EFAULT + * The addr parameter is not in a writable part of the user address + * space. + * ENOBUFS or ENOMEM + * Not enough free memory. + * EPROTO + * Protocol error. + * EPERM + * Firewall rules forbid connection. + * + * Assumptions: + * + ****************************************************************************/ + +int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) +{ + *get_errno_ptr() = ENOSYS; + return ERROR; +} + +#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */ diff --git a/nuttx/net/listen.c b/nuttx/net/listen.c new file mode 100644 index 000000000..30dcb778b --- /dev/null +++ b/nuttx/net/listen.c @@ -0,0 +1,94 @@ +/**************************************************************************** + * net/listen.c + * + * Copyright (C) 2007 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include +#if defined(CONFIG_NET) && CONFIG_NSOCKET_DESCRIPTORS > 0 + +#include +#include +#include + +#include "net-internal.h" + +/**************************************************************************** + * Global Functions + ****************************************************************************/ + +/**************************************************************************** + * Function: listen + * + * Description: + * To accept connections, a socket is first created with socket(), a + * willingness to accept incoming connections and a queue limit for incoming + * connections are specified with listen, and then the connections are + * accepted with accept(). The listen() call applies only to sockets of + * type SOCK_STREAM or SOCK_SEQPACKET. + * + * Parameters: + * sockfd Socket descriptor of the bound socket + * backlog The maximum length the queue of pending connections may grow. + * If a connection request arrives with the queue full, the client + * may receive an error with an indication of ECONNREFUSED or, + * if the underlying protocol supports retransmission, the request + * may be ignored so that retries succeed. + * + * Returned Value: + * On success, zero is returned. On error, -1 is returned, and errno is set + * appropriately. + * + * EADDRINUSE + * Another socket is already listening on the same port. + * EBADF + * The argument 'sockfd' is not a valid descriptor. + * ENOTSOCK + * The argument 'sockfd' is not a socket. + * EOPNOTSUPP + * The socket is not of a type that supports the listen operation. + * + * Assumptions: + * + ****************************************************************************/ + +int listen(int sockfd, int backlog) +{ + *get_errno_ptr() = ENOSYS; + return ERROR; +} + +#endif /* CONFIG_NET && CONFIG_NSOCKET_DESCRIPTORS */ diff --git a/nuttx/netutils/uiplib/makestrings.c b/nuttx/netutils/uiplib/makestrings.c index ff7df83db..feebeb120 100755 --- a/nuttx/netutils/uiplib/makestrings.c +++ b/nuttx/netutils/uiplib/makestrings.c @@ -43,6 +43,7 @@ #include #include #include +#include #include /**************************************************************************** @@ -203,16 +204,18 @@ FILE *open_outfile(const char *filename) } /**************************************************************************** - * Function: generate_sourcefile_list + * Function: generate_mkdefs ****************************************************************************/ -int generate_sourcefile_list(void) +int generate_mkdefs(void) { int ret = 1; FILE *stream; if (( stream = open_stringfile())) { + printf("STRNG_ASRCS =\n"); + printf("STRNG_CSRCS = "); ret = 0; while (fgets(g_line, 1024, stream) && !ret) { @@ -239,14 +242,16 @@ int generate_sourcefiles(void) FILE *cstream; const char *pname; const char *pvalue; + char *filename; char buffer[512]; int len; int ndx; int ret = 1; - + + filename = strdup(g_stringfile); if (( instream = open_stringfile())) { - snprintf(buffer, 512, "%s.h", g_stringfile); + snprintf(buffer, 512, "%s.h", basename(filename)); hstream = open_outfile(buffer); if (hstream) { @@ -258,11 +263,12 @@ int generate_sourcefiles(void) ret = parse_stringfile_line(&pname, &pvalue); if (!ret) { + len = strlen(pvalue); + snprintf(buffer, 512, "%s.c", pname); cstream = open_outfile(buffer); if (cstream) { - len = strlen(pvalue); fprintf(cstream, "const char %s[%d] = {", pname, len); for (ndx = 0; ndx < len; ndx++) { @@ -272,7 +278,7 @@ int generate_sourcefiles(void) } fprintf(cstream, "0x%02x", pvalue[ndx]); } - fprintf(cstream, "}\n"); + fprintf(cstream, "};\n"); fclose(cstream); } fprintf(hstream, "extern const char %s[%d];\n", pname, len); @@ -283,6 +289,7 @@ int generate_sourcefiles(void) } fclose(instream); } + free(filename); return ret; } @@ -364,7 +371,7 @@ int main(int argc, char **argv, char **envp) ret = generate_sourcefiles(); break; case SRCLIST: - ret = generate_sourcefile_list(); + ret = generate_mkdefs(); break; } return ret; diff --git a/nuttx/netutils/webclient/Make.defs b/nuttx/netutils/webclient/Make.defs index a5bffd45a..7f6c98ced 100644 --- a/nuttx/netutils/webclient/Make.defs +++ b/nuttx/netutils/webclient/Make.defs @@ -34,4 +34,4 @@ ############################################################################ WEBCLIENT_ASRCS = -WEBCLIENT_CSRCS = webclient-strings.c webclient.c +WEBCLIENT_CSRCS = webclient.c diff --git a/nuttx/netutils/webclient/webclient.h b/nuttx/netutils/webclient/webclient.h index a293b61fc..8f7a8644f 100644 --- a/nuttx/netutils/webclient/webclient.h +++ b/nuttx/netutils/webclient/webclient.h @@ -38,7 +38,7 @@ #include #include -#include "webclient-strings.h" +#include "netutil-strings.h" #define WEBCLIENT_CONF_MAX_URLLEN 100 diff --git a/nuttx/netutils/webserver/Make.defs b/nuttx/netutils/webserver/Make.defs index 94469f526..ca3567861 100644 --- a/nuttx/netutils/webserver/Make.defs +++ b/nuttx/netutils/webserver/Make.defs @@ -34,4 +34,4 @@ ############################################################################ WEBSERVER_ASRCS = -WEBSERVER_CSRCS = httpd.c http-strings.c httpd-fs.c httpd-cgi.c +WEBSERVER_CSRCS = httpd.c httpd-fs.c httpd-cgi.c diff --git a/nuttx/netutils/webserver/httpd.c b/nuttx/netutils/webserver/httpd.c index 4f18a72df..dfccdef6c 100644 --- a/nuttx/netutils/webserver/httpd.c +++ b/nuttx/netutils/webserver/httpd.c @@ -42,7 +42,7 @@ #include "httpd.h" #include "httpd-cgi.h" -#include "http-strings.h" +#include "netutil-strings.h" #include